[Rt-commit] r16396 - in rt/branches/3.999-DANGEROUS: lib/RT/View

sunnavy at bestpractical.com sunnavy at bestpractical.com
Mon Oct 20 12:25:48 EDT 2008


Author: sunnavy
Date: Mon Oct 20 12:25:48 2008
New Revision: 16396

Modified:
   rt/branches/3.999-DANGEROUS/   (props changed)
   rt/branches/3.999-DANGEROUS/lib/RT/View/Ticket.pm

Log:
 r17226 at sunnavys-mb:  sunnavy | 2008-10-21 00:23:36 +0800
 added edit_cf page


Modified: rt/branches/3.999-DANGEROUS/lib/RT/View/Ticket.pm
==============================================================================
--- rt/branches/3.999-DANGEROUS/lib/RT/View/Ticket.pm	(original)
+++ rt/branches/3.999-DANGEROUS/lib/RT/View/Ticket.pm	Mon Oct 20 12:25:48 2008
@@ -105,6 +105,154 @@
     };
 };
 
+template '_elements/edit_cfs' => sub {
+    my ( $ticket, $queue, $cfs );
+    if ( get('id') ) {
+        $ticket = HTML::Mason::Commands::load_ticket( get('id') );
+        $cfs    = $ticket->custom_fields;
+    }
+    elsif ( get('queue') ) {
+        my $queue =
+          RT::Model::Queue->new( current_user => Jifty->web->current_user );
+        $queue->load( get('queue') );
+        $cfs = $queue->ticket_custom_fields;
+    }
+
+    my $edit_cfs = new_action(
+        class   => 'EditTicketCFs',
+        moniker => 'edit-ticket-cfs'
+    );
+    if ($ticket) {
+        render_param(
+            $edit_cfs     => 'id',
+            default_value => $ticket->id,
+            render_as     => 'hidden',
+        );
+    }
+
+    table {
+        tbody {
+            while ( my $cf = $cfs->next ) {
+                next unless $cf->current_user_has_right('ModifyCustomField');
+                row {
+                    cell {
+                        { class is 'labeltop' };
+                        Jifty->web->out( $cf->name );
+                        br {};
+                        i  { $cf->friendly_type };
+                        i  { $cf->type };
+                    };
+                    cell {
+                        { class is 'value' };
+                        my $values;
+                        if ($ticket) {
+                            $values = $ticket->custom_field_values( $cf->id );
+                        }
+
+                        if ( $cf->type =~ /text/ ) {
+                            if ($values) {
+                                while ( my $value = $values->next ) {
+                                    Jifty::Web::Form::Field->new(
+                                        action        => $edit_cfs,
+                                        name          => $cf->id,
+                                        render_as     => 'Textarea',
+                                        default_value => $value->content,
+                                    )->render_widget;
+                                    br {};
+                                }
+                            }
+                            if (
+                                $cf->max_values == 0
+                                || (   $values
+                                    && $values->count < $cf->max_values )
+                                || !$values
+                              )
+                            {
+                                Jifty::Web::Form::Field->new(
+                                    action    => $edit_cfs,
+                                    name      => $cf->id,
+                                    render_as => 'Textarea',
+                                )->render_widget;
+                                br {};
+                            }
+                        }
+                        elsif ( $cf->type eq 'Binary' ) {
+                            if ($values) {
+                                while ( my $value = $values->next ) {
+                                    Jifty::Web::Form::Field->new(
+                                        action    => $edit_cfs,
+                                        name      => 'delete_' . $value->id,
+                                        render_as => 'Checkbox',
+                                    )->render_widget;
+                                    Jifty->web->out( $value->content );
+                                    br {};
+                                }
+                            }
+
+                            if (
+                                $cf->max_values == 0
+                                || (   $values
+                                    && $values->count < $cf->max_values )
+                                || !$values
+                              )
+                            {
+                                Jifty::Web::Form::Field->new(
+                                    action    => $edit_cfs,
+                                    name      => $cf->id,
+                                    render_as => 'Upload',
+                                )->render_widget;
+                                br {};
+                            }
+                        }
+                        elsif ( $cf->type eq 'Freeform' ) {
+                            Jifty::Web::Form::Field->new(
+                                action    => $edit_cfs,
+                                name      => $cf->id,
+                                render_as => $cf->max_values == 1 ? 'Text'
+                                : 'Textarea',
+                                default_value => $values
+                                ? (
+                                    join "\n",
+                                    map $_->content,
+                                    @{ $values->items_array_ref }
+                                  )
+                                : '',
+                            )->render_widget;
+                            br {};
+                        }
+                        elsif ( $cf->type eq 'Select' ) {
+                            Jifty::Web::Form::Field->new(
+                                action        => $edit_cfs,
+                                name          => $cf->id,
+                                render_as     => 'Select',
+                                multiple      => !$cf->single_value,
+                                default_value => $values
+                                ? (
+                                    [
+                                        map $_->content,
+                                        @{ $values->items_array_ref }
+                                    ]
+                                  )
+                                : '',
+                            )->render_widget;
+                            br {};
+                        }
+                        elsif ( $cf->type eq 'Combobox' ) {
+                            Jifty::Web::Form::Field->new(
+                                action         => $edit_cfs,
+                                name           => $cf->id,
+                                render_as      => 'Combobox',
+                                default_values => $values,
+                            )->render_widget;
+                            br {};
+                        }
+                    }
+                }
+            }
+        }
+    };
+};
+
 sub m_comp {
     my ($template, $args)= @_;
     my $mason = Jifty->handler->view('Jifty::View::Mason::Handler');


More information about the Rt-commit mailing list