diff options
Diffstat (limited to 'rt/share/html/Elements/SelectObject')
-rw-r--r-- | rt/share/html/Elements/SelectObject | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/rt/share/html/Elements/SelectObject b/rt/share/html/Elements/SelectObject new file mode 100644 index 000000000..5952ce26a --- /dev/null +++ b/rt/share/html/Elements/SelectObject @@ -0,0 +1,141 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC +%# <sales@bestpractical.com> +%# +%# (Except where explicitly superseded by other copyright notices) +%# +%# +%# LICENSE: +%# +%# This work is made available to you under the terms of Version 2 of +%# the GNU General Public License. A copy of that license should have +%# been provided with this software, but in any event can be snarfed +%# from www.gnu.org. +%# +%# This work is distributed in the hope that it will be useful, but +%# WITHOUT ANY WARRANTY; without even the implied warranty of +%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +%# General Public License for more details. +%# +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +%# 02110-1301 or visit their web page on the internet at +%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) +%# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +% if ($Lite) { +% my $d = $ObjectType->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 $object (@{$session{$cache_key}{objects}}) { + <option value="<% ($NamedValues ? $object->{Name} : $object->{Id}) %>"\ +% if ($object->{Id} eq ($Default||'') || $object->{Name} eq ($Default||'')) { + selected="selected"\ +% } +><%$object->{Name}%>\ +% if ($Verbose and $object->{Description}) { + (<%$object->{Description}%>)\ +% } +</option> +% } +</select> +% } +<%args> +$ObjectType +$CheckRight => undef +$ShowNullOption => 1 +$ShowAll => 1 +$Name => undef +$Verbose => undef +$NamedValues => 0 +$DefaultLabel => "-" +$Default => 0 +$Lite => 0 +$OnChange => undef +$Multiple => 0 +$Size => 6 +$Class => "" +$CacheNeedsUpdate => undef +</%args> +<%init> +$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} && defined $CacheNeedsUpdate && + $session{$cache_key}{lastupdated} <= $CacheNeedsUpdate ) { + delete $session{$cache_key}; +} + +if ( not defined $session{$cache_key} and not $Lite ) { + my $collection = "${ObjectType}s"->new($session{'CurrentUser'}); + $collection->UnLimit; + + $m->callback( CallbackName => 'ModifyCollection', ARGSRef => \%ARGS, + Collection => $collection, ObjectType => $ObjectType ); + + if ( $Default ) { + my $object = $ObjectType->new($session{'CurrentUser'}); + $object->Load( $Default ); + unless ( $ShowAll + or not $CheckRight + or $session{CurrentUser}->HasRight( Object => $object, Right => $CheckRight ) ) + { + if ( $object->id ) { + push @{$session{$cache_key}{objects}}, { + Id => $object->id, + Name => '#' . $object->id, + Description => '#' . $object->id, + }; + } + } + } + + 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, + }; + } + } + $session{$cache_key}{lastupdated} = time(); +} +</%init> |