From ac8796ba2733be5e0e618148ee12488cc567d34e Mon Sep 17 00:00:00 2001 From: "jocuri%softhome.net" <> Date: Tue, 13 Jul 2004 12:12:29 +0000 Subject: Patch for bug 190222: templatize editgroups.cgi; r=joel, a=justdave. --- editgroups.cgi | 655 +++++++++++++++++---------------------------------------- 1 file changed, 196 insertions(+), 459 deletions(-) (limited to 'editgroups.cgi') diff --git a/editgroups.cgi b/editgroups.cgi index 1b2f0d3df..29e28dd9a 100755 --- a/editgroups.cgi +++ b/editgroups.cgi @@ -32,22 +32,17 @@ use Bugzilla; use Bugzilla::Constants; require "CGI.pl"; +my $cgi = Bugzilla->cgi; + use vars qw($template $vars); Bugzilla->login(LOGIN_REQUIRED); print Bugzilla->cgi->header(); -if (!UserInGroup("creategroups")) { - PutHeader("Not Authorized","Edit Groups","","Not Authorized for this function!"); - print "
\n"; - PutFooter(); - exit; -} +ThrowUserError("auth_cant_edit_groups") unless UserInGroup("creategroups"); -my $action = trim($::FORM{action} || ''); +my $action = trim($cgi->param('action') || ''); # RederiveRegexp: update user_group_map with regexp-based grants sub RederiveRegexp ($$) @@ -85,108 +80,40 @@ sub TestGroup ($) return FetchOneColumn(); } -sub ShowError ($) -{ - my $msgtext = shift; - print "
"; - print "$msgtext"; - print " |
"; - return 1; -} - -# -# Displays a text like "a.", "a or b.", "a, b or c.", "a, b, c or d." -# - -sub PutTrailer (@) -{ - my (@links) = ("Back to the index", @_); - - my $count = $#links; - my $num = 0; - print "
\n"; - foreach (@links) { - print $_; - if ($num == $count) { - print ".\n"; - } - elsif ($num == $count-1) { - print " or "; - } - else { - print ", "; - } - $num++; - } - PutFooter(); -} - # # action='' -> No action specified, get a list. # unless ($action) { - PutHeader("Edit Groups","Edit Groups","This lets you edit the groups available to put users in."); - - print "
Name | "; - print "Description | "; - print "User RegExp | "; - print "Use For Bugs | "; - print "Type | "; - print "Action | "; - print "
---|---|---|---|---|---|
" . html_quote($name) . " | \n"; - print "" . html_quote($desc) . " | \n"; - print "" . html_quote($regexp) . "  | \n"; - print ""; - print "X" if (($isactive != 0) && ($isbuggroup != 0)); - print "  | \n"; - print "  "; - print (($isbuggroup == 0 ) ? "system" : "user"); - print "  | \n"; - print "- Edit"; - print " | Delete" if ($isbuggroup != 0); - print " |
\n"; - print " | Add Group | \n"; - print "
"; - print "Name is what is used with the UserInGroup() function in any -customized cgi files you write that use a given group. It can also be used by -people submitting bugs by email to limit a bug to a certain set of groups.
"; - print "Description is what will be shown in the bug reports to -members of the group where they can choose whether the bug will be restricted -to others in the same group.
"; - print "User RegExp is optional, and if filled in, will automatically -grant membership to this group to anyone with an -email address that matches this perl regular expression. Do not forget the trailing \'\$\'. Example \'\@mycompany\\.com\$\'
"; - print "The Use For Bugs flag determines whether or not the group is eligible to be used for bugs. -If you remove this flag, it will no longer be possible for users to add bugs -to this group, although bugs already in the group will remain in the group. -Doing so is a much less drastic way to stop a group from growing -than deleting the group as well as a way to maintain lists of users without cluttering the lists of groups used for bug restrictions.
"; - print "The Type field identifies system groups.
";
-
- PutFooter();
+ $vars->{'groups'} = \@groups;
+
+ print Bugzilla->cgi->header();
+ $template->process("admin/groups/list.html.tmpl", $vars)
+ || ThrowTemplateError($template->error());
+
exit;
}
-#
#
# action='changeform' -> present form for altering an existing group
#
@@ -194,75 +121,21 @@ than deleting the group as well as a way to maintain lists of users without clut
#
if ($action eq 'changeform') {
- PutHeader("Change Group");
-
- my $gid = trim($::FORM{group} || '');
+ my $gid = trim($cgi->param('group') || '');
+ ThrowUserError("group_not_specified") unless ($gid);
detaint_natural($gid);
- unless ($gid) {
- ShowError("No group specified.
" .
- "Click the Back button and try again.");
- PutFooter();
- exit;
- }
SendSQL("SELECT id, name, description, userregexp, isactive, isbuggroup
- FROM groups WHERE id=$gid");
+ FROM groups WHERE id = $gid");
my ($group_id, $name, $description, $rexp, $isactive, $isbuggroup)
= FetchSQLData();
- print "
\n";
- PutTrailer("add another group",
- "back to the group list");
+
+ print Bugzilla->cgi->header();
+ $template->process("admin/groups/created.html.tmpl", $vars)
+ || ThrowTemplateError($template->error());
exit;
}
@@ -422,96 +266,58 @@ if ($action eq 'new') {
#
if ($action eq 'del') {
- PutHeader("Delete group");
- my $gid = trim($::FORM{group} || '');
+ my $gid = trim($cgi->param('group') || '');
+ ThrowUserError("group_not_specified") unless ($gid);
detaint_natural($gid);
- unless ($gid) {
- ShowError("No group specified.
" .
- "Click the Back button and try again.");
- PutFooter();
- exit;
- }
+
SendSQL("SELECT id FROM groups WHERE id=$gid");
- if (!FetchOneColumn()) {
- ShowError("That group doesn't exist.
" .
- "Click the Back button and try again.");
- PutFooter();
- exit;
- }
+ ThrowUserError("invalid_group_ID") unless FetchOneColumn();
+
SendSQL("SELECT name,description " .
"FROM groups " .
- "WHERE id=$gid");
+ "WHERE id = $gid");
my ($name, $desc) = FetchSQLData();
- print "
Id | "; - print "Name | "; - print "Description | "; - print "
---|---|---|
$gid | \n"; - print "$name | \n"; - print "$desc | \n"; - print "
\n";
- }
- confirmRemove(0,$gid);
- PutFooter();
- exit;
- } elsif ($::FORM{remove_explicit_members_regexp}) {
- PutHeader("Confirm: Remove Explicit Members in the Regular Expression?");
- my ($gid, $chgs, $rexp) = doGroupChanges();
- print "
\n";
- if ($chgs) {
- print "Group updated, please confirm removal:
\n";
- }
- confirmRemove(1, $gid, $rexp);
- PutFooter();
- exit;
+ my $action;
+
+ if ($cgi->param('remove_explicit_members')) {
+ $action = 1;
+ } elsif ($cgi->param('remove_explicit_members_regexp')) {
+ $action = 2;
+ } else {
+ $action = 3;
}
- # if we got this far, the admin doesn't want to convert, so just save their changes
-
- PutHeader("Updating group hierarchy");
my ($gid, $chgs) = doGroupChanges();
- if (!$chgs) {
- print "You didn't change anything!
\n";
- print "If you really meant it, hit the Back button and try again.
\n"; - } else { - print "Done.
\n";
+ $vars->{'action'} = $action;
+ $vars->{'changes'} = $chgs;
+ $vars->{'gid'} = $gid;
+ $vars->{'name'} = $cgi->param('name');
+ if ($action == 2) {
+ $vars->{'regexp'} = $cgi->param("rexp");
}
- PutTrailer("back to the group list");
+
+ print Bugzilla->cgi->header();
+ $template->process("admin/groups/change.html.tmpl", $vars)
+ || ThrowTemplateError($template->error());
exit;
}
if (($action eq 'remove_all_regexp') || ($action eq 'remove_all')) {
- # remove all explicit users from the group with gid $::FORM{group}
- # that match the regexp stored in the db for that group
+ # remove all explicit users from the group with gid $cgi->param('group')
+ # that match the regexp stored in the DB for that group
# or all of them period
- my $dbh = Bugzilla->dbh;
- my $gid = $::FORM{group};
+
+ my $gid = $cgi->param('group');
+ ThrowUserError("group_not_specified") unless ($gid);
detaint_natural($gid);
+
+ my $dbh = Bugzilla->dbh;
my $sth = $dbh->prepare("SELECT name, userregexp FROM groups
WHERE id = ?");
$sth->execute($gid);
my ($name, $regexp) = $sth->fetchrow_array();
- if ($action eq 'remove_all_regexp') {
- PutHeader("Removing All Explicit Group Memberships Matching "
- . "Group RegExp from \'" . html_quote($name) . "\'");
- } else {
- PutHeader("Removing All Explicit Group Memberships from \'"
- . html_quote($name) . "\'");
- }
$dbh->do("LOCK TABLES
groups WRITE,
profiles READ,
@@ -653,157 +432,115 @@ if (($action eq 'remove_all_regexp') || ($action eq 'remove_all')) {
AND grant_type = ?
AND isbless = 0");
$sth->execute($gid, GRANT_DIRECT);
+
+ my @users;
my $sth2 = $dbh->prepare("DELETE FROM user_group_map
WHERE user_id = ?
AND isbless = 0
AND group_id = ?");
- if ($action eq 'remove_all_regexp') {
- print "
Removing explicit memberships of users matching \'"
- . html_quote($regexp) . "\'...
\n";
- } else {
- print "
Removing explicit membership
\n";
- }
while ( my ($userid, $userlogin) = $sth->fetchrow_array() ) {
if ((($regexp =~ /\S/) && ($userlogin =~ m/$regexp/i))
|| ($action eq 'remove_all'))
{
$sth2->execute($userid,$gid);
- print html_quote($userlogin) . " removed
\n";
+
+ my $user = {};
+ $user->{'login'} = $userlogin;
+ push(@users, $user);
}
}
- print "
Done
";
$sth = $dbh->prepare("UPDATE groups
SET last_changed = NOW()
WHERE id = ?");
$sth->execute($gid);
$dbh->do("UNLOCK TABLES");
- PutTrailer("back to the group list");
- exit;
-}
+ $vars->{'users'} = \@users;
+ $vars->{'name'} = $name;
+ $vars->{'regexp'} = $regexp;
+ $vars->{'remove_all'} = ($action eq 'remove_all');
+ $vars->{'gid'} = $gid;
+
+ print Bugzilla->cgi->header();
+ $template->process("admin/groups/remove.html.tmpl", $vars)
+ || ThrowTemplateError($template->error());
+ exit;
+}
#
# No valid action found
#
-PutHeader("Error");
-print "I don't have a clue what you want.
\n";
+ThrowCodeError("action_unrecognized", $vars);
-PutTrailer("Try the group list");
-
-# confirm if the user wants to remove the explicit users
-sub confirmRemove {
- my ($remove_regexp_only, $group, $regexp) = @_;
-
- if (!$remove_regexp_only) {
- print "This option will remove ";
- print "all explicitly defined users ";
- } elsif ($regexp =~ /\S/) {
- print "This option will remove ";
- print "all users included in the regular expression: " .
- html_quote($regexp) . " ";
- } else {
- print "There is no regular expression defined.\n";
- print "No users will be removed
\n"; - print "return to the Edit Groups page\n"; - return; - } - print "from group $::FORM{name}.
\n"; - print "Generally, you will only need to do this when upgrading groups "; - print "created with Bugzilla versions 2.16 and prior. Use this option "; - print "with extreme care and consult the Bugzilla Guide for "; - print "further information.
\n"; - - print "
"; -} # Helper sub to handle the making of changes to a group sub doGroupChanges { - my $gid = trim($::FORM{group} || ''); + my $cgi = Bugzilla->cgi; + + my $gid = trim($cgi->param('group') || ''); + ThrowUserError("group_not_specified") unless ($gid); detaint_natural($gid); - unless ($gid) { - ShowError("No group specified.