[Rt-commit] rt branch, admin_ui, updated. fa68332d5df3d2be3592dec4aecb1b84f78d4b40
sunnavy at bestpractical.com
sunnavy at bestpractical.com
Thu Jan 21 07:48:27 EST 2010
The branch, admin_ui has been updated
via fa68332d5df3d2be3592dec4aecb1b84f78d4b40 (commit)
from 1f3b3e3d731cb5c7573b47e495201995c4cc4d11 (commit)
Summary of changes:
lib/RT/Action/EditUserPrefsSearchOptions.pm | 172 +++++++++++++++++++++++++++
1 files changed, 172 insertions(+), 0 deletions(-)
create mode 100644 lib/RT/Action/EditUserPrefsSearchOptions.pm
- Log -----------------------------------------------------------------
commit fa68332d5df3d2be3592dec4aecb1b84f78d4b40
Author: sunnavy <sunnavy at bestpractical.com>
Date: Thu Jan 21 20:48:10 2010 +0800
add EditUserSearchPrefsOptions action
diff --git a/lib/RT/Action/EditUserPrefsSearchOptions.pm b/lib/RT/Action/EditUserPrefsSearchOptions.pm
new file mode 100644
index 0000000..5598da9
--- /dev/null
+++ b/lib/RT/Action/EditUserPrefsSearchOptions.pm
@@ -0,0 +1,172 @@
+use strict;
+use warnings;
+
+package RT::Action::EditUserPrefsSearchOptions;
+use base qw/RT::Action::EditUserPrefs/;
+use RT::Interface::Web::QueryBuilder;
+__PACKAGE__->mk_accessors('available_columns', 'format', 'name');
+use Scalar::Defer qw/defer/;
+
+sub arguments {
+ my $self = shift;
+ my $args = {};
+ return $args unless $self->name;
+
+ for my $n ( 1 .. 4 ) {
+ $args->{"order_$n"} = {
+ label => _("order $n"),
+ default_value => defer {
+ $self->default_value("order_$n");
+ },
+ available_values =>
+ [ map { { display => _($_), value => $_ } } 'ASC', 'DESC' ],
+ render_as => 'Select',
+ };
+ $args->{"order_by_$n"} = {
+ label => _("order by $n"),
+ default_value => defer {
+ $self->default_value("order_by_$n");
+ },
+ available_values => defer {
+ $self->available_values("order_by");
+ },
+ render_as => 'Select',
+ };
+ }
+ $args->{'rows_per_page'} = {
+ default_value => defer { $self->default_value('rows_per_page') },
+ };
+ $args->{'format'} = {
+ default_value => defer { $self->format },
+ render_as => 'hidden',
+ };
+ $args->{'save'} = {
+ label => _('Save'),
+ render_as => 'InlineButton',
+ };
+ $args->{'name'} = {
+ render_as => 'hidden',
+ default_value => ref $self->name
+ ? ref( $self->name ) . '-' . $self->name->id
+ : $self->name,
+ };
+ return $args;
+}
+
+sub take_action {
+ my $self = shift;
+
+ return
+ unless $self->argument_value('save')
+ && $self->argument_value('name');
+
+ my $name = $self->argument_value('name');
+ if ( $name =~ /RT::Model::Attribute-(\d+)/ ) {
+ my $id = $1;
+ my $search = RT::Model::Attribute->new;
+ my ( $status, $msg ) = $search->load_by_id($id);
+ unless ( $status ) {
+ Jifty->log->error( "faild to load search: $name" );
+ return;
+ }
+
+ $self->name($search);
+ }
+ else {
+ $self->name($name);
+ }
+
+ my @order;
+ my @order_by;
+ for my $n ( 1 .. 4 ) {
+ if ( $self->argument_value("order_by_$n") ) {
+ push @order, $self->argument_value("order_$n")
+ if $self->argument_value("order_$n");
+ push @order_by, $self->argument_value("order_by_$n");
+ }
+ }
+
+ my $order = join '|', @order;
+ my $order_by = join '|', @order_by;
+
+ my ( $status, $msg ) = $self->user->set_preferences(
+ $self->name,
+ {
+ order => $order,
+ order_by => $order_by,
+ format => $self->argument_value('format'),
+ rows_per_page => $self->argument_value('rows_per_page'),
+ }
+ );
+ Jifty->log->error($msg) unless $status;
+
+ $self->report_success;
+ return 1;
+}
+
+sub preferences {
+ my $self = shift;
+ return $self->user->preferences($self->name) || {};
+}
+
+sub default_value {
+ my $self = shift;
+ my $arg = shift;
+ if ( $arg eq 'format' ) {
+ return Jifty->web->request->argument($arg)
+ || $self->preferences->{$arg};
+ }
+ elsif ( $arg eq 'rows_per_page' ) {
+ return
+ Jifty->web->request->argument($arg)
+ || $self->preferences->{$arg}
+ || 50;
+ }
+ elsif ( $arg =~ /order_(\d+)/ ) {
+ my $num = $1;
+ my @order =
+ split '\|', Jifty->web->request->argument('order')
+ || $self->preferences->{'order'}
+ || 'ASC';
+ return $order[$num-1];
+ }
+ elsif ( $arg =~ /order_by_(\d+)/ ) {
+ my $num = $1;
+ my @order_by =
+ split '\|', Jifty->web->request->argument('order_by')
+ || $self->preferences->{'order_by'}
+ || 'id';
+ return $order_by[$num-1];
+ }
+ else {
+ Jifty->log->error( "unknown field: $arg" );
+ }
+}
+
+sub available_values {
+ my $self = shift;
+ my $arg = shift;
+ if ( $arg eq 'order_by' ) {
+ my $tickets = RT::Model::TicketCollection->new();
+ my %fields = %{ $tickets->columns };
+ map {
+ $fields{$_}->[0] =~ /^(?:ENUM|INT|DATE|STRING|ID)$/
+ || delete $fields{$_}
+ } keys %fields;
+ delete $fields{'effective_id'};
+ $fields{'Owner'} = 1;
+ $fields{ $_ . '.email' } = 1 foreach (qw(Requestor Cc AdminCc));
+
+ my @cfs = grep /^CustomField/, @{$self->available_columns};
+ $fields{$_} = 1 for @cfs;
+
+ # Add PAW sort
+ $fields{'Custom.Ownership'} = 1;
+ return [
+ { display => _('none'), value => '' },
+ map { { display => _($_), value => $_ } } keys %fields
+ ];
+ }
+}
+
+1;
-----------------------------------------------------------------------
More information about the Rt-commit
mailing list