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');
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";
$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');
# 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')) {
js => sub { return $_; },
html => sub { return $_; },
url_quote => sub { return $_; }
+ no_break => sub { return $_; }
},
}) || die ("Could not create Template: " . Template->error() . "\n");
}
}
-
my $cols = LearnAboutColumns("bugs");
@::log_columns = @{$cols->{"-list-"}};
# 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())
# User Agent - useful for detecting in templates
'user_agent' => $ENV{'HTTP_USER_AGENT'} ,
+
+ 'use_votes' => $::anyvotesallowed,
};
1;
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)
js => sub { return $_ } ,
strike => sub { return $_ } ,
url_quote => sub { return $_ } ,
+ no_break => sub { return $_ } ,
},
}
);
[% 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">
</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 %]>
[% END %]
</table>
- [% IF user.canedit %]
+ [% IF canedit %]
<input type="submit" value="Change My Votes">
<br>
<br>
</form>
[% ELSE %]
<p>
- [% IF user.canedit %]
+ [% IF canedit %]
You are
[% ELSE %]
This user is
# 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 %]
--- /dev/null
+<!-- 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>
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 />
}
SendSQL("UPDATE profiles SET mybugslink = " .
SqlQuote($::FORM{'mybugslink'}) . " WHERE userid = $userid");
+
+ # Regenerate cached info about queries in footer.
+ $vars->{'user'} = GetUserInfo($::userid);
}
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";