diff options
-rw-r--r-- | Bugzilla/User.pm | 47 | ||||
-rwxr-xr-x | editusers.cgi | 27 | ||||
-rw-r--r-- | template/en/default/admin/users/confirm-delete.html.tmpl | 11 |
3 files changed, 51 insertions, 34 deletions
diff --git a/Bugzilla/User.pm b/Bugzilla/User.pm index 87239bc6e..3e68647c6 100644 --- a/Bugzilla/User.pm +++ b/Bugzilla/User.pm @@ -530,6 +530,27 @@ sub derive_groups { $dbh->bz_unlock_tables() unless $already_locked; } +sub product_responsibilities { + my $self = shift; + + return $self->{'product_resp'} if defined $self->{'product_resp'}; + return [] unless $self->id; + + my $h = Bugzilla->dbh->selectall_arrayref( + qq{SELECT products.name AS productname, + components.name AS componentname, + initialowner, + initialqacontact + FROM products, components + WHERE products.id = components.product_id + AND ? IN (initialowner, initialqacontact) + }, + {'Slice' => {}}, $self->id); + $self->{'product_resp'} = $h; + + return $h; +} + sub can_bless { my $self = shift; @@ -1386,6 +1407,32 @@ all MySQL supported, this will go away. =end undocumented +=item C<product_responsibilities> + +Retrieve user's product responsibilities as a list of hashes. +One hash per Bugzilla component the user has a responsibility for. +These are the hash keys: + +=over + +=item productname + +Name of the product. + +=item componentname + +Name of the component. + +=item initialowner + +User ID of default assignee. + +=item initialqacontact + +User ID of default QA contact. + +=back + =item C<can_bless> When called with no arguments: diff --git a/editusers.cgi b/editusers.cgi index 371e2a612..ba5cc827e 100755 --- a/editusers.cgi +++ b/editusers.cgi @@ -404,10 +404,6 @@ if ($action eq 'search') { $vars->{'otheruser'} = $otherUser; $vars->{'editcomponents'} = UserInGroup('editcomponents'); - # If the user is default assignee or default QA contact of a component, - # then no deletion is possible. - $vars->{'product_responsibilities'} = productResponsibilities($otherUserID); - # Find other cross references. $vars->{'bugs'} = $dbh->selectrow_array( qq{SELECT COUNT(*) @@ -504,7 +500,7 @@ if ($action eq 'search') { {reason => "not_visible", action => "delete", object => "user"}); - productResponsibilities($otherUserID) + @{$otherUser->product_responsibilities()} && ThrowUserError('user_has_responsibility'); Bugzilla->logout_user_by_id($otherUserID); @@ -672,27 +668,6 @@ sub canSeeUser { return $dbh->selectrow_array($query, undef, $otherUserID); } -# Retrieve product responsibilities, usable for both display and verification. -sub productResponsibilities { - my $userid = shift; - my $h = $dbh->selectall_arrayref( - qq{SELECT products.name AS productname, - components.name AS componentname, - initialowner, - initialqacontact - FROM products, components - WHERE products.id = components.product_id - AND ? IN (initialowner, initialqacontact) - }, - {'Slice' => {}}, $userid); - - if (@$h) { - return $h; - } else { - return undef; - } -} - # Retrieve user data for the user editing form. User creation and user # editing code rely on this to call derive_groups(). sub userDataToVars { diff --git a/template/en/default/admin/users/confirm-delete.html.tmpl b/template/en/default/admin/users/confirm-delete.html.tmpl index 4e5fd9c10..205f96b15 100644 --- a/template/en/default/admin/users/confirm-delete.html.tmpl +++ b/template/en/default/admin/users/confirm-delete.html.tmpl @@ -21,11 +21,6 @@ # editusers: is viewing user member of editusers? # editcomponents: is viewing user member of editcomponents? # otheruser: Bugzilla::User object of the viewed user. - # product_responsibilities: list of hashes, one entry per Bugzilla component. - # productname: Name of the product. - # componentname: Name of the component. - # initialowner: User ID of default assignee. - # initialqacontact: User ID of default QA contact. # bugs: number of bugs the viewed user has a role in # bug_activity: number of bugs the viewed user has activity # entries on @@ -85,12 +80,12 @@ [% END %] </td> </tr> - [% IF product_responsibilities.size %] + [% IF otheruser.product_responsibilities.size %] <tr> <th>Product responsibilities:</th> <td> <ul> - [% FOREACH component = product_responsibilities %] + [% FOREACH component = otheruser.product_responsibilities %] <li> [% andstring = '' %] [% FOREACH responsibility = ['initialowner', 'initialqacontact'] %] @@ -118,7 +113,7 @@ [% END %] </table> -[% IF product_responsibilities.size %] +[% IF otheruser.product_responsibilities.size %] <p> You can't delete this user at this time because [%+ otheruser.login FILTER html %] has got responsibilities for at least |