Skip to content

Commit

Permalink
Add 4.4.2 upgrade step for fixing Ticket.Owner != Owner GroupMembers
Browse files Browse the repository at this point in the history
This upgrade step mirrors the implementation in rt-validator introduced
and described in the previous commit.

Though the bug nominally affected only MySQL, there's little reason to
limit the fixup to just MySQL.
  • Loading branch information
sartak committed Jan 25, 2017
1 parent 58bacce commit 20d8daf
Showing 1 changed file with 42 additions and 0 deletions.
42 changes: 42 additions & 0 deletions etc/upgrade/4.4.2/content
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
use strict;
use warnings;

our @Initial = (
# fix up inconsistent denormalized owner vs owner-role group members (#32381)
sub {
my $sth = RT->DatabaseHandle->dbh->prepare(q[
SELECT Tickets.Id, Tickets.Owner, GroupMembers.MemberId
FROM Groups
JOIN GroupMembers ON Groups.Id = GroupMembers.GroupId
JOIN Tickets ON Tickets.Id = Groups.Instance
WHERE Groups.Name = 'Owner'
AND Groups.Domain = 'RT::Ticket-Role'
AND Tickets.Owner != GroupMembers.MemberId;
]);

$sth->execute;

while ( my ($ticket_id, $owner_id, $rolemember_id) = $sth->fetchrow_array ) {
RT->Logger->warning("The owner of ticket #$ticket_id is inconsistent. The denormalized owner is user #$owner_id, but there exists a normalized owner role group member, user #$rolemember_id. Going to update normalized owner role group members to user #$owner_id.");

my $ticket = RT::Ticket->new(RT->SystemUser);
$ticket->Load($ticket_id);
my $group = $ticket->RoleGroup('Owner');

# remove all current members
my $members = $group->MembersObj;
while (my $member = $members->Next) {
$member->Delete;
}

# add correct member
$group->_AddMember(
PrincipalId => $owner_id,
InsideTransaction => 0,
RecordTransaction => 0,
Object => $ticket,
);
}
},
);

0 comments on commit 20d8daf

Please sign in to comment.