Commit e9f04a30 authored by jake%acutex.net's avatar jake%acutex.net

Bug 37339 and Bug 80183 - Adding a sidebar.cgi and index.cgi. The sidebar.cgi…

Bug 37339 and Bug 80183 - Adding a sidebar.cgi and index.cgi. The sidebar.cgi can currently be used in Mozilla/Netscape 6 and uses XUL that was originally written by Scott Collins <scc@mozilla.org>. The index.cgi displays both the proper header and footer in the appropriate places. It also changes the links accoding to if you are logged in or not. r= ddk, kiko
parent 0450229e
...@@ -2,4 +2,4 @@ ...@@ -2,4 +2,4 @@
graphs graphs
data data
localconfig localconfig
shadow index.html
...@@ -282,6 +282,21 @@ sub LocalVar ($$) ...@@ -282,6 +282,21 @@ sub LocalVar ($$)
# Set up the defaults for the --LOCAL-- variables below: # Set up the defaults for the --LOCAL-- variables below:
# #
LocalVar('index_html', <<'END');
#
# With the introduction of a configurable index page using the
# template toolkit, Bugzilla's main index page is now index.cgi.
# Most web servers will allow you to use index.cgi as a directory
# index and many come preconfigured that way, however if yours
# doesn't you'll need an index.html file that provides redirection
# to index.cgi. Setting $index_html to 1 below will allow
# checksetup.pl to create one for you if it doesn't exist.
# NOTE: checksetup.pl will not replace an existing file, so if you
# wish to have checksetup.pl create one for you, you must
# make sure that there isn't already an index.html
$index_html = 0;
END
my $mysql_binaries = `which mysql`; my $mysql_binaries = `which mysql`;
if ($mysql_binaries =~ /no mysql/) { if ($mysql_binaries =~ /no mysql/) {
# If which didn't find it, just provide a reasonable default # If which didn't find it, just provide a reasonable default
...@@ -473,6 +488,7 @@ my $my_db_port = ${*{$main::{'db_port'}}{SCALAR}}; ...@@ -473,6 +488,7 @@ my $my_db_port = ${*{$main::{'db_port'}}{SCALAR}};
my $my_db_name = ${*{$main::{'db_name'}}{SCALAR}}; my $my_db_name = ${*{$main::{'db_name'}}{SCALAR}};
my $my_db_user = ${*{$main::{'db_user'}}{SCALAR}}; my $my_db_user = ${*{$main::{'db_user'}}{SCALAR}};
my $my_db_pass = ${*{$main::{'db_pass'}}{SCALAR}}; my $my_db_pass = ${*{$main::{'db_pass'}}{SCALAR}};
my $my_index_html = ${*{$main::{'index_html'}}{SCALAR}};
my $my_create_htaccess = ${*{$main::{'create_htaccess'}}{SCALAR}}; my $my_create_htaccess = ${*{$main::{'create_htaccess'}}{SCALAR}};
my $my_webservergroup = ${*{$main::{'webservergroup'}}{SCALAR}}; my $my_webservergroup = ${*{$main::{'webservergroup'}}{SCALAR}};
my @my_severities = @{*{$main::{'severities'}}{ARRAY}}; my @my_severities = @{*{$main::{'severities'}}{ARRAY}};
...@@ -637,6 +653,35 @@ END ...@@ -637,6 +653,35 @@ END
} }
if ($my_index_html) {
if (!-e "index.html") {
print "Creating index.html...\n";
open HTML, ">index.html";
print HTML <<'END';
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="REFRESH" CONTENT="0; URL=index.cgi">
</HEAD>
<BODY>
<H1>I think you are looking for <a href="index.cgi">index.cgi</a></H1>
</BODY>
</HTML>
END
close HTML;
}
else {
open HTML, "index.html";
if (! grep /index\.cgi/, <HTML>) {
print "\n\n";
print "*** It appears that you still have an old index.html hanging\n";
print " around. The contents of this file should be moved into a\n";
print " template and placed in the 'template/custom' directory.\n\n";
}
close HTML;
}
}
# Just to be sure ... # Just to be sure ...
unlink "data/versioncache"; unlink "data/versioncache";
......
body
{
font-family: sans-serif;
font-size: 10pt;
background-color: white;
}
ul
{
padding-left: 12px;
}
radio
{
-moz-user-select: ignore;
}
.text-link
{
margin-left: 3px;
}
.text-link:hover
{
text-decoration: underline;
cursor: pointer;
}
.descriptive-content
{
color: #AAAAAA;
}
.descriptive-content[focused=true]
{
color: black;
}
#!/usr/bonsaitools/bin/perl -wT
# -*- Mode: perl; indent-tabs-mode: nil -*-
#
# 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): Jacob Steenhagen <jake@acutex.net>
#
# Suppress silly "used only once" warnings
use vars qw{ %COOKIE };
###############################################################################
# Script Initialization
###############################################################################
# Make it harder for us to do dangerous things in Perl.
use diagnostics;
use strict;
# Include the Bugzilla CGI and general utility library.
use lib ".";
require "CGI.pl";
# Establish a connection to the database backend.
ConnectToDatabase();
# Use the template toolkit (http://www.template-toolkit.org/) to generate
# the user interface (HTML pages and mail messages) using templates in the
# "template/" subdirectory.
use Template;
# Create the global template object that processes templates and specify
# configuration parameters that apply to all templates processed in this script.
my $template = Template->new(
{
# Colon-separated list of directories containing templates.
INCLUDE_PATH => "template/custom:template/default",
# Allow templates to be specified with relative paths.
RELATIVE => 1,
POST_CHOMP => 1,
}
);
# Define the global variables and functions that will be passed to the UI
# template. Individual functions add their own values to this hash before
# sending them to the templates they process.
my $vars =
{
# Function for retrieving global parameters.
'Param' => \&Param ,
# Function for processing global parameters that contain references
# to other global parameters.
'PerformSubsts' => \&PerformSubsts
};
# Check whether or not the user is logged in and, if so, set the $::userid
# and $::usergroupset variables.
quietly_check_login();
###############################################################################
# Main Body Execution
###############################################################################
$vars->{'username'} = $::COOKIE{'Bugzilla_login'} || '';
$vars->{'subst'} = { 'userid' => $vars->{'username'} };
# Return the appropriate HTTP response headers.
print "Content-Type: text/html\n\n";
# Generate and return the UI (HTML page) from the appropriate template.
$template->process("index.tmpl", $vars)
|| DisplayError("Template process failed: " . $template->error())
&& exit;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<!--
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):
Contributor(s): Terry Weissman <terry@mozilla.org>
-->
<HEAD><TITLE>Bugzilla Main Page</TITLE></HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000"
LINK="#0000EE" VLINK="#551A8B" ALINK="#FF0000">
<TABLE BGCOLOR="#000000" WIDTH="100%" BORDER=0 CELLPADDING=0 CELLSPACING=0>
<TR><TD><A HREF="http://www.mozilla.org/"><IMG
SRC="http://www.mozilla.org/images/mozilla-banner.gif" ALT=""
BORDER=0 WIDTH=600 HEIGHT=58></A></TD></TR></TABLE>
<TABLE BORDER=0 CELLPADDING=12 CELLSPACING=0 WIDTH="100%">
<TR>
<TD>
<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=2>
<TR><TD VALIGN=TOP ALIGN=CENTER NOWRAP>
<FONT SIZE="+3"><B><NOBR>Main Page</NOBR></B></FONT>
</TD></TR><TR><TD VALIGN=TOP ALIGN=CENTER>
<B></B>
</TD></TR>
</TABLE>
</TD>
<TD>
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.mozilla.org/">mozilla.org</A>'s
<A HREF="http://www.mozilla.org/bugs/"><B>bug pages</B></A>.
</TD></TR></TABLE>
<img align=right width=329 height=220 src=ant.jpg border=2>
This is where we put in lots of nifty words explaining all about
bugzilla.
<p>
But it all boils down to a choice of:
<br>
<a href="query.cgi">Query existing bug reports</a><br>
<a href="enter_bug.cgi">Enter a new bug report</a><br>
<a href="reports.cgi">Get summary reports</a><br>
<p>
<a href="createaccount.cgi">Open a new Bugzilla account</a><br>
<a href="relogin.cgi">Forget the currently stored login</a><br>
<a href="userprefs.cgi">Change password or user preferences</a><br>
<p>
<script language="JavaScript" src="localconfig.js"></script>
<script language="JavaScript" src="quicksearch.js"></script>
<form name="f" action="show_bug.cgi" method="get"
onsubmit="QuickSearch(); return false;">
Enter a bug # or some search terms:<br>
<input type="text" name="id">
<input type="submit" value="Show">
<a href="quicksearch.html">[Help]</a>
</form>
<script>
<!--
document.forms['f'].id.focus();
//-->
</script>
</BODY>
</HTML>
...@@ -18,10 +18,8 @@ you may prefer <a href="quicksearchhack.html">this form</a>. ...@@ -18,10 +18,8 @@ you may prefer <a href="quicksearchhack.html">this form</a>.
Type in one or more words (or word fragments) to search for: Type in one or more words (or word fragments) to search for:
<!-- The name of the form must be "f" (used in "quicksearch.js"). -->
<form name="f" action="show_bug.cgi" method="get" <form name="f" action="show_bug.cgi" method="get"
onsubmit="QuickSearch(); return false;"> onsubmit="QuickSearch(f.id.value); return false;">
<table> <table>
<tr> <tr>
<td><input type="text" size="40" name="id"/></td> <td><input type="text" size="40" name="id"/></td>
......
...@@ -46,8 +46,11 @@ function do_shift(l) { ...@@ -46,8 +46,11 @@ function do_shift(l) {
} }
function go_to (url) { function go_to (url) {
document.location.href = url; if (sidebar == 1) {
//window.open(url, "other" ); load_relative_url(url);
} else {
document.location.href = url;
}
} }
function map(l, f) { function map(l, f) {
...@@ -600,8 +603,7 @@ function unique_id () { ...@@ -600,8 +603,7 @@ function unique_id () {
return (new Date()).getTime(); return (new Date()).getTime();
} }
function ShowURL(mode) { function ShowURL(mode,input) {
var input = document.f.id.value;
var searchURL = make_query_URL(bugzilla+"buglist.cgi", input, false); var searchURL = make_query_URL(bugzilla+"buglist.cgi", input, false);
if (searchURL != no_result) { if (searchURL != no_result) {
var pieces = searchURL.replace(/[\?]/g,"\n?").replace(/[\&]/g,"\n&"); var pieces = searchURL.replace(/[\?]/g,"\n?").replace(/[\&]/g,"\n&");
...@@ -684,7 +686,7 @@ function Search(url, input, searchLong) { ...@@ -684,7 +686,7 @@ function Search(url, input, searchLong) {
// derived from http://www.cs.hmc.edu/~jruderma/s/bugz.html // derived from http://www.cs.hmc.edu/~jruderma/s/bugz.html
// QuickSearch combines lookup-by-bug-number and search // QuickSearch combines lookup-by-bug-number and search
// in a single textbox. It's name must be document.f.id . // in a single textbox.
// //
// type nothing: // type nothing:
// --> go to bugzilla front page // --> go to bugzilla front page
...@@ -696,10 +698,8 @@ function Search(url, input, searchLong) { ...@@ -696,10 +698,8 @@ function Search(url, input, searchLong) {
// --> search summary, product, component, keywords, status whiteboard // --> search summary, product, component, keywords, status whiteboard
// (and URL if it's an IP address, a host.name, or an absolute://URL) // (and URL if it's an IP address, a host.name, or an absolute://URL)
function QuickSearch () function QuickSearch (input)
{ {
var input = document.f.id.value;
//remove leading and trailing whitespace //remove leading and trailing whitespace
input = input.replace(/^[\s]+/,"").replace(/[\s]+$/,""); input = input.replace(/^[\s]+/,"").replace(/[\s]+$/,"");
...@@ -726,9 +726,7 @@ function QuickSearch () ...@@ -726,9 +726,7 @@ function QuickSearch ()
return; return;
} }
function LoadQuery() { function LoadQuery(input) {
var input = document.f.id.value;
//remove leading and trailing whitespace //remove leading and trailing whitespace
input = input.replace(/^[\s]+/,"").replace(/[\s]+$/,""); input = input.replace(/^[\s]+/,"").replace(/[\s]+$/,"");
......
...@@ -12,16 +12,14 @@ ...@@ -12,16 +12,14 @@
Type in one or more words (or word fragments) to search for: Type in one or more words (or word fragments) to search for:
<!-- The name of the form must be "f" (used in "quicksearch.js"). -->
<form name="f" action="show_bug.cgi" method="get" <form name="f" action="show_bug.cgi" method="get"
onsubmit="QuickSearch(); return false;"> onsubmit="QuickSearch(f.id.value); return false;">
<table> <table>
<tr> <tr>
<td><input type="text" size="40" name="id"/></td> <td><input type="text" size="40" name="id"/></td>
<td align=left><input type="submit" name="run" value="Search"/></td> <td align=left><input type="submit" name="run" value="Search"/></td>
<td align=left><input type="button" name="load" value="Load Query" <td align=left><input type="button" name="load" value="Load Query"
onclick="LoadQuery();" /> onclick="LoadQuery(f.id.value);" />
</td> </td>
</tr> </tr>
</table> </table>
......
#!/usr/bonsaitools/bin/perl -wT
# -*- Mode: perl; indent-tabs-mode: nil -*-
#
# 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.
#
# Contributor(s): Jacob Steenhagen <jake@acutex.net>
use strict;
use diagnostics;
use lib ".";
require "CGI.pl";
# Shut up "Used Only Once" errors
use vars qw { $anyvotesallowed };
ConnectToDatabase();
# Use the template toolkit (http://www.template-toolkit.org/) to generate
# the user interface (HTML pages and mail messages) using templates in the
# "template/" subdirectory.
use Template;
# Create the global template object that processes templates and specify
# configuration parameters that apply to all templates processed in this script.
my $template = Template->new(
{
# Colon-separated list of directories containing templates.
INCLUDE_PATH => "template/custom:template/default",
# Allow templates to be specified with relative paths.
RELATIVE => 1,
POST_CHOMP =>1,
# Functions for processing text within templates
FILTERS =>
{
url => \&url_quote,
},
}
);
# Define the global variables and functions that will be passed to the UI
# template. Individual functions add their own values to this hash before
# sending them to the templates they process.
my $vars =
{
# Function for retrieving global parameters.
'Param' => \&Param ,
# Function that tells us if the logged in user is in a specific group.
'UserInGroup' => \&UserInGroup ,
};
# Needed for $::anyvotesallowed
GetVersionTable();
# Check to see if the user has logged in yet.
quietly_check_login();
###############################################################################
# Main Body Execution
###############################################################################
$vars->{'username'} = $::COOKIE{'Bugzilla_login'} || '';
$vars->{'anyvotesallowed'} = $::anyvotesallowed;
if (defined $::COOKIE{'Bugzilla_login'}) {
SendSQL("SELECT mybugslink, userid, blessgroupset FROM profiles " .
"WHERE login_name = " . SqlQuote($::COOKIE{'Bugzilla_login'}));
my ($mybugslink, $userid, $blessgroupset) = (FetchSQLData());
$vars->{'userid'} = $userid;
$vars->{'blessgroupset'} = $blessgroupset;
if ($mybugslink) {
my $mybugstemplate = Param("mybugstemplate");
my %substs = ( 'userid' => url_quote($::COOKIE{'Bugzilla_login'}) );
$vars->{'mybugsurl'} = PerformSubsts($mybugstemplate, \%substs);
}
SendSQL("SELECT name FROM namedqueries WHERE userid = $userid AND linkinfooter");
while (MoreSQLData()) {
my ($name) = FetchSQLData();
push(@{$vars->{'namedqueries'}}, $name);
}
}
# This sidebar is currently for use with Mozilla based web browsers.
# Internet Explorer 6 is supposed to have a similar feature, but it
# most likely won't support XUL ;) When that does come out, this
# can be expanded to output normal HTML for IE. Until then, I like
# the way Scott's sidebar looks so I'm using that as the base for
# this file.
# http://bugzilla.mozilla.org/show_bug.cgi?id=37339
my $useragent = $ENV{HTTP_USER_AGENT};
if ($useragent =~ m:Mozilla/([1-9][0-9]*):i && $1 >= 5 && $useragent !~ m/compatible/i) {
print "Content-type: application/vnd.mozilla.xul+xml\n\n";
# Generate and return the XUL from the appropriate template.
$template->process("sidebar/xul.tmpl", $vars)
|| DisplayError("Template process failed: " . $template->error())
&& exit;
} else {
DisplayError("sidebar.cgi currently only supports Mozilla based web browsers");
exit;
}
body
{
font-family: sans-serif;
font-size: 10pt;
background-color: white;
}
ul
{
padding-left: 12px;
}
radio
{
-moz-user-select: ignore;
}
.text-link
{
margin-left: 3px;
}
.text-link:hover
{
text-decoration: underline;
cursor: pointer;
}
.descriptive-content
{
color: #AAAAAA;
}
.descriptive-content[focused=true]
{
color: black;
}
[%# -*- mode: html -*- %]
[%# 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): Terry Weissman <terry@mozilla.org>
# Jacob Steenhagen <jake@acutex.net>
#%]
[% INCLUDE global/header
title = 'Bugzilla Main Page'
%]
<script type="text/javascript" language="JavaScript">
<!--
function addSidebar() {
if ((typeof window.sidebar == "object") && (typeof window.sidebar.addPanel == "function"))
{
window.sidebar.addPanel ("Bugzilla", "[% Param('urlbase') %]sidebar.cgi", "");
}
else
{
var rv = window.confirm ("This page is enhanced for use with Netscape 6. " + "Would you like to upgrade now?");
if (rv)
document.location.href = "http://home.netscape.com/download/index.html";
}
}
//-->
</script>
<table width="100%"><tr>
<td>
<p>This is where we put in lots of nifty words explaining all about Bugzilla.</p>
But it all boils down to a choice of:
<p>
<a href="query.cgi">Query existing bug reports</a><br>
<a href="enter_bug.cgi">Enter a new bug report</a><br>
<a href="reports.cgi">Get summary reports</a><br>
</p><p>
[% IF username %]
<a href="[% PerformSubsts(Param('mybugstemplate'), subst) %]">My Bugs</a><br>
<a href="userprefs.cgi">Change password or user preferences</a><br>
<a href="relogin.cgi">Logout [% username %]</a><br>
[% ELSE %]
<a href="query.cgi?GoAheadAndLogIn=1">Log in to an existing account</a><br>
<a href="createaccount.cgi">Open a new Bugzilla account</a><br>
[% END %]
</p><p>
<a href="javascript:addSidebar()">Add to Sidebar</a> (Requires Mozilla or Netscape 6)<br>
</p>
<form name="f" action="show_bug.cgi" method="get"
onsubmit="QuickSearch(f.id.value); return false;">
<p>
Enter a bug # or some search terms:<br>
<input type="text" name="id">
<input type="submit" value="Show">
<a href="quicksearch.html">[Help]</a>
</p>
</form>
</td>
<td align="right"><img src="ant.jpg" width=329 height=220 border=2 alt="ant.jpg [8.5k]"></td>
</tr></table>
<script type="text/javascript" language="JavaScript" src="localconfig.js"></script>
<script type="text/javascript" language="JavaScript" src="quicksearch.js"></script>
[% INCLUDE global/footer %]
[%# -*- mode: sgml -*- %]
[%# 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): Jacob Steenhagen <jake@acutex.net>
# Scott Collins <scc@mozilla.org>
#%]
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://communicator/skin/" type="text/css"?>
<?xml-stylesheet href="[% Param('urlbase') %]css/panel.css" type="text/css"?>
<window
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
xmlns:html="http://www.w3.org/1999/xhtml"
orient="vertical"
onload="document.getElementById('query-field').addEventListener('keypress', initial_keypress_handler, true)">
// Load QuickSearch libraries
<script type="text/javascript" language="JavaScript" src="localconfig.js"/>
<script type="text/javascript" language="JavaScript" src="quicksearch.js"/>
<script type="text/javascript" language="JavaScript">
// Tell QuickSearch that the source of this is the sidebar
var sidebar = 1;
function load_relative_url( aRelativeURL ) {
aRelativeURL = '[% Param('urlbase') %]' + aRelativeURL;
_content.location = aRelativeURL;
}
function initial_keypress_handler( aEvent ) {
this.removeAttribute("class");
this.addEventListener("keypress", normal_keypress_handler, true);
this.removeEventListener("keypress", initial_keypress_handler, true);
}
function normal_keypress_handler( aEvent ) {
if ( aEvent.keyCode == 13 )
QuickSearch(this.value);
}
</script>
<textbox id="query-field" class="descriptive-content" value="enter query" onfocus="this.setSelectionRange(0,this.value.length)"/>
<separator class="groove"/>
<box autostretch="never" valign="top">
<box orient="vertical" flex="1">
<text class="text-link" onclick="load_relative_url('query.cgi')" value="new query"/>
<text class="text-link" onclick="load_relative_url('reports.cgi')" value="reports"/>
<text class="text-link" onclick="load_relative_url('enter_bug.cgi')" value="new bug"/>
<separator class="thin"/>
[% IF username %]
<text class="text-link" onclick="load_relative_url('userprefs.cgi')" value="edit prefs"/>
[% END %]
[% IF UserInGroup('tweakparams') %]
<text class="text-link" onclick="load_relative_url('editparams.cgi')" value="edit params"/>
[% END %]
[% IF UserInGroup('editusers') || blessgroupset %]
<text class="text-link" onclick="load_relative_url('editusers.cgi')" value="edit users"/>
[% END %]
[% IF UserInGroup('editcomponents') %]
<text class="text-link" onclick="load_relative_url('editcomponents.cgi')" value="edit components"/>
[% END %]
[% IF UserInGroup('creategroups') %]
<text class="text-link" onclick="load_relative_url('editgroups.cgi')" value="edit groups"/>
[% END %]
[% IF UserInGroup('editkeywords') %]
<text class="text-link" onclick="load_relative_url('editkeywords.cgi')" value="edit keywords"/>
[% END %]
[% IF UserInGroup('tweakparams') %]
<text class="text-link" onclick="load_relative_url('sanitycheck.cgi')" value="sanity check"/>
[% END %]
[% IF username %]
<text class="text-link" onclick="load_relative_url('relogin.cgi')" value="logout [% username FILTER html %]"/>
<separator class="thin"/>
[% END %]
[% IF mybugsurl %]
<text class="text-link" onclick="load_relative_url('[% mybugsurl FILTER html %]')" value="my bugs"/>
[% END %]
[% IF anyvotesallowed && username %]
<text class="text-link" onclick="load_relative_url('showvotes.cgi')" value="my votes"/>
[% END %]
[% FOREACH name = namedqueries %]
<text class="text-link" onclick="load_relative_url('buglist.cgi?cmdtype=runnamed&amp;namedcmd=[% name FILTER url %]')" value="[% name FILTER html %]"/>
[% END %]
[% IF NOT username %]
<text class="text-link" onclick="load_relative_url('createaccount.cgi')" value="new user"/>
<text class="text-link" onclick="load_relative_url('query.cgi?GoAheadAndLogIn=1')" value="log in"/>
[% END %]
</box>
</box>
<spring flex="1"/>
<box orient="horizontal">
<spring flex="1"/>
<html align="right">
<html:a class="text-link" href="[% Param('urlbase') %]sidebar.cgi">reload</html:a>
</html>
</box>
</window>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment