[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