App-Cinema
view release on metacpan or search on metacpan
lib/App/Cinema/Controller/Item.pm view on Meta::CPAN
package App::Cinema::Controller::Item;
use Moose;
use namespace::autoclean;
use Mail::Mailer;
use HTTP::Date qw/time2iso/;
BEGIN {
extends qw/Catalyst::Controller::FormBuilder/;
our $VERSION = $App::Cinema::VERSION;
}
sub add : Local Form {
my ( $self, $c ) = @_;
my $form = $self->formbuilder;
$form->field(
name => 'genre',
options => [ map { [ $_->id, $_->name ] } $c->model('MD::Genre')->all ]
);
if ( $form->submitted && $form->validate ) {
my $row = $c->model('MD::Item')->create(
{
title => $form->field('title'),
plot => $form->field('plot'),
year => $form->field('year'),
img => $form->field('img'),
release_date => HTTP::Date::time2iso(time),
genre_items => [ { g_id => $form->field('genre') }, ],
uid => $c->user->obj->username()
}
);
my $e = App::Cinema::Event->new();
$e->uid( $row->uid );
$e->desc(' created movie : ');
$e->target( $row->title );
$e->insert($c);
$c->flash->{message} = 'Created movie : ' . $row->title;
$c->res->redirect( $c->uri_for('add') );
}
}
sub detail : Local {
my ( $self, $c, $id ) = @_;
#find() returns a row object instead of a recordset
$c->stash->{item} = $c->model('MD::Item')->find($id);
}
sub view : Local {
my ( $self, $c ) = @_;
my $rs = $c->model('MD::Item')->search( $c->session->{query},
{ order_by => { -desc => 'release_date' } } );
$c->stash->{items} = $rs;
}
sub delete_do : Local {
my ( $self, $c, $id, $info ) = @_;
eval { $c->assert_any_user_role(qw/admin sysadmin/); };
if ($@) {
$c->flash->{error} = $c->config->{need_auth_msg};
$c->res->redirect( $c->uri_for('/item/view') );
return;
}
$c->model('MD::Item')->find($id)->delete();
my $e = App::Cinema::Event->new();
$e->desc(' deleted movie : ');
$e->target($info);
$e->insert($c);
$c->flash->{message} = "Item deleted";
$c->res->redirect( $c->uri_for('/item/view') );
}
sub checkout_do : Local {
my ( $self, $c, $id, $info ) = @_;
( run in 0.798 second using v1.01-cache-2.11-cpan-39bf76dae61 )