use warnings; use strict; package Jifty::Action::Record::Execute; use base qw/ Jifty::Action::Record /; =head1 NAME Jifty::Action::Record::Execute - Simple abstract based for record actions =head1 SYNOPSIS use strict; use warnings; package MyApp::Action::StartEncabulator; use base qw/ MyApp::Action::ExecuteEncabulator /; use Jifty::Param::Schema; use Jifty::Action schema { param cardinal_grammeter_mode => type is 'text', valid_values are qw/ magneto-reluctance capacitive-duractance sinusoidal-depleneration /, is mandatory, ; }; sub take_action { my $self = shift; my $mode = $self->argument_value('cardinal_grammeter_mode'); $self->record->start($mode); $self->result->success('Deluxe Encabulator has started!'); } # Later in your templates: my $encabulator = MyApp::Model::Encabulator->new; $encabulator->load($id); my $startup = Jifty->web->new_action( class => 'StartEncabulator', record => $encabulator, ); Jifty->web->form->start; Jifty->web->out( $startup->form_field('cardinal_grammeter_mode') ); Jifty->web->form->submit( label => _('Start'), submit => $startup, ); Jifty->web->form->end; =head1 DESCRIPTION This action class is a good generic basis for creating custom action classes. It expects a record object to be associated and is (in this way) very similar to L. You can use L to add additional form fields to the action and such. =head1 METHODS =head2 arguments This is customized so that it expects the C argument of all L actions, but also allows for overrides using L. =cut # XXX TODO Copied from Jifty::Action::Record::Delete sub arguments { my $self = shift; my $arguments = {}; # Mark the primary key for use in the constructor and not rendered for my $pk (@{ $self->record->_primary_keys }) { $arguments->{$pk}{'constructor'} = 1; # XXX TODO IS THERE A BETTER WAY TO NOT RENDER AN ITEM IN arguments $arguments->{$pk}{'render_as'} = 'Unrendered'; # primary key fields should always be hidden fields } if ( $self->can('PARAMS') ) { use Jifty::Param::Schema; return Jifty::Param::Schema::merge_params( $arguments, ($self->PARAMS || {}) ); } else { return $arguments; } } =head2 take_action This overrides the definition in L so that it does absolutely nothing rather than complain. You will probably want to implement your own version that actually does something. =cut sub take_action {} =head1 SEE ALSO L, L, L =head1 LICENSE Jifty is Copyright 2005-2006 Best Practical Solutions, LLC. Jifty is distributed under the same terms as Perl itself. =cut 1;