X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Flib%2FRT%2FTransaction.pm;h=64c27c0e7c6ed7c337bb4fbee854592b8045c078;hb=de9d037528895f7151a9aead6724ce2df95f9586;hp=781c9e422487da22f223124257dc097a013a7476;hpb=0ed195595b5c7ea404c8848d9d1881ada4214489;p=freeside.git diff --git a/rt/lib/RT/Transaction.pm b/rt/lib/RT/Transaction.pm index 781c9e422..64c27c0e7 100755 --- a/rt/lib/RT/Transaction.pm +++ b/rt/lib/RT/Transaction.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -314,11 +314,25 @@ sub Message { +=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. @@ -342,8 +356,8 @@ sub Content { ); 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 ||''; @@ -863,11 +877,11 @@ sub _FormatUser { }, 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; @@ -1188,11 +1202,11 @@ sub _FormatUser { 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); @@ -1262,35 +1276,83 @@ sub _FormatUser { my $self = shift; my $ticket = RT::Ticket->new($self->CurrentUser); $ticket->Load($self->NewValue); - my $subject = [ - \'id, \'">', $ticket->Subject, \'' - ]; - return ("Reminder '[_1]' added", $subject); #loc() + if ( $ticket->CurrentUserHasRight('ShowTicket') ) { + my $subject = [ + \'id, \'">', $ticket->Subject, \'' + ]; + 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 = [ - \'id, \'">', $ticket->Subject, \'' - ]; - return ("Reminder '[_1]' reopened", $subject); #loc() + if ( $ticket->CurrentUserHasRight('ShowTicket') ) { + my $subject = [ + \'id, \'">', $ticket->Subject, \'' + ]; + 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 = [ - \'id, \'">', $ticket->Subject, \'' - ]; - return ("Reminder '[_1]' completed", $subject); #loc() - } + if ( $ticket->CurrentUserHasRight('ShowTicket') ) { + my $subject = [ + \'id, \'">', $ticket->Subject, \'' + ]; + 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() + }, ); @@ -2021,6 +2083,9 @@ sub Serialize { 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 ); @@ -2039,19 +2104,45 @@ sub Serialize { 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 );