summaryrefslogtreecommitdiff
path: root/rt/lib/RT
diff options
context:
space:
mode:
authormark <mark>2011-01-31 19:56:24 +0000
committermark <mark>2011-01-31 19:56:24 +0000
commit74610e84678d7507cb3d37e56b170351d32463f4 (patch)
tree3f826169136dec1fff566d1e233b14adb2b2f6c4 /rt/lib/RT
parent34dbaa0be8c9e7976647d67d8808d9f3b07306be (diff)
rt/FREESIDE_MODIFIED
Diffstat (limited to 'rt/lib/RT')
-rw-r--r--rt/lib/RT/Queue_Local.pm72
1 files changed, 72 insertions, 0 deletions
diff --git a/rt/lib/RT/Queue_Local.pm b/rt/lib/RT/Queue_Local.pm
new file mode 100644
index 0000000..6ebe219
--- /dev/null
+++ b/rt/lib/RT/Queue_Local.pm
@@ -0,0 +1,72 @@
+package RT::Queue;
+
+use strict;
+use warnings;
+
+# Adjust various saved settings that might have the old queue name in them.
+# $changes{'AttributeName'} = sub (attribute, old queue name, new queue name)
+# where the sub changes any reference to the old name to the new name
+# returning a positive value on success,
+# or (0, error string) if it fails somehow
+# or -1 if the old name isn't found
+
+my %changes = (
+ 'SavedSearch' => sub {
+ my ($attr, $old, $new) = @_;
+ # Deal with queue names containing single quotes.
+ $old =~ s/'/\\'/g;
+ $new =~ s/'/\\'/g;
+ my $string = $attr->SubValue('Query');
+ # Deal with queue names containing regex metacharacters.
+ if ( $string =~ s/Queue\W+\K'\Q$old\E'/'$new'/ ) {
+ return $attr->SetSubValues(Query => $string);
+ }
+ -1;
+ },
+ 'Pref-QuickSearch' => sub {
+ my ($attr, $old, $new) = @_;
+ my $x = $attr->SubValue($old);
+ return -1 if !defined($x);
+ my @err = $attr->DeleteSubValue($old);
+ return @err if !$err[0];
+ return $attr->SetSubValues($new => $x);
+ },
+);
+
+sub SetName {
+ my $self = shift;
+ my $new = shift;
+
+ # We may potentially change anything at all.
+ unless ( $self->CurrentUser->HasRight(
+ Right => 'SuperUser', Object => 'RT::System' )
+ ) {
+ return ( 0, $self->loc("SuperUser access required to rename queues") );
+ }
+
+ $RT::Handle->BeginTransaction();
+ my $old = $self->Name;
+ my ($err, $msg) = $self->SUPER::SetName($new);
+ unless ($err) {
+ $RT::Handle->Rollback;
+ return (0, "Unable to rename queue to '$new': $msg");
+ }
+ foreach my $attrname (keys %changes) {
+ my $Attributes = RT::Attributes->new($self->CurrentUser);
+ $Attributes->UnLimit;
+ foreach my $attr ( $Attributes->Named($attrname) ) {
+ ($err, $msg) = &{ $changes{$attrname} }($attr, $old, $new);
+ unless ($err) {
+ $RT::Handle->Rollback;
+ return (0, "Unable to change attribute $attrname - ".
+ $attr->Description. ": $msg");
+ }
+ }
+ }
+ RT->System->QueueCacheNeedsUpdate(1);
+ $RT::Handle->Commit;
+ return 1, "Name changed from '$old' to '$new'";
+}
+
+
+1;