diff options
Diffstat (limited to 'rt/webrt/Search')
-rwxr-xr-x | rt/webrt/Search/Bulk.html | 186 | ||||
-rwxr-xr-x | rt/webrt/Search/Listing.html | 134 | ||||
-rwxr-xr-x | rt/webrt/Search/PickRestriction | 112 | ||||
-rwxr-xr-x | rt/webrt/Search/RestrictSearch.html | 3 | ||||
-rw-r--r-- | rt/webrt/Search/TicketCell | 28 |
5 files changed, 463 insertions, 0 deletions
diff --git a/rt/webrt/Search/Bulk.html b/rt/webrt/Search/Bulk.html new file mode 100755 index 000000000..ac688d7cd --- /dev/null +++ b/rt/webrt/Search/Bulk.html @@ -0,0 +1,186 @@ +%# $Header: /home/cvs/cvsroot/freeside/rt/webrt/Search/Attic/Bulk.html,v 1.1 2002-08-12 06:17:09 ivan Exp $ +%# Copyright 1996-2001 Jesse Vincent <jesse@fsck.com> +<& /Elements/Header, Title => "Bulk ticket update" &> +<& /Elements/Tabs &> + +<& /Elements/ListActions, actions => \@results &> + +<FORM METHOD=POST> +<TABLE WIDTH=100% border=0 cellpadding=3 CELLSPACING=0> +<TR> +<TH>Update</TH> +%foreach my $col (@cols) { +% my $colalias = $col; +% $colalias =~ s/(Obj\-\>|)(Name|AsString)//; + +<TH ><% $colalias %> </TH> +%} +</TR> + +<%PERL> + +my $i; + + + +$session{'tickets'}->RedoSearch(); +while (my $Ticket = $session{'tickets'}->Next) { + $i++; + if ($i % 2) { + $bgcolor = "#dddddd"; + } + else { + $bgcolor = "#ffffff"; + } + </%PERL> +<TR bgcolor="<%$bgcolor%>"> +<TD><input type=checkbox name="UpdateTicket<%$Ticket->Id%>" CHECKED></TD> +%# The ticket view is controlled by config.pm, WebOptions +%foreach my $col (@cols) { +<TD> +% if ($col eq 'id') { +<A HREF="<% $RT::WebPath%>/Ticket/Display.html?id=<%$Ticket->Id%>"><%$Ticket->Id()%></A> +% } +%else { +<% eval "\$Ticket->$col()" %> +%} +</TD> +%} +</TR> +%} + + + +</TABLE> + +<HR> + + +<& /Elements/TitleBoxStart, title => 'Update selected tickets' &> +<TABLE> +<TR> +<TD VALIGN=TOP> +<UL> +<li> Make Owner <& /Elements/SelectOwner, Name => "Owner" &> +(<input type=checkbox name="ForceOwnerChange"> Force change) +<li> Add Requestor <INPUT Name="AddRequestor" SIZE=20> +<li> Remove Requestor <INPUT Name="DeleteRequestor" SIZE=20> +<li> Add Cc <INPUT Name="AddCc" SIZE=20> +<li> Remove Cc <INPUT Name="DeleteCc" SIZE=20> +<li> Add AdminCc <INPUT Name="AddAdminCc" SIZE=20> +<li> Remove AdminCc <INPUT Name="DeleteAdminCc" SIZE=20> +</UL> +</TD> +<TD VALIGN=TOP> +<UL> +<li> Make subject <INPUT Name="Subject" SIZE=20> +<li> Make priority <INPUT Name="Priority" SIZE=4> +<li> Make queue <& /Elements/SelectQueue, Name => "Queue" &> + +<li>Make Status <& /Elements/SelectStatus, Name => "Status" &> + + + +<li> Make date Starts <& /Elements/SelectDate, Name => "Starts_Date", ShowTime => 0, Default => '' &> +<li> Make date Started <& /Elements/SelectDate, Name => "Started_Date", ShowTime => 0, Default => '' &> +<li> Make date Told <& /Elements/SelectDate, Name => "Told_Date", ShowTime => 0, Default => '' &> +<li> Make date Due <& /Elements/SelectDate, Name => "Due_Date", ShowTime => 0, Default => '' &> +<li> Make date Resolved <& /Elements/SelectDate, Name => "Resolved_Date", ShowTime => 0, Default => '' &> + + +% while ( my $KeywordSelect = $KeywordSelects->Next ) { + +<li> Add <% $KeywordSelect->Name %> <& /Elements/SelectKeyword, Name => "AddToKeywordSelect".$KeywordSelect->id, KeywordObj => $KeywordSelect->KeywordObj &> +<li> Remove <% $KeywordSelect->Name %> <& /Elements/SelectKeyword, Name => "DeleteFromKeywordSelect".$KeywordSelect->id, KeywordObj => $KeywordSelect->KeywordObj &> +% } + +</UL> + + +</TD> +</TR> +</table> +<& /Elements/TitleBoxEnd&> +<& /Elements/TitleBoxStart, title => 'Add comments or replies to selected tickets' &> +<table> +<tr><td align=right>Update Type:</td> +<td><select name="UpdateType"> + <option value="private" >Comments (not sent to requestors)</option> +<option value="response" >Response to requestors</option> +</select> +</td></tr> +<tr><td align=right>Subject:</td><td> <input name="UpdateSubject" size=60 value=""></td></tr> + <tr><td align=right>Attach:</td><td><input name="UpdateAttachment" type="file"></td></tr> + <tr><td colspan="2"> + <& /Elements/MessageBox, Name=>"UpdateContent"&> + </td></tr> + </table> +<& /Elements/TitleBoxEnd &> + + + + +<& /Elements/Submit &> + + +</FORM> +<%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 RequestorsAsString DueAsString ); + +Abort("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; +} + +my $KeywordSelects = new RT::KeywordSelects $session{'CurrentUser'}; +foreach ( $session{'tickets'}->RestrictionValues('Queue') ) { + $KeywordSelects->LimitToQueue($_); +} + +$KeywordSelects->IncludeGlobals; + + +#Iterate through each ticket we've been handed + +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"); + #Update the basics. + my @basicresults = ProcessTicketBasics(TicketObj => $Ticket, ARGSRef => \%ARGS); + my @dateresults = ProcessTicketDates(TicketObj => $Ticket, ARGSRef => \%ARGS); + my @watchresults = ProcessTicketWatchers(TicketObj => $Ticket, ARGSRef => \%ARGS); + my @selectresults = ProcessTicketObjectKeywords(TicketObj => $Ticket, ARGSRef => \%ARGS); + + + my @updateresults; + if ($do_comment_reply) { + ProcessUpdateMessage(TicketObj => $Ticket, ARGSRef => \%ARGS, Actions => \ +@updateresults); + } + my @tempresults = (@watchresults, @basicresults, @dateresults, @updateresults); + @tempresults = map { "Ticket ".$Ticket->Id. ": ".$_ } @tempresults; + + + #Update the keyword selects + #Update the watchers + $RT::Logger->debug(join("\n",@tempresults)); + @results = (@results, @tempresults); +} + +</%INIT> diff --git a/rt/webrt/Search/Listing.html b/rt/webrt/Search/Listing.html new file mode 100755 index 000000000..da927fec7 --- /dev/null +++ b/rt/webrt/Search/Listing.html @@ -0,0 +1,134 @@ +%# $Header: /home/cvs/cvsroot/freeside/rt/webrt/Search/Attic/Listing.html,v 1.1 2002-08-12 06:17:09 ivan Exp $ +%# Copyright 1996-2001 Jesse Vincent <jesse@fsck.com> +<& /Elements/Header, Title => "Search", Refresh => $session{'tickets_refresh_interval'} &> +<& /Elements/Tabs, current_toptab => 'Search/Listing.html' &> + + +% unless ($ARGS{'Action'} eq 'Refine') { +<TABLE WIDTH=100% border=0 cellpadding=3 CELLSPACING=1> +<TR> +%foreach my $col (@{Config(\%ARGS, 'QueueListingCols')}) { +<TH> + +<%PERL> +my ($order); + my $attr = $col->{'TicketAttribute'}; + $attr =~ s/Obj->(Name|AsString|AgeAsString)//g; + if ($session{'tickets_sort_order'} =~ /^asc$/i) { + $order = 'DESC'; + } else { + $order = 'ASC'; + } +</%PERL> + +% if (grep (/^$attr$/i, $session{'tickets'}->SortFields)) { +<A +% if ($attr eq $session{'tickets_sort_by'}) { +class="currenttab" +% } +HREF="<% $RT::WebPath%>/Search/Listing.html?Bookmark=<%$session{'tickets'}->FreezeLimits()|u%>&TicketsSortBy=<%$attr%>&TicketsSortOrder=<%$order%>&RowsPerPage=<%$session{'tickets_rows_per_page'}%>"> +<%$col->{Header}%> +</A> +% } else { +<% $col->{Header} %> +% } +</TH> +%} +</TR> + +<%PERL> + +my $i; + +$session{'tickets'}->RedoSearch(); +while (my $Ticket = $session{'tickets'}->Next) { + $i++; + if ($i % 2) { + $bgcolor = "#dddddd"; + } + else { + $bgcolor = "#ffffff"; + } + </%PERL> +<TR bgcolor="<%$bgcolor%>" > +%# The ticket view is controlled by config.pm, WebOptions +%foreach my $col (@{Config(\%ARGS,'QueueListingCols')}) { +<TD><& TicketCell , Ticket=>$Ticket, Column=>$col &></TD> +%} +</TR> +%} + + + +</TABLE> + +<div align=center> +<font size=2> +<a href="Listing.html?GotoPage=1">First page</a> + +<a href="Listing.html?GotoPage=Prev"><Previous page</a> + +<a href="Listing.html?GotoPage=Next">Next page></a> +%# <form method=get action="Listing.html">Goto page <input name=GotoPage size=2></form> +</font> +</div> +% if ($session{'tickets'}->Count()) { +<div align=right> +<a href="Bulk.html">Update all these tickets at once</a> +</div> +% } +<HR> + +% } #endif {$ARGS{'Action'} eq 'Refine') +<TABLE WIDTH="100%"> +<TR> +<TD VALIGN="TOP"> +<& /Elements/TitleBoxStart, title => 'Search Criteria'&> + +<A HREF="<% $RT::WebPath%>/Search/Listing.html?ClearRestrictions=1">New search</a><br> +<A HREF="<% $RT::WebPath%>/Search/Listing.html?Bookmark=<%$session{'tickets'}->FreezeLimits()|u%>&TicketsSortBy=<%$session{'tickets_sort_by'}%>&TicketsSortOrder=<%$session{'tickets_sort_order'}%>&RowsPerPage=<%$session{'tickets_rows_per_page'}%>">Bookmarkable URL for this search</a> +<BR> +<BR> +% my %restrictions=$session{'tickets'}->DescribeRestrictions(); +% my %seen_restrictions=(); +% foreach $row (keys %restrictions){ +% my $tmp=$restrictions{"$row"}; +% if( ! defined( $seen_restrictions{"$tmp"} ) ){ +<%$restrictions{"$row"}%> <A HREF="<% $RT::WebPath%>/Search/Listing.html?DeleteRestriction=<%$row%>">[delete]</a><br> +% } else { +% $session{'tickets'}->DeleteRestriction($row); +<b>Deleted Duplicate Restriction <i><%$tmp%></i></b><br> +% } +% $seen_restrictions{"$tmp"}++; +%} +<& /Elements/TitleBoxEnd&> +</TD> +<TD> + +<& PickRestriction &> + +</TD> +</TR> +</TABLE> + +<%INIT> + +my $bgcolor; +require RT::Interface::Web; + +$session{'i'}++; +if ($session{'tickets'}) { + if ( ($ARGS{'ClearRestrictions'}) || + ($ARGS{'NewSearch'}) ) { + $session{'tickets'}->ClearRestrictions; + } + + if ($ARGS{'DeleteRestriction'}) { + $session{'tickets'}->DeleteRestriction($ARGS{'DeleteRestriction'}); + } +} +&ProcessSearchQuery(ARGS=>\%ARGS); + +my $row; + +</%INIT> diff --git a/rt/webrt/Search/PickRestriction b/rt/webrt/Search/PickRestriction new file mode 100755 index 000000000..82f576c1f --- /dev/null +++ b/rt/webrt/Search/PickRestriction @@ -0,0 +1,112 @@ +%# $Header: /home/cvs/cvsroot/freeside/rt/webrt/Search/Attic/PickRestriction,v 1.1 2002-08-12 06:17:09 ivan Exp $ +<FORM ACTION="Listing.html" METHOD="GET"> +<INPUT TYPE=HIDDEN NAME="Bookmark" VALUE="<% $session{'tickets'}->FreezeLimits()|u %>"> +<& /Elements/TitleBoxStart, title => 'Refine Search'&> +<INPUT TYPE=HIDDEN NAME="CompileRestriction" VALUE=1> + +<ul> +<li>Owner is <& /Elements/SelectBoolean, Name => "OwnerOp", + TrueVal=> '=', + FalseVal => '!=' +&> +<& /Elements/SelectOwner, Name => "ValueOfOwner" &> + +<li> +Requestor email address +<& /Elements/SelectMatch, Name => "RequestorOp" &> +<INPUT Name="ValueOfRequestor" SIZE=20> + +<li> +Subject <& /Elements/SelectMatch, Name => "SubjectOp" &> +<INPUT Name="ValueOfSubject" SIZE=20> + +<li>Queue <& /Elements/SelectBoolean, Name => "QueueOp" , + True => "is", + False => "isn't", + TrueVal=> '=', + FalseVal => '!=' &> +<& /Elements/SelectQueue, Name => "ValueOfQueue" &> + + +<li>Priority <& /Elements/SelectEqualityOperator, Name => "PriorityOp" &> + +<INPUT Name="ValueOfPriority" SIZE=5> + + +<li> +<& /Elements/SelectDateType, Name => 'DateType' &> +<& /Elements/SelectDateRelation, Name=>"DateOp" &> +<& /Elements/SelectDate, Name => "ValueOfDate", ShowTime => 0, Default => '' &> + +<li>Ticket content +<& /Elements/SelectBoolean, Name => "ContentOp", + True => "matches", + False => "does not match", + TrueVal => 'LIKE', + FalseVal => 'NOT LIKE' +&> +<Input Name="ValueOfContent" Size=20> + +<li>Status +<& /Elements/SelectBoolean, Name => "StatusOp", + True => "is", + False => "isn't", + TrueVal=> '=', + FalseVal => '!=' +&> +<& /Elements/SelectStatus, Name => "ValueOfStatus" &> + +% while ( my $KeywordSelect = $KeywordSelects->Next ) { + +<li><% $KeywordSelect->Name %> + <& /Elements/SelectBoolean, Name => "KeywordSelectOp". $KeywordSelect->id, + True => "is", False => "isn't", + TrueVal=> '=', FalseVal => '!=' &> + +<& /Elements/SelectKeyword, Name => "KeywordSelect".$KeywordSelect->id, + KeywordObj => $KeywordSelect->KeywordObj + &> +% } + +</UL> + +<& /Elements/TitleBoxEnd &> + +<& /Elements/TitleBoxStart, title => 'Ordering and sorting'&> + +<UL> + +<li>Results per page <& /Elements/SelectResultsPerPage, Name => "RowsPerPage", + Default => $session{'tickets_rows_per_page'} || '50' +&> + +<li>Sort results by <& /Elements/SelectTicketSortBy, Name => "TicketsSortBy", + Default => $session{'tickets_sort_by'} +&> +<& /Elements/SelectSortOrder, Name => 'TicketsSortOrder', Default => $session{'tickets_sort_order'} &> + +<li> <& /Elements/Refresh, Name => 'RefreshSearchInterval' , Default => $session{'tickets_refresh_interval'} &> + + +</UL> + + +</DIV> + + + +<& /Elements/TitleBoxEnd &> + +<& /Elements/Submit, Label => 'Show Results', AlternateLabel => 'Refine', Name => 'Action'&> + +</FORM> + + + <%INIT> + my $KeywordSelects = new RT::KeywordSelects $session{'CurrentUser'}; + foreach ( $session{'tickets'}->RestrictionValues('Queue') ) { + $KeywordSelects->LimitToQueue($_); + } + + $KeywordSelects->IncludeGlobals; +</%INIT> diff --git a/rt/webrt/Search/RestrictSearch.html b/rt/webrt/Search/RestrictSearch.html new file mode 100755 index 000000000..977308e3b --- /dev/null +++ b/rt/webrt/Search/RestrictSearch.html @@ -0,0 +1,3 @@ +<& /Elements/Header, Title=>"Compile Restrictions" &> +<& /Elements/Tabs &> +<& PickRestriction &> diff --git a/rt/webrt/Search/TicketCell b/rt/webrt/Search/TicketCell new file mode 100644 index 000000000..aaded88e9 --- /dev/null +++ b/rt/webrt/Search/TicketCell @@ -0,0 +1,28 @@ +%#$Header: /home/cvs/cvsroot/freeside/rt/webrt/Search/Attic/TicketCell,v 1.1 2002-08-12 06:17:09 ivan Exp $ +<% $link |n%><%$Column->{Constant} || eval("\$Ticket->$Column->{TicketAttribute}") || "-" %><% $endlink|n %> +<%INIT> + +my $link = ""; +my $endlink = ""; +if ($Column->{TicketLink}) { + $link = "<A HREF=\""; + if ($Column->{TicketLink} == 1 ) { + $link .= "../Ticket/Display.html?"; + } + else { + $link .= $Column->{TicketLink}; + } + + $link .= "id=".$Ticket->Id . $Column->{ExtraLinks}; + + if ($session{NewWindowOption}) { + $link .= "TARGET=\"TicketDisplay".$session{AlwaysNewWindowOption} && (time() . rand(1024))."\" "; + } + $link .= "\">"; + $endlink = "</a>"; +} +</%INIT> +<%ARGS> +$Ticket => undef +$Column => undef +</%ARGS> |