diff options
-rw-r--r-- | .cvsignore | 2 | ||||
-rwxr-xr-x | checksetup.pl | 45 | ||||
-rw-r--r-- | css/panel.css | 37 | ||||
-rwxr-xr-x | index.cgi | 90 | ||||
-rw-r--r-- | index.html | 98 | ||||
-rw-r--r-- | quicksearch.html | 4 | ||||
-rw-r--r-- | quicksearch.js | 20 | ||||
-rw-r--r-- | quicksearchhack.html | 6 | ||||
-rwxr-xr-x | sidebar.cgi | 116 | ||||
-rw-r--r-- | skins/standard/panel.css | 37 | ||||
-rw-r--r-- | template/default/index.tmpl | 83 | ||||
-rw-r--r-- | template/default/sidebar/xul.tmpl | 121 |
12 files changed, 542 insertions, 117 deletions
diff --git a/.cvsignore b/.cvsignore index 64432ca1e..fb345b2b0 100644 --- a/.cvsignore +++ b/.cvsignore @@ -2,4 +2,4 @@ graphs data localconfig -shadow +index.html diff --git a/checksetup.pl b/checksetup.pl index 942c4e2ef..99f2df135 100755 --- a/checksetup.pl +++ b/checksetup.pl @@ -282,6 +282,21 @@ sub LocalVar ($$) # 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`; if ($mysql_binaries =~ /no mysql/) { # If which didn't find it, just provide a reasonable default @@ -473,6 +488,7 @@ my $my_db_port = ${*{$main::{'db_port'}}{SCALAR}}; my $my_db_name = ${*{$main::{'db_name'}}{SCALAR}}; my $my_db_user = ${*{$main::{'db_user'}}{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_webservergroup = ${*{$main::{'webservergroup'}}{SCALAR}}; my @my_severities = @{*{$main::{'severities'}}{ARRAY}}; @@ -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 ... unlink "data/versioncache"; diff --git a/css/panel.css b/css/panel.css new file mode 100644 index 000000000..23b52705e --- /dev/null +++ b/css/panel.css @@ -0,0 +1,37 @@ +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; + } diff --git a/index.cgi b/index.cgi new file mode 100755 index 000000000..5c300992d --- /dev/null +++ b/index.cgi @@ -0,0 +1,90 @@ +#!/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; diff --git a/index.html b/index.html deleted file mode 100644 index 3a1a76ff6..000000000 --- a/index.html +++ /dev/null @@ -1,98 +0,0 @@ -<!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> diff --git a/quicksearch.html b/quicksearch.html index 900180065..df7e85ccf 100644 --- a/quicksearch.html +++ b/quicksearch.html @@ -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: -<!-- The name of the form must be "f" (used in "quicksearch.js"). --> - <form name="f" action="show_bug.cgi" method="get" - onsubmit="QuickSearch(); return false;"> + onsubmit="QuickSearch(f.id.value); return false;"> <table> <tr> <td><input type="text" size="40" name="id"/></td> diff --git a/quicksearch.js b/quicksearch.js index 7778d3598..e8834a722 100644 --- a/quicksearch.js +++ b/quicksearch.js @@ -46,8 +46,11 @@ function do_shift(l) { } function go_to (url) { - document.location.href = url; - //window.open(url, "other" ); + if (sidebar == 1) { + load_relative_url(url); + } else { + document.location.href = url; + } } function map(l, f) { @@ -600,8 +603,7 @@ function unique_id () { return (new Date()).getTime(); } -function ShowURL(mode) { - var input = document.f.id.value; +function ShowURL(mode,input) { var searchURL = make_query_URL(bugzilla+"buglist.cgi", input, false); if (searchURL != no_result) { var pieces = searchURL.replace(/[\?]/g,"\n?").replace(/[\&]/g,"\n&"); @@ -684,7 +686,7 @@ function Search(url, input, searchLong) { // derived from http://www.cs.hmc.edu/~jruderma/s/bugz.html // 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: // --> go to bugzilla front page @@ -696,10 +698,8 @@ function Search(url, input, searchLong) { // --> search summary, product, component, keywords, status whiteboard // (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 input = input.replace(/^[\s]+/,"").replace(/[\s]+$/,""); @@ -726,9 +726,7 @@ function QuickSearch () return; } -function LoadQuery() { - var input = document.f.id.value; - +function LoadQuery(input) { //remove leading and trailing whitespace input = input.replace(/^[\s]+/,"").replace(/[\s]+$/,""); diff --git a/quicksearchhack.html b/quicksearchhack.html index 7d788f626..70dcb4b55 100644 --- a/quicksearchhack.html +++ b/quicksearchhack.html @@ -12,16 +12,14 @@ 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" - onsubmit="QuickSearch(); return false;"> + onsubmit="QuickSearch(f.id.value); return false;"> <table> <tr> <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="button" name="load" value="Load Query" - onclick="LoadQuery();" /> + onclick="LoadQuery(f.id.value);" /> </td> </tr> </table> diff --git a/sidebar.cgi b/sidebar.cgi new file mode 100755 index 000000000..587b0c534 --- /dev/null +++ b/sidebar.cgi @@ -0,0 +1,116 @@ +#!/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; +} + + + diff --git a/skins/standard/panel.css b/skins/standard/panel.css new file mode 100644 index 000000000..23b52705e --- /dev/null +++ b/skins/standard/panel.css @@ -0,0 +1,37 @@ +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; + } diff --git a/template/default/index.tmpl b/template/default/index.tmpl new file mode 100644 index 000000000..8c1af4ed6 --- /dev/null +++ b/template/default/index.tmpl @@ -0,0 +1,83 @@ +[%# -*- 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 %] diff --git a/template/default/sidebar/xul.tmpl b/template/default/sidebar/xul.tmpl new file mode 100644 index 000000000..1794d5f50 --- /dev/null +++ b/template/default/sidebar/xul.tmpl @@ -0,0 +1,121 @@ +[%# -*- 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&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> |