#
# COPYRIGHT:
#
-# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2018 Best Practical Solutions, LLC
# <sales@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
+=head2 HasContent
+
+Returns whether this transaction has attached mime objects.
+
+=cut
+
+sub HasContent {
+ my $self = shift;
+ my $type = $PreferredContentType || '';
+ return !!$self->ContentObj( $type ? ( Type => $type) : () );
+}
+
+
+
=head2 Content PARAMHASH
If this transaction has attached mime objects, returns the body of the first
textual part (as defined in RT::I18N::IsTextualContentType). Otherwise,
-returns undef.
+returns the message "This transaction appears to have no content".
Takes a paramhash. If the $args{'Quote'} parameter is set, wraps this message
at $args{'Wrap'}. $args{'Wrap'} defaults to $RT::MessageBoxWidth - 2 or 70.
);
my $content;
- if ( my $content_obj =
- $self->ContentObj( $args{Type} ? ( Type => $args{Type} ) : () ) )
+ if ( my $content_obj =
+ $self->ContentObj( $args{Type} ? ( Type => $args{Type}) : () ) )
{
$content = $content_obj->Content ||'';
},
Enabled => sub {
my $self = shift;
- return ( "[_1] enabled", $self->FriendlyObjectType ); #loc()
+ return ( "[_1] enabled", $self->Field ? $self->loc($self->Field) : $self->FriendlyObjectType ); #loc()
},
Disabled => sub {
my $self = shift;
- return ( "[_1] disabled", $self->FriendlyObjectType ); #loc()
+ return ( "[_1] disabled", $self->Field ? $self->loc($self->Field) : $self->FriendlyObjectType ); #loc()
},
Status => sub {
my $self = shift;
my $q2 = RT::Queue->new( $self->CurrentUser );
$q2->Load( $self->NewValue );
return ("[_1] changed from [_2] to [_3]",
- $self->loc($self->Field) , $q1->Name , $q2->Name); #loc()
+ $self->loc($self->Field), $q1->Name // '#'.$q1->id, $q2->Name // '#'.$q2->id); #loc()
}
# Write the date/time change at local time:
- elsif ($self->Field =~ /Due|Starts|Started|Told|WillResolve/) {
+ elsif ($self->Field =~ /^(?:Due|Starts|Started|Told|WillResolve)$/) {
my $t1 = RT::Date->new($self->CurrentUser);
$t1->Set(Format => 'ISO', Value => $self->NewValue);
my $t2 = RT::Date->new($self->CurrentUser);
my $self = shift;
my $ticket = RT::Ticket->new($self->CurrentUser);
$ticket->Load($self->NewValue);
- my $subject = [
- \'<a href="', RT->Config->Get('WebPath'),
- "/Ticket/Reminders.html?id=", $self->ObjectId,
- "#reminder-", $ticket->id, \'">', $ticket->Subject, \'</a>'
- ];
- return ("Reminder '[_1]' added", $subject); #loc()
+ if ( $ticket->CurrentUserHasRight('ShowTicket') ) {
+ my $subject = [
+ \'<a href="', RT->Config->Get('WebPath'),
+ "/Ticket/Reminders.html?id=", $self->ObjectId,
+ "#reminder-", $ticket->id, \'">', $ticket->Subject, \'</a>'
+ ];
+ return ("Reminder '[_1]' added", $subject); #loc()
+ } else {
+ return ("Reminder added"); #loc()
+ }
},
OpenReminder => sub {
my $self = shift;
my $ticket = RT::Ticket->new($self->CurrentUser);
$ticket->Load($self->NewValue);
- my $subject = [
- \'<a href="', RT->Config->Get('WebPath'),
- "/Ticket/Reminders.html?id=", $self->ObjectId,
- "#reminder-", $ticket->id, \'">', $ticket->Subject, \'</a>'
- ];
- return ("Reminder '[_1]' reopened", $subject); #loc()
+ if ( $ticket->CurrentUserHasRight('ShowTicket') ) {
+ my $subject = [
+ \'<a href="', RT->Config->Get('WebPath'),
+ "/Ticket/Reminders.html?id=", $self->ObjectId,
+ "#reminder-", $ticket->id, \'">', $ticket->Subject, \'</a>'
+ ];
+ return ("Reminder '[_1]' reopened", $subject); #loc()
+ } else {
+ return ("Reminder reopened"); #loc()
+ }
},
ResolveReminder => sub {
my $self = shift;
my $ticket = RT::Ticket->new($self->CurrentUser);
$ticket->Load($self->NewValue);
- my $subject = [
- \'<a href="', RT->Config->Get('WebPath'),
- "/Ticket/Reminders.html?id=", $self->ObjectId,
- "#reminder-", $ticket->id, \'">', $ticket->Subject, \'</a>'
- ];
- return ("Reminder '[_1]' completed", $subject); #loc()
- }
+ if ( $ticket->CurrentUserHasRight('ShowTicket') ) {
+ my $subject = [
+ \'<a href="', RT->Config->Get('WebPath'),
+ "/Ticket/Reminders.html?id=", $self->ObjectId,
+ "#reminder-", $ticket->id, \'">', $ticket->Subject, \'</a>'
+ ];
+ return ("Reminder '[_1]' completed", $subject); #loc()
+ } else {
+ return ("Reminder completed"); #loc()
+ }
+ },
+ AddMember => sub {
+ my $self = shift;
+ my $principal = RT::Principal->new($self->CurrentUser);
+ $principal->Load($self->Field);
+
+ if ($principal->IsUser) {
+ return ("Added user '[_1]'", $principal->Object->Name); #loc()
+ }
+ else {
+ return ("Added group '[_1]'", $principal->Object->Name); #loc()
+ }
+ },
+ DeleteMember => sub {
+ my $self = shift;
+ my $principal = RT::Principal->new($self->CurrentUser);
+ $principal->Load($self->Field);
+
+ if ($principal->IsUser) {
+ return ("Removed user '[_1]'", $principal->Object->Name); #loc()
+ }
+ else {
+ return ("Removed group '[_1]'", $principal->Object->Name); #loc()
+ }
+ },
+ AddMembership => sub {
+ my $self = shift;
+ my $principal = RT::Principal->new($self->CurrentUser);
+ $principal->Load($self->Field);
+ return ("Added to group '[_1]'", $principal->Object->Name); #loc()
+ },
+ DeleteMembership => sub {
+ my $self = shift;
+ my $principal = RT::Principal->new($self->CurrentUser);
+ $principal->Load($self->Field);
+ return ("Removed from group '[_1]'", $principal->Object->Name); #loc()
+ },
);
my $cf = RT::CustomField->new( RT->SystemUser );
$cf->Load( $store{Field} );
$store{Field} = \($cf->UID);
+
+ $store{OldReference} = \($self->OldReferenceObject->UID) if $self->OldReference;
+ $store{NewReference} = \($self->NewReferenceObject->UID) if $self->NewReference;
} elsif ($type =~ /^(Take|Untake|Force|Steal|Give)$/) {
for my $field (qw/OldValue NewValue/) {
my $user = RT::User->new( RT->SystemUser );
if ($store{OldValue}) {
my $base = RT::URI->new( $self->CurrentUser );
$base->FromURI( $store{OldValue} );
- $store{OldValue} = \($base->Object->UID) if $base->Resolver and $base->Object;
+ if ($base->Resolver && (my $object = $base->Object)) {
+ if ($args{serializer}->Observe(object => $object)) {
+ $store{OldValue} = \($object->UID);
+ }
+ elsif ($args{serializer}{HyperlinkUnmigrated}) {
+ $store{OldValue} = $base->AsHREF;
+ }
+ else {
+ $store{OldValue} = "(not migrated)";
+ }
+ }
}
} elsif ($type eq "AddLink") {
if ($store{NewValue}) {
my $base = RT::URI->new( $self->CurrentUser );
$base->FromURI( $store{NewValue} );
- $store{NewValue} = \($base->Object->UID) if $base->Resolver and $base->Object;
+ if ($base->Resolver && (my $object = $base->Object)) {
+ if ($args{serializer}->Observe(object => $object)) {
+ $store{NewValue} = \($object->UID);
+ }
+ elsif ($args{serializer}{HyperlinkUnmigrated}) {
+ $store{NewValue} = $base->AsHREF;
+ }
+ else {
+ $store{NewValue} = "(not migrated)";
+ }
+ }
}
} elsif ($type eq "Set" and $store{Field} eq "Queue") {
for my $field (qw/OldValue NewValue/) {
my $queue = RT::Queue->new( RT->SystemUser );
$queue->Load( $store{$field} );
- $store{$field} = \($queue->UID);
+ if ($args{serializer}->Observe(object => $queue)) {
+ $store{$field} = \($queue->UID);
+ }
+ else {
+ $store{$field} = "$RT::Organization: " . $queue->Name . " (not migrated)";
+
+ }
}
} elsif ($type =~ /^(Add|Open|Resolve)Reminder$/) {
my $ticket = RT::Ticket->new( RT->SystemUser );