[rt-users] see others tickets

Václav Ovsík vaclav.ovsik at i.cz
Thu Nov 4 04:22:34 EDT 2010


On Thu, Nov 04, 2010 at 12:22:11AM +0100, Josef wrote:
> 
>  Thank you very much,
>     I have copied these files into my
> /usr/share/request-tracker3.6/html/SelfService/, but I'm having this

			^^^^^^^^
I forgot to mention files from the tarball should be extracted into
installation directory of RT 3.8.8. So you should end with:

local/html/SelfService
local/html/SelfService/QueueTickets.html
local/html/SelfService/Elements
local/html/SelfService/Elements/Tickets
local/html/SelfService/Elements/Tabs

in the directory where you install RT version 3.8.8.

The reasons for creating this SelfService extension was, that we don't
want to give customers full UI. We only want the customer can view
tickets for his company. We have groups of users with permissions to
view corresponding queues.

This code should replace old extension GroupService that exist in the
past for RT 2.x after we move to latest RT.

I wrote the code using loc(), so full localisation is possible and I did
it for Czech language. Menu option "Queue tickets" is not shown in the
case the user has no permission to view tickets in any queue.

Can someone review the changes to include this into share/html upstream?




 * SelfService/Elements/Tabs
   modification of original file

--- share/html/SelfService/Elements/Tabs	2010-05-10 15:36:53.000000000 +0200
+++ local/html/SelfService/Elements/Tabs	2010-07-01 15:07:01.000000000 +0200
@@ -58,14 +58,21 @@
 my $queues = RT::Queues->new($session{'CurrentUser'});
 $queues->UnLimit;
 
-my $queue_count = 0;
-my $queue_id = 1;
+my $queue_create_count = 0;
+my $queue_create_id = 1;
+my $queue_show_count = 0;
+my $queue_show_id = 1;
 
 while (my $queue = $queues->Next) {
-  next unless $queue->CurrentUserHasRight('CreateTicket');
-  $queue_id = $queue->id;
-  $queue_count++;
-  last if ($queue_count > 1);
+	if ( $queue->CurrentUserHasRight('CreateTicket') ) {
+		$queue_create_id = $queue->id;
+		$queue_create_count++;
+	}
+	if ( $queue->CurrentUserHasRight('ShowTicket') ) {
+		$queue_show_id = $queue->id;
+		$queue_show_count++;
+	}
+	last if $queue_create_count > 1 && $queue_show_count > 1;
 }
 
 if ($Title) {
@@ -83,13 +90,19 @@
                        },
            };
 
-if ($queue_count > 1) {
+if ($queue_show_count) {
+	$tabs->{B2} = { title => loc('Queue tickets'),
+		       path => 'SelfService/QueueTickets.html'
+		       };
+}
+
+if ($queue_create_count > 1) {
         $tabs->{C} = { title => loc('New ticket'),
                        path => 'SelfService/CreateTicketInQueue.html'
                        };
 } else {
         $tabs->{C} = { title => loc('New ticket'),
-                       path => 'SelfService/Create.html?Queue=' . $queue_id
+                       path => 'SelfService/Create.html?Queue=' . $queue_create_id
                        };
 }
 



 * SelfService/Elements/Tickets
   is modification of SelfService/Elements/MyRequests

--- share/html/SelfService/Elements/MyRequests	2010-05-10 15:36:53.000000000 +0200
+++ local/html/SelfService/Elements/Tickets	2010-07-08 12:13:04.000000000 +0200
@@ -45,41 +45,65 @@
 %# those contributions and any derivatives thereof.
 %# 
 %# END BPS TAGGED BLOCK }}}
+<%once>
+#my $Format = RT->Config->Get('DefaultSelfServiceSearchResultFormat');
+my $Format = qq{
+   '<B><A HREF="__WebPath__/SelfService/Display.html?id=__id__">__id__</a></B>/TITLE:#',
+   QueueName,
+   '<B><A HREF="__WebPath__/SelfService/Display.html?id=__id__">__Subject__</a></B>/TITLE:Subject',
+   Status,
+   Requestors,
+   OwnerName};
+</%once>
 <&| /Widgets/TitleBox, title =>  $title &>
 <& /Elements/CollectionList, Title   => $title,
 			 Format  => $Format, 
 			 Query   => $Query, 
-			 Order   => @Order, 
-			 OrderBy => @OrderBy,
+			 Order   => [@Order],
+			 OrderBy => [@OrderBy],
 			 BaseURL => $BaseURL,
-			 GenericQueryArgs => $GenericQueryArgs,
-			 AllowSorting => $AllowSorting,
-			 Class   => 'RT::Tickets',
-             Rows    => $Rows,
-			 Page    => $Page &>
+			 AllowSorting	=> $AllowSorting,
+			 Class		=> 'RT::Tickets',
+			 Rows		=> $Rows,
+			 Page		=> $Page,
+			 queue		=> [@queue],
+			 status		=> [@status],
+			 PassArguments	=> [qw(Page Order OrderBy queue status)],
+&>
+
 </&>
 
 <%INIT>
 my $id = $session{'CurrentUser'}->id;
+
+ at queue = grep($_, @queue);
+
+unless ( @queue ) {
+    my $queues = RT::Queues->new($session{'CurrentUser'});
+    $queues->UnLimit;
+    while (my $queue = $queues->Next) {
+	push @queue, $queue->id
+		if $queue->CurrentUserHasRight('ShowTicket');
+    }
+}
+
 my $Query = "( "
-    . join( ' OR ', map "$_.id = $id", @roles )
+    . join( ' OR ', map "Queue.id = $_", @queue )
     . ")";
 if ( @status ) {
     $Query .= " AND ( "
         . join( ' OR ', map "Status = '$_'", @status )
         . " )";
 }
-my $Format = RT->Config->Get('DefaultSelfServiceSearchResultFormat');
 
 </%INIT>
 <%ARGS>
 $friendly_status => loc('open')
-$title => loc("My [_1] tickets", $friendly_status)
- at roles => ('Watcher')
+$title => loc("All [_1] tickets", $friendly_status)
 @status => RT::Queue->ActiveStatusArray()
+ at queue => undef
 $BaseURL => undef
 $Page => 1
-$GenericQueryArgs => undef
 $AllowSorting => 1
 @Order => ('ASC')
 @OrderBy => ('Created')



 * SelfService/QueueTickets.html
   is a new component


Regards
-- 
Zito



More information about the rt-users mailing list