import rt 3.2.2
[freeside.git] / rt / html / Search / Elements / BuildFormatString
diff --git a/rt/html/Search/Elements/BuildFormatString b/rt/html/Search/Elements/BuildFormatString
new file mode 100644 (file)
index 0000000..e5e131b
--- /dev/null
@@ -0,0 +1,215 @@
+%# {{{ BEGIN BPS TAGGED BLOCK
+%# 
+%# COPYRIGHT:
+%#  
+%# This software is Copyright (c) 1996-2004 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+%# 
+%# 
+%# 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 => undef
+%cfqueues => undef
+</%args>
+<%init>
+
+unless ($Format) {         
+    $Format = $RT::DefaultSearchResultFormat;
+}   
+    
+my @fields = (
+    "QueueName",           "OwnerName",
+    "id",                  "Status",
+    "Subject",             "ExtendedStatus",
+    "Priority",            "InitialPriority",
+    "FinalPriority",       "EffectiveId",
+    "Type",                "TimeWorked",
+    "TimeLeft",            "TimeEstimated",
+    "Requestors",          "Cc",
+    "AdminCc",             "StartsRelative",
+    "StartedRelative",     "CreatedRelative",
+    "LastUpdatedRelative", "ToldRelative",
+    "DueRelative",         "ResolvedRelative",
+    "Starts",              "Started",
+    "Created",             "CreatedBy",
+    "LastUpdated",         "LastUpdatedBy",
+    "Told",                "Due",
+    "Resolved",            "NEWLINE",
+    "RefersTo",                   "ReferredToBy",
+    "DependsOn",           "DependedOnBy",
+    "MemberOf",            "Members",
+    "Parents",             "Children",
+    "-",
+);
+
+my $CustomFields = RT::CustomFields->new( $session{'CurrentUser'});
+foreach (keys %cfqueues) {
+    my $id = $_;
+    $id =~ s/^.'*(.*).'*$/$1/;
+    # Gotta load up the $queue object, since queues get stored by name now.
+    my $queue = RT::Queue->new($session{'CurrentUser'});
+    $queue->Load($id);
+    $CustomFields->LimitToQueue($queue->Id);
+}
+$CustomFields->LimitToGlobal;
+
+while ( my $CustomField = $CustomFields->Next ) {
+    my $queuestr;
+    if ($CustomField->QueueObj && $CustomField->QueueObj->Id != 0) {
+       $queuestr = $CustomField->QueueObj->Name . ".";
+    }
+    push @fields, "CustomField." . $queuestr . "{" . $CustomField->Name . "}";
+}
+
+my ( @seen);
+
+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 ( $ARGS{"RemoveCol"} ) {
+    my $index  = $ARGS{'CurrentDisplayColumns'};
+    my $column = $seen[$index];
+    if ($index) {
+        delete $seen[$index];
+        my @temp = @seen;
+        @seen = ();
+        foreach my $element (@temp) {
+            next unless $element;
+            push @seen, $element;
+        }
+    }
+}
+elsif ( $ARGS{"AddCol"} ) {
+    if ( defined $ARGS{'SelectDisplayColumns'} ) {
+       my $selected = $ARGS{'SelectDisplayColumns'};
+       my @columns;
+       if (ref($selected) eq 'ARRAY') {
+           @columns = @$selected;
+       } else {
+           push @columns, $selected;
+       }
+       foreach my $col (@columns) {
+           my %column = ();
+           $column{Column} = $fields[ $col ];
+           
+           if ( $ARGS{Face} eq "Bold" ) {
+               $column{Prefix} .= "<B>";
+           }
+           if ( $ARGS{Face} eq "Italic" ) {
+               $column{Prefix} .= "<I>";
+           }
+           if ( $ARGS{Size} ) {
+               $column{Prefix} .= "<" . $ARGS{Size} . ">";
+           }
+           if ( $ARGS{Link} eq "Display" ) {
+               $column{Prefix} .= "<A HREF=\"".$RT::WebPath."/Ticket/Display.html?id=__id__\">";
+           }
+           elsif ( $ARGS{Link} eq "Take" ) {
+               $column{Prefix} .=
+                   "<A HREF=\"".$RT::WebPath."/Ticket/Display.html?Action=Take&id=__id__\">";
+           }
+    
+           my $suffix;
+           if ( $ARGS{'Link'} eq "Display" || $ARGS{'Link'} eq "Take" ) {
+               $column{Suffix} .= "</a>";
+           }
+           if ( $ARGS{Size} ) {
+               $column{Suffix} .= "</" . $ARGS{Size} . ">";
+           }
+           if ( $ARGS{Face} eq "Italic" ) {
+               $column{Suffix} .= "</I>";
+           }
+           if ( $ARGS{Face} eq "Bold" ) {
+               $column{Suffix} .= "</B>";
+           }
+           if ( $ARGS{Title} ) {
+               $column{Suffix} .= "/TITLE:" . $ARGS{Title};
+           }
+           push @seen, \%column;
+       }
+    }
+}
+elsif ( $ARGS{"ColUp"} ) {
+    my $index = $ARGS{'CurrentDisplayColumns'};
+    if ( defined $index && ( $index - 1 ) >= 0 ) {
+        my $column = $seen[$index];
+        $seen[$index]       = $seen[ $index - 1 ];
+        $seen[ $index - 1 ] = $column;
+        $ARGS{CurrentDisplayColumns}     = $index - 1;
+    }
+}
+elsif ( $ARGS{"ColDown"} ) {
+    my $index = $ARGS{'CurrentDisplayColumns'};
+    if ( defined $index && ( $index + 1 ) < scalar @seen ) {
+        my $column = $seen[$index];
+        $seen[$index]       = $seen[ $index + 1 ];
+        $seen[ $index + 1 ] = $column;
+        $ARGS{CurrentDisplayColumns}     = $index + 1;
+    }
+}
+
+$Format = "";
+foreach my $field (@seen) {
+    next unless $field;
+    $Format .= ", \n" if $Format;
+    $Format .= "'";
+    $Format .= $field->{Prefix};
+    $Format .= "__" . $field->{Column} . "__" if ( $field->{Column} ne "<blank>" ) ;
+    $Format .= $field->{Suffix};
+    $Format .= "'";
+}
+return($Format, \@fields, \@seen);
+
+</%init>
+