-# BEGIN LICENSE BLOCK
+# {{{ BEGIN BPS TAGGED BLOCK
#
-# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2004 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
#
-# (Except where explictly superceded by other copyright notices)
+# (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
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
-# Unless otherwise specified, all modifications, corrections or
-# extensions to this work which alter its source code become the
-# property of Best Practical Solutions, LLC when submitted for
-# inclusion in the work.
+# 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+#
+# 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.)
#
-# END LICENSE BLOCK
+# 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
=head1 NAME
RT::Queue - an RT Queue object
use vars qw(@STATUS @ACTIVE_STATUS @INACTIVE_STATUS $RIGHTS);
use RT::Groups;
use RT::ACL;
+use RT::EmailParser;
@ACTIVE_STATUS = qw(new open stalled);
ModifyScrips => 'Modify Scrips for this queue', # loc_pair
ShowScrips => 'Display Scrips for this queue', # loc_pair
- ShowTicket => 'Show ticket summaries', # loc_pair
- ShowTicketComments => 'Show ticket private commentary', # loc_pair
+ ShowTicket => 'See ticket summaries', # loc_pair
+ ShowTicketComments => 'See ticket private commentary', # loc_pair
+ ShowOutgoingEmail => 'See exact outgoing email messages and their recipeients', # loc_pair
Watch => 'Sign up as a ticket Requestor or ticket or queue Cc', # loc_pair
WatchAsAdminCc => 'Sign up as a ticket or queue AdminCc', # loc_pair
}
+sub AddLink {
+ my $self = shift;
+ my %args = ( Target => '',
+ Base => '',
+ Type => '',
+ Silent => undef,
+ @_ );
+
+ unless ( $self->CurrentUserHasRight('ModifyQueue') ) {
+ return ( 0, $self->loc("Permission Denied") );
+ }
+
+ return $self->SUPER::_AddLink(%args);
+}
+
+sub DeleteLink {
+ my $self = shift;
+ my %args = (
+ Base => undef,
+ Target => undef,
+ Type => undef,
+ @_
+ );
+
+ #check acls
+ unless ( $self->CurrentUserHasRight('ModifyQueue') ) {
+ $RT::Logger->debug("No permission to delete links\n");
+ return ( 0, $self->loc('Permission Denied'))
+ }
+
+ return $self->SUPER::_DeleteLink(%args);
+}
+
=head2 AvailableRights
Returns a hash of available rights for this object. The keys are the right names and the values are a description of what the rights do
$self->SUPER::LoadById($identifier);
}
else {
- $self->LoadByCol( "Name", $identifier );
+ $self->LoadByCols( Name => $identifier );
}
return ( $self->Id );
=head2 _CreateQueueGroups
-Create the ticket groups and relationships for this ticket.
+Create the ticket groups and links for this ticket.
This routine expects to be called from Ticket->Create _inside of a transaction_
It will create four groups for this ticket: Requestor, Cc, AdminCc and Owner.
If the watcher you\'re trying to set has an RT account, set the Owner paremeter to their User Id. Otherwise, set the Email parameter to their Email address.
+Returns a tuple of (status/id, message).
+
=cut
sub AddWatcher {
# if the user doesn't exist, we need to create a new user
my $new_user = RT::User->new($RT::SystemUser);
+ my ( $Address, $Name ) =
+ RT::EmailParser::ParseAddressFromHeader('', $args{'Email'});
+
my ( $Val, $Message ) = $new_user->Create(
- Name => $args{'Email'},
- EmailAddress => $args{'Email'},
- RealName => $args{'Email'},
+ Name => $Address,
+ EmailAddress => $Address,
+ RealName => $Name,
Privileged => 0,
Comments => 'Autocreated when added as a watcher');
unless ($Val) {
}
}
else {
- $RT::Logger->warn( "$self -> DelWatcher got passed a bogus type");
- return ( 0, $self->loc('Error in parameters to Queue->DelWatcher') );
+ $RT::Logger->warn( "$self -> DeleteWatcher got passed a bogus type");
+ return ( 0, $self->loc('Error in parameters to Queue->DeleteWatcher') );
}
}
my $principal = RT::Principal->new($self->CurrentUser);
$principal->Load($args{'PrincipalId'});
+ unless ($principal->Id) {
+ return (undef);
+ }
- return ($group->HasMember($principal));
+ return ($group->HasMemberRecursively($principal));
}
# }}}