diff options
author | gerv%gerv.net <> | 2002-05-08 06:28:39 +0200 |
---|---|---|
committer | gerv%gerv.net <> | 2002-05-08 06:28:39 +0200 |
commit | d756467055959872b1a443d2c60417135b0d05e9 (patch) | |
tree | d1f3401ac634e7cc5407d6340f068aa44e0470e9 | |
parent | 4afae456014ff01ee01e11279fc5a9b5f4f7b5bf (diff) | |
download | bugzilla-d756467055959872b1a443d2c60417135b0d05e9.tar.gz bugzilla-d756467055959872b1a443d2c60417135b0d05e9.tar.xz |
Bug 140435 - Templatise GetCommandMenu. Patch by gerv; r=bbaetz, justdave.
-rw-r--r-- | CGI.pl | 43 | ||||
-rwxr-xr-x | buglist.cgi | 22 | ||||
-rwxr-xr-x | checksetup.pl | 1 | ||||
-rw-r--r-- | globals.pl | 12 | ||||
-rwxr-xr-x | relogin.cgi | 1 | ||||
-rw-r--r-- | t/004template.t | 1 | ||||
-rw-r--r-- | template/en/default/bug/votes/list-for-user.html.tmpl | 10 | ||||
-rw-r--r-- | template/en/default/global/footer.html.tmpl | 40 | ||||
-rw-r--r-- | template/en/default/global/useful-links.html.tmpl | 125 | ||||
-rw-r--r-- | template/en/default/list/edit-multiple.html.tmpl | 2 | ||||
-rwxr-xr-x | userprefs.cgi | 3 | ||||
-rwxr-xr-x | votes.cgi | 2 |
12 files changed, 248 insertions, 14 deletions
@@ -480,9 +480,52 @@ sub quietly_check_login() { if (!$loginok) { delete $::COOKIE{"Bugzilla_login"}; } + + $vars->{'user'} = GetUserInfo($::userid); + return $loginok; } +# Populate a hash with information about this user. +sub GetUserInfo { + my ($userid) = (@_); + my %user; + my @queries; + my %groups; + + # No info if not logged in + return \%user if ($userid == 0); + + $user{'login'} = $::COOKIE{"Bugzilla_login"}; + $user{'userid'} = $userid; + + SendSQL("SELECT mybugslink, realname, groupset FROM profiles " . + "WHERE userid = $userid"); + ($user{'showmybugslink'}, $user{'realname'}, $user{'groupset'}) = + FetchSQLData(); + + SendSQL("SELECT name, query, linkinfooter FROM namedqueries " . + "WHERE userid = $userid"); + while (MoreSQLData()) { + my %query; + ($query{'name'}, $query{'query'}, $query{'linkinfooter'}) = + FetchSQLData(); + push(@queries, \%query); + } + + $user{'queries'} = \@queries; + + SendSQL("select name, (bit & $user{'groupset'}) != 0 from groups"); + while (MoreSQLData()) { + my ($name, $bit) = FetchSQLData(); + $groups{$name} = $bit; + } + + $user{'groups'} = \%groups; + + return \%user; +} + sub CheckEmailSyntax { my ($addr) = (@_); my $match = Param('emailregexp'); diff --git a/buglist.cgi b/buglist.cgi index 37baecc86..4c1719d99 100755 --- a/buglist.cgi +++ b/buglist.cgi @@ -1119,8 +1119,22 @@ CMD: for ($::FORM{'cmdtype'}) { SendSQL("REPLACE INTO namedqueries (userid, name, query, linkinfooter) VALUES ($userid, $qname, $qbuffer, $tofooter)"); } + + my $new_in_footer = $tofooter; + + # Don't add it to the list if they are reusing an existing query name. + foreach my $query (@{$vars->{'user'}{'queries'}}) { + if ($query->{'name'} eq $name) { + $new_in_footer = 0; + } + } + print "Content-Type: text/html\n\n"; - # Generate and return the UI (HTML page) from the appropriate template. + # Generate and return the UI (HTML page) from the appropriate template. + if ($new_in_footer) { + push(@{$vars->{'user'}{'queries'}}, {name => $name}); + } + $vars->{'title'} = "OK, query saved."; $vars->{'message'} = "OK, you have a new query named <code>$name</code>"; $vars->{'url'} = "query.cgi"; @@ -1453,7 +1467,7 @@ $vars->{'urlquerypart'} =~ s/[&?](order|cmdtype)=[^&]*//g; $vars->{'order'} = $order; # The user's login account name (i.e. email address). -$vars->{'user'} = $::COOKIE{'Bugzilla_login'}; +my $login = $::COOKIE{'Bugzilla_login'}; $vars->{'caneditbugs'} = UserInGroup('editbugs'); $vars->{'usebuggroups'} = UserInGroup('usebuggroups'); @@ -1461,8 +1475,8 @@ $vars->{'usebuggroups'} = UserInGroup('usebuggroups'); # Whether or not this user is authorized to move bugs to another installation. $vars->{'ismover'} = 1 if Param('move-enabled') - && defined($vars->{'user'}) - && Param('movers') =~ /^(\Q$vars->{'user'}\E[,\s])|([,\s]\Q$vars->{'user'}\E[,\s]+)/; + && defined($login) + && Param('movers') =~ /^(\Q$login\E[,\s])|([,\s]\Q$login\E[,\s]+)/; my @bugowners = keys %$bugowners; if (scalar(@bugowners) > 1 && UserInGroup('editbugs')) { diff --git a/checksetup.pl b/checksetup.pl index 4f59e92e6..e1a551506 100755 --- a/checksetup.pl +++ b/checksetup.pl @@ -842,6 +842,7 @@ END js => sub { return $_; }, html => sub { return $_; }, url_quote => sub { return $_; } + no_break => sub { return $_; } }, }) || die ("Could not create Template: " . Template->error() . "\n"); diff --git a/globals.pl b/globals.pl index f6e651e3c..d04133d10 100644 --- a/globals.pl +++ b/globals.pl @@ -486,7 +486,6 @@ sub GenerateVersionTable { } } - my $cols = LearnAboutColumns("bugs"); @::log_columns = @{$cols->{"-list-"}}; @@ -1574,6 +1573,15 @@ $::template ||= Template->new( # filter should be used for a full URL that may have # characters that need encoding. url_quote => \&url_quote , + + # Returns the text with spaces converted to non-breaking space + # HTML entities. + no_break => sub + { + my ($var) = @_; + $var =~ s/ /\ /g; + return $var; + } , } , } ) || DisplayError("Template creation failed: " . Template->error()) @@ -1756,6 +1764,8 @@ $::vars = # User Agent - useful for detecting in templates 'user_agent' => $ENV{'HTTP_USER_AGENT'} , + + 'use_votes' => $::anyvotesallowed, }; 1; diff --git a/relogin.cgi b/relogin.cgi index d07de9ef6..0d64fb71f 100755 --- a/relogin.cgi +++ b/relogin.cgi @@ -66,6 +66,7 @@ delete $::COOKIE{"Bugzilla_login"}; next time it is required."; $vars->{'url'} = "query.cgi?GoAheadAndLogIn=1"; $vars->{'link'} = "Log in again here"; + $vars->{'user'} = {}; print "Content-Type: text/html\n\n"; $template->process("global/message.html.tmpl", $vars) diff --git a/t/004template.t b/t/004template.t index 4332e2e82..f9cd0fad9 100644 --- a/t/004template.t +++ b/t/004template.t @@ -70,6 +70,7 @@ my $template = Template->new( js => sub { return $_ } , strike => sub { return $_ } , url_quote => sub { return $_ } , + no_break => sub { return $_ } , }, } ); diff --git a/template/en/default/bug/votes/list-for-user.html.tmpl b/template/en/default/bug/votes/list-for-user.html.tmpl index 261e0f864..4797d71b7 100644 --- a/template/en/default/bug/votes/list-for-user.html.tmpl +++ b/template/en/default/bug/votes/list-for-user.html.tmpl @@ -21,9 +21,11 @@ [% PROCESS global/header.html.tmpl title = "Show Votes" - h2 = user.name + h2 = voting_user.name %] +[% canedit = 1 IF voting_user.login == user.login %] + [% IF votes_recorded %] <p> <font color="red"> @@ -76,7 +78,7 @@ </a> </td> <td align="right"> - [% IF user.canedit %] + [% IF canedit %] [% IF product.onevoteonly %] <input type="checkbox" name="[% bug.id %]" value="1" [% " checked" IF bug.count %]> @@ -103,7 +105,7 @@ [% END %] </table> - [% IF user.canedit %] + [% IF canedit %] <input type="submit" value="Change My Votes"> <br> <br> @@ -114,7 +116,7 @@ </form> [% ELSE %] <p> - [% IF user.canedit %] + [% IF canedit %] You are [% ELSE %] This user is diff --git a/template/en/default/global/footer.html.tmpl b/template/en/default/global/footer.html.tmpl index 8b3af59a4..b611cb06c 100644 --- a/template/en/default/global/footer.html.tmpl +++ b/template/en/default/global/footer.html.tmpl @@ -16,12 +16,46 @@ # Copyright (C) 1998 Netscape Communications Corporation. All # Rights Reserved. # - # Contributor(s): + # Contributor(s): Gervase Markham <gerv@gerv.net> #%] -[% PerformSubsts(Param('footerhtml')) %] +[%# INTERFACE: + # This template has no interface. However, you must fulfill the interface to + # global/useful-links.html.tmpl. + #%] + +[%# Migration note: this whole file corresponds to the old Param 'footerhtml' %] + +<table border="0"> + <tr> + <td bgcolor="#000000" valign="top"> + <table border="0" cellpadding="10" cellspacing="0" width="100%" + bgcolor="lightyellow"> + <tr> + <td> + +[%# Migration note: this section corresponds to the old Param 'blurbhtml' %] + + This is <b>Bugzilla</b>: the Mozilla bug system. For more + information about what Bugzilla is and what it can do, see + <a href="http://www.bugzilla.org/">bugzilla.org</a>. + +[%# End section %] + + <br> + +[% Migration note: useful-links.html.tmpl corresponds to %commandmenu% %] + + [% PROCESS "global/useful-links.html.tmpl" %] + + </td> + </tr> + </table> + </td> + </tr> +</table> </body> </html> -[% CALL SyncAnyPendingShadowChanges() %] +[% CALL SyncAnyPendingShadowChanges() IF SyncAnyPendingShadowChanges %] diff --git a/template/en/default/global/useful-links.html.tmpl b/template/en/default/global/useful-links.html.tmpl new file mode 100644 index 000000000..90704de1c --- /dev/null +++ b/template/en/default/global/useful-links.html.tmpl @@ -0,0 +1,125 @@ +<!-- 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): Gervase Markham <gerv@gerv.net> + #%] + +[%# INTERFACE: + # user: hash. Information about the user. If the user is not logged in, + # user.login is undefined. + # login: string. The user's Bugzilla login email address. + # showmybugslink: boolean. True if user wants My Bugs in the footer. + # queries: list of strings. The names of those of the user's named + # queries which should be displayed in the footer. + # groups: hash. Keys are group names, values are true if user in that group. + # The keys used in this template are + # tweakparams, editcomponents, creategroups, editkeywords, confirm, + # editbugs, editusers. + # use_votes: boolean. True if we are using votes. + #%] + +[%# Migration note: this whole file corresponds to the old %commandmenu% + substitution param in 'footerhtml' %] + +<form method="get" action="show_bug.cgi"> + <table width="100%"> + <tr> + <td> + Actions: + </td> + + <td valign="middle" nowrap> + <a href="enter_bug.cgi">New</a> | + <a href="query.cgi">Query</a> | + + <input type="submit" value="Find"> bug # + <input name="id" size="6"> | + + <a href="reports.cgi">Reports</a> + + [% IF user.login AND use_votes %] + | <a href="votes.cgi?action=show_user">My Votes</a> + [% END %] + </td> + + <td> </td> + + [% IF user.login %] + + <td valign="middle"> + Edit <a href="userprefs.cgi">prefs</a> + [% ", <a href='editparams.cgi'>parameters</a>" + IF user.groups.tweakparams %] + [% ", <a href='editusers.cgi'>users</a>" IF user.groups.editusers %] + [% ", <a href='editproducts.cgi'>products</a>" + IF user.groups.editcomponents %] + [% ", <a href='editattachstatuses.cgi'> attachment statuses</a>" + IF user.groups.editcomponents %] + [% ", <a href='editgroups.cgi'>groups</a>" + IF user.groups.creategroups %] + [% ", <a href='editkeywords.cgi'>keywords</a>" + IF user.groups.editkeywords %] + [% " | <a href='sanitycheck.cgi'>Sanity check</a>" + IF user.groups.tweakparams %] + + | <a href="relogin.cgi">Log out</a> [% user.login %] + </td> + </tr> + + [%# Preset queries %] + + [% preset_queries = user.showmybugslink %] + [% FOREACH q = user.queries %] + [% preset_queries = 1 IF q.linkinfooter %] + [% END %] + + <tr> + [% IF preset_queries %] + <td> + Preset Queries: + </td> + [% END %] + + <td colspan="3"> + [% IF user.showmybugslink %] + <a href="buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=[% user.name FILTER url_quote %]&emailtype1=exact&emailassigned_to1=1&emailreporter1=1">My Bugs + </a> + [% print_pipe = 1 %] + [% END %] + + [% FOREACH q = user.queries %] + [% IF q.linkinfooter %] + [% " | " IF print_pipe %] + <a href="buglist.cgi?cmdtype=runnamed&namedcmd=[% q FILTER url_quote %]">[% q.name FILTER no_break FILTER html %] + </a> + [% print_pipe = 1 %] + [% END %] + [% END %] + </td> + </tr> + + [% ELSE %] + <td valign="middle" align="right"> + <a href="createaccount.cgi">New Account</a> | + <a href="query.cgi?GoAheadAndLogIn=1">Log In</a> + </td> + </tr> + [% END %] + + </table> +</form> diff --git a/template/en/default/list/edit-multiple.html.tmpl b/template/en/default/list/edit-multiple.html.tmpl index c7c8d00bf..fb28845c5 100644 --- a/template/en/default/list/edit-multiple.html.tmpl +++ b/template/en/default/list/edit-multiple.html.tmpl @@ -280,7 +280,7 @@ Reassign</A> bugs to </label> <input name="assigned_to" - value="[% user FILTER html %]" + value="[% user.login FILTER html %]" onchange="document.forms.changeform.knob[[% knum %]].checked = true;" size="32"><br /> diff --git a/userprefs.cgi b/userprefs.cgi index 977dda7ee..2205dd61a 100755 --- a/userprefs.cgi +++ b/userprefs.cgi @@ -323,6 +323,9 @@ sub SaveFooter { } SendSQL("UPDATE profiles SET mybugslink = " . SqlQuote($::FORM{'mybugslink'}) . " WHERE userid = $userid"); + + # Regenerate cached info about queries in footer. + $vars->{'user'} = GetUserInfo($::userid); } @@ -213,7 +213,7 @@ sub show_user { SendSQL("DELETE FROM votes WHERE count <= 0"); SendSQL("UNLOCK TABLES"); - $vars->{'user'} = { canedit => $canedit, name => $name, id => $who }; + $vars->{'voting_user'} = { "login" => $name }; $vars->{'products'} = \@products; print "Content-type: text/html\n\n"; |