Bug 140435 - Templatise GetCommandMenu. Patch by gerv; r=bbaetz, justdave.

This commit is contained in:
gerv%gerv.net 2002-05-07 21:28:52 +00:00
parent 84055f06cc
commit 2743a43bf1
12 changed files with 248 additions and 14 deletions

View File

@ -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');

View File

@ -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')) {

View File

@ -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");

View File

@ -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;

View File

@ -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)

View File

@ -70,6 +70,7 @@ my $template = Template->new(
js => sub { return $_ } ,
strike => sub { return $_ } ,
url_quote => sub { return $_ } ,
no_break => sub { return $_ } ,
},
}
);

View File

@ -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

View File

@ -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 %]

View File

@ -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>

View File

@ -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 />

View File

@ -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);
}

View File

@ -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";