[Jifty-commit] r5890 - in jifty/trunk: . lib/Jifty/Action/Record lib/Jifty/Web/Form/Field t/TestApp-Bulk t/TestApp-Bulk/bin t/TestApp-Bulk/etc t/TestApp-Bulk/lib t/TestApp-Bulk/lib/TestApp t/TestApp-Bulk/lib/TestApp/Bulk/Action t/TestApp-Bulk/lib/TestApp/Bulk/Model
Jifty commits
jifty-commit at lists.jifty.org
Sun Sep 28 01:53:41 EDT 2008
Author: sartak
Date: Sun Sep 28 01:53:41 2008
New Revision: 5890
Added:
jifty/trunk/lib/Jifty/Action/Record/Bulk.pm
jifty/trunk/lib/Jifty/Web/Form/Field/DateTime.pm
jifty/trunk/t/TestApp-Bulk/
jifty/trunk/t/TestApp-Bulk/bin/
jifty/trunk/t/TestApp-Bulk/bin/jifty
jifty/trunk/t/TestApp-Bulk/etc/
jifty/trunk/t/TestApp-Bulk/etc/config.yml
jifty/trunk/t/TestApp-Bulk/lib/
jifty/trunk/t/TestApp-Bulk/lib/TestApp/
jifty/trunk/t/TestApp-Bulk/lib/TestApp/Bulk/
jifty/trunk/t/TestApp-Bulk/lib/TestApp/Bulk/Action/
jifty/trunk/t/TestApp-Bulk/lib/TestApp/Bulk/Action/BulkUpdateThingy.pm
jifty/trunk/t/TestApp-Bulk/lib/TestApp/Bulk/Model/
jifty/trunk/t/TestApp-Bulk/lib/TestApp/Bulk/Model/Thingy.pm
jifty/trunk/t/TestApp-Bulk/lib/TestApp/Bulk/View.pm
Modified:
jifty/trunk/ (props changed)
Log:
r73125 at onn: sartak | 2008-09-28 01:53:36 -0400
Revert mismerge
Added: jifty/trunk/lib/Jifty/Action/Record/Bulk.pm
==============================================================================
--- (empty file)
+++ jifty/trunk/lib/Jifty/Action/Record/Bulk.pm Sun Sep 28 01:53:41 2008
@@ -0,0 +1,108 @@
+package Jifty::Action::Record::Bulk;
+
+use warnings;
+use strict;
+
+=head1 NAME
+
+Jifty::Action::Record::Bulk - Perform multiple record actions
+
+=head1 SYNOPSIS
+
+ use strict;
+ use warnings;
+
+ package MyApp::Action::BulkUpdateFoo;
+ use base qw/ Jifty::Action::Record::Bulk /;
+
+ use constant record_class => 'MyApp::Model::Foo';
+
+ __PACKAGE__->add_action('MyApp::Action::DeleteFoo' => { trigger => 'delete', final => 1 });
+ __PACKAGE__->add_action('MyApp::Action::UpdateFoo');
+
+=head1 DESCRIPTION
+
+=cut
+
+use base qw/Jifty::Action::Record Class::Data::Inheritable/;
+
+__PACKAGE__->mk_classdata( actions => [] );
+__PACKAGE__->mk_classdata( record_class => undef );
+
+use constant ids_name => 'ids';
+
+sub add_action {
+ my ($class, $name, $param) = @_;
+ push @{$class->actions}, [ $name, $param ];
+ Jifty::Util->require($name);
+ if ($class->record_class) {
+ die "$class is not a action of @{[ $class->record_class ]}"
+ unless $class->record_class eq $name->record_class;
+ }
+ else {
+ $class->record_class( $name->record_class );
+ }
+}
+
+sub arguments {
+ my $self = shift;
+ my $arguments = { $self->ids_name => { render_as => 'text', sort_order => -999 } };
+
+ # composite of the arguments from all actions, and remove the pk
+ require Jifty::Param::Schema;
+
+ for (@{$self->actions}) {
+ my ($action_class, $param) = @$_;
+ $arguments = Jifty::Param::Schema::merge_params( $arguments, $action_class->can('arguments')->($self) );
+ delete $arguments->{id};
+ }
+
+ if ( $self->can('PARAMS') ) {
+ $arguments = Jifty::Param::Schema::merge_params(
+ $arguments, ($self->PARAMS || {})
+ );
+ }
+ return $arguments;
+}
+
+sub perform_action {
+ my ($self, $action_class, $ids) = @_;
+ for (@$ids) {
+ my $record = $self->record_class->new;
+ $record->load($_);
+ $self->record( $record );
+ $action_class->can('take_action')->($self);
+ }
+ # allow bulk action to define if they allow individual action to fail
+}
+
+sub take_action {
+ my $self = shift;
+ my $ids = $self->argument_value('ids');
+ $ids = [split /,/,$ids] if !ref($ids);
+ for (@{$self->actions}) {
+ my ($action_class, $param) = @$_;
+ # XXX: create real action objects and invoke them, so we have separate result objects
+
+ # $action_class->new( record => $loaded, arguments => ..., moniker => ... );
+ # collect action->result object for reporting, index by content of the current action
+
+ if (my $trigger = $param->{trigger}) {
+ if ($self->argument_value($trigger)) {
+ $self->perform_action($action_class, $ids);
+ last if $param->{final};
+ }
+ }
+ else {
+ $self->perform_action($action_class, $ids);
+ }
+ }
+}
+
+sub report_success {
+ my $self = shift;
+ $self->result->message(_("yatta"));
+}
+
+1;
+
Added: jifty/trunk/lib/Jifty/Web/Form/Field/DateTime.pm
==============================================================================
--- (empty file)
+++ jifty/trunk/lib/Jifty/Web/Form/Field/DateTime.pm Sun Sep 28 01:53:41 2008
@@ -0,0 +1,42 @@
+use warnings;
+use strict;
+
+package Jifty::Web::Form::Field::DateTime;
+
+use base qw/Jifty::Web::Form::Field/;
+
+=head1 NAME
+
+Jifty::Web::Form::Field::DateTime - Add date pickers to your forms
+
+=head1 METHODS
+
+=head2 classes
+
+Output date fields with the class 'date'
+
+=cut
+
+sub classes {
+ my $self = shift;
+ return join(' ', 'datetime', ($self->SUPER::classes));
+}
+
+=head2 canonicalize_value
+
+If the value is a DateTime, return nothing if the epoch is 0
+
+=cut
+
+sub canonicalize_value {
+ my $self = shift;
+ my $value = $self->current_value;
+
+ if (UNIVERSAL::isa($value, 'DateTime')) {
+ return unless $value->epoch;
+ }
+
+ return $value;
+}
+
+1;
Added: jifty/trunk/t/TestApp-Bulk/bin/jifty
==============================================================================
--- (empty file)
+++ jifty/trunk/t/TestApp-Bulk/bin/jifty Sun Sep 28 01:53:41 2008
@@ -0,0 +1,15 @@
+#!/usr/bin/env perl
+use warnings;
+use strict;
+use File::Basename qw(dirname);
+use UNIVERSAL::require;
+
+BEGIN {
+ Jifty::Util->require or die $UNIVERSAL::require::ERROR;
+ my $root = Jifty::Util->app_root;
+ unshift @INC, "$root/lib" if ($root);
+}
+
+use Jifty::Script;
+$SIG{INT} = $SIG{TERM} = sub { warn "Stopped\n"; exit; };
+Jifty::Script->dispatch();
Added: jifty/trunk/t/TestApp-Bulk/etc/config.yml
==============================================================================
--- (empty file)
+++ jifty/trunk/t/TestApp-Bulk/etc/config.yml Sun Sep 28 01:53:41 2008
@@ -0,0 +1,10 @@
+---
+framework:
+ Plugins:
+ - REST: {}
+ DevelMode: 0
+
+application:
+ ThisConfigFile: etc/config.yml
+ EtcConfig: 1
+
Added: jifty/trunk/t/TestApp-Bulk/lib/TestApp/Bulk/Action/BulkUpdateThingy.pm
==============================================================================
--- (empty file)
+++ jifty/trunk/t/TestApp-Bulk/lib/TestApp/Bulk/Action/BulkUpdateThingy.pm Sun Sep 28 01:53:41 2008
@@ -0,0 +1,20 @@
+package TestApp::Bulk::Action::BulkUpdateThingy;
+use Jifty::Action::Record::Bulk;
+use base 'Jifty::Action::Record::Bulk';
+
+use constant record_class => 'TestApp::Bulk::Model::Thingy';
+
+__PACKAGE__->add_action('TestApp::Bulk::Action::DeleteThingy' => { trigger => 'delete', final => 1 });
+__PACKAGE__->add_action('TestApp::Bulk::Action::UpdateThingy');
+
+
+use Jifty::Param::Schema;
+use Jifty::Action schema {
+
+param delete => label is 'Delete',
+ sort_order is -1,
+ render as 'checkbox';
+
+};
+
+1;
Added: jifty/trunk/t/TestApp-Bulk/lib/TestApp/Bulk/Model/Thingy.pm
==============================================================================
--- (empty file)
+++ jifty/trunk/t/TestApp-Bulk/lib/TestApp/Bulk/Model/Thingy.pm Sun Sep 28 01:53:41 2008
@@ -0,0 +1,17 @@
+use strict;
+use warnings;
+
+package TestApp::Bulk::Model::Thingy;
+use Jifty::DBI::Schema;
+
+use TestApp::Bulk::Record schema {
+
+ column value => type is 'text', is mandatory;
+ column user_id => type is 'int';
+
+};
+
+use Jifty::RightsFrom column => 'user';
+
+1;
+
Added: jifty/trunk/t/TestApp-Bulk/lib/TestApp/Bulk/View.pm
==============================================================================
--- (empty file)
+++ jifty/trunk/t/TestApp-Bulk/lib/TestApp/Bulk/View.pm Sun Sep 28 01:53:41 2008
@@ -0,0 +1,7 @@
+package TestApp::Bulk::View;
+use warnings;
+use strict;
+
+use Jifty::View::Declare -base;
+
+1;
More information about the Jifty-commit
mailing list