From d756467055959872b1a443d2c60417135b0d05e9 Mon Sep 17 00:00:00 2001 From: "gerv%gerv.net" <> Date: Wed, 8 May 2002 04:28:39 +0000 Subject: Bug 140435 - Templatise GetCommandMenu. Patch by gerv; r=bbaetz, justdave. --- CGI.pl | 43 +++++++ buglist.cgi | 22 +++- checksetup.pl | 1 + globals.pl | 12 +- relogin.cgi | 1 + t/004template.t | 1 + .../en/default/bug/votes/list-for-user.html.tmpl | 10 +- template/en/default/global/footer.html.tmpl | 40 ++++++- template/en/default/global/useful-links.html.tmpl | 125 +++++++++++++++++++++ template/en/default/list/edit-multiple.html.tmpl | 2 +- userprefs.cgi | 3 + votes.cgi | 2 +- 12 files changed, 248 insertions(+), 14 deletions(-) create mode 100644 template/en/default/global/useful-links.html.tmpl diff --git a/CGI.pl b/CGI.pl index b62913d36..f5ce6fb35 100644 --- a/CGI.pl +++ b/CGI.pl @@ -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 $name"; $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 %]

@@ -76,7 +78,7 @@ - [% IF user.canedit %] + [% IF canedit %] [% IF product.onevoteonly %] @@ -103,7 +105,7 @@ [% END %] - [% IF user.canedit %] + [% IF canedit %]

@@ -114,7 +116,7 @@ [% ELSE %]

- [% 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 #%] -[% 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' %] + + + + + +
+ + + + +
+ +[%# Migration note: this section corresponds to the old Param 'blurbhtml' %] + + This is Bugzilla: the Mozilla bug system. For more + information about what Bugzilla is and what it can do, see + bugzilla.org. + +[%# End section %] + +
+ +[% Migration note: useful-links.html.tmpl corresponds to %commandmenu% %] + + [% PROCESS "global/useful-links.html.tmpl" %] + +
+
-[% 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 @@ + +[%# 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 + #%] + +[%# 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' %] + +

+ + + + + + + + + [% IF user.login %] + + + + + [%# Preset queries %] + + [% preset_queries = user.showmybugslink %] + [% FOREACH q = user.queries %] + [% preset_queries = 1 IF q.linkinfooter %] + [% END %] + + + [% IF preset_queries %] + + [% END %] + + + + + [% ELSE %] + + + [% END %] + +
+ Actions: + + New | + Query | + + bug # + | + + Reports + + [% IF user.login AND use_votes %] + | My Votes + [% END %] +   + Edit prefs + [% ", parameters" + IF user.groups.tweakparams %] + [% ", users" IF user.groups.editusers %] + [% ", products" + IF user.groups.editcomponents %] + [% ", attachment statuses" + IF user.groups.editcomponents %] + [% ", groups" + IF user.groups.creategroups %] + [% ", keywords" + IF user.groups.editkeywords %] + [% " | Sanity check" + IF user.groups.tweakparams %] + + | Log out [% user.login %] +
+ Preset Queries: + + [% IF user.showmybugslink %] + My Bugs + + [% print_pipe = 1 %] + [% END %] + + [% FOREACH q = user.queries %] + [% IF q.linkinfooter %] + [% " | " IF print_pipe %] + [% q.name FILTER no_break FILTER html %] + + [% print_pipe = 1 %] + [% END %] + [% END %] +
+ New Account | + Log In +
+ 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 bugs to
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); } diff --git a/votes.cgi b/votes.cgi index eee96b960..7a387e0e1 100755 --- a/votes.cgi +++ b/votes.cgi @@ -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"; -- cgit v1.2.3-24-g4f1b