diff options
author | Ivan Kohler <ivan@freeside.biz> | 2012-04-24 11:35:56 -0700 |
---|---|---|
committer | Ivan Kohler <ivan@freeside.biz> | 2012-04-24 11:35:56 -0700 |
commit | 6587f6ba7d047ddc1686c080090afe7d53365bd4 (patch) | |
tree | ec77342668e8865aca669c9b4736e84e3077b523 /rt/share/html/Admin/Elements/EditRights | |
parent | 47153aae5c2fc00316654e7277fccd45f72ff611 (diff) |
first pass RT4 merge, RT#13852
Diffstat (limited to 'rt/share/html/Admin/Elements/EditRights')
-rw-r--r-- | rt/share/html/Admin/Elements/EditRights | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/rt/share/html/Admin/Elements/EditRights b/rt/share/html/Admin/Elements/EditRights new file mode 100644 index 000000000..e5b9908b5 --- /dev/null +++ b/rt/share/html/Admin/Elements/EditRights @@ -0,0 +1,175 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2012 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 }}} +<%args> +$Context +$Principals +$AddPrincipal => undef +</%args> +<%init> +use Scalar::Util qw(blessed); + +# Let callbacks get at principals and context before we do anything with them +$m->callback( Principals => $Principals, Context => $Context ); + +# Try to detect if we want to include an add user/group box +unless ( $AddPrincipal ) { + my $last = $Principals->[-1]; + if ( $last->[0] =~ /Groups/i ) { + $AddPrincipal = 'group'; # loc + } + elsif ( $last->[0] =~ /Users/i ) { + $AddPrincipal = 'user'; # loc + } +} +</%init> +%# Principals is an array of arrays, where the inner arrays are like: +%# [ 'Category name' => $CollectionObj => 'DisplayColumn' => 1 ] +%# The last value is a boolen determining if the value of DisplayColumn +%# should be loc()-ed before display. + +<script type="text/javascript"> + jQuery(function() { + jQuery(".rights-editor").tabs({ + select: function(ev, ui) { + window.location.hash = ui.tab.hash; + } + }); + jQuery(".rights-editor .category-tabs").tabs(); + }); +</script> + +<div class="rights-editor clearfix"> + <ul> +<%perl> +for my $category (@$Principals) { + my ($name, $collection, $col, $loc) = @$category; +</%perl> +<li class="category"><% loc($name) %></li> +<%perl> + while ( my $obj = $collection->Next ) { + my $display = ref $col eq 'CODE' ? $col->($obj) : $obj->$col; + my $id = "acl-$name-" . $obj->PrincipalId; + $id =~ s/[^a-zA-Z0-9\-]/_/g; +</%perl> +<li><a href="#<% $id %>"><% $loc ? loc($display) : $display %></a></li> +<%perl> + } +} +</%perl> +% if ( $AddPrincipal ) { + <li class="category"><&|/l, loc($AddPrincipal) &>Add [_1]</&></li> + <li class="addprincipal"> + <a href="#acl-AddPrincipal"> + <input type="text" value="" + name="AddPrincipalForRights-<% lc $AddPrincipal %>" + id="AddPrincipalForRights-<% lc $AddPrincipal %>" /> + <script type="text/javascript"> + jQuery(function() { + jQuery("#AddPrincipalForRights-<% lc $AddPrincipal %>").keyup(function(){ + toggle_addprincipal_validity(this, true); + }); + +% if (lc $AddPrincipal eq 'group') { + jQuery("#AddPrincipalForRights-<% lc $AddPrincipal %>").autocomplete({ + source: "<% RT->Config->Get('WebPath')%>/Helpers/Autocomplete/Groups", + select: addprincipal_onselect, + change: addprincipal_onchange + }); +% } + }); + </script> +% my $type = lc $AddPrincipal eq 'user' ? loc('username') : loc($AddPrincipal); + <span class="warning"><&|/l, $type &>Invalid [_1]</&></span> + </a> + </li> +% } + </ul> + +<%perl> +# Now generate our rights panels for each principal +for my $category (@$Principals) { + my ($name, $collection, $col, $loc) = @$category; + while ( my $obj = $collection->Next ) { + my $display = ref $col eq 'CODE' ? $col->($obj) : $obj->$col; + my $id = "acl-$name-" . $obj->PrincipalId; + $id =~ s/[^a-zA-Z0-9\-]/_/g; +</%perl> + + <div id="<% $id %>"> + <h3> + <% $loc ? loc($display) : $display %> +<%perl> +if ($obj->isa('RT::Group') and $obj->Domain eq 'UserDefined') { + my $subgroups = $obj->GroupMembersObj( Recursively => 1 ); + $subgroups->LimitToUserDefinedGroups; + $subgroups->Limit( FIELD => 'Name', OPERATOR => '!=', VALUE => $obj->Name ); + + if ( $subgroups->Count ) { + my $inc = join ", ", map $_->Name, @{$subgroups->ItemsArrayRef}; +</%perl> + <span class="subgroups"><&|/l, $inc &>includes [_1]</&></span>\ +<%perl> + } +} +</%perl> + </h3> + <& EditRightsCategoryTabs, Context => $Context, Principal => $obj, id => $id &> + </div> +<%perl> + } +} + +if ( $AddPrincipal ) { +</%perl> + <div id="acl-AddPrincipal"> + <h3><&|/l, loc($AddPrincipal) &>Add rights for this [_1]</&></h3> + <& EditRightsCategoryTabs, Context => $Context, id => 'acl-AddPrincipal' &> + </div> +% } + +</div> |