%# BEGIN LICENSE BLOCK %# %# Copyright (c) 1996-2003 Jesse Vincent %# %# (Except where explictly superceded by other copyright notices) %# %# 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. %# %# Unless otherwise specified, all modifications, corrections or %# extensions to this work which alter its source code become the %# property of Best Practical Solutions, LLC when submitted for %# inclusion in the work. %# %# %# END LICENSE BLOCK <& /Elements/Header, Title => loc("Bulk ticket update") &> <& /Elements/Tabs, Title => loc("Bulk ticket update") &> <& /Elements/ListActions, actions => \@results &>

<&|/l&>Update %foreach my $col (@cols) { % my $colalias = $col; % $colalias =~ s/(Obj\-\>|)(Name|AsString)//; | <% loc($colalias) %> %}
--- | ---
<%PERL> my $i; $session{'tickets'}->RedoSearch(); while (my $Ticket = $session{'tickets'}->Next) { $i++; if ($i % 2) { $bgcolor = "#dddddd"; } else { $bgcolor = "#ffffff"; }
%# The ticket view is controlled by config.pm, WebOptions %foreach my $col (@cols) { | % if ($col eq 'id') { <%$Ticket->Id()%> % } %else { <% eval "\$Ticket->$col()" %> %} %}
%}

<& /Elements/TitleBoxStart, title => loc('Update selected tickets') &>

<&|/l&>Make Owner: | <& /Elements/SelectOwner, Name => "Owner" &> ( <&|/l&>Force change)
<&|/l&>Add Requestor: |
<&|/l&>Remove Requestor: |
<&|/l&>Add Cc: |
<&|/l&>Remove Cc: |
<&|/l&>Add AdminCc: |
<&|/l&>Remove AdminCc: |
<&|/l&>Make subject: |
<&|/l&>Make priority: |
<&|/l&>Make queue: | <& /Elements/SelectQueue, Name => "Queue" &>
<&|/l&>Make Status: | <& /Elements/SelectStatus, Name => "Status" &>
<&|/l&>Make date Starts: | <& /Elements/SelectDate, Name => "Starts_Date", ShowTime => 0, Default => '' &>
<&|/l&>Make date Started: | <& /Elements/SelectDate, Name => "Started_Date", ShowTime => 0, Default => '' &>
<&|/l&>Make date Told: | <& /Elements/SelectDate, Name => "Told_Date", ShowTime => 0, Default => '' &>
<&|/l&>Make date Due: | <& /Elements/SelectDate, Name => "Due_Date", ShowTime => 0, Default => '' &>
<&|/l&>Make date Resolved: | <& /Elements/SelectDate, Name => "Resolved_Date", ShowTime => 0, Default => '' &>

<& /Elements/TitleBoxEnd&> <& /Elements/TitleBoxStart, title => loc('Add comments or replies to selected tickets') &>

<&|/l&>Update Type: |
<&|/l&>Subject: |
<&|/l&>Attach: |
<&|/l&>Message: | <& /Elements/MessageBox, Name=>"UpdateContent"&>

<& /Elements/TitleBoxEnd &> <& /Elements/TitleBoxStart, title => loc('Edit Relationships'), color => "#336633"&> <&|/l&>Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces.
<& /Ticket/Elements/BulkLinks &> <& /Elements/TitleBoxEnd &> <& /Elements/Submit, Label => loc('Update All') &> <%INIT> # Iterate through the ARGS hash and remove anything with a null value. map ($ARGS{$_} =~ /^$/ && (delete $ARGS{$_}), keys %ARGS); my ($bgcolor, @results); my @cols = qw(id Status Priority Subject QueueObj->Name OwnerObj->Name RequestorAddresses DueAsString ); Abort(loc("No search to operate on.")) unless ($session{'tickets'}); my $do_comment_reply=0; # Prepare for ticket updates $ARGS{'UpdateContent'} =~ s/\r\n/\n/g; chomp ($ARGS{'UpdateContent'}) ; if ($ARGS{'UpdateContent'} && $ARGS{'UpdateContent'} ne '' && $ARGS{'UpdateContent'} ne "-- \n" . $session{'CurrentUser'}->UserObj->Signature) { $do_comment_reply=1; } #Iterate through each ticket we've been handed my @linkresults; $session{'tickets'}->RedoSearch(); while (my $Ticket = $session{'tickets'}->Next) { $RT::Logger->debug( "Checking Ticket ".$Ticket->Id ."\n"); next unless ($ARGS{"UpdateTicket".$Ticket->Id}); $RT::Logger->debug ("Matched\n"); my @updateresults; if ($do_comment_reply) { ProcessUpdateMessage(TicketObj => $Ticket, ARGSRef => \%ARGS, Actions => \@updateresults); } #Update the basics. my @basicresults = ProcessTicketBasics(TicketObj => $Ticket, ARGSRef => \%ARGS); my @dateresults = ProcessTicketDates(TicketObj => $Ticket, ARGSRef => \%ARGS); #Update the watchers my @watchresults = ProcessTicketWatchers(TicketObj => $Ticket, ARGSRef => \%ARGS); #Update the links $ARGS{'id'} = $Ticket; $ARGS{$Ticket->Id.'-MergeInto'} = $ARGS{'Ticket-MergeInto'}; $ARGS{$Ticket->Id.'-DependsOn'} = $ARGS{'Ticket-DependsOn'}; $ARGS{'DependsOn-'.$Ticket->Id} = $ARGS{'DependsOn-Ticket'}; $ARGS{$Ticket->Id.'-MemberOf'} = $ARGS{'Ticket-MemberOf'}; $ARGS{'MemberOf-'.$Ticket->Id} = $ARGS{'MemberOf-Ticket'}; $ARGS{$Ticket->Id.'-RefersTo'} = $ARGS{'Ticket-RefersTo'}; $ARGS{'RefersTo-'.$Ticket->Id} = $ARGS{'RefersTo-Ticket'}; @linkresults = ProcessTicketLinks( TicketObj => $Ticket, ARGSRef => \%ARGS); delete $ARGS{'id'}; delete $ARGS{$Ticket->Id.'-MergeInto'}; delete $ARGS{$Ticket->Id.'-DependsOn'}; delete $ARGS{'DependsOn-'.$Ticket->Id}; delete $ARGS{$Ticket->Id.'-MemberOf'}; delete $ARGS{'MemberOf-'.$Ticket->Id}; delete $ARGS{$Ticket->Id.'-RefersTo'}; delete $ARGS{'RefersTo-'.$Ticket->Id}; my @tempresults = (@watchresults, @basicresults, @dateresults, @updateresults, @linkresults); @tempresults = map { loc("Ticket [_1]: [_2]",$Ticket->Id,$_) } @tempresults; @results = (@results, @tempresults); }