Catalyst-Plugin-CRUD

 view release on metacpan or  search on metacpan

lib/Catalyst/Controller/CRUD.pm  view on Meta::CPAN

        $self->call_trigger( 'create_check', $c, $hash );

        # insert new record
        if ( !$c->stash->{create}->{error} and scalar( keys %{$hash} ) ) {
            my $model = $c->model( $self->setting($c)->{model} )->create($hash);
            $self->call_trigger( 'create_after', $c, $model );
            $c->res->redirect( $self->setting($c)->{default} );
        }

        # prepare create form
        else {
            $c->stash->{$self->setting($c)->{name}} = $hash;
        }
    }

    # copy record ex) /xxx/create/yyy
    elsif ( defined $c->req->args->[0] and $c->req->args->[0] =~ /^\d+$/ ) {
        $this->get_model( $c, $self, $c->req->args->[0] );
        undef $c->stash->{$self->setting($c)->{name}}->{$self->setting($c)->{primary}};
    }

    # template setting
    my $prefix = $self->setting($c)->{template}->{prefix};
    my $suffix = $self->setting($c)->{template}->{suffix} ? $self->setting($c)->{template}->{suffix} : '.tt';
    $c->stash->{template} = $prefix . 'create' . $suffix;
}

=head2 read

Read action.

=cut

sub read {
    my ( $this, $c, $self ) = @_;

    # get model
    if ( defined $c->req->args->[0] and $c->req->args->[0] =~ /^\d+$/ ) {
        $this->get_model( $c, $self, $c->req->args->[0] );
    }

    # template setting
    my $prefix = $self->setting($c)->{template}->{prefix};
    my $suffix = $self->setting($c)->{template}->{suffix} ? $self->setting($c)->{template}->{suffix} : '.tt';
    $c->stash->{template} = $prefix . 'read' . $suffix;
}

=head2 update

Update action.

If there is $c->stash->{update}->{error}, then it does not update already recoed.

Triggers:

 $self->call_trigger( 'update_check', $c, $hash );
 $self->call_trigger( 'update_after', $c, $model );

=cut

sub update {
    my ( $this, $c, $self ) = @_;

    # update already record
    if ( $c->req->param('btn_update') ) {
        my $model = $this->get_model( $c, $self, $c->req->param( $self->setting($c)->{primary} ) );
        if (defined $model) {
            # create hash from request parameters
            my $primary = $self->setting($c)->{primary};
            my $hash = {$primary => $model->$primary};
            foreach (@{ $self->setting($c)->{columns} }) {
                my $value = $c->req->param($_);
                if (defined $value) {
                    $hash->{$_} = $value;
                }
            }

            # update check
            $self->call_trigger( 'update_check', $c, $hash );

            # update already record
            if ( !$c->stash->{update}->{error} and scalar( keys %{$hash} ) ) {
                foreach (@{ $self->setting($c)->{columns} }) {
                    my $value = $c->req->param($_);
                    if (defined $value) {
                        $model->$_( $value );
                    }
                }
                $model->update();
                $self->call_trigger( 'update_after', $c, $model );
                $c->res->redirect( $self->setting($c)->{default} );
            }

            # prepare update form
            else {
                undef $c->stash->{$self->setting($c)->{name}};
                $c->stash->{$self->setting($c)->{name}} = $hash;
            }
        }
    }

    # prepare update form
    elsif ( defined $c->req->args->[0] and $c->req->args->[0] =~ /^\d+$/ ) {
        $this->get_model( $c, $self, $c->req->args->[0] );
    }

    # update error
    else {
        $c->res->status(404);
        $c->res->body("404 Not Found\n");
    }

    # template setting
    my $prefix = $self->setting($c)->{template}->{prefix};
    my $suffix = $self->setting($c)->{template}->{suffix} ? $self->setting($c)->{template}->{suffix} : '.tt';
    $c->stash->{template} = $prefix . 'update' . $suffix;
}

=head2 delete

Delete action.



( run in 1.261 second using v1.01-cache-2.11-cpan-39bf76dae61 )