[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