selfservice priority sort order, #14029
authormark <mark>
Wed, 24 Aug 2011 21:00:45 +0000 (21:00 +0000)
committermark <mark>
Wed, 24 Aug 2011 21:00:45 +0000 (21:00 +0000)
FS/FS/ClientAPI/MyAccount.pm
fs_selfservice/FS-SelfService/cgi/ticket_summary.html
httemplate/view/cust_main/tickets.html

index 6fa4c3d..7db49d5 100644 (file)
@@ -339,7 +339,25 @@ sub customer_info {
       $return{balance} = $cust_main->balance;
     }
 
-    $return{tickets} = [ ($cust_main->tickets) ];
+    my @tickets = $cust_main->tickets;
+    # unavoidable false laziness w/ httemplate/view/cust_main/tickets.html
+    if ( FS::TicketSystem->selfservice_priority ) {
+      my $dir = $conf->exists('ticket_system-priority_reverse') ? -1 : 1;
+      $return{tickets} = [ 
+        sort { 
+          (
+            ($a->{'_selfservice_priority'} eq '') <=>
+            ($b->{'_selfservice_priority'} eq '')
+          ) ||
+          ( $dir * 
+            ($b->{'_selfservice_priority'} <=> $a->{'_selfservice_priority'}) 
+          )
+        } @tickets
+      ];
+    }
+    else {
+      $return{tickets} = \@tickets;
+    }
 
     unless ( $session->{'pkgnum'} ) {
       my @open = map {
index 781b1e7..1822622 100644 (file)
@@ -10,11 +10,6 @@ my $col = $col1;
 my $can_set_priority = 
   grep { exists($_->{'_selfservice_priority'}) } @tickets;
 if ( $can_set_priority ) {
-  use sort 'stable';
-  @tickets = sort { 
-              ($b->{'_selfservice_priority'} || 0) <=> 
-              ($a->{'_selfservice_priority'} || 0)
-  } @tickets;
 
   $OUT .= qq!<FORM ACTION="$selfurl" METHOD="POST">! .
           qq!<INPUT TYPE="hidden" NAME="session" VALUE="$session_id">! .
index 863c66b..adfaead 100644 (file)
@@ -133,11 +133,22 @@ my $new_link = FS::TicketSystem->href_new_ticket( $cust_main );
 
 my $ss_priority = FS::TicketSystem->selfservice_priority;
 if ( $ss_priority ) {
+  my $dir = $conf->exists('ticket_system-priority_reverse') ? -1 : 1;
   use sort 'stable';
-  no warnings 'uninitialized';
+  # sort in the following way:
   @tickets = sort { 
-    ($b->{'content'} eq $a->{'content'}) &&
-    $b->{'_selfservice_priority'} <=> $a->{'_selfservice_priority'}
+    # within a severity level...
+    ( $a->{'content'} eq $b->{'content'} ) ? (
+      # no-priority tickets sort last
+      (
+        ($a->{'_selfservice_priority'} eq '') <=> 
+        ($b->{'_selfservice_priority'} eq '')
+      ) ||
+      # otherwise obey ticket_system-priority_reverse
+      ( $dir * 
+        ($b->{'_selfservice_priority'} <=> $a->{'_selfservice_priority'})
+      )
+    ) : 0; # but don't rearrange between severity levels
   } @tickets;
 }