<%INIT> my $current_tab; my ($field, @results, $User, $Users, $Groups, $watcher, $user_msg, $group_msg); # {{{ Load the queue #If we get handed two ids, mason will make them an array. bleck. # We want teh first one. Just because there's no other sensible way # to deal my $IsAdmin = $QueueObj->HasAdminCc($session{CurrentUser}->UserObj); # }}} $QueueObj->CurrentUser($RT::SystemUser); # instant priv escalation! my $MyPrincipalId = $session{CurrentUser}->UserObj->PrincipalObj->Id; if ($IsAdmin) { my ($code, $msg); # Delete deletable watchers foreach my $key (keys %ARGS) { my $id = $QueueObj->Id; if (($key =~ /^Queue-$id-DelWatcher-Type-(.*?)-Principal-(\d*)$/)) {; next if $2 == $MyPrincipalId; ($code, $msg) = $QueueObj->DeleteWatcher( Type => $1, PrincipalId => $2 ); push @results, $msg; } } # Add new watchers foreach my $key (keys %ARGS) { # They're in this order because otherwise $1 gets clobbered :/ next unless $ARGS{$key} =~ /^(AdminCc|Cc)$/ and $key =~ /^Queue-AddWatcher-Principal-(\d*)$/ and $1 != $MyPrincipalId; $RT::Logger->debug("Adding a watcher $1 to ".$ARGS{$key}."\n"); # First, clear away the other status ($code, $msg) = $QueueObj->DeleteWatcher( Type => ( ($ARGS{$key} eq 'AdminCc') ? 'Cc' : 'AdminCc' ), PrincipalId => $1 ); ($code, $msg) = $QueueObj->AddWatcher( Type => $ARGS{$key}, PrincipalId => $1 ); push @results, $msg; } } # }}} if (!length $ARGS{'UserString'}) { $user_msg = loc("No principals selected."); } else { $Users = new RT::Users($session{'CurrentUser'}); $Users->LimitToPrivileged; $Users->Limit(FIELD => $ARGS{'UserField'}, VALUE => $ARGS{'UserString'}, OPERATOR => $ARGS{'UserOp'}); } if (!length $ARGS{'GroupString'}) { $group_msg = loc("No principals selected."); } else { $Groups = new RT::Groups($session{'CurrentUser'}); $Groups->Limit(FIELD => 'Domain', OPERATOR => '=', VALUE => 'UserDefined'); $Groups->Limit(FIELD => $ARGS{'GroupField'}, VALUE => $ARGS{'GroupString'}, OPERATOR => $ARGS{'GroupOp'}); } $current_tab = 'Admin/Queues/People.html?id='.$QueueObj->id; %INIT> <%ARGS> $UserField => 'Name' $UserOp => '=' $UserString => undef $GroupField => 'Name' $GroupOp => '=' $GroupString => undef $Type => undef $QueueObj %ARGS>