[Rt-commit] rt branch, 4.2/generic-object-selector, created. rt-4.1.5-242-g860c3d5

Thomas Sibley trs at bestpractical.com
Mon Jan 7 18:55:32 EST 2013


The branch, 4.2/generic-object-selector has been created
        at  860c3d5ba8bda918290929bd3ef52103343a4f2e (commit)

- Log -----------------------------------------------------------------
commit 860c3d5ba8bda918290929bd3ef52103343a4f2e
Author: Thomas Sibley <trs at bestpractical.com>
Date:   Mon Jan 7 15:42:28 2013 -0800

    Refactor the rendering and caching logic of SelectQueue into a generic SelectObject
    
    Now it's much easier for extensions to build cached object selection
    lists, simply by wrapping SelectObject.  Keeping track of when the cache
    needs busting is still left for external management.

diff --git a/share/html/Elements/SelectQueue b/share/html/Elements/SelectObject
similarity index 68%
copy from share/html/Elements/SelectQueue
copy to share/html/Elements/SelectObject
index 36a095a..97ea97e 100644
--- a/share/html/Elements/SelectQueue
+++ b/share/html/Elements/SelectObject
@@ -46,7 +46,7 @@
 %#
 %# END BPS TAGGED BLOCK }}}
 % if ($Lite) {
-%     my $d = RT::Queue->new($session{'CurrentUser'});
+%     my $d = $ObjectType->new($session{'CurrentUser'});
 %     $d->Load($Default);
 <input name="<%$Name%>" size="25" value="<%$d->Name%>" class="<%$Class%>" />
 % }
@@ -55,23 +55,24 @@
 %     if ($ShowNullOption) {
   <option value=""><% $DefaultLabel %></option>
 %     }
-%     for my $queue (@{$session{$cache_key}{queues}}) {
-  <option value="<% ($NamedValues ? $queue->{Name} : $queue->{Id}) %>"\
-% if ($queue->{Id} eq ($Default||'') || $queue->{Name} eq ($Default||'')) {
+%     for my $object (@{$session{$cache_key}{objects}}) {
+  <option value="<% ($NamedValues ? $object->{Name} : $object->{Id}) %>"\
+% if ($object->{Id} eq ($Default||'') || $object->{Name} eq ($Default||'')) {
  selected="selected"\
 % }
-><%$queue->{Name}%>\
-%             if ($Verbose and $queue->{Description}) {
- (<%$queue->{Description}%>)\
+><%$object->{Name}%>\
+%             if ($Verbose and $object->{Description}) {
+ (<%$object->{Description}%>)\
 %             }
 </option>
 %     }
 </select>
 % }
 <%args>
-$CheckQueueRight => 'CreateTicket'
+$ObjectType
+$CheckRight => undef
 $ShowNullOption => 1
-$ShowAllQueues => 1
+$ShowAll => 1
 $Name => undef
 $Verbose => undef
 $NamedValues => 0
@@ -81,31 +82,37 @@ $Lite => 0
 $OnChange => undef
 $Multiple => 0
 $Size => 6
-$Class => 'select-queue'
+$Class => ""
+$CacheNeedsUpdate => undef
 </%args>
 <%init>
-my $cache_key = "SelectQueue---"
-                . $session{'CurrentUser'}->Id
-                . "---$CheckQueueRight---$ShowAllQueues";
+$ObjectType = "RT::$ObjectType" unless $ObjectType =~ /::/;
+$Class    ||= "select-" . CSSClass("\L$1") if $ObjectType =~ /RT::(.+)$/;
+
+my $cache_key = join "---", "SelectObject", $ObjectType,
+    $session{'CurrentUser'}->Id, $CheckRight || "", $ShowAll;
 
 if ( defined $session{$cache_key} && ref $session{$cache_key} eq 'ARRAY') {
     delete $session{$cache_key};
 }
-if ( defined $session{$cache_key} &&
-     $session{$cache_key}{lastupdated} <= RT->System->QueueCacheNeedsUpdate ) {
+if ( defined $session{$cache_key} && defined $CacheNeedsUpdate &&
+     $session{$cache_key}{lastupdated} <= $CacheNeedsUpdate ) {
     delete $session{$cache_key};
 }
 
 if ( not defined $session{$cache_key} and not $Lite ) {
-    my $q = RT::Queues->new($session{'CurrentUser'});
-    $q->UnLimit;
-    
-    while (my $queue = $q->Next) {
-        if ($ShowAllQueues || $queue->CurrentUserHasRight($CheckQueueRight)) {
-            push @{$session{$cache_key}{queues}}, {
-                Id          => $queue->Id,
-                Name        => $queue->Name,
-                Description => $queue->Description,
+    my $collection = "${ObjectType}s"->new($session{'CurrentUser'});
+    $collection->UnLimit;
+
+    while (my $object = $collection->Next) {
+        if ($ShowAll
+            or not $CheckRight
+            or $session{CurrentUser}->HasRight( Object => $object, Right => $CheckRight ))
+        {
+            push @{$session{$cache_key}{objects}}, {
+                Id          => $object->Id,
+                Name        => $object->Name,
+                Description => $object->_Accessible("Description" => "read") ? $object->Description : undef,
             };
         }
     }
diff --git a/share/html/Elements/SelectQueue b/share/html/Elements/SelectQueue
index 36a095a..1ec5237 100644
--- a/share/html/Elements/SelectQueue
+++ b/share/html/Elements/SelectQueue
@@ -45,70 +45,14 @@
 %# those contributions and any derivatives thereof.
 %#
 %# END BPS TAGGED BLOCK }}}
-% if ($Lite) {
-%     my $d = RT::Queue->new($session{'CurrentUser'});
-%     $d->Load($Default);
-<input name="<%$Name%>" size="25" value="<%$d->Name%>" class="<%$Class%>" />
-% }
-% else {
-<select name="<%$Name%>" <% ($Multiple) ? qq{multiple="multiple" size="$Size"} : '' |n%> <% ($OnChange) ? 'onchange="'.$OnChange.'"' : '' |n %> class="<%$Class%>">
-%     if ($ShowNullOption) {
-  <option value=""><% $DefaultLabel %></option>
-%     }
-%     for my $queue (@{$session{$cache_key}{queues}}) {
-  <option value="<% ($NamedValues ? $queue->{Name} : $queue->{Id}) %>"\
-% if ($queue->{Id} eq ($Default||'') || $queue->{Name} eq ($Default||'')) {
- selected="selected"\
-% }
-><%$queue->{Name}%>\
-%             if ($Verbose and $queue->{Description}) {
- (<%$queue->{Description}%>)\
-%             }
-</option>
-%     }
-</select>
-% }
+<& SelectObject,
+    %ARGS,
+    ObjectType  => "Queue",
+    CheckRight  => $CheckQueueRight,
+    ShowAll     => $ShowAllQueues,
+    CacheNeedsUpdate => RT->System->QueueCacheNeedsUpdate,
+    &>
 <%args>
 $CheckQueueRight => 'CreateTicket'
-$ShowNullOption => 1
 $ShowAllQueues => 1
-$Name => undef
-$Verbose => undef
-$NamedValues => 0
-$DefaultLabel => "-"
-$Default => 0
-$Lite => 0
-$OnChange => undef
-$Multiple => 0
-$Size => 6
-$Class => 'select-queue'
 </%args>
-<%init>
-my $cache_key = "SelectQueue---"
-                . $session{'CurrentUser'}->Id
-                . "---$CheckQueueRight---$ShowAllQueues";
-
-if ( defined $session{$cache_key} && ref $session{$cache_key} eq 'ARRAY') {
-    delete $session{$cache_key};
-}
-if ( defined $session{$cache_key} &&
-     $session{$cache_key}{lastupdated} <= RT->System->QueueCacheNeedsUpdate ) {
-    delete $session{$cache_key};
-}
-
-if ( not defined $session{$cache_key} and not $Lite ) {
-    my $q = RT::Queues->new($session{'CurrentUser'});
-    $q->UnLimit;
-    
-    while (my $queue = $q->Next) {
-        if ($ShowAllQueues || $queue->CurrentUserHasRight($CheckQueueRight)) {
-            push @{$session{$cache_key}{queues}}, {
-                Id          => $queue->Id,
-                Name        => $queue->Name,
-                Description => $queue->Description,
-            };
-        }
-    }
-    $session{$cache_key}{lastupdated} = time();
-}
-</%init>

-----------------------------------------------------------------------


More information about the Rt-commit mailing list