import rt 3.8.7
[freeside.git] / rt / share / html / Search / Elements / BuildFormatString
diff --git a/rt/share/html/Search/Elements/BuildFormatString b/rt/share/html/Search/Elements/BuildFormatString
new file mode 100644 (file)
index 0000000..9728511
--- /dev/null
@@ -0,0 +1,250 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%# 
+%# COPYRIGHT:
+%# 
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%#                                          <jesse@bestpractical.com>
+%# 
+%# (Except where explicitly superseded by other copyright notices)
+%# 
+%# 
+%# LICENSE:
+%# 
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%# 
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+%# General Public License for more details.
+%# 
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%# 
+%# 
+%# CONTRIBUTION SUBMISSION POLICY:
+%# 
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%# 
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%# 
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$Format => RT->Config->Get('DefaultSearchResultFormat')
+
+%cfqueues => ()
+
+$Face => undef
+$Size => undef
+$Link => undef
+$Title => undef
+
+$AddCol => undef
+$RemoveCol => undef
+$ColUp => undef
+$ColDown => undef
+
+$SelectDisplayColumns => undef
+$CurrentDisplayColumns => undef
+</%ARGS>
+<%init>
+# This can't be in a <once> block, because otherwise we return the
+# same \@fields every request, and keep tacking more CustomFields onto
+# it -- and it grows per request.
+
+# All the things we can display in the format string by default
+my @fields = qw(
+    id QueueName Subject
+    Status ExtendedStatus UpdateStatus
+    Type
+
+    OwnerName Requestors Cc AdminCc CreatedBy LastUpdatedBy
+
+    Priority InitialPriority FinalPriority
+
+    TimeWorked TimeLeft TimeEstimated
+
+    Starts      StartsRelative
+    Started     StartedRelative
+    Created     CreatedRelative
+    LastUpdated LastUpdatedRelative
+    Told        ToldRelative
+    Due         DueRelative
+    Resolved    ResolvedRelative
+
+    RefersTo    ReferredToBy
+    DependsOn   DependedOnBy
+    MemberOf    Members
+    Parents     Children
+
+    Bookmark
+
+    NEWLINE
+); # loc_qw
+
+$m->callback( CallbackOnce => 1, CallbackName => 'SetFieldsOnce', Fields => \@fields );
+
+my $CustomFields = RT::CustomFields->new( $session{'CurrentUser'});
+foreach my $id (keys %cfqueues) {
+    # Gotta load up the $queue object, since queues get stored by name now. my $id
+    my $queue = RT::Queue->new($session{'CurrentUser'});
+    $queue->Load($id);
+    unless ($queue->id) {
+        # XXX TODO: This ancient code dates from a former developer
+        # we have no idea what it means or why cfqueues are so encoded.
+        $id =~ s/^.'*(.*).'*$/$1/;
+        $queue->Load($id);
+    }
+    $CustomFields->LimitToQueue($queue->Id);
+}
+$CustomFields->LimitToGlobal;
+
+while ( my $CustomField = $CustomFields->Next ) {
+    push @fields, "CustomField.{" . $CustomField->Name . "}";
+}
+
+$m->callback( Fields => \@fields, ARGSRef => \%ARGS );
+
+my ( @seen);
+
+$Format ||= RT->Config->Get('DefaultSearchResultFormat');
+my @format = split( /,\s*/, $Format );
+foreach my $field (@format) {
+    my %column = ();
+    $field =~ s/'(.*)'/$1/;
+    my ( $prefix, $suffix );
+    if ( $field =~ m/(.*)__(.*)__(.*)/ ) {
+        $prefix = $1;
+        $suffix = $3;
+        $field  = $2;
+    }
+    $field = "<blank>" if !$field;
+    $column{Prefix} = $prefix;
+    $column{Suffix} = $suffix;
+    $field =~ s/\s*(.*)\s*/$1/;
+    $column{Column} = $field;
+    push @seen, \%column;
+}
+
+if ( $RemoveCol ) {
+    # we do this regex match to avoid a non-numeric warning
+    my ($index) = $CurrentDisplayColumns =~ /^(\d+)/;
+    my $column = $seen[$index];
+    if ($index) {
+        delete $seen[$index];
+        my @temp = @seen;
+        @seen = ();
+        foreach my $element (@temp) {
+            next unless $element;
+            push @seen, $element;
+        }
+    }
+}
+elsif ( $AddCol ) {
+    if ( defined $SelectDisplayColumns ) {
+        my $selected = $SelectDisplayColumns;
+        my @columns;
+        if (ref($selected) eq 'ARRAY') {
+            @columns = @$selected;
+        } else {
+            push @columns, $selected;
+        }
+        foreach my $col (@columns) {
+            my %column = ();
+            $column{Column} = $col;
+
+            if ( $Face eq "Bold" ) {
+                $column{Prefix} .= "<b>";
+                $column{Suffix} .= "</b>";
+            }
+            if ( $Face eq "Italic" ) {
+                $column{Prefix} .= "<i>";
+                $column{Suffix} .= "</i>";
+            }
+            if ($Size) {
+                $column{Prefix} .= "<" . $m->interp->apply_escapes( $Size,  'h' ) . ">";
+                $column{Suffix} .= "</" . $m->interp->apply_escapes( $Size, 'h' ) . ">";
+            }
+            if ( $Link eq "Display" ) {
+                $column{Prefix} .= q{<a HREF="__WebPath__/Ticket/Display.html?id=__id__">};
+                $column{Suffix} .= "</a>";
+            }
+            elsif ( $Link eq "Take" ) {
+                $column{Prefix} .= q{<a HREF="__WebPath__/Ticket/Display.html?Action=Take&id=__id__">};
+                $column{Suffix} .= "</a>";
+            }
+            elsif ( $Link eq "Respond" ) {
+                $column{Prefix} .= q{<a HREF="__WebPath__/Ticket/Update.html?Action=Respond&id=__id__">};
+                $column{Suffix} .= "</a>";
+            }
+            elsif ( $Link eq "Comment" ) {
+                $column{Prefix} .= q{<a HREF="__WebPath__/Ticket/Update.html?Action=Comment&id=__id__">};
+                $column{Suffix} .= "</a>";
+            }
+            elsif ( $Link eq "Resolve" ) {
+                $column{Prefix} .= q{<a HREF="__WebPath__/Ticket/Update.html?Action=Comment&DefaultStatus=resolved&id=__id__">};
+                $column{Suffix} .= "</a>";
+            }
+
+            if ($Title) {
+                $column{Suffix} .= "/TITLE:" . $m->interp->apply_escapes( $Title, 'h' );
+            }
+            push @seen, \%column;
+        }
+    }
+}
+elsif ( $ColUp ) {
+    my $index = $CurrentDisplayColumns;
+    if ( defined $index && ( $index - 1 ) >= 0 ) {
+        my $column = $seen[$index];
+        $seen[$index]       = $seen[ $index - 1 ];
+        $seen[ $index - 1 ] = $column;
+        $CurrentDisplayColumns     = $index - 1;
+    }
+}
+elsif ( $ColDown ) {
+    my $index = $CurrentDisplayColumns;
+    if ( defined $index && ( $index + 1 ) < scalar @seen ) {
+        my $column = $seen[$index];
+        $seen[$index]       = $seen[ $index + 1 ];
+        $seen[ $index + 1 ] = $column;
+        $CurrentDisplayColumns     = $index + 1;
+    }
+}
+
+
+my @format_string;
+foreach my $field (@seen) {
+    next unless $field;
+    my $row = "'";
+    $row .= $field->{'Prefix'} if defined $field->{'Prefix'};
+    $row .= "__" . ($field->{'Column'} =~ m/\(/ ? $field->{'Column'} # func, don't escape
+                   : $m->interp->apply_escapes( $field->{'Column'}, 'h' )) . "__"
+      unless ( $field->{'Column'} eq "<blank>" );
+    $row .= $field->{'Suffix'} if defined $field->{'Suffix'};
+    $row .= "'";
+    push( @format_string, $row );
+}
+
+$Format = join(",\n", @format_string);
+
+
+return($Format, \@fields, \@seen);
+
+</%init>