summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgerv%gerv.net <>2002-05-08 06:28:39 +0200
committergerv%gerv.net <>2002-05-08 06:28:39 +0200
commitd756467055959872b1a443d2c60417135b0d05e9 (patch)
treed1f3401ac634e7cc5407d6340f068aa44e0470e9
parent4afae456014ff01ee01e11279fc5a9b5f4f7b5bf (diff)
downloadbugzilla-d756467055959872b1a443d2c60417135b0d05e9.tar.gz
bugzilla-d756467055959872b1a443d2c60417135b0d05e9.tar.xz
Bug 140435 - Templatise GetCommandMenu. Patch by gerv; r=bbaetz, justdave.
-rw-r--r--CGI.pl43
-rwxr-xr-xbuglist.cgi22
-rwxr-xr-xchecksetup.pl1
-rw-r--r--globals.pl12
-rwxr-xr-xrelogin.cgi1
-rw-r--r--t/004template.t1
-rw-r--r--template/en/default/bug/votes/list-for-user.html.tmpl10
-rw-r--r--template/en/default/global/footer.html.tmpl40
-rw-r--r--template/en/default/global/useful-links.html.tmpl125
-rw-r--r--template/en/default/list/edit-multiple.html.tmpl2
-rwxr-xr-xuserprefs.cgi3
-rwxr-xr-xvotes.cgi2
12 files changed, 248 insertions, 14 deletions
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 <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/ /\&nbsp;/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>&nbsp;</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&nbsp;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&nbsp;check</a>"
+ IF user.groups.tweakparams %]
+
+ | <a href="relogin.cgi">Log&nbsp;out</a>&nbsp;[% 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&nbsp;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&nbsp;Bugs
+ </a>
+ [% print_pipe = 1 %]
+ [% END %]
+
+ [% FOREACH q = user.queries %]
+ [% IF q.linkinfooter %]
+ [% " | " IF print_pipe %]
+ <a href="buglist.cgi?cmdtype=runnamed&amp;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&nbsp;Account</a> |
+ <a href="query.cgi?GoAheadAndLogIn=1">Log&nbsp;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);
}
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";