From bf31ed90b18bc314596838dc17485325de1c4406 Mon Sep 17 00:00:00 2001 From: "jocuri%softhome.net" Date: Tue, 13 Jul 2004 05:12:33 +0000 Subject: [PATCH] Patch for bug 190222: templatize editgroups.cgi; r=joel, a=justdave. --- webtools/bugzilla/editgroups.cgi | 647 ++++++------------ .../en/default/admin/groups/change.html.tmpl | 111 +++ .../en/default/admin/groups/create.html.tmpl | 3 + .../en/default/admin/groups/created.html.tmpl | 38 + .../en/default/admin/groups/delete.html.tmpl | 100 +++ .../en/default/admin/groups/deleted.html.tmpl | 54 ++ .../en/default/admin/groups/edit.html.tmpl | 159 +++++ .../en/default/admin/groups/list.html.tmpl | 119 ++++ .../en/default/admin/groups/remove.html.tmpl | 60 ++ .../en/default/global/code-error.html.tmpl | 15 +- .../en/default/global/user-error.html.tmpl | 33 +- 11 files changed, 877 insertions(+), 462 deletions(-) create mode 100644 webtools/bugzilla/template/en/default/admin/groups/change.html.tmpl create mode 100644 webtools/bugzilla/template/en/default/admin/groups/created.html.tmpl create mode 100644 webtools/bugzilla/template/en/default/admin/groups/delete.html.tmpl create mode 100644 webtools/bugzilla/template/en/default/admin/groups/deleted.html.tmpl create mode 100644 webtools/bugzilla/template/en/default/admin/groups/edit.html.tmpl create mode 100644 webtools/bugzilla/template/en/default/admin/groups/list.html.tmpl create mode 100644 webtools/bugzilla/template/en/default/admin/groups/remove.html.tmpl diff --git a/webtools/bugzilla/editgroups.cgi b/webtools/bugzilla/editgroups.cgi index 1b2f0d3df61..29e28dd9a09 100755 --- a/webtools/bugzilla/editgroups.cgi +++ b/webtools/bugzilla/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 "

Sorry, you aren't a member of the 'creategroups' group.

\n"; - print "And so, you aren't allowed to edit the groups.\n"; - 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 "\n"; - print ""; - print ""; - print ""; - print ""; - print ""; - print ""; - print ""; - print "\n"; + my @groups; SendSQL("SELECT id,name,description,userregexp,isactive,isbuggroup " . "FROM groups " . "ORDER BY isbuggroup, name"); while (MoreSQLData()) { - my ($groupid, $name, $desc, $regexp, $isactive, $isbuggroup) = FetchSQLData(); - print "\n"; - print "\n"; - print "\n"; - print "\n"; - print "\n"; - print "\n"; - print "\n"; + my ($id, $name, $description, $regexp, $isactive, $isbuggroup) + = FetchSQLData(); + my $group = {}; + $group->{'id'} = $id; + $group->{'name'} = $name; + $group->{'description'} = $description; + $group->{'regexp'} = $regexp; + $group->{'isactive'} = $isactive; + $group->{'isbuggroup'} = $isbuggroup; + + push(@groups, $group); } - print "\n"; - print "\n"; - print "\n"; - print "\n"; - print "
NameDescriptionUser RegExpUse For BugsTypeAction
" . html_quote($name) . "" . html_quote($desc) . "" . html_quote($regexp) . " "; - print "X" if (($isactive != 0) && ($isbuggroup != 0)); - print "    "; - print (($isbuggroup == 0 ) ? "system" : "user"); - print "  - Edit"; - print " | Delete" if ($isbuggroup != 0); - 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.

"; + $vars->{'groups'} = \@groups; + + print Bugzilla->cgi->header(); + $template->process("admin/groups/list.html.tmpl", $vars) + || ThrowTemplateError($template->error()); - PutFooter(); 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"; - print ""; - print " - "; - if ($isbuggroup == 1) { - print " - "; - } - print "
Group:"; - if ($isbuggroup == 0) { - print html_quote($name); - } else { - print " - "; - } - print "
Description:"; - if ($isbuggroup == 0) { - print html_quote($description); - } else { - print " - "; - } - print "
User Regexp:"; - print " -
Use For Bugs: - - -
-
- Users become members of this group in one of three ways: -
- - by being explicity included when the user is edited -
- - by matching the user regexp above -
- - by being a member of one of the groups included in this group - by checking the boxes - below.

\n"; - - print ""; - print ""; - print ""; - print ""; - # For each group, we use left joins to establish the existence of # a record making that group a member of this group # and the existence of a record permitting that group to bless # this one + + my @groups; SendSQL("SELECT groups.id, groups.name, groups.description," . " group_group_map.member_id IS NOT NULL," . " B.member_id IS NOT NULL" . @@ -279,47 +152,28 @@ if ($action eq 'changeform') { while (MoreSQLData()) { my ($grpid, $grpnam, $grpdesc, $grpmember, $blessmember) = FetchSQLData(); - my $grpchecked = $grpmember ? "CHECKED" : ""; - my $blesschecked = $blessmember ? "CHECKED" : ""; - print ""; - print ""; - print ""; - print ""; - print ""; - print "\n"; + + my $group = {}; + $group->{'grpid'} = $grpid; + $group->{'grpnam'} = $grpnam; + $group->{'grpdesc'} = $grpdesc; + $group->{'grpmember'} = $grpmember; + $group->{'blessmember'} = $blessmember; + push(@groups, $group); } - print "
Members of these groups can grant membership to this group
|Members of these groups are included in this group
||
"; - print ""; - print "" . html_quote($grpnam) . "" . html_quote($grpdesc) . "

"; - print "\n"; - print < - -

Conversion of groups created with Bugzilla versions 2.16 and - prior:

-


-

-

- - -
-EOF - print "\n"; - print "\n"; - print "
"; + $vars->{'group_id'} = $group_id; + $vars->{'name'} = $name; + $vars->{'description'} = $description; + $vars->{'rexp'} = $rexp; + $vars->{'isactive'} = $isactive; + $vars->{'isbuggroup'} = $isbuggroup; + $vars->{'groups'} = \@groups; + print Bugzilla->cgi->header(); + $template->process("admin/groups/edit.html.tmpl", $vars) + || ThrowTemplateError($template->error()); - - PutTrailer("back to the group list"); exit; } @@ -331,7 +185,6 @@ EOF if ($action eq 'add') { print Bugzilla->cgi->header(); - $template->process("admin/groups/create.html.tmpl", $vars) || ThrowTemplateError($template->error()); @@ -345,42 +198,32 @@ if ($action eq 'add') { # if ($action eq 'new') { - PutHeader("Adding new group"); - # Cleanups and valididy checks - my $name = trim($::FORM{name} || ''); - my $desc = trim($::FORM{desc} || ''); - my $regexp = trim($::FORM{regexp} || ''); + my $name = trim($cgi->param('name') || ''); + my $desc = trim($cgi->param('desc') || ''); + my $regexp = trim($cgi->param('regexp') || ''); # convert an undefined value in the inactive field to zero # (this occurs when the inactive checkbox is not checked # and the browser does not send the field to the server) - my $isactive = $::FORM{isactive} ? 1 : 0; + my $isactive = $cgi->param('isactive') ? 1 : 0; + + # At this point $isactive is either 0 or 1 so we can mark it safe + trick_taint($isactive); + + ThrowUserError("empty_group_name") unless $name; + ThrowUserError("empty_group_description") unless $desc; - unless ($name) { - ShowError("You must enter a name for the new group.
" . - "Please click the Back button and try again."); - PutFooter(); - exit; - } - unless ($desc) { - ShowError("You must enter a description for the new group.
" . - "Please click the Back button and try again."); - PutFooter(); - exit; - } if (TestGroup($name)) { - ShowError("The group '" . $name . "' already exists.
" . - "Please click the Back button and try again."); - PutFooter(); - exit; + ThrowUserError("group_exists", { name => $name }); } - if (!eval {qr/$regexp/}) { - ShowError("The regular expression you entered is invalid. " . - "Please click the Back button and try again."); - PutFooter(); - exit; - } + ThrowUserError("invalid_regexp") unless (eval {qr/$regexp/}); + + # We use SqlQuote and FILTER html on name, description and regexp. + # So they are safe to be detaint + trick_taint($name); + trick_taint($desc); + trick_taint($regexp); # Add the new group SendSQL("INSERT INTO groups ( " . @@ -399,7 +242,7 @@ if ($action eq 'new') { SendSQL("INSERT INTO group_group_map (member_id, grantor_id, isbless) VALUES ($admin, $gid, 1)"); # Permit all existing products to use the new group if makeproductgroups. - if ($::FORM{insertnew}) { + if ($cgi->param('insertnew')) { SendSQL("INSERT INTO group_control_map " . "(group_id, product_id, entry, membercontrol, " . "othercontrol, canedit) " . @@ -409,9 +252,10 @@ if ($action eq 'new') { "FROM products"); } RederiveRegexp($regexp, $gid); - print "OK, done.

\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 "\n"; - print ""; - print ""; - print ""; - print ""; - print "\n"; - print "\n"; - print "\n"; - print "\n"; - print "\n"; - print "\n"; - print "
IdNameDescription
$gid$name$desc
\n"; - print "

\n"; - my $cantdelete = 0; + my $hasusers = 0; SendSQL("SELECT user_id FROM user_group_map WHERE group_id = $gid AND isbless = 0"); - if (!FetchOneColumn()) {} else { - $cantdelete = 1; - print " -One or more users belong to this group. You cannot delete this group while -there are users in it.
-Show me which users. - Remove all users from -this group for me

-"; + if (FetchOneColumn()) { + $hasusers = 1; } + + my $hasbugs = 0; + my $buglist = ""; SendSQL("SELECT bug_id FROM bug_group_map WHERE group_id = $gid"); - my $buglist=""; + if (MoreSQLData()) { - $cantdelete = 1; + $hasbugs = 1; my $buglist = "0"; + while (MoreSQLData()) { my ($bug) = FetchSQLData(); $buglist .= "," . $bug; } - print " -One or more bug reports are visible only to this group. -You cannot delete this group while any bugs are using it.
-Show me which bugs. - -Remove all bugs from this group -restriction for me
-NOTE: It's quite possible to make confidential bugs public by checking -this box. It is strongly suggested that you review the bugs in this -group before checking the box.

-"; } + + my $hasproduct = 0; SendSQL("SELECT name FROM products WHERE name=" . SqlQuote($name)); if (MoreSQLData()) { - $cantdelete = 1; - print " -This group is tied to the $name product. -You cannot delete this group while it is tied to a product.
-Delete this group anyway, and make the -$name product publicly visible.
-"; + $hasproduct = 1; } - print "

Confirmation

\n"; - print "

Do you really want to delete this group?\n"; - if ($cantdelete) { - print "
You must check all of the above boxes or correct the " . - "indicated problems first before you can proceed."; - } - print "

\n"; - print "\n"; - print "\n"; - print "

"; + $vars->{'gid'} = $gid; + $vars->{'name'} = $name; + $vars->{'description'} = $desc; + $vars->{'hasusers'} = $hasusers; + $vars->{'hasbugs'} = $hasbugs; + $vars->{'hasproduct'} = $hasproduct; + $vars->{'buglist'} = $buglist; - PutTrailer("No, go back to the group list"); + print Bugzilla->cgi->header(); + $template->process("admin/groups/delete.html.tmpl", $vars) + || ThrowTemplateError($template->error()); + exit; } @@ -520,18 +326,11 @@ You cannot delete this group while it is tied to a product.
# if ($action eq 'delete') { - PutHeader("Deleting 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 name " . - "FROM groups " . - "WHERE id = $gid"); + + SendSQL("SELECT name FROM groups WHERE id = $gid"); my ($name) = FetchSQLData(); my $cantdelete = 0; @@ -539,43 +338,39 @@ if ($action eq 'delete') { SendSQL("SELECT user_id FROM user_group_map WHERE group_id = $gid AND isbless = 0"); if (FetchOneColumn()) { - if (!defined $::FORM{'removeusers'}) { - $cantdelete = 1; - } + if (!defined $cgi->param('removeusers')) { + $cantdelete = 1; + } } SendSQL("SELECT bug_id FROM bug_group_map WHERE group_id = $gid"); if (FetchOneColumn()) { - if (!defined $::FORM{'removebugs'}) { - $cantdelete = 1; - } + if (!defined $cgi->param('removebugs')) { + $cantdelete = 1; + } } SendSQL("SELECT name FROM products WHERE name=" . SqlQuote($name)); if (FetchOneColumn()) { - if (!defined $::FORM{'unbind'}) { - $cantdelete = 1; - } + if (!defined $cgi->param('unbind')) { + $cantdelete = 1; + } } - if ($cantdelete == 1) { - ShowError("This group cannot be deleted because there are " . - "records in the database which refer to it. All such records " . - "must be removed or altered to remove the reference to this " . - "group before the group can be deleted."); - print "" . - "View the list of which records are affected.
"; - PutTrailer("back to the group list"); - exit; + if (!$cantdelete) { + SendSQL("DELETE FROM user_group_map WHERE group_id = $gid"); + SendSQL("DELETE FROM group_group_map WHERE grantor_id = $gid"); + SendSQL("DELETE FROM bug_group_map WHERE group_id = $gid"); + SendSQL("DELETE FROM group_control_map WHERE group_id = $gid"); + SendSQL("DELETE FROM groups WHERE id = $gid"); } - SendSQL("DELETE FROM user_group_map WHERE group_id = $gid"); - SendSQL("DELETE FROM group_group_map WHERE grantor_id = $gid"); - SendSQL("DELETE FROM bug_group_map WHERE group_id = $gid"); - SendSQL("DELETE FROM group_control_map WHERE group_id = $gid"); - SendSQL("DELETE FROM groups WHERE id = $gid"); - print "Group $gid has been deleted.
"; + $vars->{'gid'} = $gid; + $vars->{'name'} = $name; + $vars->{'cantdelete'} = $cantdelete; + print Bugzilla->cgi->header(); + $template->process("admin/groups/deleted.html.tmpl", $vars) + || ThrowTemplateError($template->error()); - PutTrailer("back to the group list"); exit; } @@ -584,64 +379,48 @@ if ($action eq 'delete') { # if ($action eq 'postchanges') { - # ZLL: Bug 181589: we need to have something to remove explictly listed users from # groups in order for the conversion to 2.18 groups to work - if ($::FORM{remove_explicit_members}) { - PutHeader("Confirm: Remove All Explicit Members?"); - my ($gid, $chgs) = doGroupChanges(); - print "

\n"; - if ($chgs) { - print "Group updated, please confirm removal:

\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"); + + $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 "

\n"; - print "\n"; - - if ($remove_regexp_only) { - print "\n"; - } else { - print "\n"; - } - - print "\n"; - print "

Or return to the Edit Groups page\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.
" . - "Click the Back button and try again."); - PutFooter(); - exit; - } + SendSQL("SELECT isbuggroup FROM groups WHERE id = $gid"); my ($isbuggroup) = FetchSQLData(); my $chgs = 0; - if (($isbuggroup == 1) && ($::FORM{"oldname"} ne $::FORM{"name"})) { + + if (($isbuggroup == 1) && ($cgi->param('oldname') ne $cgi->param("name"))) { $chgs = 1; SendSQL("UPDATE groups SET name = " . - SqlQuote($::FORM{"name"}) . " WHERE id = $gid"); + SqlQuote($cgi->param("name")) . " WHERE id = $gid"); } - if (($isbuggroup == 1) && ($::FORM{"olddesc"} ne $::FORM{"desc"})) { + if (($isbuggroup == 1) && ($cgi->param('olddesc') ne $cgi->param("desc"))) { $chgs = 1; SendSQL("UPDATE groups SET description = " . - SqlQuote($::FORM{"desc"}) . " WHERE id = $gid"); + SqlQuote($cgi->param("desc")) . " WHERE id = $gid"); } - if ($::FORM{"oldrexp"} ne $::FORM{"rexp"}) { + if ($cgi->param("oldrexp") ne $cgi->param("rexp")) { $chgs = 1; - if (!eval {qr/$::FORM{"rexp"}/}) { - ShowError("The regular expression you entered is invalid. " . - "Please click the Back button and try again."); - PutFooter(); - exit; - } + + my $rexp = $cgi->param('rexp'); + ThrowUserError("invalid_regexp") unless (eval {qr/$rexp/}); + SendSQL("UPDATE groups SET userregexp = " . - SqlQuote($::FORM{"rexp"}) . " WHERE id = $gid"); + SqlQuote($rexp) . " WHERE id = $gid"); RederiveRegexp($::FORM{"rexp"}, $gid); } - if (($isbuggroup == 1) && ($::FORM{"oldisactive"} ne $::FORM{"isactive"})) { + if (($isbuggroup == 1) && ($cgi->param("oldisactive") ne $cgi->param("isactive"))) { $chgs = 1; SendSQL("UPDATE groups SET isactive = " . - SqlQuote($::FORM{"isactive"}) . " WHERE id = $gid"); + SqlQuote($cgi->param("isactive")) . " WHERE id = $gid"); } - - print "Checking...."; - foreach my $b (grep(/^oldgrp-\d*$/, keys %::FORM)) { - if (defined($::FORM{$b})) { - my $v = substr($b, 7); - my $grp = $::FORM{"grp-$v"} || 0; - if ($::FORM{"oldgrp-$v"} != $grp) { + + foreach my $b (grep {/^oldgrp-\d*$/} $cgi->param()) { + if (defined($cgi->param($b))) { + $b =~ /^oldgrp-(\d+)$/; + my $v = $1; + my $grp = $cgi->param("grp-$v") || 0; + if ($cgi->param("oldgrp-$v") != $grp) { $chgs = 1; - print "changed"; if ($grp != 0) { - print " set "; SendSQL("INSERT INTO group_group_map (member_id, grantor_id, isbless) VALUES ($v, $gid, 0)"); } else { - print " cleared "; SendSQL("DELETE FROM group_group_map WHERE member_id = $v AND grantor_id = $gid AND isbless = 0"); } } - my $bless = $::FORM{"bless-$v"} || 0; - if ($::FORM{"oldbless-$v"} != $bless) { + my $bless = $cgi->param("bless-$v") || 0; + if ($cgi->param("oldbless-$v") != $bless) { $chgs = 1; - print "changed"; if ($bless != 0) { - print " set "; SendSQL("INSERT INTO group_group_map (member_id, grantor_id, isbless) VALUES ($v, $gid, 1)"); } else { - print " cleared "; SendSQL("DELETE FROM group_group_map WHERE member_id = $v AND grantor_id = $gid AND isbless = 1"); @@ -817,5 +554,5 @@ sub doGroupChanges { # mark the changes SendSQL("UPDATE groups SET last_changed = NOW() WHERE id = $gid"); } - return $gid, $chgs, $::FORM{"rexp"}; + return $gid, $chgs; } diff --git a/webtools/bugzilla/template/en/default/admin/groups/change.html.tmpl b/webtools/bugzilla/template/en/default/admin/groups/change.html.tmpl new file mode 100644 index 00000000000..c2f2c8f9f67 --- /dev/null +++ b/webtools/bugzilla/template/en/default/admin/groups/change.html.tmpl @@ -0,0 +1,111 @@ +[%# 1.0@bugzilla.org %] +[%# The contents of this file are subject to the Mozilla Public + # License Version 1.1 (the "License"); you may not use this file + # except in compliance with the License. You may obtain a copy of + # the License at http://www.mozilla.org/MPL/ + # + # Software distributed under the License is distributed on an "AS + # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + # implied. See the License for the specific language governing + # rights and limitations under the License. + # + # The Original Code is the Bugzilla Bug Tracking System. + # + # The Initial Developer of the Original Code is Netscape Communications + # Corporation. Portions created by Netscape are + # Copyright (C) 1998 Netscape Communications Corporation. All + # Rights Reserved. + # + # Contributor(s): Dave Miller + # Joel Peshkin + # Jacob Steenhagen + # Vlad Dascalu + #%] + +[%# INTERFACE: + # action: integer. Can be 1, 2 or 3, depending on the action + # performed: + # 1 - remove_explicit_members + # 2 - remove_explicit_members_regexp + # 3 - no conversion, just save the changes + # changes: boolean int. Is 1 if changes occured. + # gid: integer. The ID of the group. + # name: the name of the product where removal is performed. + # regexp: the regexp according to which the update is performed. + #%] + +[% IF (action == 1) %] + [% title = "Confirm: Remove All Explicit Members?" %] +[% ELSIF (action == 2) %] + [% title = "Confirm: Remove Explicit Members in the Regular Expression?" %] +[% ELSE %] + [% title = "Updating group hierarchy" %] +[% END %] + +[% PROCESS global/header.html.tmpl %] + +

+ Checking.... + + [% IF changes %] + changed. + [% END %] +

+ +[% IF (action == 1) || (action == 2) %] + [% IF changes %] +

Group updated, please confirm removal:

+ [% END %] + + [% IF (action == 1) %] +

This option will remove all explicitly defined users + [% ELSIF regexp %] +

This option will remove all users included in the regular expression: + [% regexp FILTER html %] + [% ELSE %] +

+ There is no regular expression defined. + No users will be removed. +

+ [% END %] + + [% IF ((action == 1) || regexp) %] + from group [% name FILTER html %].

+ +

+ Generally, you will only need to do this when upgrading groups + created with [% terms.Bugzilla %] versions 2.16 and prior. Use + this option with extreme care and consult the documentation + for further information. +

+ +
+ + + [% IF (action == 2) %] + + [% ELSE %] + + [% END %] + + +

Or return to the Edit Groups page.

+
+ [% END %] +[% ELSE %] + [%# if we got this far, the admin doesn't want to convert, so just save + # their changes %] + + [% IF changes %] +

Done.

+ [% ELSE %] +

+ You didn't change anything! If you really meant it, hit the Back + button and try again. +

+ [% END %] + +

Back to the group list.

+[% END %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/webtools/bugzilla/template/en/default/admin/groups/create.html.tmpl b/webtools/bugzilla/template/en/default/admin/groups/create.html.tmpl index 239d7f9840d..8da00a7994b 100644 --- a/webtools/bugzilla/template/en/default/admin/groups/create.html.tmpl +++ b/webtools/bugzilla/template/en/default/admin/groups/create.html.tmpl @@ -20,7 +20,10 @@ # Joel Peshkin # Jacob Steenhagen # Vlad Dascalu + #%] +[%# INTERFACE: + # none #%] [% PROCESS global/header.html.tmpl diff --git a/webtools/bugzilla/template/en/default/admin/groups/created.html.tmpl b/webtools/bugzilla/template/en/default/admin/groups/created.html.tmpl new file mode 100644 index 00000000000..4ac051c2d54 --- /dev/null +++ b/webtools/bugzilla/template/en/default/admin/groups/created.html.tmpl @@ -0,0 +1,38 @@ +[%# 1.0@bugzilla.org %] +[%# The contents of this file are subject to the Mozilla Public + # License Version 1.1 (the "License"); you may not use this file + # except in compliance with the License. You may obtain a copy of + # the License at http://www.mozilla.org/MPL/ + # + # Software distributed under the License is distributed on an "AS + # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + # implied. See the License for the specific language governing + # rights and limitations under the License. + # + # The Original Code is the Bugzilla Bug Tracking System. + # + # The Initial Developer of the Original Code is Netscape Communications + # Corporation. Portions created by Netscape are + # Copyright (C) 1998 Netscape Communications Corporation. All + # Rights Reserved. + # + # Contributor(s): Dave Miller + # Joel Peshkin + # Jacob Steenhagen + # Vlad Dascalu + #%] + +[%# INTERFACE: + # none + #%] + +[% PROCESS global/header.html.tmpl + title = "Adding new group" +%] + +

OK, done.

+ +

Add another group or +go back to the group list.

+ +[% PROCESS global/footer.html.tmpl %] diff --git a/webtools/bugzilla/template/en/default/admin/groups/delete.html.tmpl b/webtools/bugzilla/template/en/default/admin/groups/delete.html.tmpl new file mode 100644 index 00000000000..0e17cbb1ccb --- /dev/null +++ b/webtools/bugzilla/template/en/default/admin/groups/delete.html.tmpl @@ -0,0 +1,100 @@ +[%# 1.0@bugzilla.org %] +[%# The contents of this file are subject to the Mozilla Public + # License Version 1.1 (the "License"); you may not use this file + # except in compliance with the License. You may obtain a copy of + # the License at http://www.mozilla.org/MPL/ + # + # Software distributed under the License is distributed on an "AS + # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + # implied. See the License for the specific language governing + # rights and limitations under the License. + # + # The Original Code is the Bugzilla Bug Tracking System. + # + # The Initial Developer of the Original Code is Netscape Communications + # Corporation. Portions created by Netscape are + # Copyright (C) 1998 Netscape Communications Corporation. All + # Rights Reserved. + # + # Contributor(s): Dave Miller + # Joel Peshkin + # Jacob Steenhagen + # Vlad Dascalu + #%] + +[%# INTERFACE: + # gid: number. The group ID. + # name: string. The name of the group. + # description: string. The description of the group. + # hasusers: boolean int. True if the group includes users in it. + # hasbugs: boolean int. True if the group includes bugs in it. + # hasproduct: boolean int. True if the group is binded to a product. + # buglist: string. The list of bugs included in this group. + #%] + + +[% PROCESS global/header.html.tmpl + title = "Delete group" +%] + + + + + + + + + + + + +
IdNameDescription
[% gid FILTER html %][% name FILTER html %][% desc FILTER html %]
+ +
+ [% IF hasusers %] +

One or more users belong to this group. You cannot delete + this group while there are users in it. + +
Show + me which users - Remove + all users from this group for me.

+ [% END %] + + [% IF hasbugs %] +

One or more [% terms.bug %] reports are visible only to this group. + You cannot delete this group while any [% terms.bugs %] are using it. + +
Show me + which [% terms.bugs %] - Remove + all [% terms.bugs %] from this group restriction for me.

+ +

NOTE: It's quite possible to make confidential [% terms.bugs %] + public by checking this box. It is strongly suggested + that you review the [% terms.bugs %] in this group before checking + the box.

+ [% END %] + + [% IF hasproduct %] +

This group is tied to the [% name FILTER html %] product. + You cannot delete this group while it is tied to a product. + +
Delete this group anyway, + and make the [% name FILTER html %] publicly visible.

+ [% END %] + +

Confirmation

+ +

Do you really want to delete this group?

+ [% IF (hasusers || hasbugs || hasproduct) %] +

You must check all of the above boxes or correct the + indicated problems first before you can proceed.

+ [% END %] + +

+ + +

+ +Go back to the group list. + +[% PROCESS global/footer.html.tmpl %] diff --git a/webtools/bugzilla/template/en/default/admin/groups/deleted.html.tmpl b/webtools/bugzilla/template/en/default/admin/groups/deleted.html.tmpl new file mode 100644 index 00000000000..fc91190cb64 --- /dev/null +++ b/webtools/bugzilla/template/en/default/admin/groups/deleted.html.tmpl @@ -0,0 +1,54 @@ +[%# 1.0@bugzilla.org %] +[%# The contents of this file are subject to the Mozilla Public + # License Version 1.1 (the "License"); you may not use this file + # except in compliance with the License. You may obtain a copy of + # the License at http://www.mozilla.org/MPL/ + # + # Software distributed under the License is distributed on an "AS + # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + # implied. See the License for the specific language governing + # rights and limitations under the License. + # + # The Original Code is the Bugzilla Bug Tracking System. + # + # The Initial Developer of the Original Code is Netscape Communications + # Corporation. Portions created by Netscape are + # Copyright (C) 1998 Netscape Communications Corporation. All + # Rights Reserved. + # + # Contributor(s): Dave Miller + # Joel Peshkin + # Jacob Steenhagen + # Vlad Dascalu + #%] + +[%# INTERFACE: + # gid: number. The group ID. + # name: string. The name of the group. + # cantdelete: boolean int. Is 1 if the group couldn't have been deleted. + #%] + + +[% PROCESS global/header.html.tmpl + title = "Deleting group" +%] + +[% IF cantdelete %] +

+ This group cannot be deleted because there are records + in the database which refer to it. All such records + must be removed or altered to remove the reference to this + group before the group can be deleted. +

+ +

+ View + the list of which records are affected. +

+[% ELSE %] +

The group [% name FILTER html %] has been deleted.

+[% END %] + +

Go back to the group list. + +[% PROCESS global/footer.html.tmpl %] diff --git a/webtools/bugzilla/template/en/default/admin/groups/edit.html.tmpl b/webtools/bugzilla/template/en/default/admin/groups/edit.html.tmpl new file mode 100644 index 00000000000..619db777c3b --- /dev/null +++ b/webtools/bugzilla/template/en/default/admin/groups/edit.html.tmpl @@ -0,0 +1,159 @@ +[%# 1.0@bugzilla.org %] +[%# The contents of this file are subject to the Mozilla Public + # License Version 1.1 (the "License"); you may not use this file + # except in compliance with the License. You may obtain a copy of + # the License at http://www.mozilla.org/MPL/ + # + # Software distributed under the License is distributed on an "AS + # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + # implied. See the License for the specific language governing + # rights and limitations under the License. + # + # The Original Code is the Bugzilla Bug Tracking System. + # + # The Initial Developer of the Original Code is Netscape Communications + # Corporation. Portions created by Netscape are + # Copyright (C) 1998 Netscape Communications Corporation. All + # Rights Reserved. + # + # Contributor(s): Dave Miller + # Joel Peshkin + # Jacob Steenhagen + # Vlad Dascalu + #%] + +[%# INTERFACE: + # group_id: number. The group ID. + # name: string. The name of the group. + # description: string. The description of the group. + # rexp: string. The regular expression for the users of the group. + # isactive: boolean int. Shows if the group is still active. + # isbuggroup: boolean int. Is 1 if this is a bug group. + # groups: array with group objects having the properties: + # - grpid: number. The ID of the group. + # - grpname: string. The name of the group. + # - grpdesc: string. The description of the group. + # - grpmember: boolean int. Is 1 if the current user is a group member. + # - blessmember: boolean int. Is 1 if the current user can bless members + # in the current group. + #%] + + +[% PROCESS global/header.html.tmpl + title = "Change Group" +%] + +

+ + + + + + + + + + + + + + + + + [% IF isbuggroup %] + + + + + [% END %] +
Group: + [% IF isbuggroup %] + + + [% ELSE %] + [% name FILTER html %] + [% END %] +
Description: + [% IF isbuggroup %] + + + [% ELSE %] + [% description FILTER html %] + [% END %] +
User Regexp: + + +
Use For [% terms.Bugs %]: + + +
+ +

+ Users become members of this group in one of three ways: +

    +
  • by being explicity included when the user is edited. +
  • by matching the user regexp above. +
  • by being a member of one of the groups included in this group + by checking the boxes below. +
+

+ + + + + + + + + + + + + + + [% FOREACH group = groups %] + + + + + + + [% END %] +
Members of these groups can grant membership to this group
|Members of these groups are included in this group
||
+ + + + + + [% group.grpnam FILTER html %][% group.grpdesc FILTER html %]
+ + + +

+ + + + +
+

Conversion of groups created with [% terms.Bugzilla %] + versions 2.16 and prior:

+ +
    +
  • Remove all explicit memberships from this group: + +
  • + +
  • Remove all explicit memberships that are included in the above + regular expression: + +
  • +
+
+ + + +

+ +Back to the group list. + +[% PROCESS global/footer.html.tmpl %] diff --git a/webtools/bugzilla/template/en/default/admin/groups/list.html.tmpl b/webtools/bugzilla/template/en/default/admin/groups/list.html.tmpl new file mode 100644 index 00000000000..9e6520244d2 --- /dev/null +++ b/webtools/bugzilla/template/en/default/admin/groups/list.html.tmpl @@ -0,0 +1,119 @@ +[%# 1.0@bugzilla.org %] +[%# The contents of this file are subject to the Mozilla Public + # License Version 1.1 (the "License"); you may not use this file + # except in compliance with the License. You may obtain a copy of + # the License at http://www.mozilla.org/MPL/ + # + # Software distributed under the License is distributed on an "AS + # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + # implied. See the License for the specific language governing + # rights and limitations under the License. + # + # The Original Code is the Bugzilla Bug Tracking System. + # + # The Initial Developer of the Original Code is Netscape Communications + # Corporation. Portions created by Netscape are + # Copyright (C) 1998 Netscape Communications Corporation. All + # Rights Reserved. + # + # Contributor(s): Dave Miller + # Joel Peshkin + # Jacob Steenhagen + # Vlad Dascalu + #%] + +[%# INTERFACE: + # groups: array with group objects having the properties: + # - id: number. The ID of the group. + # - name: string. The name of the group. + # - description: string. The description of the group. + # - regexp: string. The user regexp for the given group. + # - isactive: boolean int. Specifies if the group is active or not. + # - isbuggroup: boolean int. Specifies if it can be used for bugs. + #%] + +[% PROCESS global/header.html.tmpl + title = "Edit Groups" + h2 = "This lets you edit the groups available to put users in." +%] + + + + + + + + + + + + + [% FOREACH group = groups %] + + + + + + + + + + + + [% END %] + + + + + +
NameDescriptionUser RegExpUse For [% terms.Bugs %]TypeAction
[% group.name FILTER html %][% group.description FILTER html %][% group.regexp FILTER html %]  + [% IF (group.isactive != 0) && (group.isbuggroup) %] + X + [% ELSE %] +   + [% END %] + + [% (group.isbuggroup) ? "user" : "system" %] + + Edit + [% IF (group.isbuggroup) %] + | Delete + [% END %] +
Add Group
+ +

+ 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 [% terms.bugs %] by email to limit [% terms.abug %] +to a certain set of groups. +

+ +

+ Description is what will be shown in the [% terms.bug %] reports +to members of the group where they can choose whether the [% terms.bug %] +will be restricted to others in the same group. +

+ +

+ 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$' +

+ +

+ The Use For [% terms.Bugs %] flag determines whether or not +the group is eligible to be used for [% terms.bugs %]. If you remove +this flag, it will no longer be possible for users to add [% terms.bugs %] +to this group, although [% terms.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 [% terms.bug %] restrictions. +

+ +

+ The Type field identifies system groups. +

+ +[% PROCESS global/footer.html.tmpl %] diff --git a/webtools/bugzilla/template/en/default/admin/groups/remove.html.tmpl b/webtools/bugzilla/template/en/default/admin/groups/remove.html.tmpl new file mode 100644 index 00000000000..0eed2d9fbee --- /dev/null +++ b/webtools/bugzilla/template/en/default/admin/groups/remove.html.tmpl @@ -0,0 +1,60 @@ +[%# 1.0@bugzilla.org %] +[%# The contents of this file are subject to the Mozilla Public + # License Version 1.1 (the "License"); you may not use this file + # except in compliance with the License. You may obtain a copy of + # the License at http://www.mozilla.org/MPL/ + # + # Software distributed under the License is distributed on an "AS + # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + # implied. See the License for the specific language governing + # rights and limitations under the License. + # + # The Original Code is the Bugzilla Bug Tracking System. + # + # The Initial Developer of the Original Code is Netscape Communications + # Corporation. Portions created by Netscape are + # Copyright (C) 1998 Netscape Communications Corporation. All + # Rights Reserved. + # + # Contributor(s): Dave Miller + # Joel Peshkin + # Jacob Steenhagen + # Vlad Dascalu + #%] + +[%# INTERFACE: + # remove_all: boolean int. Is 1 if the action was remove_all, + # and 0 if the action was remove_all_regexp. + # name: string. The place where removal is performed. + # regexp: string. The regexp according to which the removal is performed. + # users: array with group objects having the properties: + # - login: string. The login which is removed. + #%] + + +[% IF remove_all %] + [% title = "Removing All Explicit Group Memberships from '" + _ name _ "'" %] +[% ELSE %] + [% title = "Removing All Explicit Group Memberships Matching " + _ "Group RegExp from '" _ name _ "'" %] +[% END %] + +[% PROCESS global/header.html.tmpl %] + +[% IF remove_all %] +

Removing explicit membership

+[% ELSE %] +

Removing explicit memberships of users matching + '[% regexp FILTER html %]'...

+[% END %] + +[% FOREACH user = users %] + [% user.login FILTER html %] removed
+[% END %] + +

Done.

+ +

Back to the group list.

+ +[% PROCESS global/footer.html.tmpl %] diff --git a/webtools/bugzilla/template/en/default/global/code-error.html.tmpl b/webtools/bugzilla/template/en/default/global/code-error.html.tmpl index c5233b8e88d..ae47ed34955 100644 --- a/webtools/bugzilla/template/en/default/global/code-error.html.tmpl +++ b/webtools/bugzilla/template/en/default/global/code-error.html.tmpl @@ -61,6 +61,10 @@ The ID [% page_id FILTER html %] is not a valid page identifier. + [% ELSIF error == "bad_arg" %] + Bad argument [% argument FILTER html %] sent to + [% function FILTER html %] function. + [% ELSIF error == "bug_error" %] Trying to retrieve [% terms.bug %] [%+ bug.bug_id FILTER html %] returned the error [% bug.error FILTER html %]. @@ -104,10 +108,6 @@ Attempted to add [% terms.bug %] to an inactive group, identified by the bit '[% bit FILTER html %]'. - [% ELSIF error == "bad_arg" %] - Bad argument [% argument FILTER html %] sent to - [% function FILTER html %] function. - [% ELSIF error == "invalid_attach_id_to_obsolete" %] The attachment number of one of the attachments you wanted to obsolete, [% attach_id FILTER html %], is invalid. @@ -131,7 +131,12 @@ [% ELSIF error == "invalid_dimensions" %] [% title = "Invalid Dimensions" %] The width or height specified is not a positive integer. - + + [% ELSIF error == "invalid_isactive_flag" %] + [% title = "Invalid isactive flag" %] + The active flag was improperly set. There may be + a problem with [% terms.Bugzilla %] or [% terms.abug %] in your browser. + [% ELSIF error == "invalid_series_id" %] [% title = "Invalid Series" %] The series_id [% series_id FILTER html %] is not valid. It may be that diff --git a/webtools/bugzilla/template/en/default/global/user-error.html.tmpl b/webtools/bugzilla/template/en/default/global/user-error.html.tmpl index e4c9863df72..97987b786b5 100644 --- a/webtools/bugzilla/template/en/default/global/user-error.html.tmpl +++ b/webtools/bugzilla/template/en/default/global/user-error.html.tmpl @@ -96,6 +96,11 @@ account creation. Please contact an administrator to get a new account created. + [% ELSIF error == "auth_cant_edit_groups" %] + [% title = "Not authorized to edit groups" %] + Sorry, you aren't a member of the 'creategroups' group. And so, + you aren't allowed to edit the groups. + [% ELSIF error == "authorization_failure" %] [% title = "Authorization Failed" %] You are not allowed to [% action FILTER html %]. @@ -169,6 +174,14 @@ [% title = "Email Address Confirmation Failed" %] Email address confirmation failed. + [% ELSIF error == "empty_group_description" %] + [% title = "The group description can not be empty" %] + You must enter a description for the new group. + + [% ELSIF error == "empty_group_name" %] + [% title = "The group name can not be empty" %] + You must enter a name for the new group. + [% ELSIF error == "entry_access_denied" %] [% title = "Permission Denied" %] Sorry; you do not have the permissions necessary to enter [% terms.abug %] @@ -235,7 +248,15 @@ [% title = "Flag Type Sort Key Invalid" %] The sort key must be an integer between 0 and 32767 inclusive. It cannot be [% sortkey FILTER html %]. - + + [% ELSIF error == "group_exists" %] + [% title = "The group already exists" %] + The group [% name FILTER html %] already exists. + + [% ELSIF error == "group_not_specified" %] + [% title = "Group not specified" %] + No group was specified. + [% ELSIF error == "illegal_at_least_x_votes" %] [% title = "Your Search Makes No Sense" %] The At least ___ votes field must be a simple number. @@ -370,6 +391,10 @@ [% END %] ). + [% ELSIF error == "invalid_group_ID" %] + [% title = "Invalid group ID" %] + The group you specified doesn't exist. + [% ELSIF error == "invalid_maxrows" %] [% title = "Invalid Max Rows" %] The maximum number of rows, '[% maxrows FILTER html %]', must be @@ -378,7 +403,11 @@ [% ELSIF error == "invalid_product_name" %] [% title = "Invalid Product Name" %] The product name '[% product FILTER html %]' is invalid or does not exist. - + + [% ELSIF error == "invalid_regexp" %] + [% title = "Invalid regular expression" %] + The regular expression you entered is invalid. + [% ELSIF error == "invalid_username" %] [% title = "Invalid Username" %] The name [% name FILTER html %] is not a valid username.