diff options
279 files changed, 37521 insertions, 0 deletions
diff --git a/template/en/default/account/auth/login-small.html.tmpl b/template/en/default/account/auth/login-small.html.tmpl new file mode 100644 index 0000000..34e5ff9 --- /dev/null +++ b/template/en/default/account/auth/login-small.html.tmpl @@ -0,0 +1,115 @@ +[%# 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@bugzilla.org> + #%] + +[% PROCESS global/variables.none.tmpl %] + +[%# Use the current script name. If an empty name is returned, + # then we are accessing the home page. %] + +[% login_target = cgi.url("-relative" => 1, "-query" => 1) %] +[% IF !login_target OR login_target.match("^token.cgi") %] + [% login_target = "index.cgi" %] +[% END %] + +[% login_target = urlbase _ login_target %] + +<li id="mini_login_container[% qs_suffix %]"> + <span class="separator">| </span> + <a id="login_link[% qs_suffix %]" href="?GoAheadAndLogIn=1" + onclick="return show_mini_login_form('[% qs_suffix %]')">Log In</a> + <form action="[% login_target FILTER html %]" method="POST" + class="mini_login bz_default_hidden" + id="mini_login[% qs_suffix FILTER html %]" + onsubmit="return check_mini_login_fields( '[% qs_suffix FILTER html %]' );" + > + <input id="Bugzilla_login[% qs_suffix FILTER html %]" + class="bz_login" + name="Bugzilla_login" + onfocus="mini_login_on_focus('[% qs_suffix FILTER js %]')" + > + <input class="bz_password" + id="Bugzilla_password[% qs_suffix FILTER html %]" + name="Bugzilla_password" + type="password" + > + <input class="bz_password bz_default_hidden bz_mini_login_help" type="text" + id="Bugzilla_password_dummy[% qs_suffix %]" value="password" + onfocus="mini_login_on_focus('[% qs_suffix FILTER js %]')" + > + [% IF Param('rememberlogin') == 'defaulton' || + Param('rememberlogin') == 'defaultoff' + %] + <input type="checkbox" id="Bugzilla_remember[% qs_suffix %]" + name="Bugzilla_remember" value="on" class="bz_remember" + [%+ "checked" IF Param('rememberlogin') == "defaulton" %]> + <label for="Bugzilla_remember[% qs_suffix %]">Remember</label> + [% END %] + <input type="submit" name="GoAheadAndLogIn" value="Log in" + id="log_in[% qs_suffix %]"> + <script type="text/javascript"> + mini_login_constants = { + "login" : "login", + "warning" : "You must set the login and password before logging in." + }; + [%# We need this event to fire after autocomplete, because it does + # something different depending on whether or not there's already + # data in the login and password box. + # However, autocomplete happens at all sorts of different times in + # different browsers (before or after onDOMReady, before or after + # window.onload, in almost all combinations you can imagine). + # The only good solution I found is to time the event 200 + # milliseconds after window.onload for WebKit (doing it immediately + # at onload works in Chrome but not in Safari, but I can't detect + # them separately using YUI), and right after onDOMReady in Gecko. + # The WebKit solution is also fairly guaranteed to work on any + # browser (it's just strange, since the fields only populate 200 ms + # after the page loads), so it's the default. IE doesn't even + # recognize our forms as login forms, so I made it use the Gecko + # method also (since it's nicer visually). Opera never autocompletes + # forms without user interaction, so it also uses the Gecko method. + #%] + if (YAHOO.env.ua.gecko || YAHOO.env.ua.ie || YAHOO.env.ua.opera) { + YAHOO.util.Event.onDOMReady(function() { + init_mini_login_form('[% qs_suffix FILTER html %]'); + }); + } + else { + YAHOO.util.Event.on(window, 'load', function () { + window.setTimeout(function() { + init_mini_login_form('[% qs_suffix FILTER html %]'); + }, 200); + }); + } + </script> + <a href="#" onclick="return hide_mini_login_form('[% qs_suffix %]')">[x]</a> + </form> +</li> +<li id="forgot_container[% qs_suffix %]"> + <span class="separator">| </span> + <a href="http://identity.mageia.org/">Forgot Password</a> + <form action="token.cgi" method="post" id="forgot_form[% qs_suffix %]" + class="mini_forgot bz_default_hidden"> + <label>Login: <input type="text" name="loginname" size="20"></label> + <input id="forgot_button[% qs_suffix %]" value="Reset Password" + type="submit"> + <input type="hidden" name="a" value="reqpw"> + <a href="#" onclick="return hide_forgot_form('[% qs_suffix %]')">[x]</a> + </form> +</li> diff --git a/template/en/default/account/auth/login.html.tmpl b/template/en/default/account/auth/login.html.tmpl new file mode 100644 index 0000000..9a043e4 --- /dev/null +++ b/template/en/default/account/auth/login.html.tmpl @@ -0,0 +1,121 @@ +[%# 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> + # Toms Baugis <toms@myrealbox.com> + #%] + +[%# INTERFACE: + # target: string. URL to go to after login. + #%] + +[% IF !target %] + [% target = "index.cgi" %] +[% END %] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl + title = "Log in to $terms.Bugzilla", + onload = "document.forms['login'].Bugzilla_login.focus()" +%] + +[% USE Bugzilla %] + +<p> + I need a legitimate login and password to continue. +</p> + +<form name="login" action="[% target FILTER html %]" method="POST" +[%- IF Bugzilla.cgi.param("data") %] enctype="multipart/form-data"[% END %]> + <table> + <tr> + <th align="right"><label for="Bugzilla_login">Login:</label></th> + <td> + <input size="35" id="Bugzilla_login" name="Bugzilla_login"> + [% Param('emailsuffix') FILTER html %] + </td> + </tr> + <tr> + <th align="right"><label for="Bugzilla_password">Password:</label></th> + <td> + <input type="password" size="35" id="Bugzilla_password" name="Bugzilla_password"> + </td> + </tr> + + [% IF Param('rememberlogin') == 'defaulton' || + Param('rememberlogin') == 'defaultoff' %] + <tr> + <th> </th> + <td> + <input type="checkbox" id="Bugzilla_remember" name="Bugzilla_remember" value="on" + [%+ "checked" IF Param('rememberlogin') == "defaulton" %]> + <label for="Bugzilla_remember">Remember my Login</label> + </td> + </tr> + [% END %] + + <tr> + <th> </th> + <td> + <input type="checkbox" id="Bugzilla_restrictlogin" name="Bugzilla_restrictlogin" + checked="checked"> + <label for="Bugzilla_restrictlogin">Restrict this session to this IP address + (using this option improves security)</label> + </td> + </tr> + </table> + + [% PROCESS "global/hidden-fields.html.tmpl" + exclude="^Bugzilla_(login|password|restrictlogin)$" %] + + <input type="submit" name="GoAheadAndLogIn" value="Log in" id="log_in"> + + <p> + (Note: you should make sure cookies are enabled for this site. + Otherwise, you will be required to log in frequently.) + </p> +</form> + +[%# Allow the user to create a new account, or request a token to change + # their password, assuming that our auth method allows that. + #%] + + [% IF Param("createemailregexp") && user.authorizer.user_can_create_account %] + <hr> + + <p> + If you don't have a [% terms.Bugzilla %] account, you can + <a href="createaccount.cgi">create a new account</a>. + </p> + [% END %] + + [% IF user.authorizer.can_change_password %] + <hr> + + <a name="forgot"></a> + <form method="get" action="token.cgi"> + <input type="hidden" name="a" value="reqpw"> + If you have an account, but have forgotten your password, + enter your login name below and submit a request + to change your password.<br> + <input size="35" name="loginname"> + <input type="submit" id="request" value="Reset Password"> + </form> + [% END %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/account/cancel-token.txt.tmpl b/template/en/default/account/cancel-token.txt.tmpl new file mode 100644 index 0000000..6619ded --- /dev/null +++ b/template/en/default/account/cancel-token.txt.tmpl @@ -0,0 +1,106 @@ +[%# 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): John Vandenberg <zeroj@null.net> + # Tobias Burnus <burnus@net-b.de> + #%] + +[% PROCESS global/variables.none.tmpl %] + +From: [% Param('mailfrom') %] +To: [% emailaddress %] +Subject: [% PROCESS subject %] +X-Bugzilla-Type: admin + +A request was canceled from [% remoteaddress %]. + +If you did not request this, it could be either an honest +mistake or someone attempting to break into your [% terms.Bugzilla %] account. + +Take a look at the information below and forward this email +to [% Param('maintainer') %] if you suspect foul play. + + Token: [% token %] + Token Type: [% tokentype %] + User: [% emailaddress %] + Issue Date: [% issuedate FILTER time("%Y-%m-%d %H:%M:%S %Z", timezone) %] + Event Data: [% eventdata %] +Canceled Because: [% PROCESS cancelactionmessage %] + +[% BLOCK subject %] + [% IF tokentype == 'new_account' %] + User account creation request canceled + [% ELSIF tokentype == 'password' %] + Password change request canceled + [% ELSIF tokentype == 'emailnew' OR tokentype == 'emailold' %] + Email change request canceled + [% ELSE %] + [% tokentype %] token canceled + [% END %] +[% END %] + +[% BLOCK cancelactionmessage %] + [% IF cancelaction == 'account_exists' %] + Account [% email %] already exists. + + [% ELSIF cancelaction == 'email_change_canceled' %] + The request to change the email address for + the [% old_email %] account to [% new_email %] has + been canceled. + + [% ELSIF cancelaction == 'email_change_canceled_reinstated' %] + The request to change the email address for your account + to [% new_email %] has been canceled. Your old account + settings have been reinstated. + + [% ELSIF cancelaction == 'emailold_change_canceled' %] + The request to change the email address for your account + to [% new_email %] has been canceled. + + [% ELSIF cancelaction == 'password_change_canceled' %] + You have requested cancellation. + + [% ELSIF cancelaction == 'account_creation_canceled' %] + The creation of the user account [% emailaddress %] + has been canceled. + + [% ELSIF cancelaction == 'user_logged_in' %] + You have logged in. + + [% ELSIF cancelaction == 'wrong_token_for_changing_passwd' %] + You have tried to use the token to change the password. + + [% ELSIF cancelaction == 'wrong_token_for_cancelling_email_change' %] + You have tried to use the token to cancel the email address change. + + [% ELSIF cancelaction == 'wrong_token_for_confirming_email_change' %] + You have tried to use the token to confirm the email address change. + + [% ELSIF cancelaction == 'wrong_token_for_creating_account' %] + You have tried to use the token to create a user account. + + [% ELSE %] + [%# Give sensible error if the cancel-token function is used incorrectly. + #%] + You are using [% terms.Bugzilla %]'s cancel-token function incorrectly. You + passed in the string '[% cancelaction %]'. The correct use is to pass + in a tag, and define that tag in the file cancel-token.txt.tmpl. + + If you are a [% terms.Bugzilla %] end-user seeing this message, please forward this + email to [% Param('maintainer') %]. + [% END %] +[% END %] diff --git a/template/en/default/account/create.html.tmpl b/template/en/default/account/create.html.tmpl new file mode 100644 index 0000000..5b82201 --- /dev/null +++ b/template/en/default/account/create.html.tmpl @@ -0,0 +1,79 @@ +[%# 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 + # none + # + # Param("maintainer") is used to display the maintainer's email. + # Param("emailsuffix") is used to pre-fill the email field. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% title = BLOCK %] + Create a new [% terms.Bugzilla %] account +[% END %] + +[% PROCESS global/header.html.tmpl + title = title + onload = "document.forms['account_creation_form'].login.focus();" %] + +<p> + To create a [% terms.Bugzilla %] account, all you need to do is to enter +[% IF Param('emailsuffix') == '' %] + a legitimate email address. +[% ELSE %] + an account name which when combined with [% Param('emailsuffix') %] + corresponds to an address where you receive email. +[% END %] + You will receive an email at this address to confirm the creation of your + account. <b>You will not be able to log in until you receive the email.</b> + If it doesn't arrive within a reasonable amount of time, you may contact + the maintainer of this [% terms.Bugzilla %] installation + at <a href="mailto:[% Param("maintainer") %]">[% Param("maintainer") %]</a>. +</p> + +[% IF Param('createemailregexp') == '.*' && Param('emailsuffix') == '' %] +<p> + <b>PRIVACY NOTICE:</b> [% terms.Bugzilla %] is an open [% terms.bug %] + tracking system. Activity on most [% terms.bugs %], including email + addresses, will be visible to the public. We <b>recommend</b> using a + secondary account or free web email service (such as Gmail, Yahoo, + Hotmail, or similar) to avoid receiving spam at your primary email address. +</p> +[% END %] + +<form id="account_creation_form" method="get" action="createaccount.cgi"> + <table> + <tr> + <td align="right"> + <b>Email address:</b> + </td> + <td> + <input size="35" id="login" name="login"> + [% Param('emailsuffix') FILTER html %] + </td> + </tr> + </table> + <br> + <input type="submit" id="send" value="Send"> +</form> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/account/created.html.tmpl b/template/en/default/account/created.html.tmpl new file mode 100644 index 0000000..d794198 --- /dev/null +++ b/template/en/default/account/created.html.tmpl @@ -0,0 +1,40 @@ +[%# 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> + # Frédéric Buclin <LpSolit@gmail.com> + #%] + +[%# INTERFACE: + # login: string. The user's Bugzilla login email address. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% title = BLOCK %] + Request for new user account '[% login FILTER html %]' submitted +[% END %] + +[% PROCESS global/header.html.tmpl title = title %] + +<p> + A confirmation email has been sent containing a link to continue + creating an account. The link will expire if an account is not + created within [% constants.MAX_TOKEN_AGE FILTER html %] days. +</p> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/account/email/change-new.txt.tmpl b/template/en/default/account/email/change-new.txt.tmpl new file mode 100644 index 0000000..5803b02 --- /dev/null +++ b/template/en/default/account/email/change-new.txt.tmpl @@ -0,0 +1,41 @@ +[%# 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): John Vandenberg <zeroj@null.net> + #%] + +[% PROCESS global/variables.none.tmpl %] + +From: [% Param('mailfrom') %] +To: [% emailaddress %] +Subject: [% terms.Bugzilla %] Change Email Address Request +X-Bugzilla-Type: admin + +[%+ terms.Bugzilla %] has received a request to change the email address +for the account [% oldemailaddress %] to your address. + +To confirm the change, visit the following link: + +[%+ urlbase %]token.cgi?t=[% token FILTER url_quote %]&a=cfmem + +If you are not the person who made this request, or you wish to cancel +this request, visit the following link: + +[%+ urlbase %]token.cgi?t=[% token FILTER url_quote %]&a=cxlem + +If you do nothing, the request will lapse after [% constants.MAX_TOKEN_AGE %] days +(on [% expiration_ts FILTER time("%B %e, %Y at %H:%M %Z") %]). diff --git a/template/en/default/account/email/change-old.txt.tmpl b/template/en/default/account/email/change-old.txt.tmpl new file mode 100644 index 0000000..6b77744 --- /dev/null +++ b/template/en/default/account/email/change-old.txt.tmpl @@ -0,0 +1,46 @@ +[%# 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): John Vandenberg <zeroj@null.net> + #%] +[%# INTERFACE: + # emailaddress: string. The user's old Bugzilla login email address. + # newemailaddress: string. The user's new Bugzilla login email address. + # token: string. The token associated with this change. + #%] + +[% PROCESS global/variables.none.tmpl %] + +From: [% Param('mailfrom') %] +To: [% emailaddress %] +Subject: [% terms.Bugzilla %] Change Email Address Request +Importance: High +X-MSMail-Priority: High +X-Priority: 1 +X-Bugzilla-Type: admin + +[%+ terms.Bugzilla %] has received a request to change the email address +for your account to [%+ newemailaddress %]. + +If you are not the person who made this request, or you wish to cancel +this request, visit the following link: + +[%+ urlbase %]token.cgi?t=[% token FILTER url_quote %]&a=cxlem + +If you do nothing, and [%+ newemailaddress %] confirms this request, +the change will be made permanent after [% constants.MAX_TOKEN_AGE %] days +(on [% expiration_ts FILTER time("%B %e, %Y at %H:%M %Z") %]). diff --git a/template/en/default/account/email/confirm-new.html.tmpl b/template/en/default/account/email/confirm-new.html.tmpl new file mode 100644 index 0000000..ed0ff34 --- /dev/null +++ b/template/en/default/account/email/confirm-new.html.tmpl @@ -0,0 +1,76 @@ +[%# 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): Frédéric Buclin <LpSolit@gmail.com> + #%] + +[%# INTERFACE: + # token: string. The token to be used in the user account creation. + # email: email address of the user account. + # expiration_ts: expiration date of the token. + #%] + +[% title = BLOCK %]Create a new user account for '[% email FILTER html %]'[% END %] +[% PROCESS "global/header.html.tmpl" + title = title + onload = "document.forms['confirm_account_form'].realname.focus();" %] + +<div> + To create your account, you must enter a password in the form below. + Your email address and Real Name (if provided) will be shown with + changes you make. +</div> + +<form id="confirm_account_form" method="post" action="token.cgi"> + <input type="hidden" name="t" value="[% token FILTER html %]"> + <input type="hidden" name="a" value="confirm_new_account"> + <table> + <tr> + <th align="right">Email Address:</th> + <td>[% email FILTER html %]</td> + </tr> + <tr> + <th align="right"><small><i>(OPTIONAL)</i></small> <label for="realname">Real Name</label>:</th> + <td><input type="text" id="realname" name="realname" value=""></td> + </tr> + <tr> + <th align="right"><label for="passwd1">Type your password</label>:</th> + <td><input type="password" id="passwd1" name="passwd1" value=""></td> + </tr> + <tr> + <th align="right"><label for="passwd2">Confirm your password</label>:</th> + <td><input type="password" id="passwd2" name="passwd2" value=""></td> + </tr> + <tr> + <th align="right"> </th> + <td><input type="submit" id="confirm" value="Send"></td> + </tr> + </table> +</form> + +<p> + This account will not be created if this form is not completed by + <u>[% expiration_ts FILTER time("%B %e, %Y at %H:%M %Z") %]</u>. +</p> + +<p> + If you do not wish to create an account with this email click the + cancel account button below and your details will be forgotten. +</p> + +<form id="cancel_account_form" method="post" action="token.cgi"> + <input type="hidden" name="t" value="[% token FILTER html %]"> + <input type="hidden" name="a" value="cancel_new_account"> + <input type="submit" id="confirm" value="Cancel Account"> +</form> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/account/email/confirm.html.tmpl b/template/en/default/account/email/confirm.html.tmpl new file mode 100644 index 0000000..39add32 --- /dev/null +++ b/template/en/default/account/email/confirm.html.tmpl @@ -0,0 +1,47 @@ +[%# 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): John Vandenberg <zeroj@null.net> + #%] + +[%# INTERFACE: + # token: string. The token to be used in this address change. + #%] + +[% title = "Confirm Change Email" %] +[% PROCESS global/header.html.tmpl %] + +<p> + To change your email address, please enter the old email address: +</p> + +<form method="post" action="token.cgi"> + <input type="hidden" name="t" value="[% token FILTER html %]"> + <input type="hidden" name="a" value="chgem"> + <table> + <tr> + <th align="right">Old Email Address:</th> + <td><input type="text" name="email" size="36"></td> + </tr> + <tr> + <th align="right"> </th> + <td><input type="submit" id="confirm" value="Submit"></td> + </tr> + </table> +</form> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/account/email/request-new.txt.tmpl b/template/en/default/account/email/request-new.txt.tmpl new file mode 100644 index 0000000..c56054b --- /dev/null +++ b/template/en/default/account/email/request-new.txt.tmpl @@ -0,0 +1,56 @@ +[%# 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): Frédéric Buclin <LpSolit@gmail.com> + #%] + +[%# INTERFACE: + # token: random string used to authenticate the transaction. + # expiration_ts: expiration date of the token. + # email: email address of the new account. + #%] + +[% PROCESS global/variables.none.tmpl %] + +From: [% Param('mailfrom') %] +To: [% email %] +Subject: [% terms.Bugzilla %]: confirm account creation +X-Bugzilla-Type: admin + +[%+ terms.Bugzilla %] has received a request to create a user account +using your email address ([% email %]). + +To continue creating an account using this email address, visit the +following link by [% expiration_ts FILTER time("%B %e, %Y at %H:%M %Z") %]: + +[%+ urlbase %]token.cgi?t=[% token FILTER url_quote %]&a=request_new_account + +If you did not receive this email before [% expiration_ts FILTER time("%B %e, %Y at %H:%M %Z") %] or +you wish to create an account using a different email address you can begin +again by going to: + +[%+ urlbase %]createaccount.cgi + +[% IF Param('createemailregexp') == '.*' && Param('emailsuffix') == '' %] +PRIVACY NOTICE: [% terms.Bugzilla %] is an open [% terms.bug %] tracking system. Activity on most +[%+ terms.bugs %], including email addresses, will be visible to the public. We recommend +using a secondary account or free web email service (such as Gmail, Yahoo, +Hotmail, or similar) to avoid receiving spam at your primary email address. +[% END %] + +If you do not wish to create an account, or if this request was made in +error you can do nothing or visit the following link: + +[%+ urlbase %]token.cgi?t=[% token FILTER url_quote %]&a=cancel_new_account + +If the above links do not work, or you have any other issues regarding +your account, please contact administration at [% Param('maintainer') %]. diff --git a/template/en/default/account/password/forgotten-password.txt.tmpl b/template/en/default/account/password/forgotten-password.txt.tmpl new file mode 100644 index 0000000..574975c --- /dev/null +++ b/template/en/default/account/password/forgotten-password.txt.tmpl @@ -0,0 +1,40 @@ +[%# 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): John Vandenberg <zeroj@null.net> + #%] + +[% PROCESS global/variables.none.tmpl %] + +From: [% Param('mailfrom') %] +To: [% emailaddress %] +Subject: [% terms.Bugzilla %] Change Password Request +X-Bugzilla-Type: admin + +You have (or someone impersonating you has) requested to change your +[%+ terms.Bugzilla %] password. To complete the change, visit the following link: + +[%+ urlbase %]token.cgi?t=[% token FILTER url_quote %]&a=cfmpw + +If you are not the person who made this request, or you wish to cancel +this request, visit the following link: + +[%+ urlbase %]token.cgi?t=[% token FILTER url_quote %]&a=cxlpw + +If you do nothing, the request will lapse after [% constants.MAX_TOKEN_AGE %] days +(on [% expiration_ts FILTER time("%B %e, %Y at %H:%M %Z", timezone) %]) or when you +log in successfully. diff --git a/template/en/default/account/password/set-forgotten-password.html.tmpl b/template/en/default/account/password/set-forgotten-password.html.tmpl new file mode 100644 index 0000000..ca134a4 --- /dev/null +++ b/template/en/default/account/password/set-forgotten-password.html.tmpl @@ -0,0 +1,55 @@ + [%# 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> + #%] + +[% title = "Change Password" %] +[% PROCESS global/header.html.tmpl %] + +<p> + To change your password, enter a new password twice: +</p> + +<form method="post" action="token.cgi"> + <input type="hidden" name="t" value="[% token FILTER html %]"> + <input type="hidden" name="a" value="chgpw"> + <table> + <tr> + <th align="right">New Password:</th> + <td> + <input type="password" name="password"> + </td> + </tr> + + <tr> + <th align="right">New Password Again:</th> + <td> + <input type="password" name="matchpassword"> + </td> + </tr> + + <tr> + <th align="right"> </th> + <td> + <input type="submit" id="update" value="Submit"> + </td> + </tr> + </table> +</form> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/account/prefs/account.html.tmpl b/template/en/default/account/prefs/account.html.tmpl new file mode 100644 index 0000000..0457ff8 --- /dev/null +++ b/template/en/default/account/prefs/account.html.tmpl @@ -0,0 +1,99 @@ +[%# 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: + # realname: string. The user's real name, if any. + # login_change_date: string. The date the email change will be complete. (optional) + # new_login_name: string. The user's new Bugzilla login whilst not confirmed. (optional) + #%] + +<table> + <tr> + <td colspan="3"> + Please enter your existing password to confirm account changes. + </td> + </tr> + <tr> + <th align="right">Password:</th> + <td> + <input type="hidden" name="old_login" value="[% user.login FILTER html %]"> + <input type="password" name="old_password"> + </td> + </tr> + <tr> + <td colspan="2"><hr></td> + </tr> + [% IF user.authorizer.can_change_password %] + <tr> + <th align="right">New password:</th> + <td> + <input type="password" name="new_password1"> + </td> + </tr> + + <tr> + <th align="right">Confirm new password:</th> + <td> + <input type="password" name="new_password2"> + </td> + </tr> + [% END %] + + <tr> + <th align="right">Your real name (optional, but encouraged):</th> + <td> + <input size="35" name="realname" value="[% realname FILTER html %]"> + </td> + </tr> + + [% IF user.authorizer.can_change_email && Param('allowemailchange') %] + [% IF login_change_date %] + [% IF new_login_name %] + <tr> + <th align="right">Pending email address:</th> + <td>[% new_login_name FILTER html %]</td> + </tr> + <tr> + <th align="right">Change request expires:</th> + <td>[% login_change_date FILTER time %]</td> + </tr> + [% ELSE %] + <tr> + <th align="right">Confirmed email address:</th> + <td>[% user.login FILTER html %]</td> + </tr> + <tr> + <th align="right">Completion date:</th> + <td>[% login_change_date FILTER time %]</td> + </tr> + [% END %] + [% ELSE %] + <tr> + <th align="right">New email address:</th> + <td> + <input size="35" name="new_login_name"> + </td> + </tr> + [% END %] + [% END %] + + [% Hook.process('field') %] + +</table> diff --git a/template/en/default/account/prefs/email.html.tmpl b/template/en/default/account/prefs/email.html.tmpl new file mode 100644 index 0000000..a4d22db --- /dev/null +++ b/template/en/default/account/prefs/email.html.tmpl @@ -0,0 +1,309 @@ +[%# 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> + # Myk Melez <myk@mozilla.org> + # Shane H. W. Travis <travis@sedsystems.ca> + #%] + +[%# INTERFACE: + # watchedusers: string. + # Comma-separated list of email addresses this user watches. + # watchers: array. + # Array of users watching this user's account. + # excludeself: boolean. + # True if user is not receiving self-generated mail. + # <rolename>: Multiple hashes, one for each rolename (e.g. assignee; see + # below), keyed by reasonname (e.g. comments; again, see + # below). The value is a boolean - true if the user is + # receiving mail for that reason when in that role. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% useqacontact = Param('useqacontact') %] +[% usevotes = Param('usevotes') %] + +<p> + If you don't like getting a notification for "trivial" + changes to [% terms.bugs %], you can use the settings below to + filter some or all notifications. +</p> + +<script type="text/javascript"> +<!-- +function SetCheckboxes(setting) { + for (var count = 0; count < document.userprefsform.elements.length; count++) { + var theinput = document.userprefsform.elements[count]; + if (theinput.type == "checkbox" && !theinput.disabled) { + if (theinput.name.match("neg")) { + theinput.checked = false; + } + else { + theinput.checked = setting; + } + } + } +} + +document.write('<input type="button" value="Enable All Mail" onclick="SetCheckboxes(true); return false;">\n'); +document.write('<input type="button" value="Disable All Mail" onclick="SetCheckboxes(false); return false;">\n'); +// --> +</script> + +<hr> + +<table> + <tr> + <td colspan="2"> + <b>Global options:</b> + </td> + </tr> + + <tr> + <td width="150"></td> + <td> + [% prefname = "email-$constants.REL_ANY-$constants.EVT_FLAG_REQUESTED" %] + <input type="checkbox" name="[% prefname %]" id="[% prefname %]" + value="1" + [% " checked" IF + mail.${constants.REL_ANY}.${constants.EVT_FLAG_REQUESTED} %]> + <label for="[% prefname %]">Email me when someone asks me to set a flag</label> + <br> + </td> + </tr> + <tr> + <td width="150"></td> + <td> + [% prefname = "email-$constants.REL_ANY-$constants.EVT_REQUESTED_FLAG" %] + <input type="checkbox" name="[% prefname %]" id="[% prefname %]" + value="1" + [% " checked" IF + mail.${constants.REL_ANY}.${constants.EVT_REQUESTED_FLAG} %]> + <label for="[% prefname %]">Email me when someone sets a flag I asked for</label> + <br> + </td> + </tr> +[% IF user.is_global_watcher %] + <tr> + <td width="150"></td> + <td> + You are watching all [% terms.bugs %]. To be removed from this role, + contact + <a href="mailto:[% Param("maintainer") %]">[% Param("maintainer") %]</a>. + </td> + </tr> +[% END %] +</table> + +<hr> +<b>Field/recipient specific options:</b> +<br> +<br> + +[% events = [ + { id = constants.EVT_ADDED_REMOVED, + description = "I'm added to or removed from this capacity" }, + { id = constants.EVT_BUG_CREATED, + description = "A new $terms.bug is created" }, + { id = constants.EVT_OPENED_CLOSED, + description = "The $terms.bug is resolved or reopened" }, + { id = constants.EVT_PROJ_MANAGEMENT, + description = "The priority, status, severity, or milestone changes" }, + { id = constants.EVT_COMMENT, + description = "New comments are added" }, + { id = constants.EVT_ATTACHMENT, + description = "New attachments are added" }, + { id = constants.EVT_ATTACHMENT_DATA, + description = "Some attachment data changes" }, + { id = constants.EVT_KEYWORD, + description = "The keywords field changes" }, + { id = constants.EVT_CC, + description = "The CC field changes" }, + { id = constants.EVT_DEPEND_BLOCK, + description = "The dependency tree changes" }, + { id = constants.EVT_OTHER, + description = "Any field not mentioned above changes" }, +] %] + +[% neg_events = [ + { id = constants.EVT_UNCONFIRMED, + description = "The $terms.bug is in the UNCONFIRMED state" }, + { id = constants.EVT_CHANGED_BY_ME, + description = "The change was made by me" }, +] %] + +[% relationships = [ + { id = constants.REL_ASSIGNEE, + description = "Assignee" }, + { id = constants.REL_QA, + description = "QA Contact" }, + { id = constants.REL_REPORTER, + description = "Reporter" }, + { id = constants.REL_CC, + description = "CCed" }, + { id = constants.REL_VOTER, + description = "Voter" }, +] %] + +<table class="bz_emailprefs" border="1"> + <tr> + <td colspan="[% (useqacontact AND usevotes) ? '5' : + ((useqacontact OR usevotes) ? '4' : '3') %]" + align="center" width="50%"> + <b>When my relationship to this [% terms.bug %] is:</b> + </td> + <td rowspan="2" width="40%"> + <b>I want to receive mail when:</b> + </td> + </tr> + + <tr> + [% FOREACH relationship = relationships %] + [% NEXT IF (relationship.id == constants.REL_QA AND NOT useqacontact) OR + (relationship.id == constants.REL_VOTER AND NOT usevotes) %] + <th align="center" width="9%"> + [% relationship.description FILTER html %] + </th> + [% END %] + </tr> + + [% FOREACH event = events %] + [% count = loop.count() %] + <tr class="bz_row_[% count % 2 == 1 ? "odd" : "even" %]"> + [% FOREACH relationship = relationships %] + [% NEXT IF (relationship.id == constants.REL_QA AND NOT useqacontact) OR + (relationship.id == constants.REL_VOTER AND NOT usevotes) %] + <td align="center"> + <input type="checkbox" + name="email-[% relationship.id %]-[% event.id %]" + value="1" + [%# The combinations don't always make sense; disable a couple %] + [% IF event.id == constants.EVT_ADDED_REMOVED AND + (relationship.id == constants.REL_REPORTER OR + relationship.id == constants.REL_VOTER) %] + disabled + [% ELSIF mail.${relationship.id}.${event.id} %] + checked + [% END %]> + </td> + [% END %] + <td> + [% event.description FILTER html %] + </td> + </tr> + [% END %] + + <tr> + <td colspan="[% (useqacontact AND usevotes) ? '5' : + ((useqacontact OR usevotes) ? '4' : '3') %]" + align="center" width="50%"> + + </td> + <td width="40%"> + <b>but not when (overrides above):</b> + </td> + </tr> + + [% FOREACH event = neg_events %] + [% count = loop.count() %] + <tr class="bz_row_[% count % 2 == 1 ? "odd" : "even" %]"> + [% FOREACH relationship = relationships %] + [% NEXT IF (relationship.id == constants.REL_QA AND NOT useqacontact) OR + (relationship.id == constants.REL_VOTER AND NOT usevotes) %] + <td align="center"> + <input type="checkbox" + name="neg-email-[% relationship.id %]-[% event.id %]" + value="1" + [% " checked" IF NOT mail.${relationship.id}.${event.id} %]> + </td> + [% END %] + <td> + [% event.description FILTER html %] + </td> + </tr> + [% END %] + +</table> + +[%# Add hidden form fields for fields not used %] +[% FOREACH event = events %] + [% FOREACH relationship = relationships %] + [% IF (relationship.id == constants.REL_QA AND NOT useqacontact) OR + (relationship.id == constants.REL_VOTER AND NOT usevotes) %] + <input type="hidden" + name="email-[% relationship.id %]-[% event.id %]" + value="[% mail.${relationship.id}.${event.id} ? "1" : "0" %]"> + [% END %] + [% END %] +[% END %] + +[% FOREACH event = neg_events %] + [% FOREACH relationship = relationships %] + [% IF (relationship.id == constants.REL_QA AND NOT useqacontact) OR + (relationship.id == constants.REL_VOTER AND NOT usevotes) %] + <input type="hidden" + name="neg-email-[% relationship.id %]-[% event.id %]" + value="[% mail.${relationship.id}.${event.id} ? "0" : "1" %]"> + [% END %] + [% END %] +[% END %] + +<hr> +<b>User Watching</b> + +<p> +If you watch a user, it is as if you are standing in their shoes for the +purposes of getting email. Email is sent or not according to <u>your</u> +preferences for <u>their</u> relationship to the [% terms.bug %] +(e.g. Assignee). +</p> + +<p> +[% IF watchedusers.size %] +You are watching everyone in the following list: + </p> + <p> + <select id="watched_by_you" name="watched_by_you" multiple="multiple" size="5"> + [% FOREACH w = watchedusers %] + <option value="[% w FILTER html %]">[% w FILTER html %]</option> + [% END %] + </select> <br /> + <input type="checkbox" id="remove_watched_users" name="remove_watched_users"> + <label for="remove_watched_users">Remove selected users from my watch list</label> +[% ELSE %] +You are currently not watching any users. +[% END %] +</p> + +<p><a name="new_watched_by_you" id="new_watched_by_you">Add users to my watch list (comma separated list)</a>: + <input size="60" name="new_watchedusers" value=""> +</p> + +<p><a name="watching_you" id="watching_you">Users watching you</a>:<br> + [% IF watchers.size %] + [% FOREACH watcher = watchers %] + [% watcher FILTER html %] <br> + [% END %] + [% ELSE %] + <i>No one</i> + [% END %] +</p> + +<hr> + +<br> diff --git a/template/en/default/account/prefs/permissions.html.tmpl b/template/en/default/account/prefs/permissions.html.tmpl new file mode 100644 index 0000000..5e8dc9c --- /dev/null +++ b/template/en/default/account/prefs/permissions.html.tmpl @@ -0,0 +1,93 @@ +[%# 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: + # has_bits: array of hashes. May be empty. + # name => Names of the permissions the user has. + # desc => Descriptions of the permissions the user has. + # set_bits: array of hashes. May be empty. + # name => Names of the permissions the user can set for + # other people. + # desc => Descriptions of the permissions the user can set for + # other people. + #%] + +[% PROCESS global/variables.none.tmpl %] + +<table align="center"> + <tr> + <td> + [% IF has_bits.size %] + You have the following permission bits set on your account: + <table align="center"> + [% FOREACH bit_description = has_bits %] + <tr> + <td>[% bit_description.name FILTER html %]</td> + <td>[% bit_description.desc FILTER html_light %]</td> + </tr> + [% END %] + </table> + + [% FOREACH privs = ["editcomponents", "canconfirm", "editbugs"] %] + [% SET products = ${"local_$privs"} %] + [% IF products && products.size %] + <br> + <p> + You also have local '[% privs FILTER html %]' privileges + for the following products: + </p> + <p> + [% FOREACH product = products %] + [% product.name FILTER html %]<br> + [% END %] + </p> + [% END %] + [% END %] + + [% ELSE %] + There are no permission bits set on your account. + [% END %] + + [% IF user.in_group('editusers') %] + <br> + You have editusers privileges. You can turn on and off + all permissions for all users. + [% ELSIF set_bits.size %] + <br> + And you can turn on or off the following bits for + <a href="editusers.cgi">other users</a>: + <table align="center"> + [% FOREACH bit_description = set_bits %] + <tr> + <td>[% bit_description.name FILTER html %]</td> + <td>[% bit_description.desc FILTER html_light %]</td> + </tr> + [% END %] + </table> + [% END %] + + [% IF user.in_group('bz_sudoers') %] + <br> + You are a member of the <b>bz_sudoers</b> group, so you can + <a href="relogin.cgi?action=prepare-sudo">impersonate someone else</a>. + [% END %] + </td> + </tr> +</table> diff --git a/template/en/default/account/prefs/prefs.html.tmpl b/template/en/default/account/prefs/prefs.html.tmpl new file mode 100644 index 0000000..71e411d --- /dev/null +++ b/template/en/default/account/prefs/prefs.html.tmpl @@ -0,0 +1,112 @@ +[%# 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> + # Frédéric Buclin <LpSolit@gmail.com> + #%] + +[%# INTERFACE: + # tabs: List of hashes. May not be empty. Each hash has three members: + # name: string. Name of the tab (used internally.) + # description: string. Description of the tab (used in tab title). + # saveable: boolean. True if tab has a form which can be submitted. + # True if user is not receiving self-generated mail. + # Note: For each tab name, a template "prefs/${tab.name}.tmpl" must exist, + # and its interface must be fulfilled. + # current_tab: A direct reference to one of the hashes in the tabs list. + # This tab will be displayed. + # changes_saved: boolean/string. True if the CGI processed form data before + # displaying anything, and can contain an optional custom + # message if required (which Perl still evaluates as True). + # dont_show_button: boolean. Prevent the display of the "Submit Changes" button. + #%] + +[% filtered_login = user.login FILTER html %] +[% PROCESS global/header.html.tmpl + title = "User Preferences" + subheader = filtered_login + style_urls = ['skins/standard/admin.css'] + javascript_urls = ['js/util.js'] + doc_section = "userpreferences.html" + %] + +[% tabs = [{ name => "settings", label => "General Preferences", + link => "userprefs.cgi?tab=settings", saveable => "1" }, + { name => "email", label => "Email Preferences", + link => "userprefs.cgi?tab=email", saveable => "1" }, + { name => "saved-searches", label => "Saved Searches", + link => "userprefs.cgi?tab=saved-searches", saveable => "1" }, + { name => "account", label => "Name and Password", + link => "userprefs.cgi?tab=account", saveable => "1" }, + { name => "permissions", label => "Permissions", + link => "userprefs.cgi?tab=permissions", saveable => "0" } ] %] + +[% FOREACH tab IN tabs %] + [% IF tab.name == current_tab_name %] + [% current_tab = tab %] + [% LAST %] + [% END %] +[% END %] + +[% WRAPPER global/tabs.html.tmpl + tabs = tabs + current_tab = current_tab +%] + +[% IF changes_saved %] + <div id="message"> + The changes to your [% current_tab.label FILTER lower %] have been saved. + + [% IF email_changes_saved %] + <p> + An email has been sent to both old and new email + addresses to confirm the change of email address. + </p> + [% END %] + </div> +[% END %] + +<h3>[% current_tab.label %]</h3> + +[% IF current_tab.saveable %] + <form name="userprefsform" method="post" action="userprefs.cgi"> + <input type="hidden" name="tab" value="[% current_tab.name %]"> + <input type="hidden" name="token" value="[% token FILTER html %]"> +[% END %] + +[% PROCESS "account/prefs/${current_tab.name}.html.tmpl" + IF current_tab.name.defined %] + +[% IF current_tab.saveable %] + <input type="hidden" name="dosave" value="1"> + + [% UNLESS dont_show_button %] + <table> + <tr> + <td width="150"> </td> + <td> + <input type="submit" id="update" value="Submit Changes"> + </td> + </tr> + </table> + [% END %] + </form> +[% END %] + +[% END %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/account/prefs/saved-searches.html.tmpl b/template/en/default/account/prefs/saved-searches.html.tmpl new file mode 100644 index 0000000..f128613 --- /dev/null +++ b/template/en/default/account/prefs/saved-searches.html.tmpl @@ -0,0 +1,209 @@ +[%# 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: + # queryshare_groups: list of groups the user may share queries with + # (id, name). + # bless_group_ids: list of group ids the user may bless. + #%] + +[% IF user.can_bless %] + <script type="text/javascript"><!-- + function update_checkbox(group) { + var bless_groups = [[% bless_group_ids.join(",") FILTER js %]]; + var checkbox = document.getElementById(group.name.replace(/share_(\d+)/, "force_$1")); + + if (bz_isValueInArray(bless_groups, group.value)) { + checkbox.disabled = false; + } else { + checkbox.disabled = true; + checkbox.checked = false; + } + } //--> + </script> +[% END %] + +<p>Your saved searches are as follows:</p> + +<blockquote> + <table border="1" cellpadding="3"> + <tr> + <th> + Search + </th> + <th> + Run + </th> + <th> + Edit + </th> + <th> + Forget + </th> + <th> + Show in + Footer + </th> + [% may_share = user.in_group(Param('querysharegroup')) && queryshare_groups.size %] + [% IF may_share %] + <th> + Share With a Group + </th> + [% END %] + </tr> + <tr> + <td>My [% terms.Bugs %]</td> + <td> + [% filtered_username = user.login FILTER url_quote %] + <a href="[% Param('mybugstemplate').replace('%userid%', filtered_username) %]">Run</a> + </td> + <td> + + </td> + <td> + + </td> + <td align="center"> + <input type="checkbox" + name="showmybugslink" + value="1" + [% " checked" IF user.showmybugslink %]> + </td> + [% IF may_share %] + <td> + — + </td> + [% END %] + </tr> + [% FOREACH q = user.queries %] + <tr> + <td>[% q.name FILTER html %]</td> + <td> + <a href="buglist.cgi?cmdtype=dorem&remaction=run&namedcmd=[% q.name FILTER url_quote %] + [% IF q.shared_with_group.id %]&sharer_id=[% user.id FILTER url_quote %][% END %]">Run</a> + </td> + <td> + <a href="query.cgi?[% q.edit_link FILTER html %]&known_name= + [% q.name FILTER url_quote %]">Edit</a> + </td> + <td> + [% IF q.used_in_whine %] + Remove from <a href="editwhines.cgi">whining</a> first + [% ELSE %] + <a href="buglist.cgi?cmdtype=dorem&remaction=forget&namedcmd= + [% q.name FILTER url_quote %]&token= + [% issue_hash_token([q.id, q.name]) FILTER url_quote %]">Forget</a> + [% END %] + </td> + <td align="center"> + <input type="checkbox" + name="link_in_footer_[% q.id FILTER html %]" + value="1" + alt="[% q.name FILTER html %]" + [% " checked" IF q.link_in_footer %]> + </td> + [% IF may_share %] + <td> + <select name="share_[% q.id FILTER html %]" + [% IF user.can_bless %] onchange="update_checkbox(this);"[% END %]> + <option value="">Don't share</option> + [% FOREACH group = queryshare_groups %] + <option value="[% group.id %]" + [% ' selected="selected"' + IF q.shared_with_group.id == group.id %] + >[% group.name FILTER html %]</option> + [% END %] + </select> + [% IF user.can_bless %] + <input type="checkbox" id="force_[% q.id FILTER html %]" + name="force_[% q.id FILTER html %]" value="1" + [% " disabled" + IF !bless_group_ids.grep("^$q.shared_with_group.id\$").0 + %]> + <label for="force_[% q.id FILTER html %]">Add to footer</label> + [% END %] + [% IF q.shared_with_users %] + (shared with [% q.shared_with_users FILTER html %] + [%+ q.shared_with_users > 1 ? "users" : "user" %]) + [% END %] + </td> + [% END %] + </tr> + [% END %] + </table> +[% IF user.can_bless %] + <p>Note that for every search that has the "Add to footer" selected, a + link to the shared search is added to the footer of every user that is + a direct member of the group at the time you click Submit Changes.</p> +[% END %] +</blockquote> + +[% IF user.queries_available.size %] + <p>You may use these searches saved and shared by others:</p> + + <table border="1" cellpadding="3"> + <tr> + <th> + Search + </th> + <th> + Shared By + </th> + <th> + Shared To + </th> + <th> + Run + </th> + <th> + Edit + </th> + <th> + Show in + Footer + </th> + </tr> + [% FOREACH q = user.queries_available %] + <tr> + <td>[% q.name FILTER html %]</td> + <td>[% q.user.identity FILTER html %]</td> + <td>[% q.shared_with_group.name FILTER html %]</td> + <td> + <a href="buglist.cgi?cmdtype=dorem&remaction=run&namedcmd= + [% q.name FILTER url_quote %]&sharer_id= + [% q.user.id FILTER url_quote %]">Run</a> + </td> + <td> + <a href="query.cgi?[% q.edit_link FILTER html %]&known_name= + [% q.name FILTER url_quote %]">Edit</a> + </td> + <td align="center"> + <input type="checkbox" + name="link_in_footer_[% q.id FILTER html %]" + value="1" + alt="[% q.name FILTER html %]" + [% " checked" IF q.link_in_footer %]> + </td> + </tr> + [% END %] + </table> +[% ELSE %] + <p>No searches are shared with you by other users.</p> +[% END %] diff --git a/template/en/default/account/prefs/settings.html.tmpl b/template/en/default/account/prefs/settings.html.tmpl new file mode 100644 index 0000000..f8b6ba4 --- /dev/null +++ b/template/en/default/account/prefs/settings.html.tmpl @@ -0,0 +1,77 @@ +[%# 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): Shane H. W. Travis <travis@sedsystems.ca> + # Frédéric Buclin <LpSolit@gmail.com> + # + #%] + +[%# INTERFACE: + # setting_names: an array of strings + # settings: a hash of hashes, keyed by setting_name. + # Each hash contains: + # is_enabled - boolean + # default_value - string (global default for this setting) + # value - string (user-defined preference) + # is_default - boolean (true if user has no preference) + # has_settings_enabled : boolean; is true if there is at least one user pref + # enabled by the maintainer. + #%] + +[% PROCESS "global/setting-descs.none.tmpl" %] + +[% IF settings.size %] + [% UNLESS has_settings_enabled %] + <p class="criticalmessages"> + All user preferences have been disabled by the + <a href="mailto:[% Param("maintainer") %]">maintainer</a> + of this installation, and so you cannot customize any. + </p> + [% END %] + + <table border="0" cellpadding="8"> + [% FOREACH name = setting_names %] + [% default_name = name _ '-isdefault' %] + [% default_val = settings.${name}.default_value %] + <tr> + <td align="right"> + [% setting_descs.$name OR name FILTER html %] + </td> + <td> + [% IF settings.${name}.is_enabled %] + <select name="[% name FILTER html %]" id="[% name FILTER html %]"> + <option value="[% default_name FILTER html %]" + [% ' selected="selected"' IF settings.${name}.is_default %]> + Site Default ([% setting_descs.${default_val} OR default_val FILTER html %]) + </option> + [% FOREACH x = settings.${name}.legal_values %] + <option value="[% x FILTER html %]" + [% ' selected="selected"' + IF x == settings.${name}.value + AND NOT settings.${name}.is_default %]> + [% setting_descs.${x} OR x FILTER html %] + </option> + [% END %] + </select> + [% ELSE %] + <select name="[% name FILTER html %]" id="[% name FILTER html %]" disabled="disabled"> + <option value="[% default_name FILTER html %]"> + Site Default ([% setting_descs.${default_val} OR default_val FILTER html %]) + </option> + </select> + [% END %] + </td> + </tr> + [% END %] + </table> +[% END %] +<br> diff --git a/template/en/default/account/profile-activity.html.tmpl b/template/en/default/account/profile-activity.html.tmpl new file mode 100644 index 0000000..c6fd45c --- /dev/null +++ b/template/en/default/account/profile-activity.html.tmpl @@ -0,0 +1,86 @@ +[%# 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): Vlad Dascalu <jocuri@softhome.net> + # Gavin Shelley <bugzilla@chimpychompy.org> + #%] + +[%# INTERFACE: + # otheruser: Bugzilla User Object; The user whose profile activity + # we are viewing. + # + # listselectionvalues: selection values to recreate the current user list. + # + # profile_changes: An array of hashes containing the following fields: + # + # who: string; login name of who made the change + # activity_when: string; when the change was made + # what: string; the description of the field which was changed + # removed: string; the removed value (maybe empty string) + # added: string; the added value (maybe empty string) + #%] + +[% title = BLOCK %] + Account History for '[% otheruser.login FILTER html %]' +[% END %] + + +[% PROCESS global/header.html.tmpl + title = title +%] + +[% PROCESS admin/users/listselectvars.html.tmpl + listselectionvalues = listselectionvalues +%] + +[% columns = + [{name => 'who' + heading => 'Who' + } + {name => 'activity_when' + heading => 'When' + } + {name => 'what' + heading => 'What' + content_use_field => 1 + } + {name => 'removed' + heading => 'Removed' + } + {name => 'added' + heading => 'Added' + } + ] +%] + +[% PROCESS admin/table.html.tmpl + columns = columns + data = profile_changes +%] + +<p><a href="editusers.cgi?action=edit&userid= + [%- otheruser.id FILTER url_quote %]" + title="Edit user '[% otheruser.login FILTER html %]'">Edit this user</a> or + <a title="Search For Users" href="editusers.cgi">search for other accounts</a> + [% IF listselectionvalues.matchtype != 'exact' %] + or go <a title="Return to the user list" + href="editusers.cgi?action=list[% INCLUDE listselectionurlparams %]">back + to the user list</a> + [% END %] +</p> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/admin.html.tmpl b/template/en/default/admin/admin.html.tmpl new file mode 100644 index 0000000..145360b --- /dev/null +++ b/template/en/default/admin/admin.html.tmpl @@ -0,0 +1,135 @@ +[%# 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): Frédéric Buclin <LpSolit@gmail.com> + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% title = BLOCK %] + Administer your installation ([% terms.Bugzilla %] + [%+ constants.BUGZILLA_VERSION FILTER html %]) +[% END %] + +[% PROCESS global/header.html.tmpl title = title + style_urls = ['skins/standard/admin.css'] + doc_section = "administration.html" +%] + +<div> + This page is only accessible to empowered users. You can access administrative pages + from here (based on your privileges), letting you configure different aspects of + this installation. Note: some sections may not be accessible to you and are marked + using a lighter color. +</div> + +<table> + <tr> + <td class="admin_links"> + <dl> + [% class = user.in_group('tweakparams') ? "" : "forbidden" %] + <dt id="parameters" class="[% class %]"><a href="editparams.cgi">Parameters</a></dt> + <dd class="[% class %]">Set core parameters of the installation. That's the + place where you specify the URL to access this installation, determine how + users authenticate, choose which [% terms.bug %] fields to display, select + the mail transfer agent to send email notifications, choose which group of + users can use charts and share queries, and much more.</dd> + + <dt id="preferences" class="[% class %]"><a href="editsettings.cgi">Default Preferences</a></dt> + <dd class="[% class %]">Set the default user preferences. These are the values + which will be used by default for all users. Users will be able to edit their + own preferences from the <a href="userprefs.cgi?tab=settings">Preferences</a>.</dd> + + [% class = user.in_group('editcomponents') ? "" : "forbidden" %] + <dt id="sanitycheck" class="[% class %]"><a href="sanitycheck.cgi">Sanity Check</a></dt> + <dd class="[% class %]">Run sanity checks to locate problems in your database. + This may take several tens of minutes depending on the size of your installation. + You can also automate this check by running <tt>sanitycheck.pl</tt> from a cron job. + A notification will be sent per email to the specified user if errors are detected.</dd> + + [% class = (user.in_group('editusers') || user.can_bless) ? "" : "forbidden" %] + <dt id="users" class="[% class %]"><a href="editusers.cgi">Users</a></dt> + <dd class="[% class %]">Create new user accounts or edit existing ones. You can + also add and remove users from groups (also known as "user privileges").</dd> + + [% class = (Param('useclassification') && user.in_group('editclassifications')) ? "" : "forbidden" %] + <dt id="classifications" class="[% class %]"><a href="editclassifications.cgi">Classifications</a></dt> + <dd class="[% class %]">If your installation has to manage many products at once, + it's a good idea to group these products into distinct categories. This lets users + find information more easily when doing searches or when filing new [% terms.bugs %].</dd> + + [% class = (user.in_group('editcomponents') + || user.get_products_by_permission("editcomponents").size) ? "" : "forbidden" %] + <dt id="products" class="[% class %]"><a href="editproducts.cgi">Products</a></dt> + <dd class="[% class %]">Edit all aspects of products, including group restrictions + which let you define who can access [% terms.bugs %] being in these products. You + can also edit some specific attributes of products such as + <a href="editcomponents.cgi">components</a>, <a href="editversions.cgi">versions</a> + and <a href="editmilestones.cgi">milestones</a> directly.</dd> + + [% class = user.in_group('editcomponents') ? "" : "forbidden" %] + <dt id="flags" class="[% class %]"><a href="editflagtypes.cgi">Flags</a></dt> + <dd class="[% class %]">A flag is a custom 4-states attribute of [% terms.bugs %] + and/or attachments. These states are: granted, denied, requested and undefined. + You can set as many flags as desired per [% terms.bug %], and define which users + are allowed to edit them.</dd> + + [% Hook.process('end_links_left') %] + </dl> + </td> + + <td class="admin_links"> + <dl> + [% class = user.in_group('admin') ? "" : "forbidden" %] + <dt id="custom_fields" class="[% class %]"><a href="editfields.cgi">Custom Fields</a></dt> + <dd class="[% class %]">[% terms.Bugzilla %] lets you define fields which are + not implemented by default, based on your local and specific requirements. + These fields can then be used as any other field, meaning that you can set + them in [% terms.bugs %] and run any search involving them.<br> + Before creating new fields, keep in mind that too many fields may make the user + interface more complex and harder to use. Be sure you have investigated other ways + to satisfy your needs before doing this.</dd> + + <dt id="field_values" class="[% class %]"><a href="editvalues.cgi">Field Values</a></dt> + <dd class="[% class %]">Define legal values for fields whose values must belong + to some given list. This is also the place where you define legal values for some + types of custom fields.</dd> + + <dt id="status_workflow" class="[% class %]"><a href="editworkflow.cgi">[%terms.Bug %] Status Workflow</a></dt> + <dd class="[% class %]">Customize your workflow and choose initial [% terms.bug %] + statuses available on [% terms.bug %] creation and allowed [% terms.bug %] status + transitions when editing existing [% terms.bugs %].</dd> + + [% class = user.in_group('creategroups') ? "" : "forbidden" %] + <dt id="groups" class="[% class %]"><a href="editgroups.cgi">Groups</a></dt> + <dd class="[% class %]">Define groups which will be used in the installation. + They can either be used to define new user privileges or to restrict the access + to some [% terms.bugs %].</dd> + + [% class = user.in_group('editkeywords') ? "" : "forbidden" %] + <dt id="keywords" class="[% class %]"><a href="editkeywords.cgi">Keywords</a></dt> + <dd class="[% class %]">Set keywords to be used with [% terms.bugs %]. Keywords + are an easy way to "tag" [% terms.bugs %] to let you find them more easily later.</dd> + + [% class = user.in_group('bz_canusewhines') ? "" : "forbidden" %] + <dt id="whining" class="[% class %]"><a href="editwhines.cgi">Whining</a></dt> + <dd class="[% class %]">Set queries which will be run at some specified date + and time, and get the result of these queries directly per email. This is a + good way to create reminders and to keep track of the activity in your installation.</dd> + + [% Hook.process('end_links_right') %] + </dl> + </td> + </tr> +</table> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/classifications/add.html.tmpl b/template/en/default/admin/classifications/add.html.tmpl new file mode 100644 index 0000000..cd949f2 --- /dev/null +++ b/template/en/default/admin/classifications/add.html.tmpl @@ -0,0 +1,56 @@ +[%# 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): Albert Ting <alt@sonic.net> + #%] + +[% PROCESS global/header.html.tmpl + title = "Add new classification" +%] + +<form method=post action="editclassifications.cgi"> + <table border=0 cellpadding=4 cellspacing=0> + <tr> + <th align="right">Classification:</th> + <td><input size=64 maxlength=64 name="classification"></td> + </tr> + <tr> + <th align="right">Description:</th> + <td> + [% INCLUDE global/textarea.html.tmpl + name = 'description' + minrows = 4 + cols = 64 + wrap = 'virtual' + %] + </td> + </tr> + <tr> + <th align="right"><label for="sortkey">Sortkey:</label></th> + <td><input id="sortkey" size="20" maxlength="20" name="sortkey" + value=""></td> + </tr> + </table> + <hr> + <input type=submit value="Add"> + <input type=hidden name="action" value="new"> + <input type="hidden" name="token" value="[% token FILTER html %]"> +</FORM> + +[% PROCESS admin/classifications/footer.html.tmpl %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/classifications/del.html.tmpl b/template/en/default/admin/classifications/del.html.tmpl new file mode 100644 index 0000000..5a3800f --- /dev/null +++ b/template/en/default/admin/classifications/del.html.tmpl @@ -0,0 +1,63 @@ +[%# 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): Albert Ting <alt@sonic.net> + #%] + +[% PROCESS global/header.html.tmpl + title = "Delete classification" +%] + +<table border=1 cellpadding=4 cellspacing=0> +<tr bgcolor="#6666ff"> + <th valign="top" align="left">Part</th> + <th valign="top" align="left">Value</th> + +</tr><tr> + <td valign="top">Classification:</td> + <td valign="top">[% classification.name FILTER html %]</td> + +</tr><tr> + <td valign="top">Description:</td> + <td valign="top"> + [% IF classification.description %] + [% classification.description FILTER html_light %] + [% ELSE %] + <font color="red">description missing</font> + [% END %] + </td> + +</tr><tr> + <td valign="top">Sortkey:</td> + <td valign="top">[% classification.sortkey FILTER html %]</td> + +</tr> +</table> + +<h2>Confirmation</h2> + +<p>Do you really want to delete this classification?</p> +<form method=post action="editclassifications.cgi"> + <input type=submit value="Yes, delete"> + <input type=hidden name="action" value="delete"> + <input type=hidden name="classification" value="[% classification.name FILTER html %]"> + <input type="hidden" name="token" value="[% token FILTER html %]"> +</form> + +[% PROCESS admin/classifications/footer.html.tmpl %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/classifications/edit.html.tmpl b/template/en/default/admin/classifications/edit.html.tmpl new file mode 100644 index 0000000..80d7f98 --- /dev/null +++ b/template/en/default/admin/classifications/edit.html.tmpl @@ -0,0 +1,85 @@ +[%# 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): Albert Ting <alt@sonic.net> + #%] + +[% PROCESS global/header.html.tmpl + title = "Edit classification" +%] + +<form method=post action="editclassifications.cgi"> + <table border=0 cellpadding=4 cellspacing=0> + <tr> + <th align="right">Classification:</th> + <td><input size=64 maxlength=64 name="classification" + value="[% classification.name FILTER html %]"></td> + </tr> + <tr> + <th align="right">Description:</th> + <td> + [% INCLUDE global/textarea.html.tmpl + name = 'description' + minrows = 4 + cols = 64 + defaultcontent = classification.description + %] + </td> + </tr> + <tr> + <th align="right"><label for="sortkey">Sortkey:</label></th> + <td><input id="sortkey" size="20" maxlength="20" name="sortkey" value=" + [%- classification.sortkey FILTER html %]"></td> + </tr> + <tr valign=top> + <th align="right"> + <a href="editproducts.cgi?classification=[% classification.name FILTER url_quote %]"> + Edit Products</a>: + </th> + <td> + [% IF classification.products.size > 0 %] + <table> + [% FOREACH product = classification.products %] + <tr> + <th align=right valign=top>[% product.name FILTER html %]</th> + <td valign=top> + [% IF product.description %] + [% product.description FILTER html_light %] + [% ELSE %] + <font color="red">description missing</font> + [% END %] + </td> + </tr> + [% END %] + </table> + [% ELSE %] + <font color="red">none</font> + [% END %] + </td> + </tr> + </table> + + <input type=hidden name="classificationold" + value="[% classification.name FILTER html %]"> + <input type=hidden name="action" value="update"> + <input type="hidden" name="token" value="[% token FILTER html %]"> + <input type=submit value="Update"> +</form> + +[% PROCESS admin/classifications/footer.html.tmpl %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/classifications/footer.html.tmpl b/template/en/default/admin/classifications/footer.html.tmpl new file mode 100644 index 0000000..db983aa --- /dev/null +++ b/template/en/default/admin/classifications/footer.html.tmpl @@ -0,0 +1,24 @@ +[%# 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): Nitish Bezzala <nbezzala@yahoo.com> + #%] + +[% PROCESS global/variables.none.tmpl %] + +<p>Back to the <a href="./">main [% terms.bugs %] page</a> +or <a href="editclassifications.cgi"> edit</a> more classifications.</p> diff --git a/template/en/default/admin/classifications/reclassify.html.tmpl b/template/en/default/admin/classifications/reclassify.html.tmpl new file mode 100644 index 0000000..146a1ac --- /dev/null +++ b/template/en/default/admin/classifications/reclassify.html.tmpl @@ -0,0 +1,90 @@ +[%# 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): Albert Ting <alt@sonic.net> + #%] + +[% PROCESS global/header.html.tmpl + title = "Reclassify products" +%] + +<form method=post action="editclassifications.cgi"> + <table border=0 cellpadding=4 cellspacing=0> + <tr> + <td valign="top">Classification:</td> + <td valign="top" colspan=3>[% classification.name FILTER html %]</td> + + </tr><tr> + <td valign="top">Description:</td> + <td valign="top" colspan=3> + [% IF classification.description %] + [% classification.description FILTER html_light %] + [% ELSE %] + <font color="red">description missing</font> + [% END %] + </td> + + </tr><tr> + <td valign="top">Sortkey:</td> + <td valign="top" colspan=3>[% classification.sortkey FILTER html %]</td> + + </tr><tr> + <td valign="top">Products:</td> + <td valign="top">Other Classifications</td> + <td></td> + <td valign="top">This Classification</td> + + </tr><tr> + <td></td> + <td valign="top"> + <select name="prodlist" id="prodlist" multiple="multiple" size="20"> + [% FOREACH class = classifications %] + [% IF class.id != classification.id %] + [% FOREACH product = class.products %] + <option value="[% product.name FILTER html %]"> + [[% class.name FILTER html %]] [% product.name FILTER html %] + </option> + [% END %] + [% END %] + [% END %] + </select></td> + + <td align="center"> + <input type=submit value=" Add >> " name="add_products"><br><br> + <input type=submit value="<< Remove" name="remove_products"> + </td> + + <td valign="middle" rowspan=2> + <select name="myprodlist" id="myprodlist" multiple="multiple" size="20"> + [% FOREACH product = classification.products %] + <option value="[% product.name FILTER html %]"> + [% product.name FILTER html %] + </option> + [% END %] + </select></td> + </tr> + </table> + + <input type=hidden name="action" value="reclassify"> + <input type=hidden name="classification" value="[% classification.name FILTER html %]"> + <input type="hidden" name="token" value="[% token FILTER html %]"> +</form> + +[% PROCESS admin/classifications/footer.html.tmpl %] + +[% PROCESS global/footer.html.tmpl %] + diff --git a/template/en/default/admin/classifications/select.html.tmpl b/template/en/default/admin/classifications/select.html.tmpl new file mode 100644 index 0000000..d6b352d --- /dev/null +++ b/template/en/default/admin/classifications/select.html.tmpl @@ -0,0 +1,66 @@ +[%# 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): Albert Ting <alt@sonic.net> + #%] + +[% PROCESS global/header.html.tmpl + title = "Select classification" +%] + +<table border=1 cellpadding=4 cellspacing=0> + <tr bgcolor="#6666ff"> + <th align="left">Edit Classification ...</th> + <th align="left">Description</th> + <th align="left">Sortkey</th> + <th align="left">Products</th> + <th align="left">Action</th> + </tr> + + [% FOREACH cl = classifications %] + <tr> + <td valign="top"><a href="editclassifications.cgi?action=edit&classification=[% cl.name FILTER url_quote %]"><b>[% cl.name FILTER html %]</b></a></td> + <td valign="top"> + [% IF cl.description %] + [% cl.description FILTER html_light %] + [% ELSE %] + <font color="red">none</font> + [% END %] + </td> + <td valign="top">[% cl.sortkey FILTER html %]</td> + [% IF (cl.id == 1) %] + <td valign="top">[% cl.product_count FILTER html %]</td> + [% ELSE %] + <td valign="top"><a href="editclassifications.cgi?action=reclassify&classification=[% cl.name FILTER url_quote %]">reclassify ([% cl.product_count FILTER html %])</a></td> + [% END %] + + [%# don't allow user to delete the default id. %] + [% IF (cl.id == 1) %] + <td valign="top"> </td> + [% ELSE %] + <td valign="top"><a href="editclassifications.cgi?action=del&classification=[% cl.name FILTER url_quote %]">delete</a></td> + [% END %] + </tr> + [% END %] + + <tr> + <td valign="top" colspan=4>Add a new classification</td> + <td valign="top" align="center"><a href="editclassifications.cgi?action=add">Add</a></td> + </tr> +</table> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/components/confirm-delete.html.tmpl b/template/en/default/admin/components/confirm-delete.html.tmpl new file mode 100644 index 0000000..d0a1385 --- /dev/null +++ b/template/en/default/admin/components/confirm-delete.html.tmpl @@ -0,0 +1,160 @@ +[%# 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): Gavin Shelley <bugzilla@chimpychompy.org> + #%] + +[%# INTERFACE: + # comp: object; Bugzilla::Component object representing the component the + # user wants to delete. + # product: object; Bugzilla::Product object representing the product to + # which the component belongs. + #%] + +[% title = BLOCK %]Delete component '[% comp.name FILTER html %]' +from '[% product.name FILTER html %]' product + [% END %] + +[% PROCESS global/header.html.tmpl + title = title +%] + +<table border="1" cellpadding="4" cellspacing="0"> +<tr bgcolor="#6666FF"> + <th valign="top" align="left">Field</th> + <th valign="top" align="left">Value</th> +</tr> +<tr> + <td valign="top">Component:</td> + <td valign="top">[% comp.name FILTER html %]</td> +</tr> +<tr> + <td valign="top">Component Description:</td> + <td valign="top">[% comp.description FILTER html_light %]</td> +</tr> +<tr> + <td valign="top">Default assignee:</td> + <td valign="top">[% comp.default_assignee.login FILTER html %]</td> + +[% IF Param('useqacontact') %] +</tr> +<tr> + <td valign="top">Default QA contact:</td> + <td valign="top">[% comp.default_qa_contact.login FILTER html %]</td> +[% END %] + +</tr> +<tr> + <td valign="top">Component of Product:</td> + <td valign="top">[% product.name FILTER html %]</td> + +[% IF product.description %] +</tr> +<tr> + <td valign="top">Product Description:</td> + <td valign="top">[% product.description FILTER html_light %]</td> +[% END %] + +[% IF Param('usetargetmilestone') %] +</tr> +<tr> + <td valign="top">Product Milestone URL:</td> + <td valign="top"> + <a href="[% product.milestone_url FILTER html %]"> + [% product.milestone_url FILTER html %] + </a> + </td> +[% END %] + +</tr> +<tr> + <TD VALIGN="top">Open for [% terms.bugs %]:</TD> + <TD VALIGN="top">[% IF product.is_active %]Yes[% ELSE %]No[% END %]</td> +</tr> +<tr> + <td valign="top">[% terms.Bugs %]:</td> + <td valign="top"> +[% IF comp.bug_count %] + <a title="List of [% terms.bugs %] for component '[% comp.name FILTER html %]'" + href="buglist.cgi?component=[% comp.name FILTER url_quote %]&product= + [%- product.name FILTER url_quote %]">[% comp.bug_count %]</a> +[% ELSE %] + None +[% END %] + </td> +</tr> +</table> + +<h2>Confirmation</h2> + +[% IF comp.bug_count %] + + [% IF !Param("allowbugdeletion") %] + <p> + Sorry, there + + [% IF comp.bug_count > 1 %] + are [% comp.bug_count %] [%+ terms.bugs %] + [% ELSE %] + is [% comp.bug_count %] [%+ terms.bug %] + [% END %] + + outstanding for this component. You must reassign + + [% IF comp.bug_count > 1 %] + those [% terms.bugs %] + [% ELSE %] + that [% terms.bug %] + [% END %] + + to another component before you can delete this one. + </p> + [% ELSE %] + + <table border="0" cellpadding="20" width="70%" bgcolor="red"><tr><td> + + There [% IF comp.bug_count > 1 %] + are [% comp.bug_count %] [%+ terms.bugs %] + [% ELSE %] + is 1 [% terms.bug %] + [% END %] + entered for this component! When you delete this + component, <b><blink>ALL</blink></b> stored [% terms.bugs %] and + their history will be deleted too. + </td></tr></table> + + [% END %] + +[% END %] + +[% IF comp.bug_count == 0 || Param('allowbugdeletion') %] + + <p>Do you really want to delete this component?</p> + + <form method="post" action="editcomponents.cgi"> + <input type="submit" id="delete" value="Yes, delete"> + <input type="hidden" name="action" value="delete"> + <input type="hidden" name="product" value="[% product.name FILTER html %]"> + <input type="hidden" name="component" value="[% comp.name FILTER html %]"> + <input type="hidden" name="token" value="[% token FILTER html %]"> + </form> + +[% END %] + +[% PROCESS admin/components/footer.html.tmpl %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/components/create.html.tmpl b/template/en/default/admin/components/create.html.tmpl new file mode 100644 index 0000000..86411ad --- /dev/null +++ b/template/en/default/admin/components/create.html.tmpl @@ -0,0 +1,103 @@ +[%# 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): Gavin Shelley <bugzilla@chimpychompy.org> + # Akamai Technologies <bugzilla-dev@akamai.com> + #%] + +[%# INTERFACE: + # product: object; Bugzilla::Product object representing the product to + # which the component belongs. + #%] + +[% title = BLOCK %]Add component to the [% product.name FILTER html %] product[% END %] +[% PROCESS global/header.html.tmpl + title = title +%] + +<form method="post" action="editcomponents.cgi"> + <table border="0" cellpadding="4" cellspacing="0"> + <tr> + <th align="right">Component:</th> + <td><input size="64" maxlength="64" name="component" value=""></td> + </tr> + <tr> + <th align="right">Description:</th> + <td> + [% INCLUDE global/textarea.html.tmpl + name = 'description' + minrows = 4 + cols = 64 + wrap = 'virtual' + %] + </td> + </tr> + <tr> + <th align="right"><label for="initialowner">Default Assignee:</label></th> + <td> + [% INCLUDE global/userselect.html.tmpl + name => "initialowner" + id => "initialowner" + value => "" + size => 64 + %] + </td> + </tr> +[% IF Param('useqacontact') %] + <tr> + <th align="right"> + <label for="initialqacontact">Default QA Contact:</label></th> + <td> + [% INCLUDE global/userselect.html.tmpl + name => "initialqacontact" + id => "initialqacontact" + value => "" + size => 64 + emptyok => 1 + %] + </td> + </tr> +[% END %] + <tr> + <th align="right"> + <label for="initialcc">Default CC List:</label> + </th> + <td> + [% INCLUDE global/userselect.html.tmpl + name => "initialcc" + id => "initialcc" + value => "" + size => 64 + multiple => 5 + %] + <br> + [% IF !Param("usemenuforusers") %] + <em>Enter user names for the CC list as a comma-separated list.</em> + [% END %] + </td> + </tr> + </table> + <hr> + <input type="submit" id="create" value="Add"> + <input type="hidden" name="action" value="new"> + <input type="hidden" name='product' value="[% product.name FILTER html %]"> + <input type="hidden" name="token" value="[% token FILTER html %]"> +</form> + +[% PROCESS admin/components/footer.html.tmpl %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/components/edit.html.tmpl b/template/en/default/admin/components/edit.html.tmpl new file mode 100644 index 0000000..9ddb8ca --- /dev/null +++ b/template/en/default/admin/components/edit.html.tmpl @@ -0,0 +1,134 @@ +[%# 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): Gavin Shelley <bugzilla@chimpychompy.org> + # Akamai Technologies <bugzilla-dev@akamai.com> + #%] + +[%# INTERFACE: + # comp: object; Bugzilla::Component object representing the component the + # user wants to edit. + # product: object; Bugzilla::Product object representing the product to + # which the component belongs. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% title = BLOCK %] + Edit component '[% comp.name FILTER html %]' of product '[% product.name FILTER html %]' +[% END %] +[% PROCESS global/header.html.tmpl + title = title +%] + +<form method="post" action="editcomponents.cgi"> + <table border="0" cellpadding="4" cellspacing="0"> + + <tr> + <td valign="top">Component:</td> + <td><input size="64" maxlength="64" name="component" value=" + [%- comp.name FILTER html %]"></td> + </tr> + <tr> + <td valign="top">Component Description:</td> + <td> + [% INCLUDE global/textarea.html.tmpl + name = 'description' + minrows = 4 + cols = 64 + wrap = 'virtual' + defaultcontent = comp.description + %] + </td> + </tr> + <tr> + <td valign="top"><label for="initialowner">Default Assignee:</label></td> + <td> + [% INCLUDE global/userselect.html.tmpl + name => "initialowner" + id => "initialowner" + value => comp.default_assignee.login + size => 64 + %] + </td> + +[% IF Param('useqacontact') %] + </tr> + <tr> + <td valign="top"><label for="initialqacontact">Default QA contact:</label></td> + <td> + [% INCLUDE global/userselect.html.tmpl + name => "initialqacontact" + id => "initialqacontact" + value => comp.default_qa_contact.login + size => 64 + emptyok => 1 + %] + </td> +[% END %] + + </tr> + <tr> + <td valign="top"> + <label for="initialcc">Default CC List:</label> + </td> + <td> + [% INCLUDE global/userselect.html.tmpl + name => "initialcc" + id => "initialcc" + value => initial_cc_names + size => 64 + multiple => 5 + %] + <br> + [% IF !Param("usemenuforusers") %] + <em>Enter user names for the CC list as a comma-separated list.</em> + [% END %] + </td> + </tr> + <tr> + <td>[% terms.Bugs %]:</td> + <td> +[% IF comp.bug_count > 0 %] + <a title="[% terms.Bugs %] in component '[% comp.name FILTER html %]'" + href="buglist.cgi?component= + [%- comp.name FILTER url_quote %]&product= + [%- product.name FILTER url_quote %]">[% comp.bug_count %]</a> +[% ELSE %] + None +[% END %] + </td> + </tr> + + </table> + + <input type="hidden" name="action" value="update"> + <input type="hidden" name="componentold" value="[% comp.name FILTER html %]"> + <input type="hidden" name="product" value="[% product.name FILTER html %]"> + <input type="hidden" name="token" value="[% token FILTER html %]"> + <input type="submit" value="Save Changes" id="update"> or <a + href="editcomponents.cgi?action=del&product= + [%- product.name FILTER url_quote %]&component= + [%- comp.name FILTER url_quote %]">Delete</a> this component. + +</form> + +[% PROCESS admin/components/footer.html.tmpl + no_edit_component_link = 1 +%] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/components/footer.html.tmpl b/template/en/default/admin/components/footer.html.tmpl new file mode 100644 index 0000000..b2e105e --- /dev/null +++ b/template/en/default/admin/components/footer.html.tmpl @@ -0,0 +1,54 @@ +[%# 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): Gavin Shelley <bugzilla@chimpychompy.org> + #%] + +[%# INTERFACE: + # comp: object; Bugzilla::Component object representing the component + # product: object; Bugzilla::Product object representing the product to + # which the component belongs. + #%] + +<hr> + +<p> +Edit + +[% IF comp && !no_edit_component_link %] + component <a + title="Edit Component '[% comp.name FILTER html %]'" + href="editcomponents.cgi?action=edit&product= + [%- product.name FILTER url_quote %]&component=[% comp.name FILTER url_quote %]"> + '[% comp.name FILTER html %]'</a> + or edit +[% END %] + +[% IF !no_edit_other_components_link %] +other components of product <a + title="Choose a component from product '[% product.name FILTER html %]' to edit" + href="editcomponents.cgi?product= + [%- product.name FILTER url_quote %]">'[% product.name FILTER html %]'</a>, + or edit +[% END %] + +product <a + title="Edit Product '[% product.name FILTER html %]'" + href="editproducts.cgi?action=edit&product= + [%- product.name FILTER url_quote %]">'[% product.name FILTER html %]'</a>. + +</p> diff --git a/template/en/default/admin/components/list.html.tmpl b/template/en/default/admin/components/list.html.tmpl new file mode 100644 index 0000000..632d47e --- /dev/null +++ b/template/en/default/admin/components/list.html.tmpl @@ -0,0 +1,128 @@ +[%# 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): Gavin Shelley <bugzilla@chimpychompy.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] + +[%# INTERFACE: + # showbugcounts: if defined, then bug counts should be included in the table + # product: object; Bugzilla::Product object representing the product to + # which the component belongs. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% title = BLOCK %]Select component of product + '[% product.name FILTER html %]'[% END %] +[% PROCESS global/header.html.tmpl + title = title +%] + +[% edit_contentlink = BLOCK %]editcomponents.cgi?action=edit&product= + [%- product.name FILTER url_quote %]&component=%%name%%[% END %] +[% delete_contentlink = BLOCK %]editcomponents.cgi?action=del&product= + [%- product.name FILTER url_quote %]&component=%%name%%[% END %] +[% bug_count_contentlink = BLOCK %]buglist.cgi?component=%%name%%&product= + [%- product.name FILTER url_quote %][% END %] + + +[% columns = [ + { + name => "name" + heading => "Edit component..." + contentlink => edit_contentlink + }, + { + name => "description" + heading => "Description" + allow_html_content => 1 + }, + { + name => "initialowner" + heading => "Default Assignee" + }, + ] +%] + +[% IF Param('useqacontact') %] + + [% columns.push({ + name => 'initialqacontact' + heading => 'QA Contact' + }) %] + +[% END %] + +[% IF showbugcounts %] + + [% columns.push({ + name => 'bug_count' + heading => "$terms.Bugs" + align => "right" + contentlink => bug_count_contentlink + }) %] + +[% END %] + +[% columns.push({ + heading => "Action" + content => "Delete" + contentlink => delete_contentlink + }) %] + +[%# Overrides the initialowner and the initialqacontact with right values %] +[% overrides.initialowner = {} %] +[% overrides.initialqacontact = {} %] + +[%# "component" is a reserved word in Template Toolkit. %] +[% FOREACH my_component = product.components %] + [% overrides.initialowner.name.${my_component.name} = { + override_content => 1 + content => my_component.default_assignee.login + } + %] + [% overrides.initialqacontact.name.${my_component.name} = { + override_content => 1 + content => my_component.default_qa_contact.login + } + %] +[% END %] + +[% Hook.process('before_table') %] + +[% PROCESS admin/table.html.tmpl + columns = columns + data = product.components + overrides = overrides +%] + +<p><a href="editcomponents.cgi?action=add&product=[% product.name FILTER url_quote %]">Add</a> + a new component to product '[% product.name FILTER html %]'</p> + +[% IF ! showbugcounts %] + + <p><a href="editcomponents.cgi?product=[% product.name FILTER url_quote %]&showbugcounts=1"> + Redisplay table with [% terms.bug %] counts (slower)</a></p> + +[% END %] + +[% PROCESS admin/components/footer.html.tmpl + no_edit_other_components_link = 1 + %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/components/select-product.html.tmpl b/template/en/default/admin/components/select-product.html.tmpl new file mode 100644 index 0000000..0910f98 --- /dev/null +++ b/template/en/default/admin/components/select-product.html.tmpl @@ -0,0 +1,70 @@ +[%# 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): Gavin Shelley <bugzilla@chimpychompy.org> + # Frédéric Buclin <LpSolit@gmail.com> + # + #%] + +[%# INTERFACE: + # products: array of product objects + # showbugcounts: if defined, then bug counts should be included in the table + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl + title = "Edit components for which product?" +%] + +[% columns = [ + { + name => "name" + heading => "Edit components of..." + contentlink => "editcomponents.cgi?product=%%name%%" + }, + { + name => "description" + heading => "Description" + allow_html_content => 1 + } + ] +%] + +[% IF showbugcounts %] + + [% columns.push({ + name => 'bug_count' + heading => "$terms.Bugs" + align => "right" + contentlink => "buglist.cgi?product=%%name%%" + }) + %] + +[% END %] + +[% PROCESS admin/table.html.tmpl + columns = columns + data = products +%] + +[% IF !showbugcounts %] + <p><a href="editcomponents.cgi?showbugcounts=1"> + Redisplay table with [% terms.bug %] counts (slower)</a></p> +[% END %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/confirm-action.html.tmpl b/template/en/default/admin/confirm-action.html.tmpl new file mode 100644 index 0000000..521d2d1 --- /dev/null +++ b/template/en/default/admin/confirm-action.html.tmpl @@ -0,0 +1,98 @@ +[%# 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 Frédéric Buclin. + # + # Contributor(s): Frédéric Buclin <LpSolit@gmail.com> + #%] + +[%# INTERFACE: + # abuser: identity of the user who created the (invalid?) token. + # token_action: the action the token was supposed to serve. + # expected_action: the action the user was going to do. + # script_name: the script generating this warning. + # alternate_script: the suggested script to redirect the user to + # if he declines submission. + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% PROCESS global/header.html.tmpl title = "Suspicious Action" + style_urls = ['skins/standard/global.css'] %] + +[% IF abuser %] + <div class="throw_error"> + <p>When you view an administrative form in [% terms.Bugzilla %], a token string + is randomly generated and stored both in the database and in the form you loaded, + to make sure that the requested changes are being made as a result of submitting + a form generated by [% terms.Bugzilla %]. Unfortunately, the token used right now + is incorrect, meaning that it looks like you didn't come from the right page. + The following token has been used :</p> + + <table border="0" cellpadding="5" cellspacing="0"> + [% IF token_action != expected_action %] + <tr> + <th>Action stored:</th> + <td>[% token_action FILTER html %]</td> + </tr> + <tr> + <th> </th> + <td> + This action doesn't match the one expected ([% expected_action FILTER html %]). + </td> + </tr> + [% END %] + + [% IF abuser != user.identity %] + <tr> + <th>Generated by:</th> + <td>[% abuser FILTER html %]</td> + </tr> + <tr> + <th> </th> + <td> + This token has not been generated by you. It is possible that someone + tried to trick you! + </td> + </tr> + [% END %] + </table> + + <p>Please report this problem to [%+ Param("maintainer") FILTER html %].</p> + </div> +[% ELSE %] + <div class="throw_error"> + It looks like you didn't come from the right page (you have no valid token for + the <em>[% expected_action FILTER html %]</em> action while processing the + '[% script_name FILTER html%]' script). The reason could be one of:<br> + <ul> + <li>You clicked the "Back" button of your web browser after having successfully + submitted changes, which is generally not a good idea (but harmless).</li> + <li>You entered the URL in the address bar of your web browser directly, + which should be safe.</li> + <li>You clicked on a URL which redirected you here <b>without your consent</b>, + in which case this action is much more critical.</li> + </ul> + Are you sure you want to commit these changes anyway? This may result in + unexpected and undesired results. + </div> + + <form name="check" id="check" method="post" action="[% script_name FILTER html %]"> + [% PROCESS "global/hidden-fields.html.tmpl" + exclude="^(Bugzilla_login|Bugzilla_password)$" %] + <input type="submit" id="confirm" value="Confirm Changes"> + </form> + <p>Or throw away these changes and go back to <a href="[% alternate_script FILTER html %]"> + [%- alternate_script FILTER html %]</a>.</p> +[% END %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/custom_fields/cf-js.js.tmpl b/template/en/default/admin/custom_fields/cf-js.js.tmpl new file mode 100644 index 0000000..5ece96e --- /dev/null +++ b/template/en/default/admin/custom_fields/cf-js.js.tmpl @@ -0,0 +1,59 @@ +[%# 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 NASA. + # Portions created by NASA are Copyright (C) 2008 + # San Jose State University Foundation. All Rights Reserved. + # + # Contributor(s): Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +// Disable a checkbox based on the state of another one. +function toggleCheckbox(this_checkbox, other_checkbox_id) { + var other_checkbox = document.getElementById(other_checkbox_id); + other_checkbox.disabled = !this_checkbox.checked; +} + +var select_values = new Array(); +[% USE Bugzilla %] +[% FOREACH sel_field = Bugzilla.get_fields({ is_select => 1 }) %] + select_values[[% sel_field.id FILTER js %]] = [ + [% FOREACH legal_value = sel_field.legal_values %] + [[% legal_value.id FILTER js %], '[% display_value(sel_field.name, legal_value.name) FILTER js %]'][% ',' UNLESS loop.last %] + [% END %] + ]; +[% END %] + +function onChangeType(type_field) { + var value_field = document.getElementById('value_field_id'); + if (type_field.value == [% constants.FIELD_TYPE_SINGLE_SELECT %] + || type_field.value == [% constants.FIELD_TYPE_MULTI_SELECT %]) + { + value_field.disabled = false; + } + else { + value_field.disabled = true; + } +} + +function onChangeVisibilityField() { + var vis_field = document.getElementById('visibility_field_id'); + var vis_value = document.getElementById('visibility_value_id'); + + if (vis_field.value) { + var values = select_values[vis_field.value]; + bz_populateSelectFromArray(vis_value, values); + } + else { + bz_clearOptions(vis_value); + } +} diff --git a/template/en/default/admin/custom_fields/confirm-delete.html.tmpl b/template/en/default/admin/custom_fields/confirm-delete.html.tmpl new file mode 100644 index 0000000..c936836 --- /dev/null +++ b/template/en/default/admin/custom_fields/confirm-delete.html.tmpl @@ -0,0 +1,66 @@ +[%# 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): Alexander Eiser <alexe@ed.ca> + #%] + +[%# INTERFACE: + # field: object; the field object that you are trying to delete. + # token: string; the delete_field token required to complete deletion. + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% title = BLOCK %] + Delete the Custom Field '[% field.name FILTER html %]' ([% field.description FILTER html %]) +[% END %] + +[% PROCESS global/header.html.tmpl + title = title + doc_section = "custom-fields.html#delete-custom-fields" +%] + +<table border="1" cellpadding="4" cellspacing="0"> +<tr bgcolor="#6666FF"> + <th valign="top" align="left">Field</th> + <th valign="top" align="left">Value</th> +</tr> +<tr> + <td valign="top">Custom Field:</td> + <td valign="top">[% field.name FILTER html %]</td> +</tr> +<tr> + <td valign="top">Description:</td> + <td valign="top">[% field.description FILTER html %]</td> +</tr> +<tr> + <td valign="top">Type:</td> + <td valign="top">[% field_types.${field.type} FILTER html %]</td> +</tr> +</table> + +<h2>Confirmation</h2> + +<p> + Are you sure you want to remove this field from the database?<br> + <em>This action will only be successful if the field is obsolete, + and has never been used in [% terms.abug FILTER html %].</em> +</p> + +<a href="editfields.cgi?action=delete&name=[% field.name FILTER html %]&token=[% token FILTER html %]"> + Delete field '[% field.description FILTER html %]'</a> + +<p> + <a href="editfields.cgi">Back to the list of existing custom fields</a> +</p> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/custom_fields/create.html.tmpl b/template/en/default/admin/custom_fields/create.html.tmpl new file mode 100644 index 0000000..a2db470 --- /dev/null +++ b/template/en/default/admin/custom_fields/create.html.tmpl @@ -0,0 +1,149 @@ +[%# 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): Frédéric Buclin <LpSolit@gmail.com> + #%] + +[%# INTERFACE: + # none + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% javascript = BLOCK %] + [% INCLUDE "admin/custom_fields/cf-js.js.tmpl" %] +[% END %] + +[% PROCESS global/header.html.tmpl + title = "Add a new Custom Field" + onload = "document.getElementById('new_bugmail').disabled = true;" + javascript_urls = [ 'js/util.js' ] + doc_section = "custom-fields.html#add-custom-fields" +%] + +<p> + Adding custom fields can make the interface of [% terms.Bugzilla %] very + complicated. Many admins who are new to [% terms.Bugzilla %] start off + adding many custom fields, and then their users complain that the interface + is "too complex". Please think carefully before adding any custom fields. + It may be the case that [% terms.Bugzilla %] already does what you need, + and you just haven't enabled the correct feature yet. +</p> + +<ul> + <li>Custom field names must begin with "cf_" to distinguish them from + standard fields. If you omit "cf_" from the beginning of the name, it + will be added for you.</li> + <li>Descriptions are a very short string describing the field and will be + used as the label for this field in the user interface.</li> +</ul> + +<form id="add_field" action="editfields.cgi" method="GET"> + <table border="0" cellspacing="0" cellpadding="5"> + <tr> + <th align="right"><label for="name">Name:</label></th> + <td> + <input type="text" id="name" name="name" value="cf_" size="40" maxlength="64"> + </td> + + <th align="right"> + <label for="enter_bug">Can be set on [% terms.bug %] creation:</label> + </th> + <td> + <input type="checkbox" id="enter_bug" name="enter_bug" value="1" + onchange="toggleCheckbox(this, 'new_bugmail');"> + </td> + </tr> + <tr> + <th align="right"><label for="desc">Description:</label></th> + <td><input type="text" id="desc" name="desc" value="" size="40"></td> + + <th align="right"> + <label for="new_bugmail">Displayed in [% terms.bug %]mail for new [% terms.bugs %]:</label> + </th> + <td><input type="checkbox" id="new_bugmail" name="new_bugmail" value="1"></td> + </tr> + <tr> + <th align="right"><label for="type">Type:</label></th> + <td> + <select id="type" name="type" onchange="onChangeType(this)"> + [% FOREACH type = field_types.keys %] + [% NEXT IF type == constants.FIELD_TYPE_UNKNOWN %] + <option value="[% type FILTER html %]">[% field_types.$type FILTER html %]</option> + [% END %] + </select> + </td> + + <th align="right"><label for="obsolete">Is obsolete:</label></th> + <td><input type="checkbox" id="obsolete" name="obsolete" value="1"></td> + </tr> + <tr> + <th align="right"><label for="sortkey">Sortkey:</label></th> + <td> + <input type="text" id="sortkey" name="sortkey" size="6" maxlength="6"> + </td> + + <th align="right"> + <label for="visibility_field_id">Field only appears when:</label> + </th> + <td> + <select name="visibility_field_id" id="visibility_field_id" + onchange="onChangeVisibilityField()"> + <option></option> + [% FOREACH sel_field = Bugzilla.get_fields({ is_select => 1 }) %] + <option value="[% sel_field.id FILTER html %]"> + [% sel_field.description FILTER html %] + ([% sel_field.name FILTER html %]) + </option> + [% END %] + </select> + <label for="visibility_value_id"><strong>is set to:</strong></label> + <select name="visibility_value_id" id="visibility_value_id"> + <option value=""></option> + </select> + </td> + </tr> + + <tr> + <td colspan="2"> </td> + <th> + <label for="value_field_id"> + Field that controls the values<br> + that appear in this field: + </label> + </th> + + <td> + <select disabled="disabled" name="value_field_id" id="value_field_id"> + <option></option> + [% FOREACH sel_field = Bugzilla.get_fields({ is_select => 1 }) %] + <option value="[% sel_field.id FILTER html %]"> + [% sel_field.description FILTER html %] + ([% sel_field.name FILTER html %]) + </option> + [% END %] + </select> + </td> + </tr> + </table> + <p> + <input type="hidden" name="action" value="new"> + <input type="hidden" name="token" value="[% token FILTER html %]"> + <input type="submit" id="create" value="Create"> + </p> +</form> + +<p> + <a href="editfields.cgi">Back to the list of existing custom fields</a> +</p> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/custom_fields/edit.html.tmpl b/template/en/default/admin/custom_fields/edit.html.tmpl new file mode 100644 index 0000000..c5ac53d --- /dev/null +++ b/template/en/default/admin/custom_fields/edit.html.tmpl @@ -0,0 +1,161 @@ +[%# 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): Frédéric Buclin <LpSolit@gmail.com> + #%] + +[%# INTERFACE: + # field: Bugzila::Field; the current field being edited + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% title = BLOCK %] + Edit the Custom Field '[% field.name FILTER html %]' ([% field.description FILTER html %]) +[% END %] + +[% javascript = BLOCK %] + [% INCLUDE "admin/custom_fields/cf-js.js.tmpl" %] +[% END %] + +[% PROCESS global/header.html.tmpl + title = title + onload = "toggleCheckbox(document.getElementById('enter_bug'), 'new_bugmail');" + javascript_urls = [ 'js/util.js' ] + doc_section = "custom-fields.html#edit-custom-fields" +%] + +<p> + Descriptions are a very short string describing the field and will be used as + the label for this field in the user interface. +</p> + +<form id="edit_field" action="editfields.cgi" method="GET"> + <table border="0" cellspacing="0" cellpadding="5"> + <tr> + <th align="right">Name:</th> + <td>[% field.name FILTER html %]</td> + + <th align="right"> + <label for="enter_bug">Can be set on [% terms.bug %] creation:</label> + </th> + <td><input type="checkbox" id="enter_bug" name="enter_bug" value="1" + [%- " checked" IF field.enter_bug %] + onchange="toggleCheckbox(this, 'new_bugmail');"></td> + </tr> + <tr> + <th align="right"><label for="desc">Description:</label></th> + <td><input type="text" id="desc" name="desc" size="40" + value="[% field.description FILTER html %]"></td> + + <th align="right"> + <label for="new_bugmail">Displayed in [% terms.bug %]mail for new [% terms.bugs %]:</label> + </th> + <td><input type="checkbox" id="new_bugmail" name="new_bugmail" value="1" + [%- " checked" IF field.mailhead %]></td> + </tr> + <tr> + <th align="right">Type:</th> + <td>[% field_types.${field.type} FILTER html %]</td> + + <th align="right"><label for="obsolete">Is obsolete:</label></th> + <td><input type="checkbox" id="obsolete" name="obsolete" value="1" + [%- " checked" IF field.obsolete %]></td> + </tr> + <tr> + <th align="right"><label for="sortkey">Sortkey:</label></th> + <td> + <input type="text" id="sortkey" name="sortkey" size="6" maxlength="6" + value="[% field.sortkey FILTER html %]"> + </td> + <th align="right"> + <label for="visibility_field_id">Field only appears when:</label> + </th> + <td> + <select name="visibility_field_id" id="visibility_field_id" + onchange="onChangeVisibilityField()"> + <option></option> + [% FOREACH sel_field = Bugzilla.get_fields({ is_select => 1 }) %] + [% NEXT IF sel_field.id == field.id %] + <option value="[% sel_field.id FILTER html %]" + [% ' selected="selected"' + IF sel_field.id == field.visibility_field.id %]> + [% sel_field.description FILTER html %] + ([% sel_field.name FILTER html %]) + </option> + [% END %] + </select> + <label for="visibility_value_id"><strong>is set to:</strong></label> + <select name="visibility_value_id" id="visibility_value_id"> + [% FOREACH value = field.visibility_field.legal_values %] + <option value="[% value.id FILTER html %]" + [% ' selected="selected"' + IF field.visibility_value.id == value.id %]> + [% display_value(field.visibility_field.name, value.name) FILTER html %] + </option> + [% END %] + </select> + </td> + </tr> + [% IF field.is_select %] + <tr> + <th> </th> + <td> + <a href="editvalues.cgi?field=[% field.name FILTER url_quote %]">Edit + legal values for this field</a>. + </td> + + <th> + <label for="value_field_id"> + Field that controls the values<br> + that appear in this field: + </label> + </th> + + <td> + <select name="value_field_id" id="value_field_id"> + <option></option> + [% FOREACH sel_field = Bugzilla.get_fields({ is_select => 1 }) %] + [% NEXT IF sel_field.id == field.id %] + <option value="[% sel_field.id FILTER html %]" + [% ' selected="selected"' + IF sel_field.id == field.value_field.id %]> + [% sel_field.description FILTER html %] + ([% sel_field.name FILTER html %]) + </option> + [% END %] + </select> + </td> + </tr> + [% END %] + </table> + <br> + <input type="hidden" name="action" value="update"> + <input type="hidden" name="name" value="[% field.name FILTER html %]"> + <input type="hidden" name="token" value="[% token FILTER html %]"> + <input type="submit" id="edit" value="Submit"> +</form> + +[% IF field.obsolete %] +<p> + <a href="editfields.cgi?action=del&name=[% field.name FILTER html %]">Remove + this custom field from the database.</a><br> + This action will only be successful if the custom field has never been used + in [% terms.abug %].<br> +</p> +[% END %] + +<p> + <a href="editfields.cgi">Back to the list of existing custom fields</a> +</p> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/custom_fields/list.html.tmpl b/template/en/default/admin/custom_fields/list.html.tmpl new file mode 100644 index 0000000..dd266c7 --- /dev/null +++ b/template/en/default/admin/custom_fields/list.html.tmpl @@ -0,0 +1,102 @@ +[%# 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): Frédéric Buclin <LpSolit@gmail.com> + #%] + +[%# INTERFACE: + # custom_fields: a list of Bugzilla::Field objects, representing custom fields. + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% PROCESS global/header.html.tmpl + title = "Custom Fields" + doc_section = "custom-fields.html" +%] + +[% delete_contentlink = BLOCK %]editfields.cgi?action=del&name=%%name%%[% END %] + +[% columns = [ + { + name => "name" + heading => "Edit custom field..." + contentlink => "editfields.cgi?action=edit&name=%%name%%" + }, + { + name => "description" + heading => "Description" + }, + { + name => "sortkey" + heading => "Sortkey" + }, + { + name => "type" + heading => "Type" + }, + { + name => "enter_bug" + heading => "Editable on $terms.Bug Creation" + }, + { + name => "mailhead" + heading => "In ${terms.Bug}mail on $terms.Bug Creation" + }, + { + name => "obsolete" + heading => "Is Obsolete" + }, + { + name => "action" + heading => "Action" + content => "" + } + ] +%] + +[% USE Bugzilla %] +[% custom_fields = Bugzilla.get_fields({ custom => 1 }) %] + +[%# We want to display the type name of fields, not their type ID. %] +[% overrides.type = {} %] + +[% FOREACH field_type = field_types.keys %] + [% overrides.type.type.$field_type = { + override_content => 1 + content => field_types.$field_type + } + %] +[% END %] + + +[% overrides.action.obsolete = { + "1" => { + override_content => 1 + content => "Delete" + override_contentlink => 1 + contentlink => delete_contentlink + } + } +%] + +[% PROCESS admin/table.html.tmpl + columns = columns + overrides = overrides + data = custom_fields +%] + +<p> + <a href="editfields.cgi?action=add">Add a new custom field</a> +</p> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/fieldvalues/confirm-delete.html.tmpl b/template/en/default/admin/fieldvalues/confirm-delete.html.tmpl new file mode 100644 index 0000000..2ea7c2f --- /dev/null +++ b/template/en/default/admin/fieldvalues/confirm-delete.html.tmpl @@ -0,0 +1,161 @@ +[%# 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): Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[%# INTERFACE: + # value: Bugzilla::Field::Choice; The field value being deleted. + # value_count: number; The number of values available for this field. + # field: object; the field the value is being deleted from. + #%] + +[% title = BLOCK %] + Delete Value '[% value.name FILTER html %]' from the + '[% field.description FILTER html %]' ([% field.name FILTER html %]) field +[% END %] + +[% PROCESS global/header.html.tmpl + title = title + style_urls = ['skins/standard/admin.css'] +%] + +<table border="1" cellpadding="4" cellspacing="0"> +<tr bgcolor="#6666FF"> + <th valign="top" align="left">Field</th> + <th valign="top" align="left">Value</th> +</tr> +<tr> + <td valign="top">Field Name:</td> + <td valign="top">[% field.description FILTER html %]</td> +</tr> +<tr> + <td valign="top">Field Value:</td> + <td valign="top">[% value.name FILTER html %]</td> +</tr> +<tr> + <td valign="top">[% terms.Bugs %]:</td> + <td valign="top"> +[% IF value.bug_count %] + <a title="List of [% terms.bugs %] where ' + [%- field.description FILTER html %]' is ' + [%- value.name FILTER html %]'" + href="buglist.cgi?[% field.name FILTER url_quote %]= + [%- value.name FILTER url_quote %]"> + [%- value.bug_count FILTER html %]</a> +[% ELSE %] + None +[% END %] + </td> +</tr> +</table> + +<h2>Confirmation</h2> + +[% IF value.is_default || value.bug_count || (value_count == 1) + || value.controls_visibility_of_fields.size + || value.controlled_values_array.size +%] + + <p>Sorry, but the '[% value.name FILTER html %]' value cannot be deleted + from the '[% field.description FILTER html %]' field for the following + reason(s):</p> + + <ul class="warningmessages"> + [% IF value.is_default %] + <li>'[% value.name FILTER html %]' is the default value for + the '[% field.description FILTER html %]' field. + [% IF user.in_group('tweakparams') %] + You first have to <a href="editparams.cgi?section=bugfields">change + the default value</a> for this field before you can delete + this value. + [% END %] + </li> + [% END %] + + [% IF value.bug_count %] + <li> + [% IF value.bug_count > 1 %] + There are [% value.bug_count FILTER html %] [%+ terms.bugs %] + with this field value. + [% ELSE %] + There is 1 [% terms.bug %] with this field value. + [% END %] + You must change the field value on + <a title="List of [% terms.bugs %] where ' + [%- field.description FILTER html %]' is ' + [%- value.name FILTER html %]'" + href="buglist.cgi?[% field.name FILTER url_quote %]= + [%- value.name FILTER url_quote %]"> + [% IF value.bug_count > 1 %] + those [% terms.bugs %] + [% ELSE %] + that [% terms.bug %] + [% END %] + </a> + to another value before you can delete this value. + </li> + [% END %] + + [% IF value_count == 1 %] + <li>'[% value.name FILTER html %]' is the last value for + '[%- field.description FILTER html %]', and so it can not be deleted. + </li> + [% END %] + + [% IF value.controls_visibility_of_fields.size %] + <li>This value controls the visibility of the following fields:<br> + [% FOREACH field = value.controls_visibility_of_fields %] + <a href="editfields.cgi?action=edit&name= + [%- field.name FILTER url_quote %]"> + [%- field.description FILTER html %] + ([% field.name FILTER html %])</a><br> + [% END %] + </li> + [% END %] + + [% IF value.controlled_values_array.size %] + <li>This value controls the visibility of the following values in + other fields:<br> + [% FOREACH field_name = value.controlled_values.keys %] + [% FOREACH controlled = value.controlled_values.${field_name} %] + <a href="editvalues.cgi?action=edit&field= + [%- controlled.field.name FILTER url_quote %]&value= + [%- controlled.name FILTER url_quote %]"> + [% controlled.field.description FILTER html %] + ([% controlled.field.name FILTER html %]): + [%+ controlled.name FILTER html %]</a><br> + [% END %] + [% END %] + </li> + [% END %] + </ul> + +[% ELSE %] + + <p>Do you really want to delete this value?</p> + + <form method="post" action="editvalues.cgi"> + <input type="submit" value="Yes, delete" id="delete"> + <input type="hidden" name="action" value="delete"> + <input type="hidden" name="field" value="[% field.name FILTER html %]"> + <input type="hidden" name="value" value="[% value.name FILTER html %]"> + <input type="hidden" name="token" value="[% token FILTER html %]"> + </form> + +[% END %] + +[% PROCESS admin/fieldvalues/footer.html.tmpl + no_edit_link = 1 + +%] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/fieldvalues/create.html.tmpl b/template/en/default/admin/fieldvalues/create.html.tmpl new file mode 100644 index 0000000..f1eec1a --- /dev/null +++ b/template/en/default/admin/fieldvalues/create.html.tmpl @@ -0,0 +1,97 @@ +[%# 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): Max Kanat-Alexander <mkanat@bugzilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] + +[%# INTERFACE: + # field: object; the field the value is being created for + #%] + +[% title = BLOCK %] + Add Value for the '[% field.description FILTER html %]' ([% field.name FILTER html %]) field +[% END %] +[% PROCESS global/header.html.tmpl + title = title +%] + +<p> + This page allows you to add a new value for the + '[% field.description FILTER html %]' field. +</p> + +<form method="post" action="editvalues.cgi"> + <table border="0" cellpadding="4" cellspacing="0"> + <tr> + <th align="right"><label for="value">Value:</label></th> + <td> + <input id="value" name="value" size="30" + maxlength="[% constants.MAX_FIELD_VALUE_SIZE FILTER none %]"> + </td> + </tr> + <tr> + <th align="right"><label for="sortkey">Sortkey:</label></th> + <td><input id="sortkey" name="sortkey" size="6" maxlength="6"></td> + </tr> + [% IF field.name == "bug_status" %] + <tr> + <th align="right"><label for="is_open">Status Type:</label></th> + <td> + <input type="radio" id="open_status" name="is_open" value="1" + checked="checked"> + <label for="open_status">Open</label><br> + <input type="radio" id="closed_status" name="is_open" value="0"> + <label for="closed_status">Closed (requires a Resolution)</label> + </td> + </tr> + <tr> + <th> </th> + <td> + Note: The open/close attribute can only be set now, when you create + the status. It cannot be edited later. + </td> + </tr> + [% END %] + [% IF field.value_field %] + <tr> + <th align="right"> + <label for="visibility_value_id">Only appears when + [%+ field.value_field.description FILTER html %] is set to: + </label> + </th> + <td> + <select name="visibility_value_id" id="visibility_value_id"> + <option></option> + [% FOREACH field_value = field.value_field.legal_values %] + [% NEXT IF field_value.name == '' %] + <option value="[% field_value.id FILTER none %]"> + [%- field_value.name FILTER html -%] + </option> + [% END %] + </select> + <small>(Leave unset to have this value always appear.)</small> + </td> + </tr> + [% END %] + </table> + <input type="submit" id="create" value="Add"> + <input type="hidden" name="action" value="new"> + <input type="hidden" name='field' value="[% field.name FILTER html %]"> + <input type="hidden" name="token" value="[% token FILTER html %]"> +</form> + +[% PROCESS admin/fieldvalues/footer.html.tmpl + no_add_link = 1 + %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/fieldvalues/edit.html.tmpl b/template/en/default/admin/fieldvalues/edit.html.tmpl new file mode 100644 index 0000000..5650ee8 --- /dev/null +++ b/template/en/default/admin/fieldvalues/edit.html.tmpl @@ -0,0 +1,107 @@ +[%# 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): Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[%# INTERFACE: + # value: Bugzilla::Field::Choice; The field value we are editing. + # field: Bugzilla::Field; The field this value belongs to. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% title = BLOCK %] + Edit Value '[% value.name FILTER html %]' for the + '[% field.description FILTER html %]' ([% field.name FILTER html %]) field +[% END %] +[% PROCESS global/header.html.tmpl + title = title +%] + +<form method="post" action="editvalues.cgi"> + <table border="0" cellpadding="4" cellspacing="0"> + + <tr> + <th valign="top" align="right"> + <label for="value_new">Field Value:</label> + </th> + <td> + [% IF value.is_static %] + <input type="hidden" name="value_new" id="value_new" + value="[% value.name FILTER html %]"> + [%- value.name FILTER html %] + [% ELSE %] + <input id="value_new" name="value_new" size="20" + maxlength="[% constants.MAX_FIELD_VALUE_SIZE FILTER none %]" + value="[% value.name FILTER html %]"> + [% END %] + </td> + </tr> + <tr> + <th align="right"><label for="sortkey">Sortkey:</label></th> + <td><input id="sortkey" size="6" maxlength="6" name="sortkey" + value="[%- value.sortkey FILTER html %]"></td> + </tr> + [% IF field.name == "bug_status" %] + <tr> + <th align="right"><label for="is_open">Status Type:</label></th> + <td>[% IF value.is_open %]Open[% ELSE %]Closed[% END %]</td> + </tr> + [% END %] + [% IF field.value_field %] + <tr> + <th align="right"> + <label for="visibility_value_id">Only appears when + [%+ field.value_field.description FILTER html %] is set to: + </label> + </th> + <td> + <select name="visibility_value_id" id="visibility_value_id"> + <option></option> + [% FOREACH field_value = field.value_field.legal_values %] + [% NEXT IF field_value.name == '' %] + <option value="[% field_value.id FILTER none %]" + [% ' selected="selected"' + IF field_value.id == value.visibility_value.id %]> + [%- field_value.name FILTER html -%] + </option> + [% END %] + </select> + <small>(Leave unset to have this value always appear.)</small> + </td> + </tr> + [% END %] + <tr> + <th align="right"><label for="is_active">Enabled for [% terms.bugs %]:</label></th> + <td><input id="is_active" name="is_active" type="checkbox" value="1" + [%+ 'checked="checked"' IF value.is_active %] + [%+ 'disabled="disabled"' IF value.is_default OR value.is_static %]> + [% IF value.is_default %] + This value is selected as default in the parameters for this field. It cannot be disabled. + [% ELSIF value.is_static %] + This value is non-deletable and cannot be disabled. + [% END %] + </td> + </tr> + </table> + <input type="hidden" name="value" value="[% value.name FILTER html %]"> + <input type="hidden" name="action" value="update"> + <input type="hidden" name="field" value="[% field.name FILTER html %]"> + <input type="hidden" name="token" value="[% token FILTER html %]"> + <input type="submit" id="update" value="Save Changes"> +</form> + +[% PROCESS admin/fieldvalues/footer.html.tmpl + no_edit_link = 1 %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/fieldvalues/footer.html.tmpl b/template/en/default/admin/fieldvalues/footer.html.tmpl new file mode 100644 index 0000000..288612d --- /dev/null +++ b/template/en/default/admin/fieldvalues/footer.html.tmpl @@ -0,0 +1,55 @@ +[%# 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): Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[%# INTERFACE: + # value: string; the value being inserted/edited. + # field: object; the field which the value belongs/belonged to. + # + # no_XXX_link: boolean; if defined, then don't show the corresponding + # link. Supported parameters are: + # + # no_edit_link + # no_edit_other_link + # no_add_link + #%] + +<hr> + +<p> + +[% UNLESS no_add_link %] + <a title="Add a value for the '[% field.description FILTER html %]' field." + href="editvalues.cgi?action=add&field= + [%- field.name FILTER url_quote %]">Add</a> a value. +[% END %] + +[% IF value.defined && !no_edit_link %] + Edit value <a + title="Edit value '[% value.name FILTER html %]' for the ' + [%- field.name FILTER html %]' field" + href="editvalues.cgi?action=edit&field= + [%- field.name FILTER url_quote %]&value= + [%- value.name FILTER url_quote %]"> + '[% value.name FILTER html %]'</a>. +[% END %] + +[% UNLESS no_edit_other_link %] + Edit other values for the <a + href="editvalues.cgi?field= + [%- field.name FILTER url_quote %]">'[% field.description FILTER html %]'</a> field. + +[% END %] + +</p> diff --git a/template/en/default/admin/fieldvalues/list.html.tmpl b/template/en/default/admin/fieldvalues/list.html.tmpl new file mode 100644 index 0000000..3f750eb --- /dev/null +++ b/template/en/default/admin/fieldvalues/list.html.tmpl @@ -0,0 +1,99 @@ +[%# 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): Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[%# INTERFACE: + # values: array of hashes having the following properties: + # - name: string; The value. + # - sortkey: number; The sortkey used to order the value when + # displayed to the user in a list. + # + # field: object; the field we are editing values for. + # static: array; list of values which cannot be renamed nor deleted. + #%] + +[% USE Bugzilla %] +[% cgi = Bugzilla.cgi %] + +[% PROCESS global/variables.none.tmpl %] + +[% title = BLOCK %]Select value for the '[% field.description FILTER html %]' + ([% field.name FILTER html %]) field[% END %] +[% PROCESS global/header.html.tmpl + title = title +%] + +[% edit_contentlink = BLOCK %]editvalues.cgi?action=edit&field= + [%- field.name FILTER url_quote %]&value=%%name%%[% END %] +[% delete_contentlink = BLOCK %]editvalues.cgi?action=del&field= + [%- field.name FILTER url_quote %]&value=%%name%%[% END %] + + +[% columns = [ + { + name => "name" + heading => "Edit field value..." + contentlink => edit_contentlink + }, + { + name => "sortkey" + heading => "Sortkey" + }, + { + name => "isactive" + heading => "Enabled for $terms.bugs" + yesno_field => 1 + }, + { + name => "action" + heading => "Action" + content => "Delete" + contentlink => delete_contentlink + } ] +%] + + +[% SET overrides.action = {} %] +[% FOREACH check_value = values %] + [% IF check_value.is_static %] + [% overrides.action.name.${check_value.name} = { + override_content => 1 + content => "(Non-deletable value)" + override_contentlink => 1 + contentlink => undef + } + %] + [% ELSIF check_value.is_default %] + [% overrides.action.name.${check_value.name} = { + override_content => 1 + content => "(Default value)" + override_contentlink => 1 + contentlink => undef + } + %] + [% END %] + +[% END %] + +[% PROCESS admin/table.html.tmpl + columns = columns + data = values + overrides = overrides +%] + +[% PROCESS admin/fieldvalues/footer.html.tmpl + no_edit_other_link = 1 + %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/fieldvalues/select-field.html.tmpl b/template/en/default/admin/fieldvalues/select-field.html.tmpl new file mode 100644 index 0000000..3704d42 --- /dev/null +++ b/template/en/default/admin/fieldvalues/select-field.html.tmpl @@ -0,0 +1,47 @@ +[%# 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): Max Kanat-Alexander <mkanat@bugzilla.org> + # + #%] + +[%# INTERFACE: + # fields: Array of hashes. Each hash contains only one key, "name." + # The names are the same as the keys from field_descs + # (see global/field-descs.html.tmpl). + #%] + +[% USE Bugzilla %] +[% cgi = Bugzilla.cgi %] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl + title = "Edit values for which field?" +%] + +[% columns = [ + { + name => "name" + heading => "Edit field values for..." + content_use_field = 1 + contentlink => "editvalues.cgi?field=%%name%%" + } + ] +%] + +[% PROCESS admin/table.html.tmpl + columns = columns + data = fields +%] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/flag-type/confirm-delete.html.tmpl b/template/en/default/admin/flag-type/confirm-delete.html.tmpl new file mode 100644 index 0000000..ed90941 --- /dev/null +++ b/template/en/default/admin/flag-type/confirm-delete.html.tmpl @@ -0,0 +1,63 @@ +[%# 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): Myk Melez <myk@mozilla.org> + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% title = BLOCK %]Confirm Deletion of Flag Type '[% flag_type.name FILTER html %]'[% END %] + +[% PROCESS global/header.html.tmpl + title = title + doc_section = "flags-overview.html#flags-delete" +%] + +<p> + [% IF flag_type.flag_count %] + There are [% flag_type.flag_count %] flags of type [% flag_type.name FILTER html %]. + If you delete this type, those flags will also be deleted. + [% END %] + + Note that instead of deleting the type you can + <a href="editflagtypes.cgi?action=deactivate&id=[% flag_type.id %]&token= + [%- token FILTER html %]">deactivate it</a>, + in which case the type [% IF flag_type.flag_count %] and its flags [% END %] will remain + in the database but will not appear in the [% terms.Bugzilla %] UI. +</p> + +<table> + <tr> + <td colspan="2"> + Do you really want to delete this type? + </td> + </tr> + <tr> + <td> + <a href="editflagtypes.cgi?action=delete&id=[% flag_type.id %]&token= + [%- token FILTER html %]">Yes, delete + </a> + </td> + <td align="right"> + <a href="editflagtypes.cgi"> + No, don't delete + </a> + </td> + </tr> +</table> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/flag-type/edit.html.tmpl b/template/en/default/admin/flag-type/edit.html.tmpl new file mode 100644 index 0000000..ebebf50 --- /dev/null +++ b/template/en/default/admin/flag-type/edit.html.tmpl @@ -0,0 +1,253 @@ +[%# 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): Myk Melez <myk@mozilla.org> + # Mark Bickford <markhb@maine.rr.com> + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS "global/js-products.html.tmpl" %] + +[% IF type.target_type == "bug" %] + [% title = BLOCK %]Create Flag Type for [% terms.Bugs %][% END %] + [% typeLabelLowerPlural = BLOCK %][% terms.bugs %][% END %] + [% typeLabelLowerSingular = BLOCK %][% terms.bug %][% END %] +[% ELSE %] + [% title = "Create Flag Type for Attachments" %] + [% typeLabelLowerPlural = BLOCK %]attachments[% END %] + [% typeLabelLowerSingular = BLOCK %]attachment[% END %] +[% END %] + +[% doc_section = "flags-overview.html#flags-create" %] +[% IF last_action == "copy" %] + [% title = BLOCK %]Create Flag Type Based on [% type.name FILTER html %][% END %] +[% ELSIF last_action == "edit" %] + [% title = BLOCK %]Edit Flag Type [% type.name FILTER html %][% END %] + [% doc_section = "flags-overview.html#flags-edit" %] +[% END %] + +[% PROCESS global/header.html.tmpl + title = title + style = " + table#form th { text-align: right; vertical-align: baseline; white-space: nowrap; } + table#form td { text-align: left; vertical-align: baseline; } + " + onload="var f = document.forms[0]; selectProduct(f.product, f.component, null, null, '__Any__');" + javascript_urls=["js/productform.js"] + doc_section = doc_section +%] + +<form method="post" action="editflagtypes.cgi"> + <input type="hidden" name="action" value="[% action %]"> + <input type="hidden" name="id" value="[% type.id %]"> + <input type="hidden" name="token" value="[% token FILTER html %]"> + <input type="hidden" name="target_type" value="[% type.target_type %]"> + [% FOREACH category = type.inclusions %] + <input type="hidden" name="inclusions" value="[% category.value FILTER html %]"> + [% END %] + [% FOREACH category = type.exclusions %] + <input type="hidden" name="exclusions" value="[% category.value FILTER html %]"> + [% END %] + + [%# Add a hidden button at the top of the form so that the user pressing "return" + # really submit the form, as expected. %] + <input type="submit" id="commit" value="Submit" style="display: none;"> + + <table id="form" cellspacing="0" cellpadding="4" border="0"> + <tr> + <th>Name:</th> + <td> + a short name identifying this type<br> + <input type="text" name="name" value="[% type.name FILTER html %]" + size="50" maxlength="50"> + </td> + </tr> + + <tr> + <th>Description:</th> + <td> + a comprehensive description of this type<br> + [% INCLUDE global/textarea.html.tmpl + name = 'description' + minrows = 4 + cols = 80 + defaultcontent = type.description + %] + </td> + </tr> + + <tr> + <th>Category:</th> + + <td> + the products/components to which [% typeLabelLowerPlural %] must + (inclusions) or must not (exclusions) belong in order for users + to be able to set flags of this type for them + <table> + <tr> + <td style="vertical-align: top;"> + <b>Product/Component:</b><br> + <select name="product" onchange="selectProduct(this, this.form.component, null, null, '__Any__');"> + <option value="">__Any__</option> + [% FOREACH prod = products %] + <option value="[% prod.name FILTER html %]" + [% "selected" IF type.product.name == prod.name %]> + [% prod.name FILTER html %]</option> + [% END %] + </select><br> + <select name="component"> + <option value="">__Any__</option> + [% FOREACH comp = components %] + <option value="[% comp FILTER html %]" + [% "selected" IF type.component.name == comp %]> + [% comp FILTER html %]</option> + [% END %] + </select><br> + <input type="submit" name="categoryAction-include" value="Include"> + <input type="submit" name="categoryAction-exclude" value="Exclude"> + </td> + <td style="vertical-align: top;"> + <b>Inclusions:</b><br> + [% PROCESS "global/select-menu.html.tmpl" name="inclusion_to_remove" multiple="1" size="7" options=type.inclusions %]<br> + <input type="submit" name="categoryAction-removeInclusion" value="Remove Inclusion"> + </td> + <td style="vertical-align: top;"> + <b>Exclusions:</b><br> + [% PROCESS "global/select-menu.html.tmpl" name="exclusion_to_remove" multiple="1" size="7" options=type.exclusions %]<br> + <input type="submit" name="categoryAction-removeExclusion" value="Remove Exclusion"> + </td> + </tr> + </table> + </td> + </tr> + + <tr> + <th>Sort Key:</th> + <td> + a number between 1 and 32767 by which this type will be sorted + when displayed to users in a list; ignore if you don't care + what order the types appear in or if you want them to appear + in alphabetical order<br> + <input type="text" name="sortkey" value="[% type.sortkey || 1 %]" size="5" maxlength="5"> + </td> + </tr> + + <tr> + <th> </th> + <td> + <input type="checkbox" id="is_active" name="is_active" + [% " checked" IF type.is_active || !type.is_active.defined %]> + <label for="is_active">active (flags of this type appear in the UI and can be set)</label> + </td> + </tr> + + <tr> + <th> </th> + <td> + <input type="checkbox" id="is_requestable" name="is_requestable" + [% " checked" IF type.is_requestable || !type.is_requestable.defined %]> + <label for="is_requestable">requestable (users can ask for flags of this type to be set)</label> + </td> + </tr> + + <tr> + <th>CC List:</th> + <td> + if requestable, who should get carbon copied on email notification of requests. + This is a comma-separated list of full e-mail addresses which do not + need to be [% terms.Bugzilla %] logins. + [% IF Param('emailsuffix') %] + Note that the configured emailsuffix + <kbd>[% Param('emailsuffix') %]</kbd> will <em>not</em> be appended + to these addresses, so you should add it explicitly if so desired. + [% END %]<br> + <input type="text" name="cc_list" value="[% type.cc_list FILTER html %]" size="80" maxlength="200"> + </td> + </tr> + + <tr> + <th> </th> + <td> + <input type="checkbox" id="is_requesteeble" name="is_requesteeble" + [% " checked" IF type.is_requesteeble || !type.is_requesteeble.defined %]> + <label for="is_requesteeble">specifically requestable (users can ask specific other users + to set flags of this type as opposed to just asking the wind)</label> + </td> + </tr> + + <tr> + <th> </th> + <td> + <input type="checkbox" id="is_multiplicable" name="is_multiplicable" + [% " checked" IF type.is_multiplicable || !type.is_multiplicable.defined %]> + <label for="is_multiplicable">multiplicable (multiple flags of this type can be set on + the same [% typeLabelLowerSingular %])</label> + </td> + </tr> + + <tr> + <th>Grant Group:</th> + <td> + the group allowed to grant/deny flags of this type + (to allow all users to grant/deny these flags, select no group)<br> + [% PROCESS select selname = "grant_group" %] + </td> + </tr> + + <tr> + <th>Request Group:</th> + <td> + if flags of this type are requestable, the group allowed to request them + (to allow all users to request these flags, select no group)<br> + Note that the request group alone has no effect if the grant group is not defined!<br> + [% PROCESS select selname = "request_group" %] + </td> + </tr> + + <tr> + <th></th> + <td> + <input type="submit" id="save" value=" + [%- IF (last_action == "enter" || last_action == "copy") %]Create + [%- ELSE %]Save Changes + [%- END %]"> + </td> + </tr> + + </table> + +</form> + +[% PROCESS global/footer.html.tmpl %] + + +[%############################################################################%] +[%# Block for SELECT fields #%] +[%############################################################################%] + +[% BLOCK select %] + <select name="[% selname %]" id="[% selname %]"> + <option value="">(no group)</option> + [% FOREACH group = groups %] + <option value="[% group.name FILTER html %]" + [% " selected" IF (type.${selname} && type.${selname}.name == group.name) %]> + [%- group.name FILTER html %] + </option> + [% END %] + </select> +[% END %] diff --git a/template/en/default/admin/flag-type/list.html.tmpl b/template/en/default/admin/flag-type/list.html.tmpl new file mode 100644 index 0000000..220db89 --- /dev/null +++ b/template/en/default/admin/flag-type/list.html.tmpl @@ -0,0 +1,174 @@ +[%# 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): Myk Melez <myk@mozilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS "global/js-products.html.tmpl" %] + +[% PROCESS global/header.html.tmpl + title = 'Administer Flag Types' + style = " + table#flag_types_bugs tr th, + table#flag_types_attachments tr th { text-align: left; } + .inactive { color: #787878; } + .multiplicable { display: block; } + " + onload="var f = document.flagtype_form; selectProduct(f.product, f.component, null, null, '__All__');" + javascript_urls=["js/productform.js"] + doc_section = "flags-overview.html#flag-types" +%] + +<p> + Flags are markers that identify whether [% terms.abug %] or attachment has been granted + or denied some status. Flags appear in the UI as a name and a status symbol + ("+" for granted, "-" for denied, and "?" for statuses requested by users). +</p> + +<p> + For example, you might define a "review" status for users to request review + for their patches. When a patch writer requests review, the string "review?" + will appear in the attachment. When a patch reviewer reviews the patch, + either the string "review+" or the string "review-" will appear in the patch, + depending on whether the patch passed or failed review. +</p> + +<p> + You can restrict the list of flag types to those available for a given product + and component. If a product is selected with no component, only flag types + which are available to at least one component of the product are shown. +</p> + +<form id="flagtype_form" name="flagtype_form" action="editflagtypes.cgi" method="get"> + <table> + <tr> + <th><label for="product">Product:</label></th> + <td> + <select name="product" onchange="selectProduct(this, this.form.component, null, null, '__Any__');"> + <option value="">__Any__</option> + [% FOREACH prod = products %] + <option value="[% prod.name FILTER html %]" + [% " selected" IF selected_product == prod.name %]> + [% prod.name FILTER html %]</option> + [% END %] + </select> + </td> + <th><label for="component">Component:</label></th> + <td> + <select name="component"> + <option value="">__Any__</option> + [% FOREACH comp = components %] + <option value="[% comp FILTER html %]" + [% " selected" IF selected_component == comp %]> + [% comp FILTER html %]</option> + [% END %] + </select> + </td> + <td> + <input type="checkbox" id="show_flag_counts" name="show_flag_counts" value="1" + [%+ 'checked="checked"' IF show_flag_counts %]> + <label for="show_flag_counts">Show flag counts</label> + </td> + <td><input type="submit" id="submit" value="Filter"></td> + </tr> + </table> +</form> + +<h3>Flag Types for [% terms.Bugs %]</h3> + +[% PROCESS display_flag_types types=bug_types types_id='bugs' %] + +<p> + <a href="editflagtypes.cgi?action=enter&target_type=bug">Create Flag Type for [% terms.Bugs %]</a> +</p> + +<h3>Flag Types for Attachments</h3> + +[% PROCESS display_flag_types types=attachment_types types_id='attachments' %] + +<p> + <a href="editflagtypes.cgi?action=enter&target_type=attachment">Create Flag Type For Attachments</a> +</p> + +[% PROCESS global/footer.html.tmpl %] + + +[% BLOCK display_flag_types %] + <table id="flag_types_[% types_id FILTER html %]" cellspacing="0" cellpadding="4" border="1"> + + <tr> + <th>Edit name ...</th> + <th>Description</th> + <th>Sortkey</th> + <th>Properties</th> + <th>Grant group</th> + <th>Request group</th> + [% IF show_flag_counts %] + <th>Flags</th> + [%# Note to translators: translate the strings in quotes only. %] + [% state_desc = {granted = 'granted' denied = 'denied' pending = 'pending'} %] + [% END %] + <th>Actions</th> + </tr> + + [% FOREACH type = types %] + + <tr class="[% IF type.is_active %]active[% ELSE %]inactive[% END %]"> + <td><a href="editflagtypes.cgi?action=edit&id=[% type.id %]">[% type.name FILTER html FILTER no_break %]</a></td> + <td>[% type.description FILTER html %]</td> + <td align="right">[% type.sortkey FILTER html %]</td> + <td> + [% IF type.is_requestable %] + <span class="requestable">requestable</span> + [% END %] + [% IF type.is_requestable && type.is_requesteeble %] + <span class="requesteeble">(specifically)</span> + [% END %] + [% IF type.is_multiplicable %] + <span class="multiplicable">multiplicable</span> + [% END %] + </td> + <td>[% IF type.grant_group %][% type.grant_group.name FILTER html %][% END %]</td> + <td>[% IF type.request_group %][% type.request_group.name FILTER html %][% END %]</td> + [% IF show_flag_counts %] + <td> + [% FOREACH state = ['granted', 'pending', 'denied'] %] + [% bug_list = bug_lists.${type.id}.$state || [] %] + [% IF bug_list.size %] + <a href="buglist.cgi?bug_id=[% bug_list.unique.nsort.join(",") FILTER html %]"> + [% bug_list.size FILTER html %] [%+ state_desc.$state FILTER html %] + </a> + <br> + [% ELSE %] + 0 [% state_desc.$state FILTER html %]<br> + [% END %] + [% END %] + </td> + [% END %] + <td> + <a href="editflagtypes.cgi?action=copy&id=[% type.id %]">Copy</a> + | <a href="editflagtypes.cgi?action=confirmdelete&id=[% type.id %]">Delete</a> + </td> + </tr> + + [% END %] + + </table> +[% END %] diff --git a/template/en/default/admin/groups/confirm-remove.html.tmpl b/template/en/default/admin/groups/confirm-remove.html.tmpl new file mode 100644 index 0000000..cdb070d --- /dev/null +++ b/template/en/default/admin/groups/confirm-remove.html.tmpl @@ -0,0 +1,66 @@ +[%# 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): Dave Miller <justdave@syndicomm.com> + # Joel Peshkin <bugreport@peshkin.net> + # Jacob Steenhagen <jake@bugzilla.org> + # Vlad Dascalu <jocuri@softhome.net> + # Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[%# INTERFACE: + # group: The Bugzilla::Group being changed. + # regexp: the regexp according to which the update is performed. + #%] + +[% IF regexp %] + [% title = "Confirm: Remove Explicit Members in the Regular Expression?" %] +[% ELSE %] + [% title = "Confirm: Remove All Explicit Members?" %] +[% END %] + +[% PROCESS global/header.html.tmpl + title = title + doc_section = "groups.html" +%] + +[% IF regexp %] + <p>This option will remove all users from '[% group.name FILTER html %]' + whose login names match the regular expression: + '[% regexp FILTER html %]'</p> +[% ELSE %] + <p>This option will remove all explicitly defined users + from '[% group.name FILTER html %].'</p> +[% END %] + +<p>Generally, you will only need to do this when upgrading groups + created with [% terms.Bugzilla %] versions 2.16 and earlier. Use + this option with <b>extreme care</b> and consult the documentation + for further information. +</p> + +<form method="post" action="editgroups.cgi"> + <input type="hidden" name="group_id" value="[% group.id FILTER html %]"> + <input type="hidden" name="regexp" value="[% regexp FILTER html %]"> + <input type="hidden" name="action" value="remove_regexp"> + + <input name="token" type="hidden" value="[% token FILTER html %]"> + <input name="confirm" type="submit" value="Confirm"> + <p>Or <a href="editgroups.cgi">return to the Edit Groups page</a>.</p> +</form> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/groups/create.html.tmpl b/template/en/default/admin/groups/create.html.tmpl new file mode 100644 index 0000000..b3ac723 --- /dev/null +++ b/template/en/default/admin/groups/create.html.tmpl @@ -0,0 +1,102 @@ +[%# 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): Dave Miller <justdave@syndicomm.com> + # Joel Peshkin <bugreport@peshkin.net> + # Jacob Steenhagen <jake@bugzilla.org> + # Vlad Dascalu <jocuri@softhome.net> + #%] + +[%# INTERFACE: + # none + #%] + +[% PROCESS global/header.html.tmpl + title = "Add group" + subheader = "This page allows you to define a new user group." + doc_section = "groups.html#create-groups" +%] + +<form method="post" action="editgroups.cgi"> + <table border="1" cellpadding="4" cellspacing="0"><tr> + <th>New Name</th> + <th>New Description</th> + <th>New User RegExp</th> + <th>Use For [% terms.Bugs %]</th> + </tr><tr> + <td><input size="20" name="name"></td> + <td><input size="40" name="desc"></td> + <td><input size="30" name="regexp"></td> + <td><input type="checkbox" name="isactive" value="1" checked></td> + </tr> + <tr> + <th>Icon URL:</th> + <td colspan="3"><input type="text" size="70" maxlength="255" id="icon_url" name="icon_url"></td> + </tr> + [% Hook.process('field') %] + </table> + + <hr> + + <input type="checkbox" id="insertnew" name="insertnew" value="1" + [% IF Param("makeproductgroups") %] checked[% END %]> + <label for="insertnew">Insert new group into all existing products.</label> + <p> + <input type="submit" id="create" value="Add"> + <input type="hidden" name="action" value="new"> + <input type="hidden" name="token" value="[% token FILTER html %]"> +</form> + +<p><b>Name</b> is what is used with the B<!-- blah -->ugzilla->user->in_group() +function in any customized cgi files you write that use a given group. +It can also be used by people submitting [% terms.bugs %] by email to +limit [% terms.abug %] to a certain set of groups.</p> + +<p><b>Description</b> is what will be shown in the [% terms.bug %] reports +to members of the group where they can choose whether +the [% terms.bug %] will be restricted to others in the same group.</p> + +<p>The <b>Use For [% terms.Bugs %]</b> flag determines whether or not the +group is eligible to be used for [% terms.bugs %]. If you clear this, it will +no longer be possible for users to add [% terms.bugs %] to this group, +although [% terms.bugs %] already in the group will remain in the group. +Doing so is a much less drastic way to stop a group from growing +than deleting the group would be. <b>Note: If you are creating +a group, you probably want it to be usable for [% terms.bugs %], in which +case you should leave this checked.</b></p> + +<p><b>User RegExp</b> is optional, and if filled in, will +automatically grant membership to this group to anyone with an +email address that matches this regular expression.</p> + +<p> + <b>Icon URL</b> is optional, and is the URL pointing to the icon + used to identify the group. It may be either a relative URL to the base URL + of this installation or an absolute URL. This icon will be displayed + in comments in [% terms.bugs %] besides the name of the author of comments. +</p> + +<p>By default, the new group will be associated with existing +products. Unchecking the "Insert new group into all existing +products" option will prevent this and make the group become +visible only when its controls have been added to a product.</p> + +<p>Back to the <a href="./">main [% terms.bugs %] page</a> + +or to the <a href="editgroups.cgi">group list</a>. + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/groups/delete.html.tmpl b/template/en/default/admin/groups/delete.html.tmpl new file mode 100644 index 0000000..9d32da4 --- /dev/null +++ b/template/en/default/admin/groups/delete.html.tmpl @@ -0,0 +1,187 @@ +[%# 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): Dave Miller <justdave@syndicomm.com> + # Joel Peshkin <bugreport@peshkin.net> + # Jacob Steenhagen <jake@bugzilla.org> + # Vlad Dascalu <jocuri@softhome.net> + # Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[%# INTERFACE: + # group: A Bugzilla::Group object representing the group that is + # about to be deleted. + # shared_queries: int; The number of queries being shared with this + # group. + #%] + + +[% PROCESS global/header.html.tmpl + title = "Delete group" + doc_section = "groups.html" +%] + +<table border="1"> + <tr> + <th>Id</th> + <th>Name</th> + <th>Description</th> + </tr> + <tr> + <td>[% group.id FILTER html %]</td> + <td>[% group.name FILTER html %]</td> + <td>[% group.description FILTER html_light %]</td> + </tr> +</table> + +<form method="post" action="editgroups.cgi"> + [% IF group.members_non_inherited.size %] + <p><b>[% group.members_non_inherited.size FILTER html %] users belong + directly to this group. You cannot delete this group while there are + users in it.</b> + + <br><a href="editusers.cgi?action=list&groupid= + [%- group.id FILTER url_quote %]&grouprestrict=1">Show + me which users</a> - <label><input type="checkbox" name="removeusers">Remove + all users from this group for me.</label></p> + [% END %] + + [% IF group.granted_by_direct(constants.GROUP_MEMBERSHIP).size %] + <p><b>Members of this group inherit membership in the following groups:</b></p> + <ul> + [% FOREACH grantor = group.granted_by_direct(constants.GROUP_MEMBERSHIP) %] + <li>[% grantor.name FILTER html %]</li> + [% END %] + </ul> + [% END %] + + [% IF group.bugs.size %] + <p><b>[% group.bugs.size FILTER html %] [%+ terms.bug %] reports are + visible only to this group. You cannot delete this group while any + [%+ terms.bugs %] are using it.</b> + + <br><a href="buglist.cgi?field0-0-0=bug_group&type0-0-0=equals&value0-0-0= + [%- group.name FILTER url_quote %]">Show me + which [% terms.bugs %]</a> - + <label><input type="checkbox" name="removebugs">Remove + all [% terms.bugs %] from this group restriction for me.</label></p> + + <p><b>NOTE:</b> It's quite possible to make confidential [% terms.bugs %] + public by checking this box. It is <B>strongly</B> suggested + that you review the [% terms.bugs %] in this group before checking + the box.</p> + [% END %] + + [% IF group.products.size %] + <p><b>This group is tied to the following products:</b></p> + [% SET any_hidden = 0 %] + <ul> + [% FOREACH data = group.products %] + + [% SET active = [] %] + [% FOREACH control = data.controls.keys.sort %] + [% NEXT IF !data.controls.$control %] + [% IF control == 'othercontrol' OR control == 'membercontrol' %] + [% SWITCH data.controls.$control %] + [% CASE constants.CONTROLMAPMANDATORY %] + [% SET type = "Mandatory" %] + [% CASE constants.CONTROLMAPSHOWN %] + [% SET type = "Shown" %] + [% CASE constants.CONTROLMAPDEFAULT %] + [% SET type = "Default" %] + [% END %] + [% active.push("$control: $type") %] + [% ELSE %] + [% active.push(control) %] + [% END %] + [% END %] + + [% SET hidden = 0 %] + [% IF data.controls.othercontrol == constants.CONTROLMAPMANDATORY + AND data.controls.membercontrol == constants.CONTROLMAPMANDATORY + AND data.controls.entry + %] + [% SET hidden = 1 %] + [% END %] + + <li><a href="editproducts.cgi?action=editgroupcontrols&product= + [%- data.product.name FILTER url_quote %]"> + [%- data.product.name FILTER html %]</a> + ([% active.join(', ') FILTER html %]) + [% IF hidden %] + <strong>WARNING: This product is currently hidden. + Deleting this group will make this product publicly visible. + </strong> + [% END %]</li> + [% END %] + </ul> + + <p><label><input type="checkbox" name="unbind">Delete this group anyway, + and remove these controls.</label></p> + [% END %] + + [% IF group.flag_types.size %] + <p><b>This group restricts who can make changes to flags of certain types. + You cannot delete this group while there are flag types using it.</b> + + <br><a href="editflagtypes.cgi?action=list&group= + [%- group.id FILTER url_quote %]">Show + me which types</a> - + <label><input type="checkbox" name="removeflags">Remove all + flag types from this group for me.</label></p> + [% END %] + + [% IF shared_queries %] + <p> + <b>There + [% IF shared_queries > 1 %] + are [% shared_queries %] saved searches + [% ELSE %] + is a saved search + [% END %] + being shared with this group.</b> + If you delete this group, + [% IF shared_queries > 1 %] + these saved searches + [% ELSE %] + this saved search + [% END %] + will fall back to being private again. + </p> + [% END %] + + <h2>Confirmation</h2> + + <p>Do you really want to delete this group?</p> + [% IF group.users.size || group.bugs.size || group.products.size + || group.flags.size + %] + <p><b>You must check all of the above boxes or correct the + indicated problems first before you can proceed.</b></p> + [% END %] + + <p> + <input type="submit" id="delete" value="Yes, delete"> + <input type="hidden" name="action" value="delete"> + <input type="hidden" name="group" value="[% group.id FILTER html %]"> + <input type="hidden" name="token" value="[% token FILTER html %]"> + </p> +</form> + +Go back to the <a href="editgroups.cgi">group list</a>. + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/groups/edit.html.tmpl b/template/en/default/admin/groups/edit.html.tmpl new file mode 100644 index 0000000..f7fd308 --- /dev/null +++ b/template/en/default/admin/groups/edit.html.tmpl @@ -0,0 +1,249 @@ +[%# 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): Dave Miller <justdave@syndicomm.com> + # Joel Peshkin <bugreport@peshkin.net> + # Jacob Steenhagen <jake@bugzilla.org> + # Vlad Dascalu <jocuri@softhome.net> + # Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[%# INTERFACE: + # group - A Bugzilla::Group representing the group being edited. + # *_current - Arrays of Bugzilla::Group objects that show the current + # values for this group, as far as grants. + # *_available - Arrays of Bugzilla::Group objects that show the current + # available values for each grant. + #%] + +[% title = BLOCK %]Change Group: [% group.name FILTER html %][% END %] + +[% PROCESS global/header.html.tmpl + title = title + doc_section = "groups.html#edit-groups" + style = " + .grant_table { border-collapse: collapse; } + .grant_table td, .grant_table th { + padding-left: .5em; + } + .grant_table td.one, .grant_table th.one { + border-right: 1px solid black; + padding-right: .5em; + } + " +%] + +<form method="post" action="editgroups.cgi"> + <input type="hidden" name="action" value="postchanges"> + <input type="hidden" name="group_id" value="[% group.id FILTER html %]"> + + <table border="1" cellpadding="4"> + <tr> + <th>Group:</th> + <td> + [% IF group.is_bug_group %] + <input type="text" name="name" size="60" + value="[% group.name FILTER html %]"> + [% ELSE %] + [% group.name FILTER html %] + [% END %] + </td> + </tr> + + <tr> + <th>Description:</th> + <td> + [% IF group.is_bug_group %] + <input type="text" name="desc" size="70" + value="[% group.description FILTER html %]"> + [% ELSE %] + [% group.description FILTER html %] + [% END %] + </td> + </tr> + + <tr> + <th>User Regexp:</th> + <td> + <input type="text" name="regexp" size="40" + value="[% group.user_regexp FILTER html %]"> + </td> + </tr> + + <tr> + <th> + Icon URL: + [% IF group.icon_url %] + <img src="[% group.icon_url FILTER html %]" alt="[% group.name FILTER html %]"> + [% END %] + </th> + <td> + <input type="text" name="icon_url" size="70" maxlength="255" + value="[% group.icon_url FILTER html %]"> + </td> + </tr> + + [% IF group.is_bug_group %] + <tr> + <th>Use For [% terms.Bugs %]:</th> + <td> + <input type="checkbox" name="isactive" + value="1" [% 'checked="checked"' IF group.is_active %]> + </td> + </tr> + [% END %] + [% Hook.process('field') %] + </table> + + <h4>Group Permissions</h4> + + <table class="grant_table"> + <tr> + <th class="one">Groups That Are a Member of This Group<br> + ("Users in <var>X</var> are automatically in + [%+ group.name FILTER html %]")</th> + <th>Groups That This Group Is a Member Of<br> + ("If you are in [% group.name FILTER html %], you are + automatically also in...")</th> + </tr> + <tr> + <td class="one"> + [% PROCESS select_pair name = "members" size = 10 + items_available = members_available + items_current = members_current %] + </td> + + <td>[% PROCESS select_pair name = "member_of" size = 10 + items_available = member_of_available + items_current = member_of_current %]</td> + </tr> + </table> + + <table class="grant_table"> + <tr> + <th class="one"> + Groups That Can Grant Membership in This Group<br> + ("Users in <var>X</var> can add other users to + [%+ group.name FILTER html %]") + + </th> + <th>Groups That This Group Can Grant Membership In<br> + ("Users in [% group.name FILTER html %] can add users to...") + </th> + </tr> + <tr> + <td class="one"> + [% PROCESS select_pair name = "bless_from" size = 10 + items_available = bless_from_available + items_current = bless_from_current %] + </td> + <td>[% PROCESS select_pair name = "bless_to" size = 10 + items_available = bless_to_available + items_current = bless_to_current %] + </td> + </tr> + </table> + + [% IF Param('usevisibilitygroups') %] + <table class="grant_table"> + <tr> + <th class="one"> + Groups That Can See This Group<br> + ("Users in <var>X</var> can see users in + [%+ group.name FILTER html %]") + </th> + <th>Groups That This Group Can See<br> + ("Users in [% group.name FILTER html %] can see users in...") + </th> + </tr> + <tr> + <td class="one"> + [% PROCESS select_pair name = "visible_from" size = 10 + items_available = visible_from_available + items_current = visible_from_current %] + </td> + <td>[% PROCESS select_pair name = "visible_to_me" size = 10 + items_available = visible_to_me_available + items_current = visible_to_me_current %] + </td> + </tr> + </table> + [% END %] + + <input type="submit" value="Update Group"> + <input type="hidden" name="token" value="[% token FILTER html %]"> +</form> + +<h4>Mass Remove</h4> + +<p>You can use this form to do mass-removal of users from groups. + This is often very useful if you upgraded from [% terms.Bugzilla %] + 2.16.</p> + +<table><tr><td> +<form method="post" action="editgroups.cgi"> + <fieldset> + <legend>Remove all explicit memberships from users whose login names + match the following regular expression:</legend> + <input type="text" size="20" name="regexp"> + <input type="submit" value="Remove Memberships"> + + <p>If you leave the field blank, all explicit memberships in + this group will be removed.</p> + + <input type="hidden" name="action" value="confirm_remove"> + <input type="hidden" name="group_id" value="[% group.id FILTER html %]"> + </fieldset> +</form> +</td></tr></table> + +<p>Back to the <a href="editgroups.cgi">group list</a>.</p> + +[% PROCESS global/footer.html.tmpl %] + +[% BLOCK select_pair %] + <table class="select_pair"> + <tr> + <th><label for="[% "${name}_add" FILTER html %]">Add<br> + (select to add)</label></th> + <th><label for="[% "${name}_remove" FILTER html %]">Current<br> + (select to remove)</label></th> + </tr> + <tr> + <td> + <select multiple="multiple" size="[% size FILTER html %]" + name="[% "${name}_add" FILTER html %]" + id="[% "${name}_add" FILTER html %]"> + [% FOREACH item = items_available %] + <option value="[% item.id FILTER html %]"> + [% item.name FILTER html %]</option> + [% END %] + </select> + </td> + <td> + <select multiple="multiple" size="[% size FILTER html %]" + name="[% "${name}_remove" FILTER html %]" + id="[% "${name}_remove" FILTER html %]"> + [% FOREACH item = items_current %] + <option value="[% item.id FILTER html %]"> + [% item.name FILTER html %]</option> + [% END %] + </select> + </td> + </tr> + </table> +[% END %] diff --git a/template/en/default/admin/groups/list.html.tmpl b/template/en/default/admin/groups/list.html.tmpl new file mode 100644 index 0000000..1d137dc --- /dev/null +++ b/template/en/default/admin/groups/list.html.tmpl @@ -0,0 +1,168 @@ +[%# 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): Dave Miller <justdave@syndicomm.com> + # Joel Peshkin <bugreport@peshkin.net> + # Jacob Steenhagen <jake@bugzilla.org> + # Vlad Dascalu <jocuri@softhome.net> + #%] + +[%# INTERFACE: + # groups: array with group objects having the properties: + # - id: number. The ID of the group. + # - name: string. The name of the group. + # - description: string. The description of the group. + # - userregexp: string. The user regexp for the given group. + # - isactive: boolean int. Specifies if the group is active or not. + # - isbuggroup: boolean int. Specifies if it can be used for bugs. + #%] + +[% PROCESS global/header.html.tmpl + title = "Edit Groups" + subheader = "This lets you edit the groups available to put users in." + doc_section = "groups.html" +%] + +[% edit_contentlink = "editgroups.cgi?action=changeform&group=%%id%%" %] +[% del_contentlink = "editgroups.cgi?action=del&group=%%id%%" %] + +[% columns = + [{name => 'name' + heading => 'Name' + contentlink => edit_contentlink + } + {name => 'description' + heading => 'Description' + allow_html_content => 1 + } + {name => 'userregexp' + heading => 'User RegExp' + } + {name => 'is_active_bug_group' + heading => "Use For $terms.Bugs" + align => 'center' + } + {name => 'type' + heading => 'Type' + align => 'center' + } + {name => 'action' + heading => 'Action' + } + ] +%] + +[% overrides.is_active_bug_group = { + 'is_active_bug_group' => { + "0" => { + override_content => 1 + content => " " + } + "1" => { + override_content => 1 + content => "X" + } + } + } + + overrides.userregexp = { + 'userregexp' => { + "" => { + override_content => 1 + content => " " + } + } + } +%] + +[% FOREACH group IN ["chartgroup", "insidergroup", "timetrackinggroup", "querysharegroup"] %] + [% special_group = Param(group) %] + + [% IF special_group %] + [% overrides.action.name.$special_group = { + override_content => 1 + content => "(used as the '$group')" + } + %] + [% END %] +[% END %] + +[% overrides.action.isbuggroup = { + "1" => { + override_content => 1 + content => "Delete" + override_contentlink => 1 + contentlink => del_contentlink + } + } + + overrides.type.isbuggroup = { + "0" => { + override_content => 1 + content => "system" + } + "1" => { + override_content => 1 + content => "user" + } + } +%] + +[% PROCESS admin/table.html.tmpl + columns = columns + data = groups + overrides = overrides +%] + +<p><a href="editgroups.cgi?action=add">Add Group</a></p> + +<p> + <b>Name</b> is what is used with the B<!-- blah -->ugzilla->user->in_group() +function in any customized cgi files you write that use a given group. +It can also be used by people submitting [% terms.bugs %] by email to +limit [% terms.abug %] to a certain set of groups. +</p> + +<p> + <b>Description</b> is what will be shown in the [% terms.bug %] reports +to members of the group where they can choose whether the [% terms.bug %] +will be restricted to others in the same group. +</p> + +<p> + <b>User RegExp</b> is optional, and if filled in, will automatically +grant membership to this group to anyone with an email address +that matches this perl regular expression. Do not forget +the trailing '$'. Example '@mycompany\.com$' +</p> + +<p> + The <b>Use For [% terms.Bugs %]</b> flag determines whether or not +the group is eligible to be used for [% terms.bugs %]. If you remove +this flag, it will no longer be possible for users to add [% terms.bugs %] +to this group, although [% terms.bugs %] already in the group will remain +in the group. Doing so is a much less drastic way to stop a group +from growing than deleting the group as well as a way to maintain +lists of users without cluttering the lists of groups used +for [% terms.bug %] restrictions. +</p> + +<p> + The <b>Type</b> field identifies system groups. +</p> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/keywords/confirm-delete.html.tmpl b/template/en/default/admin/keywords/confirm-delete.html.tmpl new file mode 100644 index 0000000..20a6dee --- /dev/null +++ b/template/en/default/admin/keywords/confirm-delete.html.tmpl @@ -0,0 +1,53 @@ +[%# 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> + # Vlad Dascalu <jocuri@softhome.net> + # Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[%# INTERFACE: + # keyword: A Bugzilla::Keyword object. + #%] + +[% PROCESS global/header.html.tmpl + title = "Delete Keyword" +%] + +<p> + [% IF keyword.bug_count == 1 %] + There is one [% terms.bug %] with this keyword set. + [% ELSIF keyword.bug_count > 1 %] + There are [% keyword.bug_count FILTER html %] [%+ terms.bugs %] with + this keyword set. + [% END %] + + Are you <b>sure</b> you want to delete + the <code>[% keyword.name FILTER html %]</code> keyword? +</p> + +<form method="post" action="editkeywords.cgi"> + <input type="hidden" name="id" value="[% keyword.id FILTER html %]"> + <input type="hidden" name="action" value="delete"> + <input type="hidden" name="token" value="[% token FILTER html %]"> + <input type="submit" id="delete" + value="Yes, really delete the keyword"> +</form> + +<p><a href="editkeywords.cgi">Edit other keywords</a>.</p> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/keywords/create.html.tmpl b/template/en/default/admin/keywords/create.html.tmpl new file mode 100644 index 0000000..e5d6aa0 --- /dev/null +++ b/template/en/default/admin/keywords/create.html.tmpl @@ -0,0 +1,58 @@ +[%# 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> + # Vlad Dascalu <jocuri@softhome.net> + #%] + +[%# INTERFACE: + # none + #%] + +[% PROCESS global/header.html.tmpl + title = "Add keyword" + subheader = "This page allows you to add a new keyword." +%] + +<form method="post" action="editkeywords.cgi"> + <table border="0" cellpadding="4" cellspacing="0"> + <tr> + <th align="right">Name:</th> + <td><input size="64" maxlength="64" name="name" value=""></td> + </tr> + <tr> + <th align="right">Description:</th> + <td> + [% INCLUDE global/textarea.html.tmpl + name = 'description' + minrows = 4 + cols = 64 + wrap = 'virtual' + %] + </td> + </tr> + </table> + <hr> + <input type="hidden" name="id" value="-1"> + <input type="submit" id="create" value="Add"> + <input type="hidden" name="action" value="new"> + <input type="hidden" name="token" value="[% token FILTER html %]"> +</form> + +<p><a href="editkeywords.cgi">Edit other keywords</a>.</p> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/keywords/edit.html.tmpl b/template/en/default/admin/keywords/edit.html.tmpl new file mode 100644 index 0000000..c4b9a64 --- /dev/null +++ b/template/en/default/admin/keywords/edit.html.tmpl @@ -0,0 +1,73 @@ +[%# 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> + # Vlad Dascalu <jocuri@softhome.net> + # Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[%# INTERFACE: + # keyword: A Bugzilla::Keyword object. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl + title = "Edit keyword" +%] + +<form method="post" action="editkeywords.cgi"> + <table border="0" cellpadding="4" cellspacing="0"> + <tr> + <th align="right">Name:</th> + <td><input size="64" maxlength="64" name="name" + value="[% keyword.name FILTER html %]"></td> + </tr> + <tr> + <th align="right">Description:</th> + <td> + [% INCLUDE global/textarea.html.tmpl + name = 'description' + minrows = 4 + cols = 64 + wrap = 'virtual' + defaultcontent = keyword.description + %] + </td> + </tr> + <tr> + <th align="right">[% terms.Bugs %]:</th> + <td> + [% IF keyword.bug_count > 0 %] + <a href="buglist.cgi?keywords=[% keyword.name FILTER url_quote %]"> + [% keyword.bug_count FILTER html %]</a> + [% ELSE %] + none + [% END %] + </td> + </tr> + </table> + + <input type="submit" id="update" value="Save Changes"> + <input type="hidden" name="action" value="update"> + <input type="hidden" name="id" value="[% keyword.id FILTER html %]"> + <input type="hidden" name="token" value="[% token FILTER html %]"> +</form> + +<p><a href="editkeywords.cgi">Edit other keywords</a>.</p> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/keywords/list.html.tmpl b/template/en/default/admin/keywords/list.html.tmpl new file mode 100644 index 0000000..c400a23 --- /dev/null +++ b/template/en/default/admin/keywords/list.html.tmpl @@ -0,0 +1,70 @@ +[%# 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> + # Vlad Dascalu <jocuri@softhome.net> + # Jouni Heikniemi <jouni@heikniemi.net> + #%] + +[%# INTERFACE: + # keywords: array keyword objects having the properties: + # - id: number. The ID of the keyword. + # - name: string. The name of the keyword. + # - description: string. The description of the keyword. + # - bug_count: number. The number of bugs with the keyword. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl + title = "Select keyword" +%] + +[% columns = [ + { + name => "name" + heading => "Edit keyword..." + contentlink => "editkeywords.cgi?action=edit&id=%%id%%" + }, + { + name => "description" + heading => "Description" + allow_html_content => 1 + }, + { + name => "bug_count" + heading => "$terms.Bugs" + align => "right" + contentlink => "buglist.cgi?keywords=%%name%%" + }, + { + heading => "Action" + content => "Delete" + contentlink => "editkeywords.cgi?action=del&id=%%id%%" + } + ] +%] + +[% PROCESS admin/table.html.tmpl + columns = columns + data = keywords + footer = footer_row +%] + +<p><a href="editkeywords.cgi?action=add">Add a new keyword</a></p> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/milestones/confirm-delete.html.tmpl b/template/en/default/admin/milestones/confirm-delete.html.tmpl new file mode 100644 index 0000000..ea89b80 --- /dev/null +++ b/template/en/default/admin/milestones/confirm-delete.html.tmpl @@ -0,0 +1,98 @@ +[%# 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): Gavin Shelley <bugzilla@chimpychompy.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] + +[%# INTERFACE: + # product: object; Bugzilla::Product object representing the product to + # which the milestone belongs. + # milestone: object; Bugzilla::Milestone object representing the + # milestone the user wants to delete. + #%] + +[% title = BLOCK %]Delete Milestone of Product '[% product.name FILTER html %]' + [% END %] + +[% PROCESS global/header.html.tmpl + title = title +%] + +<table border="1" cellpadding="4" cellspacing="0"> +<tr bgcolor="#6666FF"> + <th valign="top" align="left">Field</th> + <th valign="top" align="left">Value</th> +</tr> +<tr> + <td valign="top">Milestone:</td> + <td valign="top">[% milestone.name FILTER html %]</td> +</tr> +<tr> + <td valign="top">Milestone of Product:</td> + <td valign="top">[% product.name FILTER html %]</td> +</tr> +<tr> + <td valign="top">[% terms.Bugs %]:</td> + <td valign="top"> +[% IF milestone.bug_count %] + <a title="List of [% terms.bugs %] targetted at milestone ' + [% milestone.name FILTER html %]'" + href="buglist.cgi?target_milestone=[% milestone.name FILTER url_quote %]&product= + [%- product.name FILTER url_quote %]"> + [% milestone.bug_count FILTER none %]</a> +[% ELSE %] + None +[% END %] + </td> +</tr> +</table> + +<h2>Confirmation</h2> + +[% IF milestone.bug_count %] + + <table border="0" cellpadding="20" width="70%" bgcolor="red"> + <tr><td> + There + [% IF milestone.bug_count > 1 %] + are [% milestone.bug_count FILTER none %] [%+ terms.bugs %] + [% ELSE %] + is 1 [% terms.bug %] + [% END %] + entered for this milestone! When you delete this milestone, + <b><blink>ALL</blink></b> of these [% terms.bugs %] will be retargeted + to [% product.default_milestone FILTER html %], the default milestone for + the [% product.name FILTER html %] product. + </td></tr> + </table> + +[% END %] + +<p>Do you really want to delete this milestone?<p> + +<form method="post" action="editmilestones.cgi"> + <input type="submit" id="delete" value="Yes, delete"> + <input type="hidden" name="action" value="delete"> + <input type="hidden" name="product" value="[% product.name FILTER html %]"> + <input type="hidden" name="milestone" value="[% milestone.name FILTER html %]"> + <input type="hidden" name="token" value="[% token FILTER html %]"> +</form> + +[% PROCESS admin/milestones/footer.html.tmpl %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/milestones/create.html.tmpl b/template/en/default/admin/milestones/create.html.tmpl new file mode 100644 index 0000000..d7c2f58 --- /dev/null +++ b/template/en/default/admin/milestones/create.html.tmpl @@ -0,0 +1,58 @@ +[%# 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): Gavin Shelley <bugzilla@chimpychompy.org> + #%] + +[%# INTERFACE: + # product: object; Bugzilla::Product object representing the product to + # which the milestone belongs. + #%] + +[% title = BLOCK %]Add Milestone to Product '[% product.name FILTER html %]'[% END %] +[% subheader = BLOCK %]This page allows you to add a new milestone to product + '[% product.name FILTER html %]'.[% END %] +[% PROCESS global/header.html.tmpl + title = title + subheader = subheader + onload = "document.forms['f'].milestone.focus()" +%] + +<form name="f" method="post" action="editmilestones.cgi"> + <table border="0" cellpadding="4" cellspacing="0"> + <tr> + <th align="right"><label for="milestone">Milestone:</label></th> + <td><input id="milestone" size="20" maxlength="20" name="milestone" + value=""></td> + </tr> + <tr> + <th align="right"><label for="sortkey">Sortkey:</label></th> + <td><input id="sortkey" size="20" maxlength="20" name="sortkey" + value=""></td> + </tr> + </table> + <input type="submit" id="create" value="Add"> + <input type="hidden" name="action" value="new"> + <input type="hidden" name='product' value="[% product.name FILTER html %]"> + <input type="hidden" name="token" value="[% token FILTER html %]"> +</form> + +[% PROCESS admin/milestones/footer.html.tmpl + no_add_milestone_link = 1 + %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/milestones/edit.html.tmpl b/template/en/default/admin/milestones/edit.html.tmpl new file mode 100644 index 0000000..dfe9d1b --- /dev/null +++ b/template/en/default/admin/milestones/edit.html.tmpl @@ -0,0 +1,63 @@ +[%# 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): Gavin Shelley <bugzilla@chimpychompy.org> + #%] + +[%# INTERFACE: + # product: object; Bugzilla::Product object representing the product to + # which the milestone belongs. + # milestone: object; Bugzilla::Milestone object representing the + # milestone the user wants to edit. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% title = BLOCK %]Edit Milestone '[% milestone.name FILTER html %]' of product ' + [%- product.name FILTER html %]'[% END %] +[% PROCESS global/header.html.tmpl + title = title + onload = "document.forms['f'].milestone.select()" +%] + +<form name="f" method="post" action="editmilestones.cgi"> + <table border="0" cellpadding="4" cellspacing="0"> + + <tr> + <th valign="top"><label for="milestone">Milestone:</label></th> + <td><input id="milestone" size="20" maxlength="20" name="milestone" value=" + [%- milestone.name FILTER html %]"></td> + </tr> + <tr> + <th align="right"><label for="sortkey">Sortkey:</label></th> + <td><input id="sortkey" size="20" maxlength="20" name="sortkey" value=" + [%- milestone.sortkey FILTER html %]"></td> + </tr> + + </table> + + <input type="hidden" name="milestoneold" value="[% milestone.name FILTER html %]"> + <input type="hidden" name="action" value="update"> + <input type="hidden" name="product" value="[% product.name FILTER html %]"> + <input type="submit" id="update" value="Save Changes"> + <input type="hidden" name="token" value="[% token FILTER html %]"> +</form> + +[% PROCESS admin/milestones/footer.html.tmpl + no_edit_milestone_link = 1 %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/milestones/footer.html.tmpl b/template/en/default/admin/milestones/footer.html.tmpl new file mode 100644 index 0000000..e91e5f9 --- /dev/null +++ b/template/en/default/admin/milestones/footer.html.tmpl @@ -0,0 +1,67 @@ +[%# 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): Gavin Shelley <bugzilla@chimpychompy.org> + #%] + +[%# INTERFACE: + # product: object; Bugzilla::Product object representing the product to + # which the milestone belongs. + # + # milestone: object; Bugzilla::Milestone object representing the + # milestone. + # + # no_XXX_link: boolean; if defined, then don't show the corresponding + # link. Supported parameters are: + # + # no_edit_milestone_link + # no_edit_other_milestones_link + # no_add_milestone_link + #%] + +<hr> + +<p> + +[% UNLESS no_add_milestone_link %] + <a title="Add a milestone to product '[% product.name FILTER html %]'" + href="editmilestones.cgi?action=add&product= + [%- product.name FILTER url_quote %]">Add</a> a milestone. +[% END %] + +[% IF milestone.name && !no_edit_milestone_link %] + Edit milestone <a + title="Edit Milestone '[% milestone.name FILTER html %]' of product ' + [%- product.name FILTER html %]'" + href="editmilestones.cgi?action=edit&product= + [%- product.name FILTER url_quote %]&milestone= + [%- milestone.name FILTER url_quote %]"> + '[% milestone.name FILTER html %]'</a>. +[% END %] + +[% UNLESS no_edit_other_milestones_link %] + Edit other milestones of product <a + href="editmilestones.cgi?product= + [%- product.name FILTER url_quote %]">'[% product.name FILTER html %]'</a>. + +[% END %] + + Edit product <a + href="editproducts.cgi?action=edit&product= + [%- product.name FILTER url_quote %]">'[% product.name FILTER html %]'</a>. + +</p> diff --git a/template/en/default/admin/milestones/list.html.tmpl b/template/en/default/admin/milestones/list.html.tmpl new file mode 100644 index 0000000..9422855 --- /dev/null +++ b/template/en/default/admin/milestones/list.html.tmpl @@ -0,0 +1,108 @@ +[%# 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): Gavin Shelley <bugzilla@chimpychompy.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] + +[%# INTERFACE: + # product: object; Bugzilla::Product object representing the product to + # which the milestones belongs. + # showbugcounts: if defined, then bug counts should be included in the table + #%] + +[% USE Bugzilla %] +[% cgi = Bugzilla.cgi %] + +[% PROCESS global/variables.none.tmpl %] + +[% title = BLOCK %]Select milestone of product + '[% product.name FILTER html %]'[% END %] +[% PROCESS global/header.html.tmpl + title = title +%] + +[% edit_contentlink = BLOCK %]editmilestones.cgi?action=edit&product= + [%- product.name FILTER url_quote %]&milestone=%%name%%[% END %] +[% delete_contentlink = BLOCK %]editmilestones.cgi?action=del&product= + [%- product.name FILTER url_quote %]&milestone=%%name%%[% END %] +[% bug_count_contentlink = BLOCK %]buglist.cgi?target_milestone=%%name%%&product= + [%- product.name FILTER url_quote %][% END %] + + +[% columns = [ + { + name => "name" + heading => "Edit milestone..." + contentlink => edit_contentlink + }, + { + name => "sortkey" + heading => "Sortkey" + } + ] +%] + +[% IF showbugcounts %] + + [% columns.push({ + name => "bug_count" + heading => "$terms.Bugs" + align => "right" + contentlink => bug_count_contentlink + }) + %] + +[% END %] + +[% columns.push({ + name => "action" + heading => "Action" + content => "Delete" + contentlink => delete_contentlink + }) +%] + +[%# We want to override the usual 'Delete' link for the default milestone %] +[% overrides.action.name.${product.default_milestone} = { + override_content => 1 + content => "(Default milestone)" + override_contentlink => 1 + contentlink => undef + } +%] + +[% Hook.process('before_table') %] + +[% PROCESS admin/table.html.tmpl + columns = columns + data = product.milestones + overrides = overrides +%] + +[% IF ! showbugcounts %] + + <p><a href="editmilestones.cgi?product=[% product.name FILTER url_quote %]&showbugcounts=1"> + Redisplay table with [% terms.bug %] counts (slower)</a></p> + +[% END %] + +[% PROCESS admin/milestones/footer.html.tmpl + no_edit_other_milestones_link = 1 +%] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/milestones/select-product.html.tmpl b/template/en/default/admin/milestones/select-product.html.tmpl new file mode 100644 index 0000000..587db6d --- /dev/null +++ b/template/en/default/admin/milestones/select-product.html.tmpl @@ -0,0 +1,70 @@ +[%# 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): Gavin Shelley <bugzilla@chimpychompy.org> + # Frédéric Buclin <LpSolit@gmail.com> + # + #%] + +[%# INTERFACE: + # products: array of product objects + # showbugcounts: if defined, then bug counts should be included in the table + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl + title = "Edit milestones for which product?" +%] + +[% columns = [ + { + name => "name" + heading => "Edit milestones of..." + contentlink => "editmilestones.cgi?product=%%name%%" + }, + { + name => "description" + heading => "Description" + allow_html_content => 1 + } + ] +%] + +[% IF showbugcounts %] + + [% columns.push({ + name => 'bug_count' + heading => "$terms.Bugs" + align => "right" + contentlink => "buglist.cgi?product=%%name%%" + }) + %] + +[% END %] + +[% PROCESS admin/table.html.tmpl + columns = columns + data = products +%] + +[% IF !showbugcounts %] + <p><a href="editmilestones.cgi?showbugcounts=1"> + Redisplay table with [% terms.bug %] counts (slower)</a></p> +[% END %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/params/admin.html.tmpl b/template/en/default/admin/params/admin.html.tmpl new file mode 100644 index 0000000..dd83ebb --- /dev/null +++ b/template/en/default/admin/params/admin.html.tmpl @@ -0,0 +1,41 @@ +[%# 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): Dave Miller <justdave@bugzilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] +[% + title = "Administrative Policies" + desc = "Set up account policies" +%] + +[% param_descs = { + allowbugdeletion => "The pages to edit products and components can delete all " _ + "associated $terms.bugs when you delete a product (or component). " _ + "Since that is a pretty scary idea, you have to turn on " _ + "this option before any such deletions will ever happen.", + + allowemailchange => "Users can change their own email address through the preferences. " _ + "Note that the change is validated by emailing both addresses, so " _ + "switching this option on will not let users use an invalid address.", + + allowuserdeletion => "The user editing pages are capable of letting you delete user accounts. " _ + "$terms.Bugzilla will issue a warning in case you'd run into inconsistencies " _ + "when you're about to do so, but such deletions remain kinda scary. " _ + "So, you have to turn on this option before any such deletions " _ + "will ever happen." } +%]
\ No newline at end of file diff --git a/template/en/default/admin/params/advanced.html.tmpl b/template/en/default/admin/params/advanced.html.tmpl new file mode 100644 index 0000000..4caa2f1 --- /dev/null +++ b/template/en/default/admin/params/advanced.html.tmpl @@ -0,0 +1,50 @@ +[%# 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): Dave Miller <justdave@bugzilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] + +[% + title = "Advanced" + desc = "Settings for advanced configurations." +%] + +[% param_descs = { + cookiedomain => + "If your website is at 'www.foo.com', setting this to" + _ " '.foo.com' will also allow 'bar.foo.com' to access" + _ " $terms.Bugzilla cookies. This is useful if you have more than" + _ " one hostname pointing at the same web server, and you" + _ " want them to share the $terms.Bugzilla cookie.", + + inbound_proxies => + "When inbound traffic to $terms.Bugzilla goes through a proxy," + _ " $terms.Bugzilla thinks that the IP address of every single" + _ " user is the IP address of the proxy. If you enter a comma-separated" + _ " list of IPs in this parameter, then $terms.Bugzilla will trust any" + _ " <code>X-Forwarded-For</code> header sent from those IPs," + _ " and use the value of that header as the end user's IP address.", + + proxy_url => + "$terms.Bugzilla may have to access the web to get notifications about" + _ " new releases (see the <tt>upgrade_notification</tt> parameter)." + _ " If your $terms.Bugzilla server is behind a proxy, it may be" + _ " necessary to enter its URL if the web server cannot access the" + _ " HTTP_PROXY environment variable. If you have to authenticate," + _ " use the <code>http://user:pass@proxy_url/</code> syntax.", +} %] diff --git a/template/en/default/admin/params/attachment.html.tmpl b/template/en/default/admin/params/attachment.html.tmpl new file mode 100644 index 0000000..7d1e29f --- /dev/null +++ b/template/en/default/admin/params/attachment.html.tmpl @@ -0,0 +1,76 @@ +[%# 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): Dave Miller <justdave@bugzilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] +[% + title = "Attachments" + desc = "Set up attachment options" +%] + +[% param_descs = { + allow_attachment_display => + "If this option is on, users will be able to view attachments from" + _ " their browser, if their browser supports the attachment's MIME type." + _ " If this option is off, users are forced to download attachments," + _ " even if the browser is able to display them." + _ "<p>This is a security restriction for installations where untrusted" + _ " users may upload attachments that could be potentially damaging if" + _ " viewed directly in the browser.</p>" + _ "<p>It is highly recommended that you set the <tt>attachment_base</tt>" + _ " parameter if you turn this parameter on.", + + attachment_base => + "When the <tt>allow_attachment_display</tt> parameter is on, it is " + _ " possible for a malicious attachment to steal your cookies or" + _ " perform an attack on $terms.Bugzilla using your credentials." + _ "<p>If you would like additional security on attachments to avoid" + _ " this, set this parameter to an alternate URL for your $terms.Bugzilla" + _ " that is not the same as <tt>urlbase</tt> or <tt>sslbase</tt>." + _ " That is, a different domain name that resolves to this exact" + _ " same $terms.Bugzilla installation.</p>" + _ "<p>Note that if you have set the" + _ " <a href=\"editparams.cgi?section=advanced#cookiedomain\"><tt>cookiedomain</tt>" + _" parameter</a>, you should set <tt>attachment_base</tt> to use a" + _ " domain that would <em>not</em> be matched by" + _ " <tt>cookiedomain</tt>.</p>" + _ "<p>For added security, you can insert <tt>%bugid%</tt> into the URL," + _ " which will be replaced with the ID of the current $terms.bug that" + _ " the attachment is on, when you access an attachment. This will limit" + _ " attachments to accessing only other attachments on the same" + _ " ${terms.bug}. Remember, though, that all those possible domain names " + _ " (such as <tt>1234.your.domain.com</tt>) must point to this same" + _ " $terms.Bugzilla instance.", + + allow_attachment_deletion => "If this option is on, administrators will be able to delete " _ + "the content of attachments.", + + allow_attach_url => "If this option is on, it will be possible to " _ + "specify a URL when creating an attachment and " _ + "treat the URL itself as if it were an attachment.", + + maxattachmentsize => "The maximum size (in kilobytes) of attachments. " _ + "$terms.Bugzilla will not accept attachments greater than this number " _ + "of kilobytes in size. Setting this parameter to 0 will prevent " _ + "attaching files to ${terms.bugs}.", + + maxlocalattachment => "The maximum size (in megabytes) of attachments identified by " _ + "the user as 'Big Files' to be stored locally on the webserver. " _ + "If set to zero, attachments will never be kept on the local " _ + "filesystem." } +%] diff --git a/template/en/default/admin/params/auth.html.tmpl b/template/en/default/admin/params/auth.html.tmpl new file mode 100644 index 0000000..d2cb3e5 --- /dev/null +++ b/template/en/default/admin/params/auth.html.tmpl @@ -0,0 +1,129 @@ +[%# 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): Dave Miller <justdave@bugzilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + # Marc Schumann <wurblzap@gmail.com> + #%] +[% + title = "User Authentication" + desc = "Set up your authentication policies" +%] + +[% param_descs = { + auth_env_id => "Environment variable used by external authentication system " _ + "to store a unique identifier for each user. Leave it blank " _ + "if there isn't one or if this method of authentication " _ + "is not being used.", + + auth_env_email => "Environment variable used by external authentication system " _ + "to store each user's email address. This is a required " _ + "field for environmental authentication. Leave it blank " _ + "if you are not going to use this feature.", + + auth_env_realname => "Environment variable used by external authentication system " _ + "to store the user's real name. Leave it blank if there " _ + "isn't one or if this method of authentication is not being " _ + "used.", + + user_info_class => "Mechanism(s) to be used for gathering a user's login information. + More than one may be selected. If the first one returns nothing, + the second is tried, and so on.<br> + The types are: + <dl> + <dt>CGI</dt> + <dd> + Asks for username and password via CGI form interface. + </dd> + <dt>Env</dt> + <dd> + Info for a pre-authenticated user is passed in system + environment variables. + </dd> + </dl>", + + user_verify_class => "Mechanism(s) to be used for verifying (authenticating) information + gathered by user_info_class. + More than one may be selected. If the first one cannot find the + user, the second is tried, and so on.<br> + The types are: + <dl> + <dt>DB</dt> + <dd> + ${terms.Bugzilla}'s built-in authentication. This is the most common + choice. + </dd> + <dt>RADIUS</dt> + <dd> + RADIUS authentication using a RADIUS server. + This method is experimental; please see the + $terms.Bugzilla documentation for more information. + Using this method requires + <a href=\"?section=radius\">additional + parameters</a> to be set. + </dd> + <dt>LDAP</dt> + <dd> + LDAP authentication using an LDAP server. + Please see the $terms.Bugzilla documentation + for more information. Using this method requires + <a href=\"?section=ldap\">additional + parameters</a> to be set. + </dd> + </dl>", + + rememberlogin => "Controls management of session cookies + <ul> + <li> + on - Session cookies never expire (the user has to login only + once per browser). + </li> + <li> + off - Session cookies last until the users session ends (the user + will have to login in each new browser session). + </li> + <li> + defaulton/defaultoff - Default behavior as described + above, but user can choose whether $terms.Bugzilla will remember his + login or not. + </li> + </ul>", + + requirelogin => "If this option is set, all access to the system beyond the " _ + "front page will require a login. No anonymous users will " _ + "be permitted.", + + emailregexp => "This defines the regexp to use for legal email addresses. The " _ + "default tries to match fully qualified email addresses. Another " _ + "popular value to put here is <tt>^[^@]+$</tt>, which means " _ + "'local usernames, no @ allowed.'", + + emailregexpdesc => "This describes in English words what kinds of legal addresses " _ + "are allowed by the <tt>emailregexp</tt> param.", + + emailsuffix => "This is a string to append to any email addresses when actually " _ + "sending mail to that address. It is useful if you have changed " _ + "the <tt>emailregexp</tt> param to only allow local usernames, " _ + "but you want the mail to be delivered to username@my.local.hostname.", + + createemailregexp => "This defines the regexp to use for email addresses that are " _ + "permitted to self-register using a 'New Account' feature. The " _ + "default (.*) permits any account matching the emailregexp " _ + "to be created. If this parameter is left blank, no users " _ + "will be permitted to create their own accounts and all accounts " _ + "will have to be created by an administrator." } +%] diff --git a/template/en/default/admin/params/authenv.html.tmpl b/template/en/default/admin/params/authenv.html.tmpl new file mode 100644 index 0000000..b57aae3 --- /dev/null +++ b/template/en/default/admin/params/authenv.html.tmpl @@ -0,0 +1,29 @@ +[%# 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): Dave Miller <justdave@bugzilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] +[% + title = "AuthEnv Extension" + desc = "Set up your Bugzilla::AuthEnv extension" +%] + +[% param_descs = { + allowloginid => "Enable or disable maintenance of the login ID." } +%] diff --git a/template/en/default/admin/params/bugchange.html.tmpl b/template/en/default/admin/params/bugchange.html.tmpl new file mode 100644 index 0000000..9f456ee --- /dev/null +++ b/template/en/default/admin/params/bugchange.html.tmpl @@ -0,0 +1,51 @@ +[%# 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): Dave Miller <justdave@bugzilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] +[% + title = "$terms.Bug Change Policies" + desc = "Set up $terms.bug change policies" +%] + +[% param_descs = { + duplicate_or_move_bug_status => "When $terms.abug is marked as a duplicate of another one " _ + "or is moved to another installation, use this $terms.bug status." + + letsubmitterchoosepriority => "If this is on, then people submitting $terms.bugs can " _ + "choose an initial priority for that ${terms.bug}. " _ + "If off, then all $terms.bugs initially have the default " _ + "priority selected below.", + + letsubmitterchoosemilestone => "If this is on, then people submitting $terms.bugs can " _ + "choose the Target Milestone for that ${terms.bug}. " _ + "If off, then all $terms.bugs initially have the default " _ + "milestone for the product being filed in.", + + musthavemilestoneonaccept => "If you are using Target Milestone, do you want to require that " _ + "the milestone be set in order for a user to ACCEPT a ${terms.bug}?", + + commentonchange_resolution => "If this option is on, the user needs to enter a short " _ + "comment if the resolution of the $terms.bug changes.", + + commentonduplicate => "If this option is on, the user needs to enter a short comment " _ + "if the $terms.bug is marked as duplicate.", + + noresolveonopenblockers => "Don\'t allow $terms.bugs to be resolved as fixed " _ + "if they have unresolved dependencies." } +%] diff --git a/template/en/default/admin/params/bugfields.html.tmpl b/template/en/default/admin/params/bugfields.html.tmpl new file mode 100644 index 0000000..794f925 --- /dev/null +++ b/template/en/default/admin/params/bugfields.html.tmpl @@ -0,0 +1,66 @@ +[%# 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): Dave Miller <justdave@bugzilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] +[% + title = "$terms.Bug Fields" + desc = "Choose fields you want to display" +%] + +[% param_descs = { + useclassification => "If this is on, $terms.Bugzilla will associate each product with a " _ + "specific classification. But you must have 'editclassification' " _ + "permissions enabled in order to edit classifications.", + + usetargetmilestone => "Do you wish to use the Target Milestone field?", + + useqacontact => "Do you wish to use the QA Contact field?", + + usestatuswhiteboard => "Do you wish to use the Status Whiteboard field?", + + usevotes => "Do you wish to allow users to vote for ${terms.bugs}? Note that in order " _ + "for this to be effective, you will have to change the maximum " _ + "votes allowed in a product to be non-zero in " _ + "<a href=\"editproducts.cgi\">the product edit page</a>.", + + usebugaliases => "Do you wish to use $terms.bug aliases, which allow you to assign " _ + "$terms.bugs an easy-to-remember name by which you can refer to them?", + + use_see_also => + "Do you wish to use the See Also field? It allows you refer to" + _ " $terms.bugs in other installations. Even if you disable this field," + _ " $terms.bug relationships (URLs) already set on $terms.bugs will" + _ " still appear and can be removed.", + + defaultpriority => "This is the priority that newly entered $terms.bugs are set to.", + + defaultseverity => "This is the severity that newly entered $terms.bugs are set to.", + + defaultplatform => "This is the platform that is preselected on the $terms.bug " _ + "entry form.<br> " _ + "You can leave this empty: " _ + "$terms.Bugzilla will then use the platform that the browser " _ + "reports to be running on as the default.", + + defaultopsys => "This is the operating system that is preselected on the $terms.bug " _ + "entry form.<br> " _ + "You can leave this empty: " _ + "$terms.Bugzilla will then use the operating system that the browser " _ + "reports to be running on as the default." } +%] diff --git a/template/en/default/admin/params/bugmove.html.tmpl b/template/en/default/admin/params/bugmove.html.tmpl new file mode 100644 index 0000000..911bc33 --- /dev/null +++ b/template/en/default/admin/params/bugmove.html.tmpl @@ -0,0 +1,49 @@ +[%# 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): Dave Miller <justdave@bugzilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] +[% + title = "$terms.Bug Moving" + desc = "Set up parameters to move $terms.bugs to/from another installation" +%] + +[% param_descs = { + "move-enabled" => "If this is on, $terms.Bugzilla will allow certain people " _ + "to move $terms.bugs to the defined database.", + + "move-button-text" => "The text written on the Move button. Explain where the $terms.bug is " _ + "being moved to.", + + "move-to-url" => "The URL of the database we allow some of our $terms.bugs to be moved to.", + + "move-to-address" => "To move ${terms.bugs}, an email is sent to the target database. This is " _ + "the email address that database uses to listen for incoming ${terms.bugs}.", + + "moved-from-address" => "To move ${terms.bugs}, an email is sent to the target database. This is " _ + "the email address from which this mail, and error messages are sent.", + + movers => "A list of people with permission to move $terms.bugs and reopen moved " _ + "${terms.bugs} (in case the move operation fails).", + + "moved-default-product" => "$terms.Bugs moved from other databases to here are assigned " _ + "to this product.", + + "moved-default-component" => "$terms.Bugs moved from other databases to here are assigned " _ + "to this component." } +%] diff --git a/template/en/default/admin/params/common.html.tmpl b/template/en/default/admin/params/common.html.tmpl new file mode 100644 index 0000000..18aa1fb --- /dev/null +++ b/template/en/default/admin/params/common.html.tmpl @@ -0,0 +1,150 @@ +[%# 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): Frédéric Buclin <LpSolit@gmail.com> + # Marc Schumann <wurblzap@gmail.com> + #%] +[%# INTERFACE: + # panel: hash representing the current panel. + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% sortlist_separator = '---' %] + +<dl> + [% FOREACH param = panel.param_list %] + <dt><a name="[% param.name FILTER html %]">[% param.name FILTER html %]</a></dt> + <dd>[% panel.param_descs.${param.name} FILTER none %] + <p> + [% IF param.type == "t" %] + <input type="text" size="80" name="[% param.name FILTER html %]" + id="[% param.name FILTER html %]" value="[% Param(param.name) FILTER html %]"> + [% ELSIF param.type == "p" %] + <input type="password" size="80" name="[% param.name FILTER html %]" + id="[% param.name FILTER html %]" value="[% Param(param.name) FILTER html %]" + autocomplete="off"> + [% ELSIF param.type == "l" %] + <textarea name="[% param.name FILTER html %]" id="[% param.name FILTER html %]" + rows="10" cols="80">[% Param(param.name) FILTER html %]</textarea> + [% ELSIF param.type == "b" %] + <input type="radio" name="[% param.name FILTER html %]" id="[% param.name FILTER html %]-on" + value=1 [% "checked=\"checked\"" IF Param(param.name) %]> + <label for="[% param.name FILTER html %]-on">On</label> + <input type="radio" name="[% param.name FILTER html %]" id="[% param.name FILTER html %]-off" + value=0 [% "checked=\"checked\"" IF !Param(param.name) %]> + <label for="[% param.name FILTER html %]-off">Off</label> + [% ELSIF param.type == "m" %] + [% boxSize = 5 %] + [% boxSize = param.choices.size IF param.choices.size < 5 %] + + <select multiple="multiple" size="[% boxSize FILTER html %]" + name="[% param.name FILTER html %]" id="[% param.name FILTER html %]"> + [% FOREACH item = param.choices %] + <option value="[% item FILTER html %]" + [% " selected=\"selected\"" IF lsearch(Param(param.name), item) != -1 %]> + [% item FILTER html %] + </option> + [% END %] + </select> + [% ELSIF param.type == "o" %] + <script type="text/javascript"><!-- + document.write("<span style=\"display: none\">"); + // --> + </script> + <input id="input_[% param.name FILTER html %]" size="80" + name="[% param.name FILTER html %]" + value="[% Param(param.name) FILTER html %]"><br> + <script type="text/javascript"><!-- + document.write("<\/span>"); + // --> + </script> + [% boxSize = 7 %] + [% boxSize = 3 + param.choices.size IF param.choices.size < 7 %] + [% plist = Param(param.name).split(',') %] + + <script type="text/javascript"><!-- + document.write( + '<table>' + + ' <tr>' + + ' <td rowspan="2">' + + ' <select id="select_[% param.name FILTER html %]"' + + ' size="[% boxSize FILTER html %]"' + + ' name="select_[% param.name FILTER html %]">' + + [% FOREACH item = plist %] + ' <option value="[% item FILTER html %]">[% item FILTER html %]<\/option>' + + [% END %] + ' <option class="sortlist_separator"' + + ' disabled="disabled"' + + ' value="[% sortlist_separator %]">active↑ ↓inactive<\/option>' + + [% FOREACH item = param.choices %] + [% IF lsearch(plist, item) == -1 %] + ' <option value="[% item FILTER html %]">[% item FILTER html %]<\/option>' + + [% END %] + [% END %] + ' <\/select>' + + ' <\/td>' + + ' <td style="vertical-align: bottom">' + + ' <button type="button"' + + ' onClick="sortedList_moveItem(\'[% param.name FILTER html %]\', -1, \'[% sortlist_separator %]\');">↑<\/button>' + + ' <\/td>' + + ' <\/tr>' + + ' <tr>' + + ' <td style="vertical-align: top">' + + ' <button type="button"' + + ' onClick="sortedList_moveItem(\'[% param.name FILTER html %]\', +1, \'[% sortlist_separator %]\');">↓<\/button>' + + ' <\/td>' + + ' <\/tr>' + + '<\/table>'); + // --> + </script> + [% ELSIF param.type == "s" %] + <select name="[% param.name FILTER html %]" id="[% param.name FILTER html %]"> + [% FOREACH item = param.choices %] + <option value="[% item FILTER html %]" + [% " selected=\"selected\"" IF item == Param(param.name) %]> + [% IF param.name == "defaultseverity" %] + [% display_value("bug_severity", item) FILTER html %] + [% ELSIF param.name == "defaultplatform" %] + [% display_value("rep_platform", item) FILTER html %] + [% ELSIF param.name == "defaultopsys" %] + [% display_value("op_sys", item) FILTER html %] + [% ELSIF param.name == "duplicate_or_move_bug_status" %] + [% display_value("bug_status", item) FILTER html %] + [% ELSE %] + [% item FILTER html %] + [% END %] + </option> + [% END %] + </select> + [% ELSE %] + <font color="red"> + <blink>Unknown param type [% param.type FILTER html %]!!!</blink> + </font> + [% END %] + </p> + [% UNLESS param.no_reset %] + <p> + <input type="checkbox" name="reset-[% param.name FILTER html %]" + id="reset-[% param.name FILTER html %]"> + <label for="reset-[% param.name FILTER html %]">Reset</label> + </p> + [% END %] + <hr> + </dd> + [% END %] +</dl> diff --git a/template/en/default/admin/params/core.html.tmpl b/template/en/default/admin/params/core.html.tmpl new file mode 100644 index 0000000..b1578f4 --- /dev/null +++ b/template/en/default/admin/params/core.html.tmpl @@ -0,0 +1,48 @@ +[%# 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): Dave Miller <justdave@bugzilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] + +[% + title = "Required Settings" + desc = "Settings that are required for proper operation of $terms.Bugzilla" +%] + +[% param_descs = { + urlbase => "The URL that is the common initial leading part of all $terms.Bugzilla " _ + "URLs.", + + sslbase => "The URL that is the common initial leading part of all HTTPS " _ + "(SSL) $terms.Bugzilla URLs.", + + ssl_redirect => + "When this is enabled, $terms.Bugzilla will ensure that every page is" + _ " accessed over SSL, by redirecting any plain HTTP requests to HTTPS" + _ " using the <tt>sslbase</tt> parameter. Also, when this is enabled," + _ " $terms.Bugzilla will send out links using <tt>sslbase</tt> in emails" + _ " instead of <tt>urlbase</tt>.", + + cookiepath => "Path, relative to your web document root, to which to restrict " _ + "$terms.Bugzilla cookies. Normally this is the URI portion of your URL " _ + "base. Begin with a / (single slash mark). For instance, if " _ + "$terms.Bugzilla serves from 'http://www.somedomain.com/bugzilla/', set " _ + "this parameter to /bugzilla/. Setting it to / will allow " _ + "all sites served by this web server or virtual host to read " _ + "$terms.Bugzilla cookies.", +} %] diff --git a/template/en/default/admin/params/dependencygraph.html.tmpl b/template/en/default/admin/params/dependencygraph.html.tmpl new file mode 100644 index 0000000..181cced --- /dev/null +++ b/template/en/default/admin/params/dependencygraph.html.tmpl @@ -0,0 +1,49 @@ +[%# 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): Dave Miller <justdave@bugzilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] +[% + title = "Dependency Graphs" + desc = "Optional setup for dependency graphing" +%] + +[% param_descs = { + webdotbase => "It is possible to show graphs of dependent ${terms.bugs}. You may set + this parameter to any of the following: + <ul> + <li> + A complete file path to 'dot' (part of + <a href=\"http://www.graphviz.org\">GraphViz</a>) will + generate the graphs locally. + </li> + <li> + A URL prefix pointing to an installation of the + <a href=\"http://www.research.att.com/~north/cgi-bin/webdot.cgi\">webdot + package</a> will generate the graphs remotely. + </li> + <li> + A blank value will disable dependency graphing. + </li> + </ul> + The default value is a publicly-accessible webdot server. If you change + this value, make certain that the webdot server can read files from your + webdot directory. On Apache you do this by editing the .htaccess file, + for other systems the needed measures may vary. You can run checksetup.pl + to recreate the .htaccess file if it has been lost."} +%]
\ No newline at end of file diff --git a/template/en/default/admin/params/editparams.html.tmpl b/template/en/default/admin/params/editparams.html.tmpl new file mode 100644 index 0000000..21fa9fa --- /dev/null +++ b/template/en/default/admin/params/editparams.html.tmpl @@ -0,0 +1,121 @@ +[%# 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): Dave Miller <justdave@bugzilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] +[%# INTERFACE: + # panels: array of hashes representing the panels available. + # param_changed: array of parameters which have been changed. + # shutdown_is_active: boolean; is true when 'shutdownhtml' has been turned on. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% curpanel = -1 %] +[% panels = panels.nsort('sortkey') %] + +[% FOREACH panel = panels %] + [% PROCESS "admin/params/${panel.name}.html.tmpl" + params = panel.param_list %] + [% panel.title = title %] + [% panel.desc = desc %] + [% panel.param_descs = param_descs %] + [% IF panel.current %][% curpanel = loop.index %][% END %] +[% END %] + +[% current_panel = panels.$curpanel %] + +[%# We cannot call header.html.tmpl earlier as we have to know + which panel is active first, in order to get its title %] + +[% title = BLOCK %] + [% IF curpanel == -1 %] + Parameters: Index + [% ELSE %] + Configuration: + [%+ current_panel.title FILTER html %] + [% END %] +[% END %] + +[% PROCESS global/header.html.tmpl + title = title + message = message + style_urls = ['skins/standard/params.css'] + javascript_urls = ['js/params.js'] + doc_section = "parameters.html" +%] + +<table border="0" width="100%"> + <tr> + <td> + [%# NAVIGATION BAR %] + <table id="menu"> + <tr> + <td class="index"> + <a href="editparams.cgi?section=index" title="Show all parameters">Index</a> + </td> + </tr> + [% FOREACH panel = panels %] + <tr> + [% IF panel.current %] + <td class="selected_section"> + <span title="[% panel.desc FILTER html %]">[% panel.title FILTER html %]</span> + </td> + [% ELSE %] + <td> + <a href="editparams.cgi?section=[% panel.name FILTER url_quote %]" + title="[% panel.desc FILTER html %]">[% panel.title FILTER html %]</a> + </td> + [% END %] + </tr> + [% END %] + </table> + </td> + <td> + [% IF curpanel == -1 %] + [% PROCESS admin/params/index.html.tmpl panels = panels %] + [% ELSE %] + + <div class="contribute"><strong>Note:</strong> + [%+ terms.Bugzilla %] is developed entirely by volunteers. The + best way to give back to the [% terms.Bugzilla %] project is + to <a href="http://www.bugzilla.org/contribute/">contribute</a> + yourself! You don't have to be a programmer to contribute, there are + lots of things that we need. + </div> + + <p> + This lets you edit the basic operating parameters of [% terms.Bugzilla %]. + Be careful!<br> + Any item you check "Reset" on will get reset to its default value. + </p> + + [%# CONTENT PANEL %] + <form method="post" action="editparams.cgi"> + [% PROCESS admin/params/common.html.tmpl panel = current_panel %] + <input type="hidden" name="section" value="[% current_panel.name FILTER html %]"> + <input type="hidden" name="action" value="save"> + <input type="hidden" name="token" value="[% token FILTER html %]"> + <input type="submit" name="action" value="Save Changes"> + </form> + [% END %] + </td> + </tr> +</table> + +[% INCLUDE global/footer.html.tmpl %] diff --git a/template/en/default/admin/params/general.html.tmpl b/template/en/default/admin/params/general.html.tmpl new file mode 100644 index 0000000..b8c0c77 --- /dev/null +++ b/template/en/default/admin/params/general.html.tmpl @@ -0,0 +1,86 @@ +[%# 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): Dave Miller <justdave@bugzilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] + +[% + title = "General" + desc = "Miscellaneous general settings that are not required." +%] + +[% param_descs = { + maintainer => + "The email address of the person who maintains this installation " + _ " of ${terms.Bugzilla}.", + + docs_urlbase => + "The URL that is the common initial leading part of all" + _ " $terms.Bugzilla documentation URLs. It may be an absolute URL," + _ " or a URL relative to the <tt>urlbase</tt> parameter. Leave this" + _ " empty to suppress links to the documentation." + _ "'%lang%' will be replaced by user's preferred language (if" + _ " documentation is available in that language).", + + utf8 => + "Use UTF-8 (Unicode) encoding for all text in ${terms.Bugzilla}. New" + _ " installations should set this to true to avoid character encoding" + _ " problems. <strong>Existing databases should set this to true" + _ " only after the data has been converted from existing legacy" + _ " character encodings to UTF-8, using the <kbd>contrib/recode.pl</kbd>" + _ " script</strong>." + _ " <p>Note that if you turn this parameter from "off" to" + _ " "on", you must re-run checksetup.pl immediately" + _ " afterward.</p>", + + shutdownhtml => + "If this field is non-empty, then $terms.Bugzilla will be completely" + _ " disabled and this text will be displayed instead of all the" + _ " $terms.Bugzilla pages.", + + announcehtml => + "If this field is non-empty, then $terms.Bugzilla will" + _ " display whatever is in this field at the top of every" + _ " HTML page. The HTML you put in this field is not wrapped or" + _ " enclosed in anything. You might want to wrap it inside a" + _ "<tt><div></tt>. Give the div <em>id=\"message\"</em> to get" + _ " green text inside a red box, or <em>class=\"bz_private\"</em> for" + _ " dark red on a red background. Anything defined in " + _ " <tt>skins/standard/global.css</tt> or <tt>skins/custom/global.css</tt>" + _ " will work. To get centered text, use <em>style=\"text-align: " + _ " center;\"</em>.", + + upgrade_notification => + "$terms.Bugzilla can inform you when a new release is available." + _ " The notification will appear on the $terms.Bugzilla homepage," + _ " for administrators only." + _ " <ul><li>'development_snapshot' notifies you about the development " + _ " snapshot that has been released.</li>" + _ " <li>'latest_stable_release' notifies you about the most recent" + _ " release available on the most recent stable branch. This branch" + _ " may be different from the branch your installation is based on.</li>" + _ " <li>'stable_branch_release' notifies you only about new releases" + _ " corresponding to the branch your installation is based on." + _ " If you are running a release candidate, you will get a notification" + _ " for newer release candidates too.</li>" + _ " <li>'disabled' will never notify you about new releases and no" + _ " connection will be established to a remote server.</li></ul>" + _ " <p>Note that if your $terms.Bugzilla server requires a proxy to" + _ " access the Internet, you may also need to set the <tt>proxy_url</tt>" + _ " parameter in the Advanced section.</p>", +} %] diff --git a/template/en/default/admin/params/groupsecurity.html.tmpl b/template/en/default/admin/params/groupsecurity.html.tmpl new file mode 100644 index 0000000..ab39a91 --- /dev/null +++ b/template/en/default/admin/params/groupsecurity.html.tmpl @@ -0,0 +1,56 @@ +[%# 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): Dave Miller <justdave@bugzilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] +[% + title = "Group Security" + desc = "Decide how you will use Security Groups" +%] + +[% param_descs = { + makeproductgroups => "If this is on, $terms.Bugzilla will associate $terms.abug group " _ + "with each product in the database, and use it for querying ${terms.bugs}.", + + chartgroup => "The name of the group of users who can use the 'New Charts' " _ + "feature. Administrators should ensure that the public categories " _ + "and series definitions do not divulge confidential information " _ + "before enabling this for an untrusted population. If left blank, " _ + "no users will be able to use New Charts.", + + insidergroup => "The name of the group of users who can see/change private " _ + "comments and attachments.", + + timetrackinggroup => "The name of the group of users who can see/change time tracking " _ + "information.", + + querysharegroup => "The name of the group of users who can share their " _ + "saved searches with others.", + + usevisibilitygroups => "Do you wish to restrict visibility of users to members of " _ + "specific groups?", + + strict_isolation => "Don't allow users to be assigned to, " _ + "be qa-contacts on, " _ + "be added to CC list, " _ + "or make or remove dependencies " _ + "involving any bug that is in a product on which that " _ + "user is forbidden to edit.", + + } +%] diff --git a/template/en/default/admin/params/index.html.tmpl b/template/en/default/admin/params/index.html.tmpl new file mode 100644 index 0000000..1629c8c --- /dev/null +++ b/template/en/default/admin/params/index.html.tmpl @@ -0,0 +1,51 @@ +[%# 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): Frédéric Buclin <LpSolit@gmail.com> + # Nitish Bezzala <nbezzala@yahoo.com> + #%] + +<p> + All parameters are displayed below, per section. + If you cannot find one from here, then the parameter does not exist. +</p> + +<div align="center"> + <table> + <tr> + <th>Parameter</th> + <th>Section</th> + </tr> + [% FOREACH panel = panels %] + [% FOREACH param = panel.param_list.sort('name') %] + <tr> + <td> + <a href="editparams.cgi?section= + [%- panel.name FILTER url_quote %]#[% param.name FILTER url_quote %]"> + [% param.name FILTER html %]</a> + </td> + <td> + [% panel.title FILTER html %] + </td> + </tr> + [% END %] + <tr> + <td> </td><td> </td> + </tr> + [% END %] + </table> +</div> diff --git a/template/en/default/admin/params/ldap.html.tmpl b/template/en/default/admin/params/ldap.html.tmpl new file mode 100644 index 0000000..cdc585d --- /dev/null +++ b/template/en/default/admin/params/ldap.html.tmpl @@ -0,0 +1,58 @@ +[%# 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): Dave Miller <justdave@bugzilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] +[% + title = "LDAP" + desc = "Configure this first before choosing LDAP as an authentication method" +%] + +[% param_descs = { + LDAPserver => "The name (and optionally port) of your LDAP server " _ + "(e.g. ldap.company.com, or ldap.company.com:portnum). " _ + "URI syntax can also be used, such as "_ + "ldaps://ldap.company.com (for a secure connection) or " _ + "ldapi://%2fvar%2flib%2fldap_sock (for a socket-based " _ + "local connection. Multiple hostnames or URIs can be comma " _ + "separated; each will be tried in turn until a connection is " _ + "established.", + + LDAPstarttls => "Whether to require encrypted communication once a normal " _ + "LDAP connection is achieved with the server.", + + LDAPbinddn => "If your LDAP server requires that you use a binddn and password " _ + "instead of binding anonymously, enter it here " _ + "(e.g. cn=default,cn=user:password). " _ + "Leave this empty for the normal case of an anonymous bind.", + + LDAPBaseDN => "The BaseDN for authenticating users against " _ + "(e.g. ou=People,o=Company).", + + LDAPuidattribute => "The name of the attribute containing the user's login name.", + + LDAPmailattribute => "The name of the attribute of a user in your " _ + "directory that contains the email address, to be " _ + "used as $terms.Bugzilla username. If this parameter " _ + "is empty, $terms.Bugzilla will use the LDAP username"_ + " as the $terms.Bugzilla username. You may also want" _ + " to set the \"emailsuffix\" parameter, in this case.", + + LDAPfilter => "LDAP filter to AND with the <tt>LDAPuidattribute</tt> for " _ + "filtering the list of valid users." } +%] diff --git a/template/en/default/admin/params/mta.html.tmpl b/template/en/default/admin/params/mta.html.tmpl new file mode 100644 index 0000000..8533257 --- /dev/null +++ b/template/en/default/admin/params/mta.html.tmpl @@ -0,0 +1,86 @@ +[%# 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): Dave Miller <justdave@bugzilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] +[% + title = "Email" + desc = "How will outgoing mail be delivered?" +%] + +[% param_descs = { + mail_delivery_method => "Defines how email is sent, or if it is sent at all.<br> + <ul> + <li> + 'Sendmail', 'SMTP' and 'Qmail' are all MTAs. + You need to install a third-party sendmail replacement if + you want to use sendmail on Windows. + </li> + <li> + 'Test' is useful for debugging: all email is stored + in 'data/mailer.testfile' instead of being sent. + </li> + <li> + 'none' will completely disable email. $terms.Bugzilla continues + to act as though it is sending mail, but nothing is sent or + stored. + </li> + </ul>", + + mailfrom => "The email address of the $terms.Bugzilla mail daemon. Some email systems " _ + "require this to be a valid email address.", + + use_mailer_queue => "In a large $terms.Bugzilla installation, updating" + _ " $terms.bugs can be very slow, because $terms.Bugzilla sends all" + _ " email at once. If you enable this parameter, $terms.Bugzilla will" + _ " queue all mail and then send it in the background. This requires" + _ " that you have installed certain Perl modules (as listed by" + _ " <code>checksetup.pl</code> for this feature), and that you are" + _ " running the <code>jobqueue.pl</code> daemon (otherwise your mail" + _ " won't get sent). This affects all mail sent by $terms.Bugzilla," + _ " not just $terms.bug updates.", + + sendmailnow => "Sites using anything older than version 8.12 of 'sendmail' " _ + "can achieve a significant performance increase in the " _ + "UI -- at the cost of delaying the sending of mail -- by " _ + "disabling this parameter. Sites using 'sendmail' 8.12 or " _ + "higher should leave this on, as they will see no benefit from " _ + "turning it off. Sites using an MTA other than 'sendmail' " _ + "<b>must</b> leave it on, or no $terms.bug mail will be sent.", + + smtpserver => "The SMTP server address (if using SMTP for mail delivery).", + + smtp_username => "The username to pass to the SMTP server for SMTP authentication. " _ + "Leave this field empty if your SMTP server doesn't require authentication.", + + smtp_password => "The password to pass to the SMTP server for SMTP authentication. " _ + "This field has no effect if the smtp_username parameter is left empty.", + + smtp_debug => "If enabled, this will print detailed information to your" _ + " web server's error log about the communication between" _ + " $terms.Bugzilla and your SMTP server. You can use this to" _ + " troubleshoot email problems.", + + whinedays => "The number of days that we'll let a $terms.bug sit untouched in a NEW " _ + "state before our cronjob will whine at the owner.<br> " _ + "Set to 0 to disable whining.", + + globalwatchers => "A comma-separated list of users who should receive a " _ + "copy of every notification mail the system sends." } + +%] diff --git a/template/en/default/admin/params/patchviewer.html.tmpl b/template/en/default/admin/params/patchviewer.html.tmpl new file mode 100644 index 0000000..389acc1 --- /dev/null +++ b/template/en/default/admin/params/patchviewer.html.tmpl @@ -0,0 +1,64 @@ +[%# 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): Dave Miller <justdave@bugzilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] +[% + title = "Patch Viewer" + desc = "Set up third-party applications to run with PatchViewer" +%] + +[% param_descs = { + cvsroot => "The <a href=\"http://www.cvshome.org\">CVS</a> root that most " _ + "users of your system will be using for 'cvs diff'. Used in " _ + "Patch Viewer ('Diff' option on patches) to figure out where " _ + "patches are rooted even if users did the 'cvs diff' from " _ + "different places in the directory structure. (NOTE: if your " _ + "CVS repository is remote and requires a password, you must " _ + "either ensure the $terms.Bugzilla user has done a 'cvs login' or " _ + "specify the password " _ + "<a href=\"http://www.cvshome.org/docs/manual/cvs_2.html#SEC26\">as " _ + "part of the CVS root</a>.) Leave this blank if you have no " _ + "CVS repository.", + + cvsroot_get => "The CVS root $terms.Bugzilla will be using to get patches from. " _ + "Some installations may want to mirror their CVS repository on " _ + "the $terms.Bugzilla server or even have it on that same server, and " _ + "thus the repository can be the local file system (and much " _ + "faster). Make this the same as cvsroot if you don't " _ + "understand what this is (if cvsroot is blank, make this blank too).", + + bonsai_url => "The URL to a <a href=\"http://www.mozilla.org/bonsai.html\">Bonsai</a> " _ + "server containing information about your CVS repository. " _ + "Patch Viewer will use this information to create links to " _ + "bonsai's blame for each section of a patch (it will append " _ + "'/cvsblame.cgi?...' to this url). Leave this blank if you " _ + "don't understand what this is.", + + lxr_url => "The URL to an <a href=\"http://sourceforge.net/projects/lxr\">LXR</a> server " _ + "that indexes your CVS repository. Patch Viewer will use this " _ + "information to create links to LXR for each file in a patch. " _ + "Leave this blank if you don't understand what this is.", + + lxr_root => "Some LXR installations do not index the CVS repository from the root -- " _ + "<a href=\"http://lxr.mozilla.org/mozilla\">Mozilla's</a>, for " _ + "example, starts indexing under <code>mozilla/</code>. This " _ + "means URLs are relative to that extra path under the root. " _ + "Enter this if you have a similar situation. Leave it blank " _ + "if you don't know what this is." } +%] diff --git a/template/en/default/admin/params/query.html.tmpl b/template/en/default/admin/params/query.html.tmpl new file mode 100644 index 0000000..34ea043 --- /dev/null +++ b/template/en/default/admin/params/query.html.tmpl @@ -0,0 +1,58 @@ +[%# 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): Dave Miller <justdave@bugzilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] +[% + title = "Query Defaults" + desc = "Default options for query and $terms.bug lists" +%] + +[% param_descs = { + quip_list_entry_control => "Controls how easily users can add entries to the quip list. + <ul> + <li> + open - Users may freely add to the quip list, and + their entries will immediately be available for viewing. + </li> + <li> + moderated - quips can be entered, but need to be approved + by an admin before they will be shown. + </li> + <li> + closed - no new additions to the quips list are allowed. + </li> + </ul>", + + mostfreqthreshold => "The minimum number of duplicates $terms.abug needs to show up on the " _ + "<a href=\"duplicates.cgi\">most frequently reported $terms.bugs page</a>. " _ + "If you have a large database and this page takes a long time to " _ + "load, try increasing this number.", + + mybugstemplate => "This is the URL to use to bring up a simple 'all of my $terms.bugs' " _ + "list for a user. %userid% will get replaced with the login name of a user.", + + defaultquery => "This is the default query that initially comes up when you " _ + "access the advanced query page. It's in URL parameter " _ + "format, which makes it hard to read. Sorry!", + + specific_search_allow_empty_words => + "Whether to allow a search on the 'Simple Search' page with an empty" + _ " 'Words' field.", + +} %] diff --git a/template/en/default/admin/params/radius.html.tmpl b/template/en/default/admin/params/radius.html.tmpl new file mode 100644 index 0000000..ef2282d --- /dev/null +++ b/template/en/default/admin/params/radius.html.tmpl @@ -0,0 +1,54 @@ +[%# 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 Marc Schumann. + # Portions created by Marc Schumann are Copyright (c) 2007 Marc Schumann. + # All rights reserved. + # + # Contributor(s): Marc Schumann <wurblzap@gmail.com> + #%] +[% + title = "RADIUS" + desc = "Configure this first before choosing RADIUS as an authentication method" +%] + +[% param_descs = { + RADIUS_server => "The name (and optionally port) of your RADIUS server " _ + "(e.g. <code>radius.company.com</code>, or " _ + "<code>radius.company.com:portnum</code>).<br>" _ + "Required only if " _ + "<a href=\"?section=auth#user_verify_class\">the " _ + "<code>user_verify_class</code> parameter</a> contains " _ + "<code>RADIUS</code>.", + + RADIUS_secret => "Your RADIUS server's secret.<br>" _ + "Required only if " _ + "<a href=\"?section=auth#user_verify_class\">the " _ + "<code>user_verify_class</code> parameter</a> contains " _ + "<code>RADIUS</code>.", + + RADIUS_NAS_IP => "The NAS-IP-Address attribute to be used when exchanging " _ + "data with your RADIUS server. " _ + "If unspecified, <code>127.0.0.1</code> will be used.<br>" _ + "Useful only if " _ + "<a href=\"?section=auth#user_verify_class\">the " _ + "<code>user_verify_class</code> parameter</a> " _ + "contains <code>RADIUS</code>.", + + RADIUS_email_suffix => "Suffix to append to a RADIUS user name to form an " _ + "e-mail address.<br>" _ + "Useful only if " _ + "<a href=\"?section=auth#user_verify_class\">the " _ + "<code>user_verify_class</code> parameter</a> " _ + "contains <code>RADIUS</code>.", + } +%] diff --git a/template/en/default/admin/params/shadowdb.html.tmpl b/template/en/default/admin/params/shadowdb.html.tmpl new file mode 100644 index 0000000..c812284 --- /dev/null +++ b/template/en/default/admin/params/shadowdb.html.tmpl @@ -0,0 +1,49 @@ +[%# 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): Dave Miller <justdave@bugzilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] +[% + title = "Shadow Database" + desc = "An optional hack to increase database performance" +%] + +[% param_descs = { + shadowdbhost => "The host the shadow database is on.", + + shadowdbport => "The port the shadow database is on. Ignored if " _ + "<tt>shadowdbhost</tt> is blank. Note: if the host is the local " _ + "machine, then MySQL will ignore this setting, and you must " _ + "specify a socket below.", + + shadowdbsock => "The socket used to connect to the shadow database, if the host " _ + "is the local machine. This setting is required because MySQL " _ + "ignores the port specified by the client and connects using " _ + "its compiled-in socket path (on unix machines) when connecting " _ + "from a client to a local server. If you leave this blank, and " _ + "have the database on localhost, then the <tt>shadowdbport</tt> " _ + "will be ignored.", + + shadowdb => "If non-empty, then this is the name of another database in " _ + "which $terms.Bugzilla will use as a read-only copy of everything. " _ + "This is done so that long slow read-only operations can be used " _ + "against this db, and not lock up things for everyone else. This " _ + "database is on the <tt>shadowdbhost</tt>, and must exist. " _ + "$terms.Bugzilla does not update it, if you use this parameter, then " _ + "you need to set up replication for your database." } +%] diff --git a/template/en/default/admin/params/usermatch.html.tmpl b/template/en/default/admin/params/usermatch.html.tmpl new file mode 100644 index 0000000..54f1509 --- /dev/null +++ b/template/en/default/admin/params/usermatch.html.tmpl @@ -0,0 +1,39 @@ +[%# 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): Dave Miller <justdave@bugzilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] +[% + title = "User Matching" + desc = "Set up your user matching policies" +%] + +[% param_descs = { + usemenuforusers => "If this option is set, $terms.Bugzilla will offer you a list " _ + "to select from (instead of a text entry field) where a user " _ + "needs to be selected. This option should not be enabled on " _ + "sites where there are a large number of users.", + + maxusermatches => "Search for no more than this many matches.<br> " _ + "If set to '1', no users will be displayed on ambiguous matches. " _ + "This is useful for user privacy purposes.<br> " _ + "A value of zero means no limit.", + + confirmuniqueusermatch => "Whether a confirmation screen should be displayed when only " _ + "one user matches a search entry." } +%] diff --git a/template/en/default/admin/products/confirm-delete.html.tmpl b/template/en/default/admin/products/confirm-delete.html.tmpl new file mode 100644 index 0000000..f4a04b8 --- /dev/null +++ b/template/en/default/admin/products/confirm-delete.html.tmpl @@ -0,0 +1,266 @@ +[%# 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): Gavin Shelley <bugzilla@chimpychompy.org> + #%] + +[%# INTERFACE: + # product: Bugzilla::Product object; The product + # + # (classification fields available if Param('useclassification') is enabled:) + # + # classification: Bugzilla::Classification object; The classification + # the product is in + # + #%] + +[% title = BLOCK %]Delete Product '[% product.name FILTER html %]' +[% END %] + +[% PROCESS global/header.html.tmpl + title = title + style_urls = ['skins/standard/admin.css'] +%] + +<table border="1" cellpadding="4" cellspacing="0"> + <tr bgcolor="#6666FF"> + <th valign="top" align="left">Field</th> + <th valign="top" align="left">Value</th> + </tr> + + [% IF Param('useclassification') %] + <tr> + <td>Classification:</td> + <td>[% classification.name FILTER html %]</td> + </tr> + <tr> + <td>Classification Description:</td> + [%# descriptions are intentionally not filtered to allow html content %] + <td> + [% IF classification.description %] + [% classification.description FILTER html_light %] + [% ELSE %] + <span style="color: red">missing</span> + [% END %] + </td> + </tr> + [% END %] + + <tr> + <td valign="top">Product:</td> + <td valign="top"> + <a href="editproducts.cgi?product=[% product.name FILTER url_quote %]"> + [% product.name FILTER html %] + </a> + </td> + </tr> + <tr> + <td valign="top">Description:</td> + [%# descriptions are intentionally not filtered to allow html content %] + <td valign="top"> + [% IF product.description %] + [% product.description FILTER html_light %] + [% ELSE %] + <span style="color: red">missing</span> + [% END %] + </td> + </tr> + + [% IF Param('usetargetmilestone') %] + <tr> + <td>Milestone URL:</td> + <td> + [% IF product.milestone_url %] + <a href="[% product.milestone_url FILTER html %]"> + [%- product.milestone_url FILTER html %] + </a> + [% ELSE %] + none + [% END %] + </td> + </tr> + [% END %] + + <tr> + <td>Closed for [% terms.bugs %]:</td> + <td> + [% IF product.is_active %] + open + [% ELSE %] + closed + [% END %] + </td> + </tr> + + <tr> + <td> + [% IF product.components.size > 0 %] + <a href="editcomponents.cgi?product=[% product.name FILTER url_quote %]" + title="Edit components for product '[% product.name FILTER html %]'"> + Components: + </a> + [% ELSE %] + Components: + [% END %] + </td> + <td> + [% IF product.components.size > 0 %] + <table> + [% FOREACH c = product.components %] + <tr> + <th align="right">[% c.name FILTER html %]:</th> + [%# descriptions are intentionally not filtered to allow html content %] + <td> + [% IF c.description %] + [% c.description FILTER html_light %] + [% ELSE %] + <span style="color: red">missing</span> + [% END %] + </td> + </tr> + [% END %] + </table> + [% ELSE %] + none + [% END %] + </td> + </tr> + + <tr> + <td> + [% IF product.versions.size > 0 %] + <a href="editversions.cgi?product=[%- product.name FILTER url_quote %]"> + Versions: + </a> + [% ELSE %] + Versions: + [% END %] + </td> + <td> + [% IF product.versions.size > 0 %] + [% FOREACH v = product.versions %] + [% v.name FILTER html %]<br> + [% END %] + [% ELSE %] + none + [% END %] + </td> + </tr> + + + [% IF Param('usetargetmilestone') %] + <tr> + <td valign="top"> + [% IF product.milestones.size > 0 %] + <a href="editmilestones.cgi?product=[%- product.name FILTER url_quote %]"> + Milestones: + </a> + [% ELSE %] + Milestones: + [% END %] + </td> + <td> + [% IF product.milestones.size > 0 %] + [% FOREACH m = product.milestones %] + [% m.name FILTER html %]<br> + [% END %] + [% ELSE %] + none + [% END %] + </td> + </tr> + [% END %] + + <tr> + <td>[% terms.Bugs %]:</td> + <td> + [% IF product.bug_count %] + <a href="buglist.cgi?product=[% product.name FILTER url_quote %]" + title="List of [% terms.bugs %] for product '[% product.name FILTER html %]'"> + [% product.bug_count FILTER html %] + </a> + [% ELSE %] + none + [% END %] + </td> + </tr> +</table> + +<h2>Confirmation</h2> + +[% IF product.bug_count %] + + [% IF !Param("allowbugdeletion") %] + + <p>Sorry, there + + [% IF product.bug_count > 1 %] + are [% product.bug_count FILTER html %] [%+ terms.bugs %] + [% ELSE %] + is 1 [% terms.bug %] + [% END %] + + outstanding for this product. You must reassign + + [% IF product.bug_count > 1 %] + those [% terms.bugs %] + [% ELSE %] + that [% terms.bug %] + [% END %] + + to another product before you can delete this one.</p> + + [% ELSE %] + + <table border="0" cellpadding="20" width="70%" bgcolor="red"> + <tr> + <td> + There + [% IF product.bug_count > 1 %] + are [% product.bug_count FILTER html %] [%+ terms.bugs %] + [% ELSE %] + is 1 [% terms.bug %] + [% END %] + entered for this product! When you delete this + product, <b><blink>ALL</blink></b> stored [% terms.bugs %] and + their history will be deleted, too. + </td> + </tr> + </table> + + [% END %] + +[% END %] + +[% Hook.process("confirmation") %] + +[% IF product.bug_count == 0 || Param('allowbugdeletion') %] + + <p>Do you really want to delete this product?</p> + + <form method="post" action="editproducts.cgi"> + <input type="checkbox" id="delete_series" name="delete_series" value=1> + <label for="delete_series"> + Delete all related series (you can also delete them later, by visiting + the <a href="chart.cgi?category=[% product.name FILTER html %]">New Charts page</a>.) + </label><p> + <input type="submit" id="delete" value="Yes, delete"> + <input type="hidden" name="action" value="delete"> + <input type="hidden" name="product" value="[% product.name FILTER html %]"> + <input type="hidden" name="token" value="[% token FILTER html %]"> + </form> + +[% END %] + +[% PROCESS admin/products/footer.html.tmpl %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/products/create.html.tmpl b/template/en/default/admin/products/create.html.tmpl new file mode 100644 index 0000000..f4a2161 --- /dev/null +++ b/template/en/default/admin/products/create.html.tmpl @@ -0,0 +1,69 @@ +[%# 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): Gabriel S. Oliveira <gabriel@async.com.br> + #%] + +[%# INTERFACE: + # classification: Bugzilla::Classification object; If classifications + # are enabled, then this is + # the currently selected classification + # + #%] + +[% title = BLOCK %]Add Product[% END %] + +[% PROCESS global/header.html.tmpl + title = title + style_urls = ['skins/standard/admin.css'] + javascript_urls = ['js/util.js'] +%] + +[% DEFAULT + product.votesperuser = "0", + product.maxvotesperbug = "10000", + product.votes_to_confirm = "0", + product.is_active = 1, + version = "unspecified", + product.defaultmilestone = constants.DEFAULT_MILESTONE + product.allows_unconfirmed = 0 +%] + +<form method="post" action="editproducts.cgi"> + <table border="0" cellpadding="4" cellspacing="0"> + + [% PROCESS "admin/products/edit-common.html.tmpl" %] + + <tr> + <th align="right">Version:</th> + <td><input size="64" maxlength="255" name="version" + value="[% version FILTER html %]"> + </td> + </tr> + <tr> + <th align="right">Create chart datasets for this product:</th> + <td><input type="checkbox" name="createseries" value="1"></td> + </tr> + </table> + + <input type="submit" value="Add"> + <input type="hidden" name="action" value="new"> + <input type="hidden" name="token" value="[% token FILTER html %]"> + <input type="hidden" name="classification" + value="[% classification.name FILTER html %]"> +</form> + +[% PROCESS "admin/products/footer.html.tmpl" + no_add_product_link = 1 + no_edit_product_link = 1 %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/products/edit-common.html.tmpl b/template/en/default/admin/products/edit-common.html.tmpl new file mode 100644 index 0000000..2c94402 --- /dev/null +++ b/template/en/default/admin/products/edit-common.html.tmpl @@ -0,0 +1,112 @@ +[%# 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): Jack Nerad <jnerad@bellsouth.net> + # Tiago R. Mello <tiago@async.com.br> + # Gabriel S. Oliveira <gabriel@async.com.br> + #%] + +[%# INTERFACE: + # product: Bugzilla::Product object; The product + # + # classification: Bugzilla::Classifiation object; classification product is in. + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% IF Param('useclassification') %] + <tr> + <th align="right"><b>Classification:</b></th> + <td><b>[% classification.name FILTER html %]</b></td> + </tr> +[% END %] + +<tr> + <th align="right">Product:</th> + <td><input size="64" maxlength="64" name="product" + value="[% product.name FILTER html %]"> + </td> +</tr> +<tr> + <th align="right">Description:</th> + <td><textarea rows="4" cols="64" wrap="virtual" name="description"> + [% product.description FILTER html %]</textarea> + </td> +</tr> + +[% IF Param('usetargetmilestone') -%] + <tr> + <th align="right">Default milestone:</th> + <td> + [% IF product.milestones.size %] + <select name="defaultmilestone"> + [% FOREACH m = product.milestones %] + <option value="[% m.name FILTER html %]" + [% " selected=\"selected\"" IF m.name == product.defaultmilestone %]> + [%- m.name FILTER html -%]</option> + [% END %] + </select> + [% ELSE %] + <input type="text" size="20" maxlength="20" name="defaultmilestone" + value="[% product.defaultmilestone FILTER html %]"> + [% END %] + </td> + </tr> +[% END %] + +<tr> + <th align="right">Open for [% terms.bug %] entry:</th> + <td><input type="checkbox" name="is_active" value="1" + [% ' checked="checked"' IF product.is_active %]> + </td> +</tr> +<tr> + <th align="right"> + <label for="allows_unconfirmed">Enable the + [%+ display_value('bug_status', 'UNCONFIRMED') FILTER html %] status + in this product:</label> + </th> + <td><input type="checkbox" id="allows_unconfirmed" name="allows_unconfirmed" + [% ' checked="checked"' IF product.allows_unconfirmed %] + [% IF Param('usevotes') %] + onchange="bz_toggleClass('votes_to_confirm_container', + 'bz_default_hidden')" + [% END %]> + [% IF Param('usevotes') %] + <span id="votes_to_confirm_container" + [% ' class="bz_default_hidden"' IF !product.allows_unconfirmed %]> + ...and automatically confirm [% terms.bugs %] if they get + <input size="3" maxlength="5" name="votestoconfirm" id="votestoconfirm" + value="[% product.votes_to_confirm FILTER html %]"> + votes. (Setting this to 0 disables auto-confirming [% terms.bugs %] + by vote.) + </span> + [% END %] + </td> +</tr> + +[% IF Param('usevotes') %] + <tr> + <th align="right">Maximum votes per person:</th> + <td><input size="5" maxlength="5" name="votesperuser" id="votesperuser" + value="[% product.votesperuser FILTER html %]"> + </td> + </tr> + <tr> + <th align="right"> + Maximum votes a person can put on a single [% terms.bug %]: + </th> + <td><input size="5" maxlength="5" name="maxvotesperbug" id="maxvotesperbug" + value="[% product.maxvotesperbug FILTER html %]"> + </td> + </tr> +[% END %] diff --git a/template/en/default/admin/products/edit.html.tmpl b/template/en/default/admin/products/edit.html.tmpl new file mode 100644 index 0000000..976739f --- /dev/null +++ b/template/en/default/admin/products/edit.html.tmpl @@ -0,0 +1,149 @@ +[%# 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): Jack Nerad <jnerad@bellsouth.net> + # Tiago R. Mello <tiago@async.com.br> + # Gabriel S. Oliveira <gabriel@async.com.br> + #%] + +[%# INTERFACE: + # product: Bugzilla::Product object; The product + # + # (classification fields available if Param('useclassification') is enabled:) + # + # classification: Bugzilla::Classification object; The classification + # the product is in + #%] + +[% title = BLOCK %]Edit Product '[% product.name FILTER html %]'[% END %] + +[% PROCESS global/header.html.tmpl + title = title + style_urls = ['skins/standard/admin.css'] + javascript_urls = ['js/util.js'] +%] + +[% group_control = {${constants.CONTROLMAPNA} => 'NA', + ${constants.CONTROLMAPSHOWN} => 'Shown', + ${constants.CONTROLMAPDEFAULT} => 'Default', + ${constants.CONTROLMAPMANDATORY} => 'Mandatory'} + %] + +<form method="post" action="editproducts.cgi"> + <table border="0" cellpadding="4" cellspacing="0"> + + [% PROCESS "admin/products/edit-common.html.tmpl" %] + + <tr> + <th align="right" valign="top"> + <a href="editcomponents.cgi?product=[% product.name FILTER url_quote %]"> + Edit components: + </a> + </th> + <td> + [% IF product.components.size -%] + [% FOREACH component = product.components %] + <b>[% component.name FILTER html %]:</b> + [% IF component.description %] + [% component.description FILTER html_light %] + [% ELSE %] + <font color="red">description missing</font> + [% END %] + <br> + [% END %] + [% ELSE %] + <font color="red">missing</font> + [% END %] + </td> + </tr> + <tr> + <th align="right" valign="top"> + <a href="editversions.cgi?product=[% product.name FILTER url_quote %]">Edit +versions:</a> + </th> + <td> + [%- IF product.versions.size -%] + [% FOREACH v = product.versions %] + [% v.name FILTER html %] + <br> + [% END %] + [% ELSE %] + <font color="red">missing</font> + [% END %] + </td> + </tr> + [% IF Param('usetargetmilestone') %] + <tr> + <th align="right" valign="top"> + <a href="editmilestones.cgi?product=[% product.name FILTER url_quote %]"> + Edit milestones:</a> + </th> + <td> + [%- IF product.milestones.size -%] + [%- FOREACH m = product.milestones -%] + [% m.name FILTER html %] + <br> + [% END %] + [% ELSE %] + <font color="red">missing</font> + [% END %] + </td> + </tr> + [% END %] + <tr> + <th align="right" valign="top"> + <a href="editproducts.cgi?action=editgroupcontrols&product= + [%- product.name FILTER url_quote %]"> + Edit Group Access Controls: + </a> + </th> + <td> + [% IF product.group_controls.size %] + [% FOREACH g = product.group_controls.values.sort("name") %] + <b>[% g.group.name FILTER html %]:</b> + [% IF g.group.isactive %] + [% group_control.${g.membercontrol} FILTER html %]/ + [% group_control.${g.othercontrol} FILTER html %] + [% IF g.entry %], ENTRY[% END %] + [% IF g.canedit %], CANEDIT[% END %] + [% IF g.editcomponents %], editcomponents[% END %] + [% IF g.canconfirm %], canconfirm[% END %] + [% IF g.editbugs %], editbugs[% END %] + [% ELSE %] + DISABLED + [% END %] + <br> + [% END %] + [% ELSE %] + no groups + [% END %] + </td> + </tr> + <tr> + <th align="right">[% terms.Bugs %]:</th> + <td><a href="buglist.cgi?product=[% product.name FILTER url_quote %]"> + [% product.bug_count FILTER html %]</a></td> + </tr> + </table> + + <input type="hidden" name="product_old_name" + value="[% product.name FILTER html %]"> + <input type="hidden" name="action" value="update"> + <input type="hidden" name="token" value="[% token FILTER html %]"> + <input type="submit" name="submit" value="Save Changes"> +</form> + +[% PROCESS "admin/products/footer.html.tmpl" + no_add_product_link = 1 + no_edit_product_link = 1 %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/products/footer.html.tmpl b/template/en/default/admin/products/footer.html.tmpl new file mode 100644 index 0000000..661829b --- /dev/null +++ b/template/en/default/admin/products/footer.html.tmpl @@ -0,0 +1,86 @@ +[%# 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): Gavin Shelley <bugzilla@chimpychompy.org> + #%] + +[%# INTERFACE: + # product: Bugzilla::Product Object; the product + # + # classification: Bugzilla::Classification object ; If classifications + # are enabled, then this is the currently + # selected classification + # + # no_XXX_link: boolean; if defined, then don't show the corresponding + # link. Supported parameters are: + # + # no_edit_product_link + # no_edit_other_products_link + # no_add_product_link + #%] + +[% IF Param('useclassification') && classification %] + [% classification_url_part = BLOCK %]&classification= + [%- classification.name FILTER url_quote %] + [% END %] + [% classification_url_part_start = BLOCK %]classification= + [%- classification.name FILTER url_quote %] + [% END %] + [% classification_text = BLOCK %] + of classification '[% classification.name FILTER html %]' + [% END %] +[% END %] + +<hr> + +<p> +[% UNLESS no_add_product_link || !user.in_group("editcomponents") %] + <a title="Add a product" + href="editproducts.cgi?action=add">Add</a> a product[% -%] +[%# Strictly speaking, we should not have to check for a + classification if they are enabled, but I'm just being paranoid %] + [% IF Param('useclassification') && classification %] + (<a title="Add a product to classification ' + [%- classification.name FILTER html %]'" + href="editproducts.cgi?action=add + [%- classification_url_part %]">to + classification '[% classification.name FILTER html %]'</a>) + [% END %]. +[% END %] + +[% IF product && !no_edit_product_link %] + Edit product <a + title="Edit Product '[% product.name FILTER html %]' + [%- classification_text %]" + href="editproducts.cgi?action=edit&product=[% product.name FILTER url_quote %]"> + '[% product.name FILTER html %]'</a>. +[% END %] + + +[%# Edit other products (in a classification if specified): %] +[% UNLESS no_edit_other_products_link %] + Edit <a + href="editproducts.cgi? + [%- classification_url_part_start FILTER none %]">other products + [% classification_text %]</a>. + +[% END %] + +[% IF Param('useclassification') && classification + && user.in_group('editclassifications') %] + Edit classification <a href="editclassifications.cgi?action=edit + [%- classification_url_part %]">' + [%- classification.name FILTER html %]'</a>. + +[% END %] + +</p> diff --git a/template/en/default/admin/products/groupcontrol/confirm-edit.html.tmpl b/template/en/default/admin/products/groupcontrol/confirm-edit.html.tmpl new file mode 100644 index 0000000..1fc92c9 --- /dev/null +++ b/template/en/default/admin/products/groupcontrol/confirm-edit.html.tmpl @@ -0,0 +1,58 @@ +[%# 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): Joel Peshkin <bugreport@peshkin.net> + # + #%] + +[% PROCESS global/variables.none.tmpl %] +[% title = BLOCK %] + Confirm Group Control Change for product '[%- product.name FILTER html %]' +[% END %] + +[% PROCESS global/header.html.tmpl title = title %] +[% FOREACH group = mandatory_groups %] +<P> +group '[% group.name FILTER html %]' impacts [% group.count %] +[%+ terms.bugs %] for +which the group is newly mandatory and will be added. +[% END %] + +[% FOREACH group = na_groups %] +<P> +group '[% group.name FILTER html %]' impacts [% group.count %] +[% terms.bugs %] for which the group is no longer applicable and will +be removed.[% END %] +<form action="editproducts.cgi" method="post" > + + [% PROCESS "global/hidden-fields.html.tmpl" exclude="^Bugzilla_(login|password)$" %] + + <br> + Click "Continue" to proceed with the change including the changes + indicated above. If you do not want these changes, use "back" to + return to the previous page. + <p> + <input type="hidden" name="confirmed" value="confirmed"> + <input type="submit" id="update" value="Continue"> + </p> + +</form> + + +[% PROCESS global/footer.html.tmpl %] + + diff --git a/template/en/default/admin/products/groupcontrol/edit.html.tmpl b/template/en/default/admin/products/groupcontrol/edit.html.tmpl new file mode 100644 index 0000000..8c634eb --- /dev/null +++ b/template/en/default/admin/products/groupcontrol/edit.html.tmpl @@ -0,0 +1,325 @@ +[%# 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): Joel Peshkin <bugreport@peshkin.net> + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% title = BLOCK %] + Edit Group Controls for [% product.name FILTER html %] +[% END %] +[% PROCESS global/header.html.tmpl + title = title +%] + +<form method="post" action="editproducts.cgi"> + <input type="hidden" name="action" value="updategroupcontrols"> + <input type="hidden" name="product" value="[% product.name FILTER html %]"> + <input type="hidden" name="token" value="[% token FILTER html %]"> + + <table id="form" cellspacing="0" cellpadding="4" border="1"> + <tr bgcolor="#6666ff"> + <th>Group</th> + <th>Entry</th> + <th>MemberControl</th> + <th>OtherControl</th> + <th>Canedit</th> + <th>editcomponents</th> + <th>canconfirm</th> + <th>editbugs</th> + <th>[% terms.Bugs %]</th> + </tr> + [% FOREACH group = product.group_controls(1).values.sort("name") %] + [% IF !group.group.isactive AND group.bug_count %] + <tr bgcolor="#bbbbbb"> + <td> + [% group.group.name FILTER html %] + </td> + <td align="center" colspan=7> + Disabled + </td> + <td> + [% group.bug_count FILTER html %] + </td> + <tr> + [% ELSIF group.group.is_active %] + <tr> + <td> + [% group.group.name FILTER html %] + </td> + <td> + <input type=checkbox value=1 name=entry_[% group.id %] + [% " checked=\"checked\"" IF group.entry %]> + </td> + <td> + <select name="membercontrol_[% group.id %]"> + <option value=[% constants.CONTROLMAPNA %] + [% " selected=\"selected\"" + IF group.membercontrol == constants.CONTROLMAPNA %] + >NA + </option> + <option value=[% constants.CONTROLMAPSHOWN %] + [% " selected=\"selected\"" + IF group.membercontrol == constants.CONTROLMAPSHOWN %] + >Shown + </option> + <option value=[% constants.CONTROLMAPDEFAULT %] + [% " selected=\"selected\"" + IF group.membercontrol == constants.CONTROLMAPDEFAULT %] + >Default + </option> + <option value=[% constants.CONTROLMAPMANDATORY %] + [% " selected=\"selected\"" + IF group.membercontrol == constants.CONTROLMAPMANDATORY %] + >Mandatory + </option> + </select> + </td> + <td> + <select name="othercontrol_[% group.id %]"> + <option value=[% constants.CONTROLMAPNA %] + [% " selected=\"selected\"" + IF group.othercontrol == constants.CONTROLMAPNA %] + >NA + </option> + <option value=[% constants.CONTROLMAPSHOWN %] + [% " selected=\"selected\"" + IF group.othercontrol == constants.CONTROLMAPSHOWN %] + >Shown + </option> + <option value=[% constants.CONTROLMAPDEFAULT %] + [% " selected=\"selected\"" + IF group.othercontrol == constants.CONTROLMAPDEFAULT %] + >Default + </option> + <option value=[% constants.CONTROLMAPMANDATORY %] + [% " selected=\"selected\"" + IF group.othercontrol == constants.CONTROLMAPMANDATORY %] + >Mandatory + </option> + </select> + </td> + <td> + <input type=checkbox value=1 name=canedit_[% group.id %] + [% " checked=\"checked\"" IF group.canedit %]> + </td> + <td> + <input type=checkbox value=1 name=editcomponents_[% group.id %] + [% " checked=\"checked\"" IF group.editcomponents %]> + </td> + <td> + <input type=checkbox value=1 name=canconfirm_[% group.id %] + [% " checked=\"checked\"" IF group.canconfirm %]> + </td> + <td> + <input type=checkbox value=1 name=editbugs_[% group.id %] + [% " checked=\"checked\"" IF group.editbugs %]> + </td> + <td> + [% group.bug_count || 0 FILTER html %] + </td> + </tr> + [% END %] + [% END %] + + </table> + <br> + <input type=submit name="submit" value="submit"> + <br> +</form> + + +<p> +These settings control the relationship of the groups to this +product. +</p> +<p> +If any group has <b>Entry</b> selected, then this product will +restrict [% terms.bug %] entry to only those users who are members of all the +groups with entry selected. +</p> +<p> +If any group has <b>Canedit</b> selected, then this product +will be read-only for any users who are not members of all of +the groups with Canedit selected. ONLY users who are members of +all the canedit groups will be able to edit. This is an additional +restriction that further restricts what can be edited by a user. +</p> +<p> +The following settings control let you choose privileges on a <b>per-product basis</b>. +This is a convenient way to give privileges to some users for some products +only, without having to give them global privileges which would affect all +products: +</p> +<p> +Any group having <b>editcomponents</b> selected allows users who are +in this group to edit all aspects of this product, including components, +milestones and versions. +</p> +<p> +Any group having <b>canconfirm</b> selected allows users who are +in this group to confirm [% terms.bugs %] in this product. +</p> +<p> +Any group having <b>editbugs</b> selected allows users who are +in this group to edit all fields of [% terms.bugs %] in this product. +</p> +<p> +The <b>MemberControl</b> and <b>OtherControl</b> fields +indicate which [% terms.bugs %] will be placed in +this group according to the following definitions. +</p> + +<table border=1> + <tr> + <th> + MemberControl + </th> + <th> + OtherControl + </th> + <th> + Interpretation + </th> + </tr> + <tr> + <td> + NA + </td> + <td> + NA + </td> + <td> + [% terms.Bugs %] in this product are never associated with this group. + </td> + </tr> + <tr> + <td> + Shown + </td> + <td> + NA + </td> + <td> + [% terms.Bugs %] in this product are permitted to be restricted to this + group. Users who are members of this group will be able to place [% terms.bugs %] in + this group. + </td> + </tr> + <tr> + <td> + Shown + </td> + <td> + Shown + </td> + <td> + [% terms.Bugs %] in this product can be placed in this group by anyone + with permission to edit the [% terms.bug %] even if they are not a member + of this group. + </td> + </tr> + <tr> + <td> + Shown + </td> + <td> + Default + </td> + <td> + [% terms.Bugs %] in this product can be placed in this group by anyone + with permission to edit the [% terms.bug %] even if they are not a member + of this group. Non-members place [% terms.bugs %] in this group by default. + </td> + </tr> + <tr> + <td> + Shown + </td> + <td> + Mandatory + </td> + <td> + [% terms.Bugs %] in this product are permitted to be restricted to this + group. Users who are members of this group will be able to place [% terms.bugs %] + in this group. Non-members will be forced to restrict [% terms.bugs %] to + this group when they initially enter [% terms.abug %] in this product. + </td> + </tr> + <tr> + <td> + Default + </td> + <td> + NA + </td> + <td> + [% terms.Bugs %] in this product are permitted to be restricted to this + group and are placed in this group by default. Users who are members of this + group will be able to place [% terms.bugs %] in this group. + </td> + </tr> + <tr> + <td> + Default + </td> + <td> + Default + </td> + <td> + [% terms.Bugs %] in this product are permitted to be restricted to this + group and are placed in this group by default. Users who are members of this group + will be able to place [% terms.bugs %] in this group. Non-members will be + able to restrict [% terms.bugs %] to this group on entry and will do so by default. + </td> + </tr> + <tr> + <td> + Default + </td> + <td> + Mandatory + </td> + <td> + [% terms.Bugs %] in this product are permitted to be restricted to this + group and are placed in this group by default. Users who are members of this group + will be able to place [% terms.bugs %] in this group. Non-members will be forced + to place [% terms.bugs %] in this group on entry. + </td> + </tr> + <tr> + <td> + Mandatory + </td> + <td> + Mandatory + </td> + <td> + [% terms.Bugs %] in this product are required to be restricted to this + group. Users are not given any option. + </td> + </tr> +</table> +<p> +Please note that the above table delineates the only allowable combinations +for the <b>MemberControl</b> and <b>OtherControl</b> field settings. +Attempting to submit a combination not listed there (e.g. Mandatory/NA, +Default/Shown, etc.) will produce an error message. +</p> +[% PROCESS global/footer.html.tmpl %] + diff --git a/template/en/default/admin/products/groupcontrol/updated.html.tmpl b/template/en/default/admin/products/groupcontrol/updated.html.tmpl new file mode 100644 index 0000000..2f59cae --- /dev/null +++ b/template/en/default/admin/products/groupcontrol/updated.html.tmpl @@ -0,0 +1,50 @@ +[%# 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): André Batosti <batosti@async.com.br> + # + #%] + +[%# INTERFACE: + # product: Bugzilla::Product object; the product. + # changes: Hashref with changes made to the product group controls. + #%] + +[% title = BLOCK %] + Update group access controls for [% product.name FILTER html %] +[% END %] + +[% PROCESS global/header.html.tmpl + title = title +%] +<p> +[% IF changes.group_controls.now_na.size %] + [% FOREACH g = changes.group_controls.now_na %] + Removing [% terms.bugs %] from group '[% g.name FILTER html %]' which + no longer applies to this product<p> + [% g.bug_count FILTER html %] [%+ terms.bugs %] removed<p> + [% END %] +[% END %] + +[% IF changes.group_controls.now_mandatory.size %] + [% FOREACH g = changes.group_controls.now_mandatory %] + Adding [% terms.bugs %] to group '[% g.name FILTER html %]' which is + mandatory for this product<p> + [% g.bug_count FILTER html %] [%+ terms.bugs %] added<p> + [% END %] +[% END %] + +Group control updates done<p> + +[% PROCESS admin/products/footer.html.tmpl %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/products/list-classifications.html.tmpl b/template/en/default/admin/products/list-classifications.html.tmpl new file mode 100644 index 0000000..4eddad3 --- /dev/null +++ b/template/en/default/admin/products/list-classifications.html.tmpl @@ -0,0 +1,72 @@ +[%# 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): Gavin Shelley <bugzilla@chimpychompy.org> + #%] + +[%# INTERFACE: + # classifications: array of hashes having the following properties: + # - name: string; The name of the classification + # - description: string; The classification description (html allowed) + # - product_count: number; The number of products in this classification + # + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl + title = "Select Classification" +%] + +[% edit_contentlink = BLOCK %] + editproducts.cgi?classification=%%name%% +[% END %] +[% add_contentlink = BLOCK %] + editproducts.cgi?action=add&classification=%%name%% +[% END %] + +[% columns = [ + { + name => "name" + heading => "Edit products of..." + contentlink => edit_contentlink + }, + { + name => "description" + heading => "Description" + allow_html_content => 1 + }, + { + name => "product_count" + align => "right" + heading => "Product Count" + } + ] +%] + +[% IF user.in_group('editcomponents') %] + [% columns.push({ + heading => "Action..." + content => "Add product" + contentlink => add_contentlink }) + %] +[% END %] + +[% PROCESS admin/table.html.tmpl + columns = columns + data = classifications +%] + +[%# No need for the standard edit products footer, as we have an 'add' + link in the table %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/products/list.html.tmpl b/template/en/default/admin/products/list.html.tmpl new file mode 100644 index 0000000..57d75d8 --- /dev/null +++ b/template/en/default/admin/products/list.html.tmpl @@ -0,0 +1,121 @@ +[%# 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): Gavin Shelley <bugzilla@chimpychompy.org> + #%] + +[%# INTERFACE: + # products: array of Bugzilla::Product objects + # + # classification: Bugzilla::Classification object; If classifications + # are enabled, then this is + # the currently selected classification + # showbugcounts: boolean; true if bug counts should be included in the table + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% IF classification %] + [% classification_url_part = BLOCK %]&classification= + [%- classification.name FILTER url_quote %] + [%- END %] + [% classification_title = BLOCK %] + in classification '[% classification.name FILTER html %]' + [% END %] +[% END %] + +[% PROCESS global/header.html.tmpl + title = "Select product $classification_title" +%] + +[% edit_contentlink = BLOCK %] + editproducts.cgi?action=edit&product=%%name%% +[% END %] +[% delete_contentlink = BLOCK %] + editproducts.cgi?action=del&product=%%name%% +[% END %] +[% bug_count_contentlink = BLOCK %] + buglist.cgi?product=%%name%% +[% END %] + + +[% columns = [ + { + name => "name" + heading => "Edit product..." + contentlink => edit_contentlink + }, + { + name => "description" + heading => "Description" + allow_html_content => 1 + }, + { + name => "is_active" + heading => "Open For New $terms.Bugs" + yesno_field => 1 + }, + { + name => "votesperuser" + heading => "Votes Per User" + align => 'right' + }, + { + name => "maxvotesperbug" + heading => "Maximum Votes Per $terms.Bug" + align => 'right' + }, + { + name => "votestoconfirm" + heading => "Votes To Confirm" + align => 'right' + } ] +%] + +[% IF showbugcounts %] + + [% columns.push({ + name => "bug_count" + heading => "$terms.Bug Count" + align => 'right' + contentlink => bug_count_contentlink + }) + %] + +[% END %] + +[% columns.push({ + heading => "Action" + content => "Delete" + contentlink => delete_contentlink + }) +%] + +[% Hook.process('before_table') %] + +[% PROCESS admin/table.html.tmpl + columns = columns + data = products +%] + +[% IF !showbugcounts %] + + <p><a href="editproducts.cgi?showbugcounts=1[% classification_url_part %]"> + Redisplay table with [% terms.bug %] counts (slower)</a></p> + +[% END %] + +[% PROCESS admin/products/footer.html.tmpl + no_edit_other_products_link = 1 + %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/products/updated.html.tmpl b/template/en/default/admin/products/updated.html.tmpl new file mode 100644 index 0000000..c6e8710 --- /dev/null +++ b/template/en/default/admin/products/updated.html.tmpl @@ -0,0 +1,185 @@ +[%# 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): Gavin Shelley <bugzilla@chimpychompy.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] + +[%# INTERFACE: + # product : Bugzilla::Product Object; new product. + # classification: Bugzilla::Classification Object; The product classification (may be empty or missing) + # changes: hashref with all changes made to the product. Each key is an edited field, + # and its value is an arrayref of the form [old values, new values]. + #%] + +[% IF classification %] + [% classification_text = BLOCK %] + of classification '[% classification.name FILTER html %]' + [% END %] +[% END %] + +[% title = BLOCK %]Updating Product '[% product.name FILTER html %]' + [% classification_text FILTER none %][% END %] +[% PROCESS global/header.html.tmpl + title = title + style_urls = ['skins/standard/admin.css'] +%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% IF changes.name.defined %] + <p> + Updated product name from '[% changes.name.0 FILTER html %]' to + '<a href="editproducts.cgi?action=edit&product= + [%- product.name FILTER url_quote %]">[% product.name FILTER html %]</a>'. + </p> +[% END %] + + +[% IF changes.description.defined %] + <p> + Updated description to: + </p> + <p style="margin: 1em 3em 1em 3em">[% product.description FILTER html_light %]</p> +[% END %] + +[% IF changes.isactive.defined %] + <p> + Product is now + [% IF product.is_active %] + open for + [% ELSE %] + closed to + [% END %] + new [% terms.bugs %]. + </p> +[% END %] + +[% IF changes.defaultmilestone.defined %] + <p> + Updated default milestone from '[% changes.defaultmilestone.0 FILTER html %]' to + '[% product.default_milestone FILTER html %]'. + </p> +[% END %] + +[% IF changes.votesperuser.defined %] + <p> + Updated votes per user from + [%+ changes.votesperuser.0 FILTER html %] to + [%+ product.votes_per_user FILTER html %]. + </p> + [% checkvotes = 1 %] +[% END %] + +[% IF changes.maxvotesperbug.defined %] + <p> + Updated maximum votes per [% terms.bug %] from + [%+ changes.maxvotesperbug.0 FILTER html %] to + [%+ product.max_votes_per_bug FILTER html %]. + </p> + [% checkvotes = 1 %] +[% END %] + +[% IF changes.votestoconfirm.defined %] + <p> + Updated number of votes needed to confirm a [% terms.bug %] from + [%+ changes.votestoconfirm.0 FILTER html %] to + [%+ product.votes_to_confirm FILTER html %]. + </p> + [% checkvotes = 1 %] +[% END %] + +[% IF changes.allows_unconfirmed.defined %] + <p> + [% IF product.allows_unconfirmed %] + The product now allows the + [%+ display_value('bug_status', 'UNCONFIRMED') FILTER html %] status. + [% ELSE %] + The product no longer allows the + [%+ display_value('bug_status', 'UNCONFIRMED') FILTER html %] status. + Note that any + <a href="buglist.cgi?product= + [%- product.name FILTER url_quote %]&bug_status=UNCONFIRMED"> + [%- terms.bugs %] that currently have the + [%+ display_value('bug_status', 'UNCONFIRMED') FILTER html %] status</a> + will remain in that status until they are edited. + [% END %] + </p> +[% END %] + +[% IF !changes.keys.size %] + <p>Nothing changed for product '[% product.name FILTER html %]'.</p> +[% END %] + +[%# Note that this display of changed votes and/or confirmed bugs is + not very scalable. We could have a _lot_, and we just list them all. + One day we should limit this perhaps, or have a more scalable display %] + + +[% IF checkvotes %] + <hr> + + <p>Checking existing votes in this product for anybody who now + has too many votes for [% terms.abug %]...<br> + [% IF changes.too_many_votes.size %] + [% FOREACH detail = changes.too_many_votes %] + →removed votes for [% terms.bug %] <a href="show_bug.cgi?id= + [%- detail.id FILTER url_quote %]"> + [%- detail.id FILTER html %]</a> from [% detail.name FILTER html %]<br> + [% END %] + [% ELSE %] + →there were none. + [% END %] + </p> + + <p>Checking existing votes in this product for anybody + who now has too many total votes...<br> + [% IF changes.too_many_total_votes.size %] + [% FOREACH detail = changes.too_many_total_votes %] + →removed votes for [% terms.bug %] <a href="show_bug.cgi?id= + [%- detail.id FILTER url_quote %]"> + [%- detail.id FILTER html %]</a> from [% detail.name FILTER html %]<br> + [% END %] + [% ELSE %] + →there were none. + [% END %] + </p> + + <p>Checking unconfirmed [% terms.bugs %] in this product for any which now have + sufficient votes...<br> + [% IF changes.confirmed_bugs.size %] + [% FOREACH id = changes.confirmed_bugs %] + + [%# This is INCLUDED instead of PROCESSED to avoid variables getting + overwritten, which happens otherwise %] + [% INCLUDE bug/process/results.html.tmpl + type = 'votes' + header_done = 1 + sent_bugmail = changes.confirmed_bugs_sent_bugmail.$id + id = id + %] + [% END %] + [% ELSE %] + →there were none. + [% END %] + </p> + +[% END %] + +[% PROCESS admin/products/footer.html.tmpl %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/sanitycheck/list.html.tmpl b/template/en/default/admin/sanitycheck/list.html.tmpl new file mode 100644 index 0000000..4642972 --- /dev/null +++ b/template/en/default/admin/sanitycheck/list.html.tmpl @@ -0,0 +1,37 @@ +[%# 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 Frédéric Buclin. + # + # Contributor(s): Frédéric Buclin <LpSolit@gmail.com> + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl title = "Sanity Check" + style_urls = ['skins/standard/admin.css'] %] + +<div> + <p> + [% terms.Bugzilla %] is checking the referential integrity of your database. + This may take several minutes to complete. + </p> + + <p> + Errors, if any, will be <span class="alert">emphasized like this</span>. + Depending on the errors found, some links will be displayed allowing you + to easily fix them. Fixing these errors will automatically run this script + again (so be aware that it may take an even longer time than the first run). + </p> +</div> + +<hr> diff --git a/template/en/default/admin/sanitycheck/messages.html.tmpl b/template/en/default/admin/sanitycheck/messages.html.tmpl new file mode 100644 index 0000000..c3d5daa --- /dev/null +++ b/template/en/default/admin/sanitycheck/messages.html.tmpl @@ -0,0 +1,352 @@ +[%# 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 Frédéric Buclin. + # + # Contributor(s): Frédéric Buclin <LpSolit@gmail.com> + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% san_message = BLOCK %] + [% IF san_tag == "checks_start" %] + OK, now running sanity checks. + + [% ELSIF san_tag == "checks_completed" %] + Sanity check completed. + + [% ELSIF san_tag == "attachment_reference_deletion_start" %] + OK, now removing all references to deleted attachments. + + [% ELSIF san_tag == "attachment_reference_deletion_end" %] + All references to deleted attachments have been removed. + + [% ELSIF san_tag == "bug_check_alert" %] + [% errortext FILTER html %]: [% INCLUDE bug_list badbugs = badbugs %] + + [% ELSIF san_tag == "bug_check_repair" %] + <a href="sanitycheck.cgi?[% param FILTER url_quote %]=1">[% text FILTER html %]</a>. + + [% ELSIF san_tag == "bug_check_creation_date" %] + Checking for [% terms.bugs %] with no creation date (which makes them invisible). + + [% ELSIF san_tag == "bug_check_creation_date_error_text" %] + [% terms.Bugs %] with no creation date + + [% ELSIF san_tag == "bug_check_creation_date_repair_text" %] + Repair missing creation date for these [% terms.bugs %] + + [% ELSIF san_tag == "bug_check_bugs_fulltext" %] + Checking for [% terms.bugs %] with no entry for full text searching. + + [% ELSIF san_tag == "bug_check_bugs_fulltext_error_text" %] + [% terms.Bugs %] with no entry for full text searching + + [% ELSIF san_tag == "bug_check_bugs_fulltext_repair_text" %] + Repair missing full text search entries for these [% terms.bugs %] + + [% ELSIF san_tag == "bug_check_res_dupl" %] + Checking resolution/duplicates + + [% ELSIF san_tag == "bug_check_res_dupl_error_text" %] + [% terms.Bugs %] found on duplicates table that are not marked duplicate + + [% ELSIF san_tag == "bug_check_res_dupl_error_text2" %] + [% terms.Bugs %] found marked resolved duplicate and not on duplicates table + + [% ELSIF san_tag == "bug_check_status_res" %] + Checking statuses/resolutions + + [% ELSIF san_tag == "bug_check_status_res_error_text" %] + [% terms.Bugs %] with open status and a resolution + + [% ELSIF san_tag == "bug_check_status_res_error_text2" %] + [% terms.Bugs %] with non-open status and no resolution + + [% ELSIF san_tag == "bug_check_status_everconfirmed" %] + Checking statuses/everconfirmed + + [% ELSIF san_tag == "bug_check_status_everconfirmed_error_text" %] + [% terms.Bugs %] that are UNCONFIRMED but have everconfirmed set + + [% ELSIF san_tag == "bug_check_status_everconfirmed_error_text2" %] + [% terms.Bugs %] with confirmed status but don't have everconfirmed set + + [% ELSIF san_tag == "bug_check_votes_everconfirmed" %] + Checking votes/everconfirmed + + [% ELSIF san_tag == "bug_check_votes_everconfirmed_error_text" %] + [% terms.Bugs %] that have enough votes to be confirmed but haven't been + + [% ELSIF san_tag == "bug_check_control_values" %] + Checking for bad values in group_control_map + + [% ELSIF san_tag == "bug_check_control_values_alert" %] + Found [% entries FILTER html %] bad group_control_map entries + + [% ELSIF san_tag == "bug_check_control_values_violation" %] + Checking for [% terms.bugs %] with groups violating their product's group controls + + [% ELSIF san_tag == "bug_check_control_values_error_text" %] + Have groups not permitted for their products + + [% ELSIF san_tag == "bug_check_control_values_repair_text" %] + Permit the missing groups for the affected products + (set member control to <code>SHOWN</code>) + + [% ELSIF san_tag == "bug_check_control_values_error_text2" %] + Are missing groups required for their products + + [% ELSIF san_tag == "bug_creation_date_start" %] + OK, now fixing missing [% terms.bug %] creation dates. + + [% ELSIF san_tag == "bug_creation_date_fixed" %] + [% bug_count FILTER html %] [%+ terms.bugs %] have been fixed. + + [% ELSIF san_tag == "bugs_fulltext_start" %] + OK, now fixing [% terms.bug %] entries for full text searching. + + [% ELSIF san_tag == "bugs_fulltext_fixed" %] + [% bug_count FILTER html %] [%+ terms.bugs %] have been fixed. + + [% ELSIF san_tag == "bug_reference_deletion_start" %] + OK, now removing all references to deleted [% terms.bugs %]. + + [% ELSIF san_tag == "bug_reference_deletion_end" %] + All references to deleted [% terms.bugs %] have been removed. + + [% ELSIF san_tag == "cross_check_to" %] + Checking references to [% table FILTER html %].[% field FILTER html %]... + + [% ELSIF san_tag == "cross_check_from" %] + ... from [% table FILTER html %].[% field FILTER html %]. + + [% ELSIF san_tag == "cross_check_alert" %] + Bad value '[% value FILTER html %]' found in + [%+ table FILTER html %].[% field FILTER html %] + [% IF keyname %] + [% IF keyname == "bug_id" %] + ([% PROCESS bug_link bug_id = key %]) + [% ELSE %] + ([% keyname FILTER html %] == '[% key FILTER html %]') + [% END %] + [% END %] + + [% ELSIF san_tag == "cross_check_attachment_has_references" %] + <a href="sanitycheck.cgi?remove_invalid_attach_references=1">Remove + invalid references to non existent attachments.</a> + + [% ELSIF san_tag == "cross_check_bug_has_references" %] + <a href="sanitycheck.cgi?remove_invalid_bug_references=1">Remove + invalid references to non existent [% terms.bugs %].</a> + + [% ELSIF san_tag == "double_cross_check_to" %] + Checking references to [% table FILTER html %].[% field1 FILTER html %] / + [%+ table FILTER html %].[% field2 FILTER html %]... + + [% ELSIF san_tag == "double_cross_check_from" %] + ... from [% table FILTER html %].[% field1 FILTER html %] / + [%+ table FILTER html %].[% field2 FILTER html %]. + + [% ELSIF san_tag == "double_cross_check_alert" %] + Bad values '[% value1 FILTER html %]', '[% value2 FILTER html %]' found + in [% table FILTER html %].[% field1 FILTER html %] / + [%+ table FILTER html %].[% field2 FILTER html %]. + [% IF keyname %] + [% IF keyname == "bug_id" %] + ([% PROCESS bug_link bug_id = key %]) + [% ELSE %] + ([% keyname FILTER html %] == '[% key FILTER html %]') + [% END %] + [% END %] + + [% ELSIF san_tag == "everconfirmed_start" %] + OK, now fixing everconfirmed. + + [% ELSIF san_tag == "everconfirmed_end" %] + everconfirmed fixed. + + [% ELSIF san_tag == "flag_check_start" %] + Checking for flags being in the wrong product/component. + + [% ELSIF san_tag == "flag_deletion_start" %] + OK, now deleting invalid flags. + + [% ELSIF san_tag == "flag_deletion_end" %] + Invalid flags deleted. + + [% ELSIF san_tag == "flag_alert" %] + Invalid flag [% flag_id FILTER html %] for + [% IF attach_id %] + attachment [% attach_id FILTER html %] in + [% END %] + [%+ PROCESS bug_link bug_id = bug_id %]. + + [% ELSIF san_tag == "flag_fix" %] + <a href="sanitycheck.cgi?remove_invalid_flags=1">Click + here to delete invalid flags</a> + + [% ELSIF san_tag == "group_control_map_entries_creation" %] + OK, now creating <code>SHOWN</code> member control entries + for product/group combinations lacking one. + + [% ELSIF san_tag == "group_control_map_entries_update" %] + Updating <code>NA/<em>xxx</em></code> group control setting + for group <em>[% group_name FILTER html %]</em> to + <code>SHOWN/<em>xxx</em></code> in product + <em>[% product_name FILTER html %]</em>. + + [% ELSIF san_tag == "group_control_map_entries_generation" %] + Generating <code>SHOWN/NA</code> group control setting + for group <em>[% group_name FILTER html %]</em> in product + <em>[% product_name FILTER html %]</em>. + + [% ELSIF san_tag == "group_control_map_entries_repaired" %] + Repaired [% counter FILTER html %] defective group control settings. + + [% ELSIF san_tag == "keyword_check_start" %] + Checking keywords table. + + [% ELSIF san_tag == "keyword_check_alert" %] + Duplicate entry in keyworddefs for id [% id FILTER html %]. + + [% ELSIF san_tag == "keyword_check_invalid_name" %] + Bogus name in keyworddefs for id [% id FILTER html %]. + + [% ELSIF san_tag == "keyword_check_invalid_id" %] + Bogus keywordids [% id FILTER html %] found in keywords table. + + [% ELSIF san_tag == "keyword_check_duplicated_ids" %] + Duplicate keyword IDs found in [% PROCESS bug_link bug_id = id %]. + + [% ELSIF san_tag == "keyword_cache_start" %] + Checking cached keywords. + + [% ELSIF san_tag == "keyword_cache_alert" %] + [% badbugs.size FILTER none %] [%+ terms.bugs %] found with + incorrect keyword cache: [% INCLUDE bug_list badbugs = badbugs %] + + [% ELSIF san_tag == "keyword_cache_fixing" %] + OK, now fixing keyword cache. + + [% ELSIF san_tag == "keyword_cache_fixed" %] + Keyword cache fixed. + + [% ELSIF san_tag == "keyword_cache_rebuild" %] + <a href="sanitycheck.cgi?rebuildkeywordcache=1">Click here to + rebuild the keyword cache</a>. + + [% ELSIF san_tag == "profile_login_start" %] + Checking profile logins. + + [% ELSIF san_tag == "profile_login_alert" %] + Bad profile email address, id=[% id FILTER html %], + <[% email FILTER html %]>. + + [% ELSIF san_tag == "repair_bugs" %] + Repair these [% terms.bugs %]. + + [% ELSIF san_tag == "send_bugmail_start" %] + OK, now attempting to send unsent mail. + + [% ELSIF san_tag == "send_bugmail_status" %] + [% bug_count FILTER html %] [%+ terms.bugs %] found with + possibly unsent mail. + + [% ELSIF san_tag == "send_bugmail_end" %] + Unsent mail has been sent. + + [% ELSIF san_tag == "unsent_bugmail_check" %] + Checking for unsent mail + + [% ELSIF san_tag == "unsent_bugmail_alert" %] + [% terms.Bugs %] that have changes but no mail sent for at least + half an hour: [% INCLUDE bug_list badbugs = badbugs %] + + [% ELSIF san_tag == "unsent_bugmail_fix" %] + <a href="sanitycheck.cgi?rescanallBugMail=1">Send these mails</a>. + + [% ELSIF san_tag == "vote_cache_rebuild_start" %] + OK, now rebuilding vote cache. + + [% ELSIF san_tag == "vote_cache_rebuild_end" %] + Vote cache has been rebuilt. + + [% ELSIF san_tag == "vote_cache_rebuild_fix" %] + <a href="sanitycheck.cgi?rebuildvotecache=1">Click here to + rebuild the vote cache</a> + + [% ELSIF san_tag == "vote_cache_alert" %] + Bad vote cache for [% PROCESS bug_link bug_id = id %] + + [% ELSIF san_tag == "vote_count_start" %] + Checking cached vote counts. + + [% ELSIF san_tag == "vote_count_alert" %] + Bad vote sum for [% terms.bug %] [%+ id FILTER html %]. + + [% ELSIF san_tag == "whines_obsolete_target_deletion_start" %] + OK, now removing non-existent users/groups from whines. + + [% ELSIF san_tag == "whines_obsolete_target_deletion_end" %] + Non-existent users/groups have been removed from whines. + + [% ELSIF san_tag == "whines_obsolete_target_start" %] + Checking for whines with non-existent users/groups. + + [% ELSIF san_tag == "whines_obsolete_target_alert" %] + [% FOREACH schedule = schedules %] + Non-existent [% (type == constants.MAILTO_USER) ? "user" : "group" FILTER html %] + [%+ schedule.1 FILTER html %] for whine schedule [% schedule.0 FILTER html %]<br> + [% END %] + + [% ELSIF san_tag == "whines_obsolete_target_fix" %] + <a href="sanitycheck.cgi?remove_old_whine_targets=1">Click here to + remove old users/groups</a> + + [% ELSE %] + [% message = Hook.process("statuses") %] + + [% IF message %] + [% message FILTER none %] + [% ELSE %] + The status message string <code>[% san_tag FILTER html %]</code> + was not found. Please send email to [% Param("maintainer") %] describing + the steps taken to obtain this message. + [% END %] + + [% END %] +[% END %] + +[% USE Bugzilla %] +[% IF Bugzilla.usage_mode == constants.USAGE_MODE_CMDLINE %] + [% san_message FILTER none %] +[% ELSE %] + [%# Avoid the txt filter in message.txt.tmpl. %] + [% san_message FILTER html %] +[% END %] + +[% BLOCK bug_list %] + [% FOREACH bug_id = badbugs %] + [%# Do not use FILTER bug_link() here, because bug_link() calls get_text() + # which itself calls this template again, generating a recursion error. + # I doubt having a tooltip with the bug status and summary is so + # important here anyway, as you can click the "(as buglist)" link. %] + <a href="show_bug.cgi?id=[% bug_id FILTER url_quote %]">[% bug_id FILTER html %]</a> + [% ", " IF !loop.last %] + [% END %] + (<a href="buglist.cgi?bug_id=[% badbugs.join(",") FILTER url_quote %]">as [% terms.bug %] list</a>). +[% END %] + +[% BLOCK bug_link %] + <a href="show_bug.cgi?id=[% bug_id FILTER url_quote %]">[% terms.bug %] [%+ bug_id FILTER html %]</a> +[% END %] diff --git a/template/en/default/admin/settings/edit.html.tmpl b/template/en/default/admin/settings/edit.html.tmpl new file mode 100644 index 0000000..7f95f88 --- /dev/null +++ b/template/en/default/admin/settings/edit.html.tmpl @@ -0,0 +1,101 @@ +[%# 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): Shane H. W. Travis <travis@sedsystems.ca> + # + #%] + +[%# INTERFACE: + # settings: a hash of hashes, keyed by setting name. + # Each hash contains: + # is_enabled - boolean + # default_value - string (global default for this setting) + # value - string (user-defined preference) + # is_default - boolean (true if user has no preference) + #%] + +[% PROCESS global/header.html.tmpl + title = "Default Preferences" + %] + +[% PROCESS "global/setting-descs.none.tmpl" %] + +<p> +This lets you edit the default preferences values. +</p> +<p> +The Default Value displayed for each preference will apply to all users who +do not choose their own value, and to anyone who is not logged in. +</p> +<p> +The 'Enabled' checkbox controls whether or not this preference is available +to users.<br> +If it is checked, users will see this preference on their User Preferences page, +and will be allowed to choose their own value if they desire.<br> +If it is not checked, this preference will not appear on the User Preference +page, and the Default Value will automatically apply to everyone. +</p> +<hr> + +[% IF settings.size %] + <form name="adminsettingform" method="post" action="editsettings.cgi"> + <table border="1" cellpadding="4"> + <tr> + <th>Preference Text</th> + <th>Default Value</th> + <th>Enabled</th> + </tr> + + [% FOREACH name = settings.keys %] + [% checkbox_name = name _ '-enabled' %] + <tr> + <td align="right"> + [% setting_descs.$name OR name FILTER html %] + </td> + <td> + <select name="[% name FILTER html %]" id="[% name FILTER html %]"> + [% FOREACH x = settings.${name}.legal_values %] + <option value="[% x FILTER html %]" + [% " selected=\"selected\"" IF x == settings.${name}.default_value %]> + [% setting_descs.${x} OR x FILTER html %] + </option> + [% END %] + </select> + </td> + <td align="center"> + <input type="checkbox" + name="[% checkbox_name FILTER html %]" + id="[% checkbox_name FILTER html %]" + [% " checked=\"checked\"" IF settings.${name}.is_enabled %]> + <br> + </td> + </tr> + [% END %] + </table> + + <input type="hidden" name="action" value="update"> + <input type="hidden" name="token" value="[% token FILTER html %]"> + <table> + <tr> + <td width="150"></td> + <td> + <input type="submit" id="update" value="Submit Changes"> + </td> + </tr> + </table> + + </form> +[% ELSE %] + There are no preferences to edit. +[% END %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/sudo.html.tmpl b/template/en/default/admin/sudo.html.tmpl new file mode 100644 index 0000000..680bcfb --- /dev/null +++ b/template/en/default/admin/sudo.html.tmpl @@ -0,0 +1,105 @@ +[%# 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) 2005 Netscape Communications Corporation. All + # Rights Reserved. + # + # Contributor(s): A. Karl Kornel <karl@kornel.name> + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl + title = "Begin sudo session" + style_urls = ['skins/standard/admin.css'] + doc_section = "useradmin.html#impersonatingusers" + %] + +[% DEFAULT target_login = "" %] + +<p> + The <b>sudo</b> feature of [% terms.Bugzilla %] allows you to impersonate a + user for a short time While an sudo session is in progress, every action you + perform will be taking place as if you had logged in as the user whom will be + impersonating. +</p> + +<p class="areyoureallyreallysure"> + This is a very powerful feature; you should be very careful while using it. + Your actions may be logged more carefully than normal. +</p> + +<form action="relogin.cgi" method="POST"> + <p> + To begin, + [% IF Param('usemenuforusers') %] + select + [% ELSE %] + enter the login of + [% END %] + <label for="target_login">the <u>u</u>ser to impersonate</label>: + [% INCLUDE global/userselect.html.tmpl + id => "target_login" + name => "target_login" + value => target_login_default + accesskey => "u" + size => 30 + %] + </p> + + [% IF !Param('usemenuforusers') %] + <p> + The username must be entered exactly. No matching will be performed. + </p> + [% END %] + + <p> + Next, please take a moment to explain <label for="reason">why you are doing + this:<br> + <input type="text" id="reason" name="reason" size="80" maxlength="200" + value="[% reason_default FILTER html %]"> + </p> + + <p> + The message you enter here will be sent to the impersonated user by email. + You may leave this empty if you wish, but they will still know that you + are impersonating them. + </p> + + [% IF user.authorizer.can_login %] + <p> + Finally, enter <label for="Bugzilla_password">your [% terms.Bugzilla %] + password</label>: + <input type="hidden" name="Bugzilla_login" value=" + [%- user.login FILTER html %]"> + <input type="password" id="Bugzilla_password" name="Bugzilla_password" + maxlength="20" size="20"> + <br> + This is done for two reasons. First of all, it is done to reduce + the chances of someone doing large amounts of damage using your + already-logged-in account. Second, it is there to force you to take the + time to consider if you really need to use this feature. + </p> + [% END %] + + <p> + Click the button to begin the session: + <input type="submit" value="Begin Session"> + <input type="hidden" name="action" value="begin-sudo"> + <input type="hidden" name="token" value="[% token FILTER html %]"> + </p> + +</form> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/table.html.tmpl b/template/en/default/admin/table.html.tmpl new file mode 100644 index 0000000..ce5e985 --- /dev/null +++ b/template/en/default/admin/table.html.tmpl @@ -0,0 +1,194 @@ +[%# 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): Jouni Heikniemi <jouni@heikniemi.net> + # + #%] + +[%# INTERFACE: + # + # columns: + # array of hashes representing the columns in the table. + # Each hash contains data for a single column. Hash keys: + # name: Name of the field in the data param + # heading: The text to print at the header cell + # contentlink: URI to which the content of a data cell shall be linked to. + # Expressions of format %%xxx%% are replaced with value + # with the key xxx in data hash of the current row. + # content: If specified, the content of this variable is used + # instead of the data pulled from the current row. + # NOTE: This value is only partially HTML filtered! + # content_use_field: If defined and true, then each value in the + # column corresponds with a key in the + # field_descs field, and that value from the + # field_descs hash will be used instead of "content." + # See fieldvalues/select-field for an example of use. + # This content WILL be HTML-filtered in this case. + # align: left/center/right. Controls the horizontal alignment of the + # text in the column. + # allow_html_content: if defined, then this column allows some html content + # and so it will be only partially filtered. + # yesno_field: Turn the data from 0/!0 into Yes/No + # + # data: + # array of hashes representing the data for the table. + # Each hash contains data for a single row of data. The + # keys are column names from columns subhashes name field. + # + # overrides: + # Example: + # overrides { # first hash + # column_name_to_be_overwriten => { # second hash + # name_of_row_to_match_against => { # third hash + # value_to_match_against => { # fourth hash + # content => "some contents" + # override_content => 1 + # } + # } + # } + # } + # + # Provides a method for overriding individual table cells. This is a hash + # (1), whose key is the column name, so the column must be named for + # one of it's cells to be overwritten. The hash value is another hash + # (2). The keys of that second hash are the name of the row to match + # against. The second hash then again points to another hash. Within this + # third hash (3), the keys represent values to match against. The item + # contains a fourth hash (4) specifying overridden values. + # + # Each column value mentioned in the 'columns' documentation above + # can be overwritten (apart from name and heading). To override a + # table-cell value 'xxx', specify a new 'xxx' value, and specify a + # 'override_xxx' value as well. See + # admin/milestones/list.html.tmpl for example + # + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[%################### TABLE HEADER ######################%] + +<table id="admin_table" border="1" cellpadding="4" cellspacing="0"> + <tr bgcolor="#6666FF"> + [% FOREACH c = columns %] + [%# Default to align left for headers %] + <th align="[% (c.align || 'left') FILTER html %]"> + [% c.heading FILTER html %] + </th> + [% END %] + </tr> + + +[%################### TABLE CONTENT ######################%] + +[% FOREACH row = data %] + + <tr> + [% FOREACH c = columns %] + + [%# Copy to local variables, as we may update these %] + [% contentlink = c.contentlink + content = c.content + content_use_field = c.content_use_field + align = c.align + class = c.class + allow_html_content = c.allow_html_content + yesno_field = c.yesno_field + %] + + [%# Get any specific "important" overrides for this c.name and row.name ? %] + [% SET important = overrides.${c.name}.name.${row.name} %] + + [% IF important %] + + [% FOREACH key IN important.keys %] + [% SET ${key} = important.${key} %] + [% END %] + + [% ELSE %] + + [%# Are there any specific overrides for this column? %] + [% FOREACH match_field = overrides.${c.name}.keys %] + + [% override = overrides.${c.name}.${match_field}.${row.$match_field} %] + [% NEXT UNLESS override %] + + [% FOREACH key IN override.keys %] + [% SET ${key} = override.${key} %] + [% END %] + + [% LAST %] + + [% END %] + [% END %] + + <td [% IF align %] align="[% align FILTER html %]" [% END %] + [% IF class %] class="[% class FILTER html %]" [% END %]> + + [% IF contentlink %] + [% link_uri = contentlink %] + [% WHILE link_uri.search('%%(.+?)%%')%] + [% FOREACH m = link_uri.match('%%(.+?)%%') %] + [% IF row.$m %] + [% replacement_value = FILTER url_quote; row.$m; END %] + [% ELSE %] + [% replacement_value = "" %] + [% END %] + [% link_uri = link_uri.replace("%%$m%%", replacement_value) %] + [% END %] + [% END %] + <a href="[% link_uri %]"> + [% END %] + + [% IF content_use_field %] + [% colname = row.${c.name} %] + [% field_descs.${colname} FILTER html %] + [% ELSIF content %] + [% content FILTER html_light %] + [% ELSE %] + [% IF yesno_field %] + [% IF row.${c.name} %] + Yes + [% ELSE %] + No + [% END %] + [% ELSE %] + [% IF allow_html_content %] + [% row.${c.name} FILTER html_light %] + [% ELSE %] + [% row.${c.name} FILTER html %] + [% END %] + [% END %] + [% END %] + + [% IF contentlink %] + </a> + [% END %] + + </td> + [% END %] + </tr> +[% END %] + +[% IF data.size == 0 %] + <tr><td colspan="[% columns.size %]" align="center"><i><none></i></td></tr> +[% END %] + + +[%################### TABLE FOOTER ######################%] + +</table> diff --git a/template/en/default/admin/users/confirm-delete.html.tmpl b/template/en/default/admin/users/confirm-delete.html.tmpl new file mode 100644 index 0000000..b61a995 --- /dev/null +++ b/template/en/default/admin/users/confirm-delete.html.tmpl @@ -0,0 +1,486 @@ +[%# 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): Marc Schumann <wurblzap@gmail.com> + #%] + +[%# INTERFACE: + # + # listselectionvalues: selection values to recreate the current user + # list. + # editusers: is viewing user member of editusers? + # otheruser: Bugzilla::User object of the viewed user. + # reporter: number of bugs reported by the user + # assignee_or_qa: number of bugs the user is either the assignee + # or the QA contact + # bugs_activity: number of bugs the viewed user has activity + # entries on + # cc number of bugs the viewed user is cc list member + # of + # flags.requestee: number of flags the viewed user is being asked for + # flags.setter: number of flags the viewed user has set + # longdescs: number of bug comments the viewed user has written + # namedqueries: number of named queries the user has created + # namedquery_group_map: number of named queries the user has shared + # profiles_activity: number of changes made to other users' profiles + # series: number of series the viewed user has created + # votes: number of bugs the viewed user has voted on + # watch.watched: number of users the viewed user is being watched + # by + # watch.watcher: number of users the viewed user is watching + # whine_events: number of whine events the viewed user has created + # whine_schedules: number of whine schedules the viewed user has + # created + #%] + +[% title = BLOCK %]Confirm deletion of user [% otheruser.login FILTER html %][% END %] + +[% PROCESS global/header.html.tmpl + title = title + style_urls = ['skins/standard/admin.css', + 'skins/standard/editusers.css'] + doc_section = "useradmin.html#user-account-deletion" +%] + +[% PROCESS admin/users/listselectvars.html.tmpl + listselectionvalues = listselectionvalues +%] + +<table class="main"> + <tr> + <th>Login name:</th> + <td>[% otheruser.login FILTER html %]</td> + </tr> + <tr> + <th>Real name:</th> + <td>[% otheruser.name FILTER html %]</td> + </tr> + <tr> + <th>Group set:</th> + <td> + [% IF otheruser.groups.size %] + <ul> + [% FOREACH group = otheruser.groups %] + <li>[% group.name FILTER html %]</li> + [% END %] + </ul> + [% ELSE %] + None + [% END %] + </td> + </tr> + [% IF otheruser.product_responsibilities.size %] + <tr> + <th>Product responsibilities:</th> + <td> + [% PROCESS admin/users/responsibilities.html.tmpl otheruser = otheruser %] + </td> + </tr> + [% END %] +</table> + +[% IF otheruser.product_responsibilities.size %] + <p> + You can't delete this user at this time because + [%+ otheruser.login FILTER html %] has got responsibilities for at least + one product. + </p> + <p> + [% IF user.in_group("editcomponents", component.product_id) %] + Change this by clicking the product editing links above, + [% ELSE %] + For now, you can + [% END %] +[% ELSE %] + [% accept_deletion = 1 %] + + [% IF attachments || reporter || bugs_activity || flags.setter || longdescs || profiles_activity %] + <div class="criticalmessages"> + <p>The following deletions are <b>unsafe</b> and would generate referential + integrity inconsistencies!</p> + + <ul> + [% IF attachments %] + <li> + [% otheruser.login FILTER html %] + <a href="buglist.cgi?field0-0-0=attachments.submitter&type0-0-0=equals&value0-0-0= + [%- otheruser.login FILTER url_quote %]">has submitted + [% IF attachments == 1 %] + one attachment + [% ELSE %] + [%+ attachments %] attachments + [% END %]</a>. + If you delete the user account, the database records will be + inconsistent, resulting in + [% IF attachments == 1 %] + this attachment + [% ELSE %] + these attachments + [% END %] + not appearing in [% terms.bugs %] any more. + </li> + [% END %] + [% IF reporter %] + <li> + [% otheruser.login FILTER html %] + <a href="buglist.cgi?emailreporter1=1&emailtype1=exact&email1= + [%- otheruser.login FILTER url_quote %]">has reported + [% IF reporter == 1 %] + one [% terms.bug %] + [% ELSE %] + [%+ reporter %] [%+ terms.bugs %] + [% END %]</a>. + If you delete the user account, the database records will be + inconsistent, resulting in + [% IF reporter == 1 %] + this [% terms.bug %] + [% ELSE %] + these [% terms.bugs %] + [% END %] + not appearing in [% terms.bug %] lists any more. + </li> + [% END %] + [% IF bugs_activity %] + <li> + [% otheruser.login FILTER html %] has made + [% IF bugs_activity == 1 %] + a change on [% terms.abug %] + [% ELSE %] + changes on [% terms.bugs %] + [% END %]. + If you delete the user account, the [% terms.bugs %] activity table in + the database will be inconsistent, resulting in + [% IF bugs_activity == 1 %] + this change + [% ELSE %] + these changes + [% END %] + not showing up in [% terms.bug %] activity logs any more. + </li> + [% END %] + [% IF flags.setter %] + <li> + [% otheruser.login FILTER html %] has + <a href="buglist.cgi?field0-0-0=setters.login_name&type0-0-0=equals&value0-0-0= + [%- otheruser.login FILTER url_quote %]">set + or requested + [% IF flags.setter == 1 %] + a flag + [% ELSE %] + [%+ flags.setter %] flags + [% END %]</a>. + If you delete the user account, the flags table in the database + will be inconsistent, resulting in + [% IF flags.setter == 1 %] + this flag + [% ELSE %] + these flags + [% END %] + not displaying correctly any more. + </li> + [% END %] + [% IF longdescs %] + <li> + [% otheruser.login FILTER html %] has + <a href="buglist.cgi?emaillongdesc1=1&emailtype1=exact&email1= + [%- otheruser.login FILTER url_quote %]">commented + [% IF longdescs == 1 %] + once on [% terms.abug %] + [% ELSE %] + [%+ longdescs %] times on [% terms.bugs %] + [% END %]</a>. + If you delete the user account, the comments table in the database + will be inconsistent, resulting in + [% IF longdescs == 1 %] + this comment + [% ELSE %] + these comments + [% END %] + not being visible any more. + </li> + [% END %] + [% IF profiles_activity %] + <li> + [% otheruser.login FILTER html %] has made + [% IF bugs_activity == 1 %] + a change on a other user's profile + [% ELSE %] + changes on other users' profiles + [% END %]. + If you delete the user account, the user profiles activity table in + the database will be inconsistent. + </li> + [% END %] + </ul> + </div> + [% accept_deletion = 0 %] + [% END %] + + [% IF assignee_or_qa || cc || component_cc || email_setting || flags.requestee || + namedqueries || profile_setting || quips || series || votes || watch.watched || + watch.watcher || whine_events || whine_schedules %] + <div class="warningmessages"> + <p>The following deletions are <b>safe</b> and will not generate + referential integrity inconsistencies.</p> + + <ul> + [% IF assignee_or_qa %] + <li> + [% otheruser.login FILTER html %] + <a href="buglist.cgi?emailassigned_to1=1&emailqa_contact1=1&emailtype1=exact&email1= + [%- otheruser.login FILTER url_quote %]">is + the assignee or the QA contact of + [% IF assignee_or_qa == 1 %] + one [% terms.bug %] + [% ELSE %] + [%+ assignee_or_qa %] [%+ terms.bugs %] + [% END %]</a>. + If you delete the user account, these roles will fall back to + the default assignee or default QA contact. + </li> + [% END %] + [% IF cc %] + <li> + [% otheruser.login FILTER html %] + <a href="buglist.cgi?emailcc1=1&emailtype1=exact&email1= + [%- otheruser.login FILTER url_quote %]">is + on the CC list of + [% IF cc == 1 %] + [%+ terms.abug %] + [% ELSE %] + [%+ cc %] [%+ terms.bugs %] + [% END %]</a>. + If you delete the user account, it will be removed from these CC lists. + </li> + [% END %] + [% IF component_cc %] + <li> + [% otheruser.login FILTER html %] is on the default CC list of + [% IF component_cc == 1 %] + one component + [% ELSE %] + [%+ component_cc %] components + [% END %]. + If you delete the user account, it will be removed from these CC lists. + </li> + [% END %] + [% IF email_setting %] + <li> + The user's e-mail settings will be deleted along with the user + account. + </li> + [% END %] + [% IF flags.requestee %] + <li> + [% otheruser.login FILTER html %] has been + <a href="buglist.cgi?field0-0-0=requestees.login_name&type0-0-0=equals&value0-0-0= + [%- otheruser.login FILTER url_quote %]">asked + to set + [% IF flags.requestee == 1 %] + a flag + [% ELSE %] + [% flags.requestee %] flags + [% END %]</a>. + If you delete the user account, + [% IF flags.requestee == 1 %] + this flag + [% ELSE %] + these flags + [% END %] + will change to be unspecifically requested. + </li> + [% END %] + [% IF namedqueries %] + <li> + [% otheruser.login FILTER html %] has + [% IF namedqueries == 1 %] + a [% 'shared' IF namedquery_group_map %] named search + [% ELSE %] + [%+ namedqueries FILTER html %] named searches + [% END %]. + [% IF namedqueries == 1 %] + This named search + [% ELSE %] + These named searches + [% END %] + will be deleted along with the user account. + [% IF namedquery_group_map %] + [% IF namedqueries > 1 %] + Of these, + [% IF namedquery_group_map > 1 %] + [%+ namedquery_group_map FILTER html %] are + [% ELSE %] + one is + [% END %] + shared. + [% END %] + Other users will not be able to use + [% IF namedquery_group_map > 1 %] + these shared named searches + [% ELSE %] + this shared named search + [% END %] + any more. + [% END %] + </li> + [% END %] + [% IF profile_setting %] + <li> + The user's preference settings will be deleted along with the user + account. + </li> + [% END %] + [% IF series %] + <li> + [% otheruser.login FILTER html %] has created + [% IF series == 1 %] + a series + [% ELSE %] + [%+ series %] series + [% END %]. + [% IF series == 1 %] + This series + [% ELSE %] + These series + [% END %] + will be deleted along with the user account. + </li> + [% END %] + [% IF quips %] + <li> + [% otheruser.login FILTER html %] has submitted + [% IF quips == 1 %] + a quip + [% ELSE %] + [%+ quips %] quips + [% END %]. + If you delete the user account, + [% IF quips == 1 %] + this quip + [% ELSE %] + these quips + [% END %] + will have no author anymore, but will remain available. + </li> + [% END %] + [% IF votes %] + <li> + [% otheruser.login FILTER html %] has voted on + [% IF votes == 1 %] + [%+ terms.abug %] + [% ELSE %] + [%+ votes %] [%+ terms.bugs %] + [% END %]. + If you delete the user account, + [% IF votes == 1 %] + this vote + [% ELSE %] + these votes + [% END %] + will be deleted along with the user account. + </li> + [% END %] + [% IF watch.watched || watch.watcher %] + <li> + [% otheruser.login FILTER html %] + [% IF watch.watched %] + is being watched by + [% IF watch.watched == 1 %] + a user + [% ELSE %] + [%+ watch.watched %] users + [% END %] + [% END %] + [% IF watch.watcher %] + [%+ 'and' IF watch.watched %] + watches + [% IF watch.watcher == 1 %] + a user + [% ELSE %] + [%+ watch.watcher %] users + [% END %] + [% END %]. + [% IF watch.watched + watch.watcher == 1 %] + This watching + [% ELSE %] + These watchings + [% END %] + will cease along with the deletion of the user account. + </li> + [% END %] + [% IF whine_events %] + <li> + [% otheruser.login FILTER html %] has scheduled + [% IF whine_events == 1 %] + a whine + [% ELSE %] + [%+ whine_events %] whines + [% END %]. + [% IF whine_events == 1 %] + This whine + [% ELSE %] + These whines + [% END %] + will be deleted along with the user account. + </li> + [% END %] + [% IF whine_schedules %] + <li> + [% otheruser.login FILTER html %] is on the receiving end of + [% IF whine_schedules == 1 %] + a whine + [% ELSE %] + [%+ whine_schedules %] whines + [% END %]. + The corresponding schedules will be deleted along with the user account, + but the whines themselves will be left unaltered. + </li> + [% END %] + </ul> + </div> + + [% IF accept_deletion %] + <p class="areyoureallyreallysure"> + Please be aware of the consequences of this before continuing. + </p> + <p>Do you really want to delete this user account?</p> + + <form method="post" action="editusers.cgi"> + <p> + <input type="submit" id="delete" value="Yes, delete"/> + <input type="hidden" name="action" value="delete" /> + <input type="hidden" name="userid" value="[% otheruser.id %]" /> + <input type="hidden" name="token" value="[% token FILTER html %]"> + [% INCLUDE listselectionhiddenfields %] + </p> + </form> + <p>If you do not want to delete the user account at this time, + [% ELSE %] + <p><b>You cannot delete this user account</b> due to unsafe actions reported above. You can + [% END %] + + [% END %] +[% END %] + + <a href="editusers.cgi?action=edit&userid=[% otheruser.id %] + [% INCLUDE listselectionurlparams %]">edit the user</a>, + go + <a href="editusers.cgi?action=list[% INCLUDE listselectionurlparams %]">back + to the user list</a>, + [% IF editusers %] + <a href="editusers.cgi?action=add[% INCLUDE listselectionurlparams %]">add + a new user</a>, + [% END %] + or <a href="editusers.cgi">find other users</a>. +</p> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/users/create.html.tmpl b/template/en/default/admin/users/create.html.tmpl new file mode 100644 index 0000000..6fd5b67 --- /dev/null +++ b/template/en/default/admin/users/create.html.tmpl @@ -0,0 +1,58 @@ +[%# 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): Marc Schumann <wurblzap@gmail.com> + #%] + +[%# INTERFACE: + # + # listselectionvalues: selection values to recreate the current user list. + # editusers: is viewing user member of editusers? + #%] + +[% PROCESS global/header.html.tmpl + title = "Add user" + style_urls = ['skins/standard/editusers.css'] + onload = "document.forms['f'].login.focus()" + doc_section = "useradmin.html#createnewusers" +%] + +[% PROCESS admin/users/listselectvars.html.tmpl + listselectionvalues = listselectionvalues +%] + +<form name="f" method="post" action="editusers.cgi"> +<table class="main"> + [% PROCESS admin/users/userdata.html.tmpl + editform = 0 + editusers = editusers + otheruser = [] + %] +</table> +<p> + <input type="submit" id="add" value="Add"/> + <input type="hidden" name="action" value="new" /> + <input type="hidden" name="token" value="[% token FILTER html %]"> + [% INCLUDE listselectionhiddenfields %] +</p> +</form> + +<p> + You can also <a href="editusers.cgi">find a user</a> + [% IF listselectionvalues %], + or + <a href="editusers.cgi?action=list[% INCLUDE listselectionurlparams %]">go + back to the user list</a> + [% END %]. +</p> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/users/edit.html.tmpl b/template/en/default/admin/users/edit.html.tmpl new file mode 100644 index 0000000..3efa4b8 --- /dev/null +++ b/template/en/default/admin/users/edit.html.tmpl @@ -0,0 +1,168 @@ +[%# 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): Marc Schumann <wurblzap@gmail.com> + #%] + +[%# INTERFACE: + # + # message: message tag specifying a global/messages.html.tmpl + # message + # listselectionvalues: selection values to recreate the current user list. + # editusers: is viewing user member of editusers? + # otheruser: Bugzilla::User object of viewed user. + # groups: array of group information (name, grant type, + # canbless) for viewed user. + #%] + +[% title = BLOCK %]Edit user [% otheruser.identity FILTER html %][% END %] + +[% PROCESS global/header.html.tmpl + title = title + message = message + style_urls = ['skins/standard/admin.css', 'skins/standard/editusers.css'] + doc_section = "useradmin.html#modifyusers" +%] + +[% PROCESS admin/users/listselectvars.html.tmpl + listselectionvalues = listselectionvalues +%] + +<form method="post" action="editusers.cgi"> +<table class="main"> + [% PROCESS admin/users/userdata.html.tmpl + editform = 1 + editusers = editusers + otheruser = otheruser + %] + [% IF groups.size %] + <tr> + <th>Group access:</th> + <td> + <table class="groups"> + <tr> + [% IF editusers %] + <th colspan="3"> + Can turn these bits on for other users + </th> + [% END %] + </tr> + <tr> + [% IF editusers %] + <td style="text-align: center; font-weight: bold">|</td> + [% END %] + <th colspan="2">User is a member of these groups</th> + </tr> + [% FOREACH group = groups %] + [% perms = permissions.${group.id} %] + <tr class="[% 'in' IF perms.regexpmember || perms.derivedmember %]direct"> + [% IF editusers %] + <td class="checkbox"> + [% '[' IF perms.indirectbless %] + [% %]<input type="checkbox" + name="bless_[% group.id %]" + value="1" + [% ' checked="checked"' IF perms.directbless %] /> + [% ']' IF perms.indirectbless %]</td> + [% END %] + <td class="checkbox"> + [% '[' IF perms.derivedmember %] + [% '*' IF perms.regexpmember %] + [%%]<input type="checkbox" + id="group_[% group.id %]" + name="group_[% group.id %]" + value="1" + [% ' checked="checked"' IF perms.directmember %] /> + [% '*' IF perms.regexpmember %] + [% ']' IF perms.derivedmember %]</td> + <td class="groupname"> + <label for="group_[% group.id %]"> + <strong>[% group.name FILTER html %]:</strong> + [%+ group.description FILTER html_light %] + </label> + </td> + </tr> + [% END %] + </table> + </td> + </tr> + [% END %] + + <tr> + <th>Product responsibilities:</th> + <td> + [% IF otheruser.product_responsibilities.size %] + [% PROCESS admin/users/responsibilities.html.tmpl otheruser = otheruser %] + [% ELSE %] + <em>none</em> + [% END %] + </td> + </tr> +</table> + +<p> + <input type="submit" id="update" value="Save Changes" /> + <input type="hidden" name="userid" value="[% otheruser.id %]" /> + <input type="hidden" name="action" value="update" /> + <input type="hidden" name="token" value="[% token FILTER html %]"> + [% INCLUDE listselectionhiddenfields %] + + or <a href="editusers.cgi?action=activity&userid=[% otheruser.id %]" + title="View Account History for ' + [%- otheruser.login FILTER html %]'">View Account History</a> +</p> +</form> +<p> + User is a member of any groups shown with a check or grey bar. + A grey bar indicates indirect membership, either derived from other + groups (marked with square brackets) or via regular expression + (marked with '*'). +</p> +[% IF editusers %] + <p> + Square brackets around the bless checkbox indicate the ability + to bless users (grant them membership in the group) as a result + of membership in another group. + </p> +[% END %] + +[% IF Param('allowuserdeletion') && editusers %] + <form method="post" action="editusers.cgi"> + <p> + <input type="submit" id="delete" value="Delete User" /> + <input type="hidden" name="action" value="del" /> + <input type="hidden" name="userid" value="[% otheruser.id %]" /> + [% INCLUDE listselectionhiddenfields %] + </p> + </form> +[% END %] + +<p> + You can also + [% IF editusers %] + <a href="editusers.cgi?action=add[% INCLUDE listselectionurlparams %]">add + a new user</a> + [% IF listselectionvalues %], + [% END %] + [% END %] + [% IF listselectionvalues.matchtype != 'exact' %] + go + <a href="editusers.cgi?action=list[% INCLUDE listselectionurlparams %]">back + to the user list</a>, + [% END %] + [% IF editusers OR listselectionvalues %] + or + [% END %] + <a href="editusers.cgi">find other users</a>. +</p> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/users/list.html.tmpl b/template/en/default/admin/users/list.html.tmpl new file mode 100644 index 0000000..cb05e82 --- /dev/null +++ b/template/en/default/admin/users/list.html.tmpl @@ -0,0 +1,115 @@ +[%# 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): Marc Schumann <wurblzap@gmail.com> + #%] + +[%# INTERFACE: + # + # listselectionvalues: selection values to recreate the current user list. + # editusers: is viewing user member of editusers? + # users: list of user information (id, login_name, realname, + # disabledtext). + #%] + +[% PROCESS global/header.html.tmpl + title = "Select user" + style_urls = ['skins/standard/editusers.css'] + doc_section = "useradmin.html" +%] + +[% PROCESS admin/users/listselectvars.html.tmpl + listselectionvalues = listselectionvalues +%] + +[% listselectionurlparams = INCLUDE listselectionurlparams %] + +[% columns = + [{name => 'login_name' + heading => 'Edit user...' + contentlink => 'editusers.cgi?action=edit&userid=%%userid%%' _ + listselectionurlparams + } + {name => 'realname' + heading => 'Real name' + } + {heading => 'Account History' + content => 'View' + contentlink => 'editusers.cgi?action=activity' _ + '&userid=%%userid%%' _ + listselectionurlparams + } + ] +%] + +[% IF Param('allowuserdeletion') && editusers %] + [% columns.push({heading => 'Action' + content => 'Delete' + contentlink => 'editusers.cgi?action=del' _ + '&userid=%%userid%%' _ + listselectionurlparams + } + ) + %] +[% END %] + +[%# Disabled users are crossed out. Missing realnames are noticed in red. %] +[% overrides.login_name = {} %] +[% overrides.realname = {} %] + +[% FOREACH thisuser = users %] + [% IF !thisuser.realname %] + [%# We cannot pass one class now and one class later. %] + [% SET classes = (thisuser.disabledtext ? "bz_inactive missing" : "missing") %] + [% overrides.realname.login_name.${thisuser.login_name} = { + content => "missing" + override_content => 1 + class => "$classes" + override_class => 1 + } + %] + [% ELSIF thisuser.disabledtext %] + [% overrides.realname.login_name.${thisuser.login_name} = { + class => "bz_inactive" + override_class => 1 + } + %] + [% END %] + + [% IF thisuser.disabledtext %] + [% overrides.login_name.login_name.${thisuser.login_name} = { + class => "bz_inactive" + override_class => 1 + } + %] + [% END %] +[% END %] + +<p>[% users.size %] user[% "s" UNLESS users.size == 1 %] found.</p> + +[% PROCESS admin/table.html.tmpl + columns = columns + data = users + overrides = overrides +%] + +<p> + If you do not wish to modify a user account at this time, you can + <a href="editusers.cgi">find other users</a> + [% IF editusers %] + or + <a href="editusers.cgi?action=add[% INCLUDE listselectionurlparams %]">add + a new user</a> + [% END %]. +</p> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/users/listselectvars.html.tmpl b/template/en/default/admin/users/listselectvars.html.tmpl new file mode 100644 index 0000000..a6eae57 --- /dev/null +++ b/template/en/default/admin/users/listselectvars.html.tmpl @@ -0,0 +1,33 @@ +[%# 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): Marc Schumann <wurblzap@gmail.com> + #%] + +[%# INTERFACE: + # + # listselectionvalues: selection values to recreate the current user list. + #%] + +[% BLOCK listselectionurlparams %] + [% FOREACH field = listselectionvalues.keys %]& + [% field FILTER url_quote %]= + [% listselectionvalues.$field FILTER url_quote %] + [% END %] +[% END %] + +[% BLOCK listselectionhiddenfields %] + [% FOREACH field = listselectionvalues.keys %] + <input type="hidden" name="[% field FILTER html %]" + value="[% listselectionvalues.$field FILTER html %]" /> + [% END %] +[% END %] diff --git a/template/en/default/admin/users/responsibilities.html.tmpl b/template/en/default/admin/users/responsibilities.html.tmpl new file mode 100644 index 0000000..bbf121a --- /dev/null +++ b/template/en/default/admin/users/responsibilities.html.tmpl @@ -0,0 +1,61 @@ +[%# 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): Marc Schumann <wurblzap@gmail.com> + # Frédéric Buclin <LpSolit@gmail.com> + #%] + +[% hidden_products = 0 %] +<table id="user_responsibilities" border="0"> + [% FOREACH item = otheruser.product_responsibilities %] + [% IF !user.can_see_product(item.product.name) %] + [% hidden_products = 1 %] + [% NEXT %] + [% END %] + <tbody> + <tr> + <th colspan="3" class="product">Product: [% item.product.name FILTER html %]</th> + </tr> + <tr> + <th>Component</th> + <th>Default Assignee</th> + <th>Default QA Contact</th> + </tr> + [% FOREACH component = item.components %] + <tr> + <td> + [% IF user.in_group("editcomponents", component.product_id) %] + <a href="editcomponents.cgi?action=edit&product= + [% item.product.name FILTER url_quote %]&component= + [% component.name FILTER url_quote %]"> + [% END %] + [% component.name FILTER html %] + [% IF user.in_group("editcomponents", component.product_id) %] + </a> + [% END %] + </td> + [% FOREACH responsibility = ['default_assignee', 'default_qa_contact'] %] + <td class="center"> + [% component.$responsibility.id == otheruser.id ? "X" : " " %] + </td> + [% END %] + </tr> + [% END %] + </tbody> + [% END %] +</table> + +[% IF hidden_products %] + <p class="criticalmessages">The user is involved in at least one product which you cannot + see (and so is not listed above). You have to ask an administrator with enough + privileges to edit this user's roles for these products.</p> +[% END %] diff --git a/template/en/default/admin/users/search.html.tmpl b/template/en/default/admin/users/search.html.tmpl new file mode 100644 index 0000000..82e0afd --- /dev/null +++ b/template/en/default/admin/users/search.html.tmpl @@ -0,0 +1,78 @@ +[%# 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): Marc Schumann <wurblzap@gmail.com> + # David Lawrence <dkl@redhat.com> + #%] + +[%# INTERFACE: + # + # editusers: is viewing user member of editusers? + # restrictablegroups: list of groups visible to the user: + # id: group id + # name: group name + #%] + + +[% PROCESS global/header.html.tmpl + title = "Search users" + style_urls = ['skins/standard/editusers.css'] + onload = "document.forms['f'].matchstr.focus()" + doc_section = "useradmin.html#user-account-search" +%] + +[% PROCESS admin/users/listselectvars.html.tmpl + listselectionvalues = listselectionvalues +%] + +<form name="f" method="get" action="editusers.cgi"> +<input type="hidden" name="action" value="list" /> +<p><label for="matchvalue">List users with</label> +<select id="matchvalue" name="matchvalue"> + <option value="login_name">login name</option> + <option value="realname">real name</option> + <option value="userid">user id</option> +</select> +<label for="matchstr">matching</label> +<input size="32" name="matchstr" id="matchstr" /> +<select name="matchtype"> + <option value="substr" selected="selected">case-insensitive substring</option> + <option value="regexp">case-insensitive regexp</option> + <option value="notregexp">not (case-insensitive regexp)</option> + <option value="exact">exact (find this user)</option> +</select> +<input type="submit" id="search" value="Search" /></p> + +[% IF restrictablegroups.size %] + <p><input type="checkbox" name="grouprestrict" value="1" id="grouprestrict" /> + <label for="grouprestrict">Restrict to users belonging to group</label> + <select name="groupid" + onchange="document.forms['f'].grouprestrict.checked=true"> + [% FOREACH group = restrictablegroups %] + <option value="[% group.id FILTER html %]">[% group.name FILTER html %]</option> + [% END %] + </select></p> +[% END %] +</form> + +[% IF editusers %] + <p> + You can also <a href="editusers.cgi?action=add">add a new user</a> + [%- IF listselectionvalues %], + or + <a href="editusers.cgi?action=list[% INCLUDE listselectionurlparams %]">show + the user list again</a> + [%- END %]. + </p> +[% END %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/users/userdata.html.tmpl b/template/en/default/admin/users/userdata.html.tmpl new file mode 100644 index 0000000..f23aa1b --- /dev/null +++ b/template/en/default/admin/users/userdata.html.tmpl @@ -0,0 +1,98 @@ +[%# 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): Marc Schumann <wurblzap@gmail.com> + #%] + +[%# INTERFACE: + # + # editform: is this an edit form? (It's a create form otherwise) + # editusers: is viewing user member of editusers? + # otheruser: Bugzilla::User object of user to edit + #%] + +<tr> + <th><label for="login">Login name:</label></th> + <td> + [% IF editusers %] + <input size="64" maxlength="255" name="login" + id="login" value="[% otheruser.login FILTER html %]" /> + [% IF editform %] + [% IF !otheruser.in_group('bz_sudo_protect') %] + <br /> + <a href="relogin.cgi?action=prepare-sudo&target_login= + [%- otheruser.login FILTER url_quote %]">Impersonate this user</a> + [% END %] + [% END %] + [% ELSE %] + [% otheruser.login FILTER html %] + [% END %] + </td> +</tr> +<tr> + <th><label for="name">Real name:</label></th> + <td> + [% IF editusers %] + <input size="64" maxlength="255" name="name" + autocomplete="off" + id="name" value="[% otheruser.name FILTER html %]" /> + [% ELSE %] + [% otheruser.name FILTER html %] + [% END %] + </td> +</tr> + +[%# XXX This condition (can_change_password) will cause a problem + # if we ever have a login system that can create accounts through + # createaccount.cgi but can't change passwords. + #%] + +[% IF editusers %] + [% IF user.authorizer.can_change_password %] + <tr> + <th><label for="password">Password:</label></th> + <td> + <input type="password" size="16" maxlength="16" name="password" + autocomplete="off" + id="password" value="" /> + [% IF editform %]<br /> + (Enter new password to change.) + [% END %] + </td> + </tr> + [% END %] + <tr> + <th><label for="disable_mail">[% terms.Bug %]mail Disabled:</label></th> + <td> + <input type="checkbox" name="disable_mail" id="disable_mail" value="1" + [% IF otheruser.email_disabled %] checked="checked" [% END %] /> + (This affects [% terms.bug %]mail and whinemail, not password-reset or other + non-[% terms.bug %]-related emails) + </td> + </tr> + <tr> + <th><label for="disabledtext">Disable text:</label></th> + <td> + [% INCLUDE global/textarea.html.tmpl + name = 'disabledtext' + id = 'disabledtext' + minrows = 2 + maxrows = 10 + defaultrows = 10 + cols = 60 + defaultcontent = otheruser.disabledtext + %]<br> + (If non-empty, then the account will be disabled, and this text should + explain why.) + </td> + </tr> +[% END %] diff --git a/template/en/default/admin/versions/confirm-delete.html.tmpl b/template/en/default/admin/versions/confirm-delete.html.tmpl new file mode 100644 index 0000000..88ffceb --- /dev/null +++ b/template/en/default/admin/versions/confirm-delete.html.tmpl @@ -0,0 +1,101 @@ +[%# 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): Gavin Shelley <bugzilla@chimpychompy.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] + +[%# INTERFACE: + # product: object; Bugzilla::Product object representing the product to + # which the version belongs. + # version: object; Bugzilla::Version object representing the + # version the user wants to delete. + #%] + +[% title = BLOCK %]Delete Version of Product '[% product.name FILTER html %]' + [% END %] + +[% PROCESS global/header.html.tmpl + title = title +%] + +<table border="1" cellpadding="4" cellspacing="0"> +<tr bgcolor="#6666FF"> + <th valign="top" align="left">Field</th> + <th valign="top" align="left">Value</th> +</tr> +<tr> + <td valign="top">Version:</td> + <td valign="top">[% version.name FILTER html %]</td> +</tr> +<tr> + <td valign="top">Version of Product:</td> + <td valign="top">[% product.name FILTER html %]</td> +</tr> +<tr> + <td valign="top">[% terms.Bugs %]:</td> + <td valign="top"> +[% IF version.bug_count %] + <a title="List of [% terms.bugs %] targetted at version ' + [%- version.name FILTER html %]'" + href="buglist.cgi?version=[% version.name FILTER url_quote %]&product= + [%- product.name FILTER url_quote %]"> + [%- version.bug_count FILTER none %]</a> +[% ELSE %] + None +[% END %] + </td> +</tr> +</table> + +<h2>Confirmation</h2> + +[% IF version.bug_count %] + <p> + Sorry, there + [% IF version.bug_count > 1 %] + are [% version.bug_count FILTER none %] [%+ terms.bugs %] + [% ELSE %] + is [% version.bug_count FILTER none %] [%+ terms.bug %] + [% END %] + + outstanding for this version. You must move + + [% IF version.bug_count > 1 %] + those [% terms.bugs %] + [% ELSE %] + that [% terms.bug %] + [% END %] + to another version before you can delete this one. + </p> +[% ELSE %] + + <p>Do you really want to delete this version?</p> + + <form method="post" action="editversions.cgi"> + <input type="submit" id="delete" value="Yes, delete"> + <input type="hidden" name="action" value="delete"> + <input type="hidden" name="product" value="[% product.name FILTER html %]"> + <input type="hidden" name="version" value="[% version.name FILTER html %]"> + <input type="hidden" name="token" value="[% token FILTER html %]"> + </form> + +[% END %] + +[% PROCESS admin/versions/footer.html.tmpl %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/versions/create.html.tmpl b/template/en/default/admin/versions/create.html.tmpl new file mode 100644 index 0000000..8b4ba64 --- /dev/null +++ b/template/en/default/admin/versions/create.html.tmpl @@ -0,0 +1,52 @@ +[%# 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): Gavin Shelley <bugzilla@chimpychompy.org> + #%] + +[%# INTERFACE: + # product: object; Bugzilla::Product object representing the product to + # which the version is being created for + #%] + +[% title = BLOCK %]Add Version to Product '[% product.name FILTER html %]'[% END %] +[% subheader = BLOCK %]This page allows you to add a new version to product + '[% product.name FILTER html %]'.[% END %] +[% PROCESS global/header.html.tmpl + title = title + subheader = subheader +%] + +<form method="post" action="editversions.cgi"> + <table border="0" cellpadding="4" cellspacing="0"> + <tr> + <th align="right"><label for="version">Version:</label></th> + <td><input id="version" size="64" maxlength="64" name="version" + value=""></td> + </tr> + </table> + <input type="submit" id="create" value="Add"> + <input type="hidden" name="action" value="new"> + <input type="hidden" name='product' value="[% product.name FILTER html %]"> + <input type="hidden" name="token" value="[% token FILTER html %]"> +</form> + +[% PROCESS admin/versions/footer.html.tmpl + no_add_version_link = 1 + %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/versions/edit.html.tmpl b/template/en/default/admin/versions/edit.html.tmpl new file mode 100644 index 0000000..2a7c784 --- /dev/null +++ b/template/en/default/admin/versions/edit.html.tmpl @@ -0,0 +1,57 @@ +[%# 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): Gavin Shelley <bugzilla@chimpychompy.org> + #%] + +[%# INTERFACE: + # product: object; Bugzilla::Product object representing the product to + # which the version belongs. + # version: object; Bugzilla::Version object representing the + # version the user wants to edit. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% title = BLOCK %]Edit Version '[% version.name FILTER html %]' of product ' + [%- product.name FILTER html %]'[% END %] +[% PROCESS global/header.html.tmpl + title = title +%] + +<form method="post" action="editversions.cgi"> + <table border="0" cellpadding="4" cellspacing="0"> + + <tr> + <th valign="top"><label for="version">Version:</label></th> + <td><input id="version" size="64" maxlength="64" name="version" value=" + [%- version.name FILTER html %]"></td> + </tr> + + </table> + + <input type="hidden" name="versionold" value="[% version.name FILTER html %]"> + <input type="hidden" name="action" value="update"> + <input type="hidden" name="product" value="[% product.name FILTER html %]"> + <input type="hidden" name="token" value="[% token FILTER html %]"> + <input type="submit" id="update" value="Save Changes"> +</form> + +[% PROCESS admin/versions/footer.html.tmpl + no_edit_version_link = 1 %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/versions/footer.html.tmpl b/template/en/default/admin/versions/footer.html.tmpl new file mode 100644 index 0000000..8d96a12 --- /dev/null +++ b/template/en/default/admin/versions/footer.html.tmpl @@ -0,0 +1,65 @@ +[%# 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): Gavin Shelley <bugzilla@chimpychompy.org> + #%] + +[%# INTERFACE: + # product: object; Bugzilla::Product object representing the product to + # which the version belongs. + # version: object; Bugzilla::Version object representing the version + # + # no_XXX_link: boolean; if defined, then don't show the corresponding + # link. Supported parameters are: + # + # no_edit_version_link + # no_edit_other_versions_link + # no_add_version_link + #%] + +<hr> + +<p> + +[% UNLESS no_add_version_link %] + <a title="Add a version to product '[% product.name FILTER html %]'" + href="editversions.cgi?action=add&product= + [%- product.name FILTER url_quote %]">Add</a> a version. +[% END %] + +[% IF version.name && !no_edit_version_link %] + Edit version <a + title="Edit Version '[% version.name FILTER html %]' of product ' + [%- product.name FILTER html %]'" + href="editversions.cgi?action=edit&product= + [%- product.name FILTER url_quote %]&version= + [%- version.name FILTER url_quote %]"> + '[% version.name FILTER html %]'</a>. +[% END %] + +[% UNLESS no_edit_other_versions_link %] + Edit other versions of product <a + href="editversions.cgi?product= + [%- product.name FILTER url_quote %]">'[% product.name FILTER html %]'</a>. + +[% END %] + + Edit product <a + href="editproducts.cgi?action=edit&product= + [%- product.name FILTER url_quote %]">'[% product.name FILTER html %]'</a>. + +</p> diff --git a/template/en/default/admin/versions/list.html.tmpl b/template/en/default/admin/versions/list.html.tmpl new file mode 100644 index 0000000..401ee51 --- /dev/null +++ b/template/en/default/admin/versions/list.html.tmpl @@ -0,0 +1,89 @@ +[%# 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): Gavin Shelley <bugzilla@chimpychompy.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] + +[%# INTERFACE: + # product: object; Bugzilla::Product object representing the product to + # which the versions belongs. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% title = BLOCK %]Select version of product + '[% product.name FILTER html %]'[% END %] +[% PROCESS global/header.html.tmpl + title = title +%] + +[% edit_contentlink = BLOCK %]editversions.cgi?action=edit&product= + [%- product.name FILTER url_quote %]&version=%%name%%[% END %] +[% delete_contentlink = BLOCK %]editversions.cgi?action=del&product= + [%- product.name FILTER url_quote %]&version=%%name%%[% END %] +[% bug_count_contentlink = BLOCK %]buglist.cgi?version=%%name%%&product= + [%- product.name FILTER url_quote %][% END %] + + +[% columns = [ + { + name => "name" + heading => "Edit version..." + contentlink => edit_contentlink + } + ] +%] + +[% IF showbugcounts %] + + [% columns.push({ + name => "bug_count" + heading => "$terms.Bugs" + align => "right" + contentlink => bug_count_contentlink + }) + %] + +[% END %] + +[% columns.push({ + heading => "Action" + content => "Delete" + contentlink => delete_contentlink + }) +%] + +[% Hook.process('before_table') %] + +[% PROCESS admin/table.html.tmpl + columns = columns + data = product.versions +%] + +[% IF ! showbugcounts %] + + <p><a href="editversions.cgi?product=[% product.name FILTER url_quote %]&showbugcounts=1"> + Redisplay table with [% terms.bug %] counts (slower)</a></p> + +[% END %] + +[% PROCESS admin/versions/footer.html.tmpl + no_edit_other_versions_link = 1 + %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/versions/select-product.html.tmpl b/template/en/default/admin/versions/select-product.html.tmpl new file mode 100644 index 0000000..7fded47 --- /dev/null +++ b/template/en/default/admin/versions/select-product.html.tmpl @@ -0,0 +1,70 @@ +[%# 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): Gavin Shelley <bugzilla@chimpychompy.org> + # Frédéric Buclin <LpSolit@gmail.com> + # + #%] + +[%# INTERFACE: + # products: array of product objects + # showbugcounts: if defined, then bug counts should be included in the table + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl + title = "Edit versions for which product?" +%] + +[% columns = [ + { + name => "name" + heading => "Edit versions of..." + contentlink => "editversions.cgi?product=%%name%%" + }, + { + name => "description" + heading => "Description" + allow_html_content => 1 + } + ] +%] + +[% IF showbugcounts %] + + [% columns.push({ + name => 'bug_count' + heading => "$terms.Bugs" + align => "right" + contentlink => "buglist.cgi?product=%%name%%" + }) + %] + +[% END %] + +[% PROCESS admin/table.html.tmpl + columns = columns + data = products +%] + +[% IF !showbugcounts %] + <p><a href="editversions.cgi?showbugcounts=1"> + Redisplay table with [% terms.bug %] counts (slower)</a></p> +[% END %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/workflow/comment.html.tmpl b/template/en/default/admin/workflow/comment.html.tmpl new file mode 100644 index 0000000..a7a6a74 --- /dev/null +++ b/template/en/default/admin/workflow/comment.html.tmpl @@ -0,0 +1,92 @@ +[%# 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): Frédéric Buclin <LpSolit@gmail.com> + # Gervase Markham <gerv@mozilla.org> + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% INCLUDE global/header.html.tmpl + title = "Comments Required on Status Transitions" + style_urls = ['skins/standard/admin.css'] +%] + +<script type="text/javascript"> +<!-- + function toggle_cell(cell) { + if (cell.checked) + cell.parentNode.className = "checkbox-cell checked"; + else + cell.parentNode.className = "checkbox-cell"; + } +//--> +</script> + +<p> + This page allows you to define which status transitions require a comment + by the user doing the change. +</p> + +<form id="workflow_form" method="POST" action="editworkflow.cgi"> +<table> + <tr> + <th colspan="2"> </th> + <th colspan="[% statuses.size FILTER html %]" class="title">To</th> + </tr> + + <tr> + <th rowspan="[% statuses.size + 2 FILTER html %]" class="title">From</th> + <th> </th> + [% FOREACH status = statuses %] + <th class="col-header[% status.is_open ? " open-status" : " closed-status" %]"> + [% display_value("bug_status", status.name) FILTER html %] + </th> + [% END %] + </tr> + + [%# This defines the entry point in the workflow %] + [% p = [{id => 0, name => "{Start}", is_open => 1}] %] + [% FOREACH status = p.merge(statuses) %] + <tr class="highlight"> + <th align="right" class="[% status.is_open ? "open-status" : "closed-status" %]"> + [% display_value("bug_status", status.name) FILTER html %] + </th> + + [% FOREACH new_status = statuses %] + [% IF workflow.${status.id}.${new_status.id}.defined %] + <td align="center" class="checkbox-cell + [% " checked" IF workflow.${status.id}.${new_status.id} %]" + title="From [% status.name FILTER html %] to [% new_status.name FILTER html %]"> + <input type="checkbox" name="c_[% status.id %]_[% new_status.id %]" + id="c_[% status.id %]_[% new_status.id %]" onclick="toggle_cell(this)" + [% " checked='checked'" IF workflow.${status.id}.${new_status.id} %]> + </td> + [% ELSE %] + <td class="checkbox-cell forbidden"> </td> + [% END %] + [% END %] + </tr> + [% END %] +</table> + +<p align="center"> + <input type="hidden" name="action" value="update_comment"> + <input type="hidden" name="token" value="[% token FILTER html %]"> + <input type="submit" value="Commit Changes"> - + <a href="editworkflow.cgi?action=edit_comment">Cancel Changes</a> - + <a href="editworkflow.cgi">View Current Workflow</a> +</p> + +</form> + +[% INCLUDE global/footer.html.tmpl %] diff --git a/template/en/default/admin/workflow/edit.html.tmpl b/template/en/default/admin/workflow/edit.html.tmpl new file mode 100644 index 0000000..406c08a --- /dev/null +++ b/template/en/default/admin/workflow/edit.html.tmpl @@ -0,0 +1,110 @@ +[%# 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): Frédéric Buclin <LpSolit@gmail.com> + # Gervase Markham <gerv@mozilla.org> + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% INCLUDE global/header.html.tmpl + title = "Edit Workflow" + style_urls = ['skins/standard/admin.css'] +%] + +<script type="text/javascript"> +<!-- + function toggle_cell(cell) { + if (cell.checked) + cell.parentNode.className = "checkbox-cell checked"; + else + cell.parentNode.className = "checkbox-cell"; + } +//--> +</script> + +<p> + This page allows you to define which status transitions are valid in your workflow. + For compatibility with older versions of [% terms.Bugzilla %], reopening [% terms.abug %] + will only display either [% display_value("bug_status", "UNCONFIRMED") FILTER html %] or + [%+ display_value("bug_status", "REOPENED") FILTER html %] (if allowed by your workflow) but not + both. The decision depends on whether the [% terms.bug %] has ever been confirmed or not. + So it is a good idea to allow both transitions and let [% terms.Bugzilla %] select the + correct one. +</p> + +<form id="workflow_form" method="POST" action="editworkflow.cgi"> +<table> + <tr> + <th colspan="2"> </th> + <th colspan="[% statuses.size FILTER html %]" class="title">To</th> + </tr> + + <tr> + <th rowspan="[% statuses.size + 2 FILTER html %]" class="title">From</th> + <th> </th> + [% FOREACH status = statuses %] + <th class="col-header[% status.is_open ? " open-status" : " closed-status" %]"> + [% display_value("bug_status", status.name) FILTER html %] + </th> + [% END %] + </tr> + + [%# This defines the entry point in the workflow %] + [% p = [{id => 0, name => "{Start}", is_open => 1}] %] + [% FOREACH status = p.merge(statuses) %] + <tr class="highlight"> + <th align="right" class="[% status.is_open ? "open-status" : "closed-status" %]"> + [% display_value("bug_status", status.name) FILTER html %] + </th> + + [% FOREACH new_status = statuses %] + [% IF status.id != new_status.id && (status.id || new_status.is_open) %] + [% checked = workflow.${status.id}.${new_status.id}.defined ? 1 : 0 %] + [% mandatory = (status.id && new_status.name == Param("duplicate_or_move_bug_status")) ? 1 : 0 %] + <td align="center" class="checkbox-cell[% " checked" IF checked || mandatory %]" + title="From [% status.name FILTER html %] to [% new_status.name FILTER html %]"> + <input type="checkbox" name="w_[% status.id %]_[% new_status.id %]" + id="w_[% status.id %]_[% new_status.id %]" onclick="toggle_cell(this)" + [%+ "checked='checked'" IF checked || mandatory %] + [%+ "disabled='disabled'" IF mandatory %]> + </td> + [% ELSE %] + <td class="checkbox-cell forbidden"> </td> + [% END %] + [% END %] + </tr> + [% END %] +</table> + +<p> + When [% terms.abug %] is marked as a duplicate of another one or is moved + to another installation, the [% terms.bug %] status is automatically set to + <b>[% display_value("bug_status", Param("duplicate_or_move_bug_status")) FILTER html %]</b>. All transitions to + this [% terms.bug %] status must then be valid (this is the reason why you cannot edit + them above).<br> + Note: you can change this setting by visiting the + <a href="editparams.cgi?section=bugchange#duplicate_or_move_bug_status">Parameters</a> + page and editing the <i>duplicate_or_move_bug_status</i> parameter. +</p> + +<p align="center"> + <input type="hidden" name="action" value="update"> + <input type="hidden" name="token" value="[% token FILTER html %]"> + <input type="submit" value="Commit Changes"> - + <a href="editworkflow.cgi">Cancel Changes</a> - + <a href="editworkflow.cgi?action=edit_comment">View Comments Required on Status Transitions</a> +</p> + +</form> + +[% INCLUDE global/footer.html.tmpl %] diff --git a/template/en/default/attachment/cancel-create-dupe.html.tmpl b/template/en/default/attachment/cancel-create-dupe.html.tmpl new file mode 100644 index 0000000..f838955 --- /dev/null +++ b/template/en/default/attachment/cancel-create-dupe.html.tmpl @@ -0,0 +1,48 @@ +[%# 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 Olav Vitters. + # + # Contributor(s): Olav Vitters <olav@bkor.dhs.org> + # David Lawrence <dkl@redhat.com> + #%] + +[%# INTERFACE: + # bugid: integer. ID of the bug report that this attachment relates to. + # attachid: integer. ID of the previous attachment recently created. + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% PROCESS global/header.html.tmpl + title = "Already filed attachment" +%] + +[% USE Bugzilla %] + +<table cellpadding="20"> + <tr> + <td bgcolor="#ff0000"> + <font size="+2"> + You already used the form to file + <a href="[% urlbase FILTER html %]attachment.cgi?id=[% attachid FILTER url_quote %]&action=edit">attachment [% attachid FILTER url_quote %]</a>. + </font> + </td> + </tr> +</table> + +<p> + You can either <a href="[% urlbase FILTER html %]attachment.cgi?bugid=[% bugid FILTER url_quote %]&action=enter"> + create a new attachment</a> or [% "go back to $terms.bug $bugid" FILTER bug_link(bugid) FILTER none %]. +<p> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/attachment/choose.html.tmpl b/template/en/default/attachment/choose.html.tmpl new file mode 100644 index 0000000..700abb4 --- /dev/null +++ b/template/en/default/attachment/choose.html.tmpl @@ -0,0 +1,43 @@ +[%# 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): Gavin Shelley <bugzilla@chimpychompy.org> + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl + title = "Locate attachment", + onload = "document.forms['choose-id'].id.focus()" + %] + +<form name="choose-id" method="get" action="attachment.cgi"> + <p>Access an attachment by entering its ID into the form below:</p> + <p>Attachment ID: <input name="id" size="6"> + <button name="action" value="edit" id="edit">Details</button> + <button name="action" value="view" id="view">View</button> + </p> +</form> + +<form method="get" action="show_bug.cgi"> + <p>Or, access it from the list of attachments in its associated [% terms.bug %] report:</p> + <p>[% terms.Bug %] ID: <input name="id" size="6"> + <input type="submit" name="action" value="View" id="action"> + </p> +</form> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/attachment/confirm-delete.html.tmpl b/template/en/default/attachment/confirm-delete.html.tmpl new file mode 100644 index 0000000..14c76c3 --- /dev/null +++ b/template/en/default/attachment/confirm-delete.html.tmpl @@ -0,0 +1,92 @@ +[%# 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): Frédéric Buclin <LpSolit@gmail.com> + #%] + +[%# INTERFACE: + # a: attachment object; attachment the user wants to delete. + # token: string; The token used to identify the session. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% title = BLOCK %] + Delete Attachment [% a.id FILTER html %] of [% terms.Bug %] [%+ a.bug_id FILTER html %] +[% END %] + +[% PROCESS global/header.html.tmpl + title = title + doc_section = "attachments.html" +%] + +<table border="1" cellpadding="4" cellspacing="0"> + <tr bgcolor="#6666FF"> + <th valign="top" align="left">Field</th> + <th valign="top" align="left">Value</th> + </tr> + <tr> + <td valign="top">Attachment ID:</td> + <td valign="top"> + <a href="attachment.cgi?id=[% a.id FILTER html %]">[% a.id FILTER html %]</a> + </td> + </tr> + <tr> + <td valign="top">File name:</td> + <td valign="top">[% a.filename FILTER html %]</td> + </tr> + <tr> + <td valign="top">Description:</td> + <td valign="top">[% a.description FILTER html %]</td> + </tr> + <tr> + <td valign="top">Contained in [% terms.Bug %]:</td> + <td valign="top">[% a.bug_id FILTER bug_link(a.bug_id) FILTER none %]</td> + </tr> + <tr> + <td valign="top">Creator:</td> + <td valign="top">[% a.attacher.identity FILTER html %]</td> + </tr> + <tr> + <td valign="top">Creation Date:</td> + <td valign="top">[% a.attached FILTER time %]</td> + </tr> +</table> + +<h2>Confirmation</h2> + +<table border="0" cellpadding="20" width="70%" bgcolor="red"> + <tr> + <td> + The content of this attachment will be deleted in an <b>irreversible</b> way. + </td> + </tr> +</table> + +<p>Do you really want to delete this attachment?</p> + +<form action="attachment.cgi" method="POST"> + <label for="reason">Reason of the deletion:</label> + <input type="text" id="reason" name="reason" value="" size="80" maxlength="200"> + <br> + <input type="submit" value="Yes, delete" id="delete"> + <input type="hidden" name="action" value="delete"> + <input type="hidden" name="id" value="[% a.id FILTER html %]"> + <input type="hidden" name="token" value="[% token FILTER html %]"> +</form> + +<p> + No, cancel this deletion and return to + [%+ "$terms.bug " _ a.bug_id FILTER bug_link(a.bug_id) FILTER none %]. +</p> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/attachment/content-types.html.tmpl b/template/en/default/attachment/content-types.html.tmpl new file mode 100644 index 0000000..471222a --- /dev/null +++ b/template/en/default/attachment/content-types.html.tmpl @@ -0,0 +1,27 @@ +[%# 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): Myk Melez <myk@mozilla.org> + #%] + + <option value="text/plain">plain text (text/plain)</option> + <option value="text/html">HTML source (text/html)</option> + <option value="application/xml">XML source (application/xml)</option> + <option value="image/gif">GIF image (image/gif)</option> + <option value="image/jpeg">JPEG image (image/jpeg)</option> + <option value="image/png">PNG image (image/png)</option> + <option value="application/octet-stream">binary file (application/octet-stream)</option> diff --git a/template/en/default/attachment/create.html.tmpl b/template/en/default/attachment/create.html.tmpl new file mode 100644 index 0000000..f00a0ad --- /dev/null +++ b/template/en/default/attachment/create.html.tmpl @@ -0,0 +1,135 @@ +[%# 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): Myk Melez <myk@mozilla.org> + # Joel Peshkin <bugreport@peshkin.net> + # Erik Stambaugh <erik@dasbistro.com> + # Marc Schumann <wurblzap@gmail.com> + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[%# Define strings that will serve as the title and header of this page %] +[% title = BLOCK %]Create New Attachment for [% terms.Bug %] #[% bug.bug_id %][% END %] +[% header = BLOCK %]Create New Attachment for + [%+ "$terms.Bug $bug.bug_id" FILTER bug_link(bug) FILTER none %][% END %] +[% subheader = BLOCK %][% bug.short_desc FILTER html %][% END %] + +[% PROCESS global/header.html.tmpl + title = title + header = header + subheader = subheader + style_urls = [ 'skins/standard/create_attachment.css' ] + javascript_urls = [ "js/attachment.js", "js/util.js" ] + doc_section = "attachments.html" +%] + +<form name="entryform" method="post" action="attachment.cgi" + enctype="multipart/form-data" + onsubmit="return validateAttachmentForm(this)"> + <input type="hidden" name="bugid" value="[% bug.bug_id %]"> + <input type="hidden" name="action" value="insert"> + <input type="hidden" name="token" value="[% token FILTER html %]"> + + <table class="attachment_entry"> + [% PROCESS attachment/createformcontents.html.tmpl %] + + [%# Additional fields for attachments on existing bugs: %] + <tr> + <th>Obsoletes:</th> + <td> + <em>(optional) Check each existing attachment made obsolete by your new attachment.</em><br> + [% IF attachments.size %] + [% FOREACH attachment = attachments %] + [% IF ((attachment.isprivate == 0) || user.is_insider) %] + <input type="checkbox" id="[% attachment.id %]" + name="obsolete" value="[% attachment.id %]"> + <a href="attachment.cgi?id=[% attachment.id %]&action=edit">[% attachment.id %]: [% attachment.description FILTER html %]</a><br> + [% END %] + [% END %] + [% ELSE %] + [no attachments can be made obsolete] + [% END %] + </td> + </tr> + + [% IF (user.id != bug.assigned_to.id) AND user.in_group("editbugs", bug.product_id) %] + <tr> + <th>Reassignment:</th> + <td> + <em>If you want to assign this [% terms.bug %] to yourself, + check the box below.</em><br> + <input type="checkbox" id="takebug" name="takebug" value="1"> + <label for="takebug">take [% terms.bug %]</label> + [% bug_statuses = [] %] + [% FOREACH bug_status = bug.status.can_change_to %] + [% NEXT IF bug_status.name == "UNCONFIRMED" + && !bug.product_obj.allows_unconfirmed %] + [% bug_statuses.push(bug_status) IF bug_status.is_open %] + [% END %] + [% IF bug_statuses.size %] + <label for="takebug">and set the [% terms.bug %] status to</label> + <select id="bug_status" name="bug_status"> + <option value="[% bug.status.name FILTER html %]">[% display_value("bug_status", bug.status.name) FILTER html %] (current)</option> + [% FOREACH bug_status = bug_statuses %] + [% NEXT IF bug_status.id == bug.status.id %] + <option value="[% bug_status.name FILTER html %]">[% display_value("bug_status", bug_status.name) FILTER html %]</option> + [% END %] + </select> + [% END %] + </td> + </tr> + [% END %] + <tr> + <th><label for="comment">Comment:</label></th> + <td> + <em>(optional) Add a comment about this attachment to the [% terms.bug %].</em><br> + [% INCLUDE global/textarea.html.tmpl + name = 'comment' + id = 'comment' + minrows = 6 + maxrows = 15 + cols = constants.COMMENT_COLS + wrap = 'soft' + %] + </td> + </tr> + [% IF user.is_insider %] + <tr> + <th>Privacy:</th> + <td> + <input type="checkbox" name="isprivate" id="isprivate" + value="1" onClick="updateCommentPrivacy(this)"> + <label for="isprivate"> + Make attachment and comment private (visible only to members of + the <strong>[% Param('insidergroup') FILTER html %]</strong> + group) + </label> + </td> + </tr> + [% END %] + <tr> + <th> </th> + <td><input type="submit" id="create" value="Submit"></td> + </tr> + </table> + +</form> + +[% Hook.process('end') %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/attachment/created.html.tmpl b/template/en/default/attachment/created.html.tmpl new file mode 100644 index 0000000..da2fec8 --- /dev/null +++ b/template/en/default/attachment/created.html.tmpl @@ -0,0 +1,67 @@ +[%# 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): Myk Melez <myk@mozilla.org> + #%] + +[%# INTERFACE: + # attachment: object of the attachment just created. + # contenttypemethod: string. How we got the content type of the attachment. + # Possible values: autodetect, list, manual. + #%] + +[% PROCESS global/variables.none.tmpl %] +[% bug = bugs.0 %] +[% PROCESS "bug/show-header.html.tmpl" %] +[% PROCESS global/header.html.tmpl + title = "Attachment $attachment.id added to $terms.Bug $attachment.bug_id" +%] + +<dl> + <dt> + <a title="[% attachment.description FILTER html %]" + href="attachment.cgi?id=[% attachment.id %]&action=edit">Attachment #[% attachment.id %]</a> + to [% "$terms.bug $attachment.bug_id" FILTER bug_link(attachment.bug_id) FILTER none %] created + </dt> + <dd> + [% PROCESS "bug/process/bugmail.html.tmpl" mailing_bugid = attachment.bug_id %] + [% IF convertedbmp %] + <p> + <b>Note:</b> [% terms.Bugzilla %] automatically converted your BMP image file to a + compressed PNG format. + </p> + [% END %] + [% IF contenttypemethod == 'autodetect' %] + <p> + <b>Note:</b> [% terms.Bugzilla %] automatically detected the content type + <em>[% attachment.contenttype FILTER html %]</em> for this attachment. If this is + incorrect, correct the value by editing the attachment's + <a href="attachment.cgi?id=[% attachment.id %]&action=edit">details</a>. + </p> + [% END %] + + [%# Links to more information about the changed bug. %] + [% Hook.process("links") %] + </dd> +</dl> + +<p> +<a href="attachment.cgi?bugid=[% attachment.bug_id %]&action=enter">Create + Another Attachment to [% terms.Bug %] [%+ attachment.bug_id %]</a> +</p> + +[% PROCESS bug/show.html.tmpl %] diff --git a/template/en/default/attachment/createformcontents.html.tmpl b/template/en/default/attachment/createformcontents.html.tmpl new file mode 100644 index 0000000..2cef632 --- /dev/null +++ b/template/en/default/attachment/createformcontents.html.tmpl @@ -0,0 +1,106 @@ +[%# 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): Myk Melez <myk@mozilla.org> + # Joel Peshkin <bugreport@peshkin.net> + # Erik Stambaugh <erik@dasbistro.com> + # Marc Schumann <wurblzap@gmail.com> + #%] + +<tr> + <th><label for="data">File</label>:</th> + <td> + <em>Enter the path to the file on your computer.</em><br> + <input type="file" id="data" name="data" size="50" + [% IF Param("allow_attach_url") %] + onchange="DataFieldHandler()" + [% END %] + > + </td> +</tr> +[% IF Param("maxlocalattachment") %] +<tr class="expert_fields"> + <th>BigFile:</th> + <td> + <input type="checkbox" id="bigfile" + name="bigfile" value="bigfile"> + <label for="bigfile"> + Big File - Stored locally and may be purged + </label> + </td> +</tr> +[% END %] +[% IF Param("allow_attach_url") %] +<tr class="expert_fields"> + <th><label for="attachurl">AttachURL</label>:</th> + <td> + <em>URL to be attached instead.</em><br> + <input type="text" id="attachurl" name="attachurl" size="60" + maxlength="2000" + onkeyup="URLFieldHandler()" onblur="URLFieldHandler()"> + </td> +</tr> +</tbody> +[% END %] +<tr> + <th><label for="description">Description</label>:</th> + <td> + <em>Describe the attachment briefly.</em><br> + <input type="text" id="description" name="description" size="60" maxlength="200"> + </td> +</tr> +<tr class="expert_fields"> + <th>Content Type:</th> + <td> + <em>If the attachment is a patch, check the box below.</em><br> + <input type="checkbox" id="ispatch" name="ispatch" value="1" + onchange="setContentTypeDisabledState(this.form);"> + <label for="ispatch">patch</label><br><br> + [%# Reset this whenever the page loads so that the JS state is up to date %] + <script type="text/javascript"> + YAHOO.util.Event.onDOMReady(function() { + bz_fireEvent(document.getElementById('ispatch'), 'change'); + }); + </script> + + <em>Otherwise, choose a method for determining the content type.</em><br> + <input type="radio" id="autodetect" + name="contenttypemethod" value="autodetect" checked="checked"> + <label for="autodetect">auto-detect</label><br> + <input type="radio" id="list" + name="contenttypemethod" value="list"> + <label for="list">select from list</label>: + <select name="contenttypeselection" id="contenttypeselection" + onchange="this.form.contenttypemethod[1].checked = true;"> + [% PROCESS "attachment/content-types.html.tmpl" %] + </select><br> + <input type="radio" id="manual" + name="contenttypemethod" value="manual"> + <label for="manual">enter manually</label>: + <input type="text" name="contenttypeentry" id="contenttypeentry" + size="30" maxlength="200" + onchange="if (this.value) this.form.contenttypemethod[2].checked = true;"> + </td> +</tr> +<tr class="expert_fields"> + <td> </td> + <td> + [% IF flag_types && flag_types.size > 0 %] + [% PROCESS "flag/list.html.tmpl" bug_id=bugid attach_id=attachid %]<br> + [% END %] + </td> +</tr> diff --git a/template/en/default/attachment/delete_reason.txt.tmpl b/template/en/default/attachment/delete_reason.txt.tmpl new file mode 100644 index 0000000..e4a1fc4 --- /dev/null +++ b/template/en/default/attachment/delete_reason.txt.tmpl @@ -0,0 +1,32 @@ +[%# 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): Frédéric Buclin <LpSolit@gmail.com> + #%] + +[%# INTERFACE: + # attachment: object of the attachment the user wants to delete. + # reason: string; The reason provided by the user. + # date: the date when the request to delete the attachment was made. + #%] + +The content of attachment [% attachment.id %] has been deleted by + [%+ user.identity %] +[% IF reason %] +who provided the following reason: + +[%+ reason %] +[% ELSE %] +without providing any reason. +[% END %] + +The token used to delete this attachment was generated at [% date FILTER time %]. diff --git a/template/en/default/attachment/diff-file.html.tmpl b/template/en/default/attachment/diff-file.html.tmpl new file mode 100644 index 0000000..9392ca1 --- /dev/null +++ b/template/en/default/attachment/diff-file.html.tmpl @@ -0,0 +1,177 @@ +[%# 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): John Keiser <jkeiser@netscape.com> + # Frédéric Buclin <LpSolit@gmail.com> + #%] + +[%# This line is really long for a reason: to get rid of any possible textnodes + # between the elements. This is necessary because DOM parent-child-sibling + # relations can change and screw up the javascript for restoring, collapsing + # and expanding. Do not change without testing all three of those. + # Also, the first empty row is required because 'table-layout: fixed' only + # considers the first row to determine column widths. If a colspan is found, + # it then share the width equally among all columns, which we don't want. + #%] +<table class="file_table"><thead><tr><td class="num"></td><td></td><td class="num"></td><td></td></tr><tr><td class="file_head" colspan="4"><a href="#" onclick="return twisty_click(this)">[% collapsed ? '(+)' : '(-)' %]</a><input type="checkbox" name="[% file.filename FILTER html %]"[% collapsed ? '' : ' checked' %] style="display: none"> + [% IF lxr_prefix && !file.is_add %] + <a href="[% lxr_prefix %]">[% file.filename FILTER html %]</a> + [% ELSE %] + [% file.filename FILTER html %] + [% END %] + [% IF file.plus_lines %] + [% IF file.minus_lines %] + (-[% file.minus_lines %] / +[% file.plus_lines %] lines) + [% ELSE %] + (+[% file.plus_lines %] lines) + [% END %] + [% ELSE %] + [% IF file.minus_lines %] + (-[% file.minus_lines %] lines) + [% END %] + [% END %] +</td></tr></thead><tbody class="[% collapsed ? 'file_collapse' : 'file' %]"> +<script type="text/javascript"> +incremental_restore() +</script> + +[% section_num = 0 %] +[% FOREACH section = sections %] + [% section_num = section_num + 1 %] + <tr><th colspan="4" class="section_head"> + <table cellpadding="0" cellspacing="0"> + <tr><th width="95%" align="left"> + [% IF file.is_add %] + Added + [% ELSIF file.is_remove %] + [% IF bonsai_prefix %] + <a href="[% bonsai_prefix %]">Removed</a> + [% ELSE %] + Removed + [% END %] + [% ELSE %] + [% IF bonsai_prefix %] + <a href="[% bonsai_prefix %]#[% section.old_start %]"> + [% END %] + [% IF section.old_lines > 1 %] + Lines [% section.old_start %]-[% section.old_start + + section.old_lines - 1 %] + [% ELSE %] + Line [% section.old_start %] + [% END %] + [% IF bonsai_prefix %] + </a> + [% END %] + [% section.func_info FILTER html IF section.func_info %] + [% END %] + </th><th> + <a name="[% file.filename FILTER html %]_sec[% section_num %]" href="#[% file.filename FILTER html %]_sec[% section_num %]">Link Here</a> + </th></tr></table> + </th></tr> + [% current_line_old = section.old_start %] + [% current_line_new = section.new_start %] + [% FOREACH group = section.groups %] + [% IF group.context %] + [% FOREACH line = group.context %] + <tr> + <td class="num">[% current_line_old %]</td> + <td><pre>[% line FILTER html %]</pre></td> + <td class="num">[% current_line_new %]</td> + <td><pre>[% line FILTER html %]</pre></td> + </tr> + [% current_line_old = current_line_old + 1 %] + [% current_line_new = current_line_new + 1 %] + [% END %] + [% END %] + [% IF group.plus.size %] + [% IF group.minus.size %] + [% i = 0 %] + [% WHILE (i < group.plus.size || i < group.minus.size) %] + [%# WHILE cannot loop more than 1000 times by default, so we break it every 500 times. %] + [% currentloop = 0 %] + [% WHILE currentloop < 500 && (i < group.plus.size || i < group.minus.size) %] + <tr> + [% IF i < group.minus.size %] + <td class="num">[% current_line_old + i %]</td> + <td class="changed"><pre>[% group.minus.$i FILTER html %]</pre></td> + [% ELSIF i == group.minus.size %] + [% rowspan = group.plus.size - group.minus.size %] + <td class="num"[% IF rowspan > 1 %] rowspan="[% rowspan FILTER none %]"[% END %]></td> + <td class="changed"[% IF rowspan > 1 %] rowspan="[% rowspan FILTER none %]"[% END %]></td> + [% END %] + + [% IF i < group.plus.size %] + <td class="num">[% current_line_new + i %]</td> + <td class="changed"><pre>[% group.plus.$i FILTER html %]</pre></td> + [% ELSIF i == group.plus.size %] + [% rowspan = group.minus.size - group.plus.size %] + <td class="num"[% IF rowspan > 1 %] rowspan="[% rowspan FILTER none %]"[% END %]></td> + <td class="changed"[% IF rowspan > 1 %] rowspan="[% rowspan FILTER none %]"[% END %]></td> + [% END %] + </tr> + [% currentloop = currentloop + 1 %] + [% i = i + 1 %] + [% END %] + [% END %] + [% current_line_old = current_line_old + group.minus.size %] + [% current_line_new = current_line_new + group.plus.size %] + [% ELSE %] + [% FOREACH line = group.plus %] + [% IF file.is_add %] + <tr> + <td class="num">[% current_line_new %]</td> + <td class="added" colspan="3"><pre>[% line FILTER html %]</pre></td> + </tr> + [% ELSE %] + <tr> + [% IF loop.first %] + <td class="num"[% IF group.plus.size > 1 %] rowspan="[% group.plus.size %]"[% END %]></td> + <td[% IF group.plus.size > 1 %] rowspan="[% group.plus.size %]"[% END %]></td> + [% END %] + <td class="num">[% current_line_new %]</td> + <td class="added"><pre>[% line FILTER html %]</pre></td> + </tr> + [% END %] + [% current_line_new = current_line_new + 1 %] + [% END %] + [% END %] + [% ELSE %] + [% IF group.minus.size %] + [% FOREACH line = group.minus %] + [% IF file.is_remove %] + <tr> + <td class="num">[% current_line_old %]</td> + <td class="removed" colspan="3"><pre>[% line FILTER html %]</pre></td> + </tr> + [% ELSE %] + <tr> + <td class="num">[% current_line_old %]</td> + <td class="removed"><pre>[% line FILTER html %]</pre></td> + [% IF loop.first %] + <td class="num"[% IF group.minus.size > 1 %] rowspan="[% group.minus.size %]"[% END %]></td> + <td[% IF group.minus.size > 1 %] rowspan="[% group.minus.size %]"[% END %]></td> + [% END %] + </tr> + [% END %] + [% current_line_old = current_line_old + 1 %] + [% END %] + [% END %] + [% END %] + [% END %] +[% END %] + +</table> diff --git a/template/en/default/attachment/diff-footer.html.tmpl b/template/en/default/attachment/diff-footer.html.tmpl new file mode 100644 index 0000000..49c662a --- /dev/null +++ b/template/en/default/attachment/diff-footer.html.tmpl @@ -0,0 +1,35 @@ +[%# 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): John Keiser <jkeiser@netscape.com> + #%] + +</form> + +[% IF headers %] + + <br> + + [% PROCESS global/variables.none.tmpl %] + <span>Return to [% "$terms.bug $bugid" FILTER bug_link(bugid) FILTER none %]</span> + + [% PROCESS global/footer.html.tmpl %] + +[% ELSE %] +</body> +</html> +[% END %] diff --git a/template/en/default/attachment/diff-header.html.tmpl b/template/en/default/attachment/diff-header.html.tmpl new file mode 100644 index 0000000..663d9b7 --- /dev/null +++ b/template/en/default/attachment/diff-header.html.tmpl @@ -0,0 +1,153 @@ +[%# 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): John Keiser <jkeiser@netscape.com> + #%] + +[%# Define strings that will serve as the title and header of this page %] + +[% PROCESS global/variables.none.tmpl %] + +[% title = BLOCK %] + [% IF attachid %] +Attachment #[% attachid %] for [% terms.bug %] #[% bugid %] + [% ELSE %] +Interdiff of #[% oldid %] and #[% newid %] for [% terms.bug %] #[% bugid %] + [% END %] +[% END %] + +[% onload = 'restore_all(); document.checkboxform.restore_indicator.checked = true' %] + +[% BLOCK viewurl %]attachment.cgi?id=[% id %][% END %] +[% BLOCK editurl %][% PROCESS viewurl %]&action=edit[% END %] +[% BLOCK diffurl %][% PROCESS viewurl %]&action=diff[% END %] + +[% IF headers %] + [% header = BLOCK %] + [% IF attachid %] + Attachment #[% attachid %]: [% description FILTER html %] + [% ELSE %] + Diff Between + #[% oldid %]: <a href="[% PROCESS diffurl id=oldid %]">[% old_desc FILTER html %]</a> + and + #[% newid %]: <a href="[% PROCESS diffurl id=newid %]">[% new_desc FILTER html %]</a> + [% END %] + for <a href="show_bug.cgi?id=[% bugid %]">[% terms.bug %] #[% bugid %]</a> + [% END %] + [% subheader = BLOCK %] + [% bugsummary FILTER html %] + [% END %] + [% PROCESS global/header.html.tmpl doc_section = "attachments.html#patchviewer" + javascript_urls = "js/attachment.js" + style_urls = ['skins/standard/create_attachment.css'] %] +[% ELSE %] + <html> + <head> + <link href="skins/standard/create_attachment.css" rel="stylesheet" type="text/css"> + <script src="js/attachment.js" type="text/javascript"></script> + </head> + <body onload="[% onload FILTER html %]"> +[% END %] + +[%# If we have attachid, we are in diff, otherwise we're in interdiff %] +[% IF attachid %] + [%# HEADER %] + [% IF headers %] + <a href="[% PROCESS viewurl id=attachid %]">View</a> + | <a href="[% PROCESS editurl id=attachid %]">Details</a> + | <a href="[% PROCESS diffurl id=attachid %]&context=[% context FILTER url_quote %]&collapsed=[% collapsed FILTER url_quote %]&headers=[% headers FILTER url_quote %]&format=raw">Raw Unified</a> + | Return to [% "$terms.bug $bugid" FILTER bug_link(bugid) FILTER none %] + [% END %] + [% IF other_patches.size > 0 %] + [% IF headers %] |[%END%] + Differences between + <form style="display: inline" action="attachment.cgi"> + <select name="oldid"> + [% FOREACH patch = other_patches %] + <option value="[% patch.id %]" + [% IF patch.selected %] selected[% END %] + >[% patch.desc FILTER html %]</option> + [% END %] + </select> + and this patch + <input type="submit" id="diff" value="Diff"> + <input type="hidden" name="action" value="interdiff"> + <input type="hidden" name="newid" value="[% attachid %]"> + <input type="hidden" name="headers" value="[% headers FILTER html %]"> + </form> + [% END %] + <br> +[% ELSE %] + [% IF headers %] + <a href="attachment.cgi?oldid=[% oldid %]&newid=[% newid %]&action=interdiff&format=raw">Raw Unified</a> + | Return to [% "$terms.bug $bugid" FILTER bug_link(bugid) FILTER none %] + | + [% END %] +[% END %] + +[%# Collapse / Expand %] +<a href="#" + onmouseover="lastStatus = window.status; window.status='Collapse All'; return true" + onmouseout="window.status = lastStatus; return true" + onclick="return collapse_all()">Collapse All</a> | +<a href="#" + onmouseover="lastStatus = window.status; window.status='Expand All'; return true" + onmouseout="window.status = lastStatus; return true" + onclick="return expand_all()">Expand All</a> + +[% IF do_context %] + [%# only happens for normal viewing, not interdiff %] + | <span style='font-weight: bold'>Context:</span> + [% IF context == "patch" %] + (<strong>Patch</strong> / + [% ELSE %] + (<a href="[% PROCESS diffurl id=attachid %]&headers=[% headers FILTER url_quote %]">Patch</a> / + [% END %] + [% IF context == "file" %] + <strong>File</strong> / + [% ELSE %] + <a href="[% PROCESS diffurl id=attachid %]&headers=[% headers FILTER url_quote %]&context=file">File</a> / + [% END %] + + [% IF context == "patch" || context == "file" %] + [% context = 3 %] + [% END %] + [%# textbox for context %] + <form style="display: inline" action="attachment.cgi"><input type="hidden" name="action" value="diff"><input type="hidden" name="id" value="[% attachid %]"><input type="hidden" name="collapsed" value="[% collapsed FILTER html %]"><input type="hidden" name="headers" value="[% headers FILTER html %]"><input type="text" name="context" value="[% context FILTER html %]" size="3"></form>) +[% END %] + +[% IF warning %] +<h2 class="warning">Warning: + [% IF warning == "interdiff1" %] + this difference between two patches may show things in the wrong places due + to a limitation in [% terms.Bugzilla %] when comparing patches with different + sets of files. + [% END %] + [% IF warning == "interdiff2" %] + this difference between two patches may be inaccurate due to a limitation in + [%+ terms.Bugzilla %] when comparing patches made against different revisions. + [% END %] +</h2> +[% ELSE %] + <br><br> +[% END %] + +[%# Restore Stuff %] +<form name="checkboxform" action="attachment.cgi"> +<input type="checkbox" name="restore_indicator" style="display: none"> + + diff --git a/template/en/default/attachment/edit.html.tmpl b/template/en/default/attachment/edit.html.tmpl new file mode 100644 index 0000000..fa8a53a --- /dev/null +++ b/template/en/default/attachment/edit.html.tmpl @@ -0,0 +1,289 @@ +[%# 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): Myk Melez <myk@mozilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] + +[% PROCESS global/variables.none.tmpl %] + +[%# Define strings that will serve as the title and header of this page %] +[% title = BLOCK %] + Attachment [% attachment.id %] Details for [% terms.Bug %] [%+ attachment.bug_id %] +[% END %] +[% header = BLOCK %] + Attachment [% attachment.id %] Details for + [%+ "$terms.Bug ${attachment.bug_id}" FILTER bug_link(attachment.bug_id) FILTER none %] +[% END %] +[% subheader = BLOCK %][% attachment.bug.short_desc FILTER html %][% END %] + +[% PROCESS global/header.html.tmpl + title = title + header = header + subheader = subheader + doc_section = "attachments.html" + javascript_urls = ['js/attachment.js'] + style_urls = ['skins/standard/create_attachment.css'] +%] + +[%# No need to display the Diff button and iframe if the attachment is not a patch. %] +[% use_patchviewer = (feature_enabled('patch_viewer') && attachment.ispatch) %] +[% can_edit = attachment.validate_can_edit %] +[% editable_or_hide = can_edit ? "" : " bz_hidden_option" %] + +<form method="post" action="attachment.cgi" onsubmit="normalizeComments();"> + <input type="hidden" name="id" value="[% attachment.id %]"> + <input type="hidden" name="action" value="update"> + <input type="hidden" name="contenttypemethod" value="manual"> + <input type="hidden" name="delta_ts" value="[% attachment.modification_time FILTER html %]"> + [% IF user.id %] + <input type="hidden" name="token" value="[% issue_hash_token([attachment.id, attachment.modification_time]) FILTER html %]"> + [% END %] + + <table class="attachment_info" width="100%"> + + <tr> + <td id="attachment_attributes"> + <div id="attachment_description"> + <label for="description">Description:</label> + [% INCLUDE global/textarea.html.tmpl + id = 'description' + name = 'description' + minrows = 3 + cols = 25 + wrap = 'soft' + classes = 'block' _ editable_or_hide + defaultcontent = attachment.description + %] + [% IF !can_edit %] + [%+ attachment.description FILTER wrap_comment(25) FILTER html %] + [% END %] + </div> + + [% IF attachment.isurl %] + <input type="hidden" name="filename" + value="[% attachment.filename FILTER html %]"> + <input type="hidden" name="contenttypeentry" + value="[% attachment.contenttype FILTER html %]"> + [% ELSE %] + <div id="attachment_filename"> + <label for="filename">Filename:</label> + <input type="text" size="20" class="block[% editable_or_hide %]" + id="filename" name="filename" + value="[% attachment.filename FILTER html %]"> + [% IF !can_edit %] + [%+ attachment.filename FILTER truncate(25) FILTER html %] + [% END %] + </div> + + <div id="attachment_mimetype"> + <label for="contenttypeentry">MIME Type:</label> + <input type="text" size="20" class="block[% editable_or_hide %]" + id="contenttypeentry" name="contenttypeentry" + value="[% attachment.contenttype FILTER html %]"> + [% IF !can_edit %] + [%+ attachment.contenttype FILTER truncate(25) FILTER html %] + [% END %] + </div> + + <div id="attachment_size"> + <span class="label">Size:</span> + [% IF attachment.datasize %] + [%+ attachment.datasize FILTER unitconvert %] + [% ELSE %] + <em>deleted</em> + [% END %] + </div> + + <div id="attachment_creator"> + <span class="label">Creator:</span> + [%+ INCLUDE global/user.html.tmpl who = attachment.attacher %] + </div> + + <div id="attachment_ispatch"> + <input type="checkbox" id="ispatch" name="ispatch" value="1" + [%+ IF !can_edit %]class="bz_hidden_option"[% END %] + [%+ 'checked="checked"' IF attachment.ispatch %]> + [% IF can_edit %] + <label for="ispatch">patch</label> + [% ELSE %] + <span class="label">Is Patch:</span> + [%+ attachment.ispatch ? "yes" : "no" %] + [% END %] + </div> + [% END %] + + <div id="attachment_isobsolete"> + <input type="checkbox" id="isobsolete" name="isobsolete" value="1" + [%+ IF !can_edit %]class="bz_hidden_option"[% END %] + [%+ 'checked="checked"' IF attachment.isobsolete %]> + [% IF can_edit %] + <label for="isobsolete">obsolete</label> + [% ELSE %] + <span class="label">Is Obsolete:</span> + [%+ attachment.isobsolete ? "yes" : "no" %] + [% END %] + </div> + + [% IF user.is_insider %] + <div id="attachment_isprivate"> + <input type="checkbox" id="isprivate" name="isprivate" value="1" + [%+ IF !can_edit %]class="bz_hidden_option"[% END %] + [%+ 'checked="checked"' IF attachment.isprivate %]> + [% IF can_edit %] + <label for="isprivate">private (only visible to + <strong>[% Param('insidergroup') FILTER html %]</strong>) + </label> + [% ELSE %] + <span class="label">Is Private:</span> + [%+ attachment.isprivate ? "yes" : "no" %] + [% END %] + </div> + [% END %] + + [% IF attachment.flag_types.size > 0 %] + <div id="attachment_flags"> + [% PROCESS "flag/list.html.tmpl" bug_id = attachment.bug_id + attach_id = attachment.id + flag_types = attachment.flag_types + read_only_flags = !can_edit + %] + </div> + [% END %] + + [% IF user.id %] + <div id="smallCommentFrame"> + <label for="comment">Comment (on the [% terms.bug %]):</label> + [% INCLUDE global/textarea.html.tmpl + id = 'comment' + name = 'comment' + minrows = 5 + cols = 25 + wrap = 'soft' + classes = 'block' + %] + </div> + + <input type="submit" value="Submit" id="update"><br><br> + [% END %] + </td> + + [% IF !attachment.datasize %] + <td width="75%"><b>The content of this attachment has been deleted.</b></td> + [% ELSIF attachment.isurl %] + <td width="75%"> + <a href="[% attachment.data FILTER html %]"> + [% IF attachment.datasize < 120 %] + [% attachment.data FILTER html %] + [% ELSE %] + [% attachment.data FILTER truncate(80) FILTER html %] + ... + [% attachment.data.match(".*(.{20})$").0 FILTER html %] + [% END %] + </a> + </td> + [% ELSIF !Param("allow_attachment_display") %] + <td id="view_disabled" width="50%"> + <p><b> + The attachment is not viewable in your browser due to security + restrictions enabled by [% terms.Bugzilla %]. + </b></p> + <p><b> + In order to view the attachment, you first have to + <a href="attachment.cgi?id=[% attachment.id %]">download it</a>. + </b></p> + </td> + [% ELSIF attachment.is_viewable %] + <td width="75%"> + [% INCLUDE global/textarea.html.tmpl + id = 'editFrame' + name = 'comment' + style = 'height: 400px; width: 100%; display: none' + minrows = 10 + cols = 80 + wrap = 'soft' + defaultcontent = (attachment.contenttype.match('^text\/')) ? + attachment.data.replace('(.*\n|.+)', '>$1') : undef + %] + <iframe id="viewFrame" src="attachment.cgi?id=[% attachment.id %]" style="height: 400px; width: 100%;"> + <b>You cannot view the attachment while viewing its details because your browser does not support IFRAMEs. + <a href="attachment.cgi?id=[% attachment.id %]">View the attachment on a separate page</a>.</b> + </iframe> + <script type="text/javascript"> + <!-- + var patchviewerinstalled = 0; + var attachment_id = [% attachment.id %]; + if (typeof document.getElementById == "function") { +[% IF use_patchviewer %] + var patchviewerinstalled = 1; + document.write('<iframe id="viewDiffFrame" style="height: 400px; width: 100%; display: none;"><\/iframe>'); +[% END %] + document.write('<button type="button" id="editButton" onclick="editAsComment(patchviewerinstalled);">Edit Attachment As Comment<\/button>'); + document.write('<button type="button" id="undoEditButton" onclick="undoEditAsComment(patchviewerinstalled);" style="display: none;">Undo Edit As Comment<\/button>'); + document.write('<button type="button" id="redoEditButton" onclick="redoEditAsComment(patchviewerinstalled);" style="display: none;">Redo Edit As Comment<\/button>'); +[% IF use_patchviewer %] + document.write('<button type="button" id="viewDiffButton" onclick="viewDiff(attachment_id, patchviewerinstalled);">View Attachment As Diff<\/button>'); +[% END %] + document.write('<button type="button" id="viewRawButton" onclick="viewRaw(patchviewerinstalled);" style="display: none;">View Attachment As Raw<\/button>'); + } + //--> + </script> + </td> + [% ELSE %] + <td id="noview" width="50%"> + <p><b> + Attachment is not viewable in your browser because its MIME type + ([% attachment.contenttype FILTER html %]) is not one that your browser is + able to display. + </b></p> + <p><b> + <a href="attachment.cgi?id=[% attachment.id %]">Download the attachment</a>. + </b></p> + </td> + [% END %] + </tr> + </table> +</form> + +<div id="attachment_actions"> + <span class="label">Actions:</span> + <a href="attachment.cgi?id=[% attachment.id %]">View</a> + [% IF use_patchviewer %] + | <a href="attachment.cgi?id=[% attachment.id %]&action=diff">Diff</a> + [% END %] + [% IF Param("allow_attachment_deletion") + && user.in_group('admin') + && attachment.datasize > 0 %] + | <a href="attachment.cgi?id=[% attachment.id %]&action=delete">Delete</a> + [% END %] +</div> + +<div id="attachment_list"> + Attachments on [% "$terms.bug ${attachment.bug_id}" FILTER bug_link(attachment.bug_id) FILTER none %]: + [% FOREACH a = attachments %] + [% IF a == attachment.id %] + [%+ a %] + [% ELSE %] + <a href="attachment.cgi?id=[% a %]&action=edit">[% a %]</a> + [% END %] + [% " |" UNLESS loop.last() %] + [% END %] +</div> + +[% Hook.process('end') %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/attachment/list.html.tmpl b/template/en/default/attachment/list.html.tmpl new file mode 100644 index 0000000..6453b4e --- /dev/null +++ b/template/en/default/attachment/list.html.tmpl @@ -0,0 +1,151 @@ +[%# 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): Myk Melez <myk@mozilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] + +<script type="text/javascript"> +<!-- +function toggle_display(link) { + var table = document.getElementById("attachment_table"); + // Store current height for scrolling later + var originalHeight = table.offsetHeight; + var rows = YAHOO.util.Dom.getElementsByClassName( + 'bz_tr_obsolete', 'tr', table); + + for (var i = 0; i < rows.length; i++) { + bz_toggleClass(rows[i], 'bz_default_hidden'); + } + + if (YAHOO.util.Dom.hasClass(rows[0], 'bz_default_hidden')) { + link.innerHTML = "Show Obsolete"; + } + else { + link.innerHTML = "Hide Obsolete"; + } + + var newHeight = table.offsetHeight; + // This scrolling makes the window appear to not move at all. + window.scrollBy(0, newHeight - originalHeight); + + return false; +} +//--> +</script> + +<br> +<table id="attachment_table" cellspacing="0" cellpadding="4"> + <tr> + <th colspan="[% show_attachment_flags ? 3 : 2 %]" align="left"> + <a name="a0" id="a0">Attachments</a> + </th> + </tr> + + [% count = 0 %] + [% obsolete_attachments = 0 %] + + [% FOREACH attachment = attachments %] + [% count = count + 1 %] + [% IF !attachment.isprivate || user.is_insider || attachment.attacher.id == user.id %] + [% IF attachment.isobsolete %] + [% obsolete_attachments = obsolete_attachments + 1 %] + [% END %] + <tr class="[% "bz_contenttype_" _ attachment.contenttype + FILTER css_class_quote UNLESS attachment.isurl %] + [% " bz_patch" IF attachment.ispatch %] + [% " bz_url" IF attachment.isurl %] + [% " bz_private" IF attachment.isprivate %] + [% " bz_tr_obsolete bz_default_hidden" + IF attachment.isobsolete %]"> + <td valign="top"> + [% IF attachment.datasize %] + <a name="a[% count %]" href="attachment.cgi?id=[% attachment.id %]" + title="View the content of the attachment"> + [% END %] + <b>[% attachment.description FILTER html FILTER obsolete(attachment.isobsolete) %]</b> + [% "</a>" IF attachment.datasize %] + + <span class="bz_attach_extra_info"> + [% IF attachment.datasize %] + ([% attachment.datasize FILTER unitconvert %], + [% IF attachment.ispatch %] + patch) + [% ELSIF attachment.isurl %] + url) + [% ELSE %] + [%+ attachment.contenttype FILTER html %]) + [% END %] + [% ELSE %] + (<em>deleted</em>) + [% END %] + + <br> + <a href="#attach_[% attachment.id %]" + title="Go to the comment associated with the attachment"> + [%- attachment.attached FILTER time %]</a>, + + [% INCLUDE global/user.html.tmpl who = attachment.attacher %] + </span> + </td> + + [% IF show_attachment_flags %] + <td class="bz_attach_flags" valign="top"> + [% IF attachment.flags.size == 0 %] + <i>no flags</i> + [% ELSE %] + [% FOREACH flag = attachment.flags %] + [% flag.setter.nick FILTER html %]: + [%+ flag.type.name FILTER html FILTER no_break %][% flag.status %] + [%+ IF flag.status == "?" && flag.requestee %] + ([% flag.requestee.nick FILTER html %]) + [% END %]<br> + [% END %] + [% END %] + </td> + [% END %] + + <td valign="top"> + <a href="attachment.cgi?id=[% attachment.id %]&action=edit">Details</a> + [% IF attachment.ispatch && feature_enabled('patch_viewer') %] + | <a href="attachment.cgi?id=[% attachment.id %]&action=diff">Diff</a> + [% END %] + [% Hook.process("action") %] + </td> + </tr> + [% END %] + [% END %] + + <tr class="bz_attach_footer"> + <td colspan="[% show_attachment_flags ? 3 : 2 %]"> + [% IF attachments.size %] + <span class="bz_attach_view_hide"> + [% IF obsolete_attachments %] + <a href="#a0" onclick="return toggle_display(this);">Show + Obsolete</a> ([% obsolete_attachments %]) + [% END %] + [% IF Param("allow_attachment_display") %] + <a href="attachment.cgi?bugid=[% bugid %]&action=viewall">View All</a> + [% END %] + </span> + [% END %] + <a href="attachment.cgi?bugid=[% bugid %]&action=enter">Add an attachment</a> + (proposed patch, testcase, etc.) + </td> + </tr> +</table> +<br> diff --git a/template/en/default/attachment/midair.html.tmpl b/template/en/default/attachment/midair.html.tmpl new file mode 100644 index 0000000..f0883b5 --- /dev/null +++ b/template/en/default/attachment/midair.html.tmpl @@ -0,0 +1,78 @@ +[%# 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): Myk Melez <myk@mozilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] + +[%# INTERFACE: + # operations: array; bug activity since the user last displayed the attachment form, + # used by bug/activity/table.html.tmpl to display recent changes that will + # be overwritten if the user submits these changes. See that template + # for further documentation. + # attachment: object; the attachment being changed. + #%] + +[%# The global Bugzilla->cgi object is used to obtain form variable values. %] +[% USE Bugzilla %] +[% cgi = Bugzilla.cgi %] + +[% PROCESS global/variables.none.tmpl %] +[% PROCESS global/header.html.tmpl title = "Mid-air collision!" %] + +<h1>Mid-air collision detected!</h1> + +<p> + Someone else has made changes to + <a href="attachment.cgi?id=[% attachment.id %]&action=edit">attachment [% attachment.id %]</a> + of [% "$terms.bug $attachment.bug_id" FILTER bug_link(attachment.bug_id) FILTER none %] + at the same time you were trying to. The changes made were: +</p> + +<p> + [% PROCESS "bug/activity/table.html.tmpl" incomplete_data=0 %] +</p> + +[% IF cgi.param("comment") %] +<p> + Your comment was:<br> + <blockquote><pre class="bz_comment_text"> + [% cgi.param("comment") FILTER wrap_comment FILTER html %] + </pre></blockquote> +</p> +[% END %] + +<p> +You have the following choices: +</p> + +<ul> + <li> + <form method="post" action="attachment.cgi"> + [% PROCESS "global/hidden-fields.html.tmpl" exclude="^Bugzilla_(login|password)$" %] + <input type="submit" id="process" value="Submit my changes anyway"> + This will cause all of the above changes to be overwritten. + </form> + </li> + <li> + Throw away my changes, and + <a href="attachment.cgi?id=[% attachment.id %]&action=edit">revisit + attachment [% attachment.id %]</a> + </li> +</ul> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/attachment/show-multiple.html.tmpl b/template/en/default/attachment/show-multiple.html.tmpl new file mode 100644 index 0000000..bcc2977 --- /dev/null +++ b/template/en/default/attachment/show-multiple.html.tmpl @@ -0,0 +1,102 @@ +[%# 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): Myk Melez <myk@mozilla.org> + #%] + +[% PROCESS global/variables.none.tmpl %] +[% filtered_summary = bugsummary FILTER html %] +[% header = BLOCK %]View All Attachments for + [%+ "$terms.Bug $bug.id" FILTER bug_link(bug) FILTER none %][% END %] + +[% title = BLOCK %] + View All Attachments for [% terms.Bug %] [%+ bug.bug_id FILTER html %] +[% END %] + +[% PROCESS global/header.html.tmpl + title = title + header = header + subheader = filtered_summary + style_urls = ['skins/standard/create_attachment.css'] +%] + +<br> + +[% FOREACH a = attachments %] + + <div align="center"> + <table class="attachment_info" cellspacing="0" cellpadding="4" border="1" width="75%"> + <tr> + <td valign="top" bgcolor="#cccccc" colspan="6"> + <big><b>Attachment #[% a.id %]</b></big> + </td> + </tr> + <tr> + <td valign="top"> + [% a.description FILTER html FILTER obsolete(a.isobsolete) %] + </td> + + <td valign="top"> + [% IF a.ispatch %] + <i>patch</i> + [% ELSE %] + [% a.contenttype FILTER html %] + [% END %] + </td> + + <td valign="top">[% a.attached FILTER time %]</td> + <td valign="top">[% a.datasize FILTER unitconvert %]</td> + + <td valign="top"> + [% IF a.flags.size == 0 %] + <i>no flags</i> + [% ELSE %] + [% FOREACH flag = a.flags %] + [% flag.setter.nick FILTER html %]: + [%+ flag.type.name FILTER html %][% flag.status %] + [% IF flag.status == "?" && flag.requestee %] + ([% flag.requestee.nick FILTER html %]) + [% END %] + [% ", " IF !loop.last %] + [% END %] + [% END %] + </td> + + <td valign="top"> + <a href="attachment.cgi?id=[% a.id %]&action=edit">Details</a> + </td> + </tr> + </table> + + [% IF a.is_viewable %] + <iframe src="attachment.cgi?id=[% a.id %]" width="75%" height="350"> + <b>You cannot view the attachment on this page because your browser does not support IFRAMEs. + <a href="attachment.cgi?id=[% a.id %]">View the attachment on a separate page</a>.</b> + </iframe> + [% ELSE %] + <p><b> + Attachment cannot be viewed because its MIME type is not text/*, image/*, or application/vnd.mozilla.*. + <a href="attachment.cgi?id=[% a.id %]">Download the attachment instead</a>. + </b></p> + [% END %] + </div> + + <br><br> + +[% END %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/attachment/updated.html.tmpl b/template/en/default/attachment/updated.html.tmpl new file mode 100644 index 0000000..9a74f5c --- /dev/null +++ b/template/en/default/attachment/updated.html.tmpl @@ -0,0 +1,46 @@ +[%# 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): Myk Melez <myk@mozilla.org> + # Gervase Markham <gerv@gerv.net> + #%] + +[%# INTERFACE: + # attachment: object of the attachment we just attached. + #%] + +[% PROCESS global/variables.none.tmpl %] +[% bug = bugs.0 %] + +[% PROCESS "bug/show-header.html.tmpl" %] +[% PROCESS global/header.html.tmpl + title = "Changes Submitted to Attachment $attachment.id of $terms.Bug $attachment.bug_id" +%] + +<dl> + <dt>Changes to + <a href="attachment.cgi?id=[% attachment.id %]&action=edit">attachment [% attachment.id %]</a> + of [% "$terms.bug $attachment.bug_id" FILTER bug_link(attachment.bug_id) FILTER none %] submitted + </dt> + <dd> + [% PROCESS "bug/process/bugmail.html.tmpl" mailing_bugid = attachment.bug_id %] + [%# Links to more information about the changed bug. %] + [% Hook.process("links") %] + </dd> +</dl> + +[% PROCESS bug/show.html.tmpl %] diff --git a/template/en/default/bug/activity/show.html.tmpl b/template/en/default/bug/activity/show.html.tmpl new file mode 100644 index 0000000..67ac689 --- /dev/null +++ b/template/en/default/bug/activity/show.html.tmpl @@ -0,0 +1,49 @@ +[%# 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: + # bug: object. The bug whose activity is being displayed. + # operations: array of hashes, see activity/table.html.tmpl. + # + # This template also needs to be called with the interface to the + # activity/table.html.tmpl template fulfilled. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% filtered_desc = bug.short_desc FILTER html %] +[% PROCESS global/header.html.tmpl + title = "Changes made to $terms.bug $bug.bug_id" + header = "Activity log for $terms.bug $bug.bug_id: $filtered_desc" + %] + +<p> + [% "Back to $terms.bug $bug.bug_id" FILTER bug_link(bug) FILTER none %] +</p> + +[% PROCESS bug/activity/table.html.tmpl %] + +[% IF operations.size > 0 %] + <p> + [% "Back to $terms.bug $bug.bug_id" FILTER bug_link(bug) FILTER none %] + </p> +[% END %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/bug/activity/table.html.tmpl b/template/en/default/bug/activity/table.html.tmpl new file mode 100644 index 0000000..2492534 --- /dev/null +++ b/template/en/default/bug/activity/table.html.tmpl @@ -0,0 +1,113 @@ +[%# 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> + # David D. Kilzer <ddkilzer@kilzer.net> + # Reed Loden <reed@reedloden.com> + #%] + +[%# INTERFACE: + # operations: array of hashes. May be empty. Each has has three members: + # who: string. who performed the operation + # when: string. when they performed it + # changes: hash. Details of what they changed. This hash has three + # compulsory and one optional member: + # field: string. The name of the field + # removed: string. What was removed from the field + # added: string. What was added to the field + # attach_id: integer. If the change was adding an attachment, its id. + # incomplete_data: boolean. True if some of the data is incomplete (because + # it was affected by an old Bugzilla bug.) + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% PROCESS bug/time.html.tmpl %] + +[% IF incomplete_data %] + <p> + There used to be an issue in <a href="http://www.bugzilla.org/">Bugzilla</a> + which caused activity data to be lost if there were a large number of cc's + or dependencies. That has been fixed, but some data was already lost in + your activity table that could not be regenerated. The changes that the + script could not reliably determine are prefixed by '?'. + </p> +[% END %] + +[% IF operations.size > 0 %] + <table border cellpadding="4"> + <tr> + <th>Who</th> + <th>When</th> + <th>What</th> + <th>Removed</th> + <th>Added</th> + </tr> + + [% FOREACH operation = operations %] + <tr> + <td rowspan="[% operation.changes.size %]" valign="top"> + [% operation.who FILTER email FILTER html %] + </td> + <td rowspan="[% operation.changes.size %]" valign="top"> + [% operation.when FILTER time %] + </td> + [% FOREACH change = operation.changes %] + [% "</tr><tr>" IF loop.index > 0 %] + <td> + [% IF change.attachid %] + <a href="attachment.cgi?id=[% change.attachid %]"> + Attachment #[% change.attachid %]</a> + [% END %] + [%+ field_descs.${change.fieldname} FILTER html %] + </td> + [% PROCESS change_column change_type = change.removed %] + [% PROCESS change_column change_type = change.added %] + [% END %] + </tr> + [% END %] + </table> +[% ELSE %] + <p> + No changes have been made to this [% terms.bug %] yet. + </p> +[% END %] + +[% BLOCK change_column %] + <td> + [% IF change_type.defined %] + [% IF change.fieldname == 'estimated_time' || + change.fieldname == 'remaining_time' || + change.fieldname == 'work_time' %] + [% PROCESS formattimeunit time_unit=change_type %] + [% ELSIF change.fieldname == 'blocked' || + change.fieldname == 'dependson' %] + [% change_type FILTER bug_list_link FILTER none %] + [% ELSIF change.fieldname == 'assigned_to' || + change.fieldname == 'reporter' || + change.fieldname == 'qa_contact' || + change.fieldname == 'cc' || + change.fieldname == 'flagtypes.name' %] + [% display_value(change.fieldname, change_type) FILTER email FILTER html %] + [% ELSE %] + [% display_value(change.fieldname, change_type) FILTER html %] + [% END %] + [% ELSE %] + + [% END %] + </td> +[% END %] diff --git a/template/en/default/bug/choose.html.tmpl b/template/en/default/bug/choose.html.tmpl new file mode 100644 index 0000000..9009d38 --- /dev/null +++ b/template/en/default/bug/choose.html.tmpl @@ -0,0 +1,35 @@ +[%# 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> + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl + title = "Search by $terms.bug number" + %] + +<form method="get" action="show_bug.cgi"> + <p> + You may find a single [% terms.bug %] by entering its [% terms.bug %] id here: + <input name="id" size="6"> + <input type="submit" id="show" value="Show Me This [% terms.Bug %]"> + </p> +</form> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/bug/comments.html.tmpl b/template/en/default/bug/comments.html.tmpl new file mode 100644 index 0000000..41b91d7 --- /dev/null +++ b/template/en/default/bug/comments.html.tmpl @@ -0,0 +1,235 @@ +[%# 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> + # Max Kanat-Alexander <mkanat@bugzilla.org> + # Shane H. W. Travis <travis@sedsystems.ca> + #%] + +[% PROCESS bug/time.html.tmpl %] + + <script type="text/javascript"> + <!-- + function updateCommentPrivacy(checkbox, id) { + var comment_elem = document.getElementById('comment_text_'+id).parentNode; + if (checkbox.checked) { + if (!comment_elem.className.match('bz_private')) { + comment_elem.className = comment_elem.className.concat(' bz_private'); + } + } + else { + comment_elem.className = + comment_elem.className.replace(/(\s*|^)bz_private(\s*|$)/, '$2'); + } + } + + /* The functions below expand and collapse comments */ + + function toggle_comment_display(link, comment_id) { + var comment = document.getElementById('comment_text_' + comment_id); + var re = new RegExp(/\bcollapsed\b/); + if (comment.className.match(re)) + expand_comment(link, comment); + else + collapse_comment(link, comment); + } + + function toggle_all_comments(action) { + var num_comments = [% comments.size FILTER html %]; + + // If for some given ID the comment doesn't exist, this doesn't mean + // there are no more comments, but that the comment is private and + // the user is not allowed to view it. + + for (var id = 0; id < num_comments; id++) { + var comment = document.getElementById('comment_text_' + id); + if (!comment) + continue; + + var link = document.getElementById('comment_link_' + id); + if (action == 'collapse') + collapse_comment(link, comment); + else + expand_comment(link, comment); + } + } + + function collapse_comment(link, comment) { + link.innerHTML = "[+]"; + link.title = "Expand the comment."; + YAHOO.util.Dom.addClass(comment, 'collapsed'); + } + + function expand_comment(link, comment) { + link.innerHTML = "[-]"; + link.title = "Collapse the comment"; + YAHOO.util.Dom.removeClass(comment, 'collapsed'); + } + + /* This way, we are sure that browsers which do not support JS + * won't display this link */ + + function addCollapseLink(count) { + document.write(' <a href="#" class="bz_collapse_comment"' + + ' id="comment_link_' + count + + '" onclick="toggle_comment_display(this, ' + count + + '); return false;" title="Collapse the comment.">[-]<\/a> '); + } + //--> + </script> + + +[% DEFAULT start_at = 0 mode = "show" %] +[% sort_order = user.settings.comment_sort_order.value %] + +[%# NOTE: (start_at > 0) means we came here from a midair collision, + # in which case we don't care what the user's preference is. + %] +[% IF (start_at > 0) %] + [% sort_order = "oldest_to_newest" %] +[% END %] + + +[%# Set up the variables as needed, depending on the sort order %] +[% IF sort_order == "oldest_to_newest" %] + [% count = 0 %] + [% description = 0 %] + [% increment = 1 %] +[% ELSE %] + [% increment = -1 %] + [% IF sort_order == "newest_to_oldest" %] + [% count = comments.size - 1 %] + [% description = 0 %] + [% ELSIF sort_order == "newest_to_oldest_desc_first" %] + [% count = comments.size %] + [% description = comments.size %] + [% END %] +[% END %] + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tr> +<td> + +[% FOREACH comment = comments %] + [% IF count >= start_at %] + [% PROCESS a_comment %] + [% END %] + + [% count = count + increment %] +[% END %] + +[%# Note: this template is used in multiple places; if you use this hook, + # make sure you are aware of this fact. + #%] +[% Hook.process("aftercomments") %] + +</td> +<td> + [% IF mode == "edit" %] + <ul class="bz_collapse_expand_comments"> + <li><a href="#" onclick="toggle_all_comments('collapse'); + return false;">Collapse All Comments</a></li> + <li><a href="#" onclick="toggle_all_comments('expand'); + return false;">Expand All Comments</a></li> + </ul> + [% END %] +</td> +</tr></table> + +[%############################################################################%] +[%# Block for individual comments #%] +[%############################################################################%] + +[% BLOCK a_comment %] + [% RETURN IF comment.is_private AND ! user.is_insider %] + + <div class="bz_comment[% " bz_private" IF comment.is_private %] + [% " bz_comment_hilite" IF marks.$count %] + [% " bz_first_comment" IF count == description %]"> + [% IF count == description %] + [% class_name = "bz_first_comment_head" %] + [% comment_label = "Description" %] + [% ELSE %] + [% class_name = "bz_comment_head" %] + [% comment_label = "Comment " _ count %] + [% END %] + + <div class="[% class_name FILTER html %]"> + + [% IF mode == "edit" %] + <span class="bz_comment_actions"> + <script type="text/javascript"><!-- + addReplyLink([% count %], [% comment.id %]); + addCollapseLink([% count %]); // --> + </script> + </span> + [% END %] + + [% IF mode == "edit" && user.is_insider %] + <div class="bz_private_checkbox"> + <input type="hidden" value="1" + name="defined_isprivate_[% comment.id %]"> + <input type="checkbox" + name="isprivate_[% comment.id %]" value="1" + id="isprivate_[% comment.id %]" + onClick="updateCommentPrivacy(this, [% count %])" + [% " checked=\"checked\"" IF comment.is_private %]> + <label for="isprivate_[% comment.id %]">Private</label> + </div> + [% END %] + + <span class="bz_comment_number"> + <a name="c[% count %]" + href="show_bug.cgi?id=[% bug.bug_id %]#c[% count %]"> + [%- comment_label FILTER html %]</a> + </span> + + <span class="bz_comment_user"> + [% INCLUDE global/user.html.tmpl who = comment.author %] + </span> + + <span class="bz_comment_user_images"> + [% FOREACH group = comment.author.direct_group_membership %] + [% NEXT UNLESS group.icon_url %] + <img src="[% group.icon_url FILTER html %]" + alt="[% group.name FILTER html %]" + title="[% group.name FILTER html %] - [% group.description FILTER html %]"> + [% END %] + </span> + + <span class="bz_comment_time"> + [%+ comment.creation_ts FILTER time %] + </span> + </div> + + [% IF user.is_timetracker && + (comment.work_time > 0 || comment.work_time < 0) %] + <br> + Additional hours worked: + [% PROCESS formattimeunit time_unit=comment.work_time %] + [% END %] + +[%# Don't indent the <pre> block, since then the spaces are displayed in the + # generated HTML + #%] +<pre class="bz_comment_text" + [% ' id="comment_text_' _ count _ '"' IF mode == "edit" %]> + [%- comment.body_full({ wrap => 1 }) FILTER quoteUrls(bug, comment) -%] +</pre> + </div> +[% END %] diff --git a/template/en/default/bug/create/comment-guided.txt.tmpl b/template/en/default/bug/create/comment-guided.txt.tmpl new file mode 100644 index 0000000..df04d8f --- /dev/null +++ b/template/en/default/bug/create/comment-guided.txt.tmpl @@ -0,0 +1,54 @@ +[%# 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: + # This template has no interface. + # + # Form variables from a bug submission (i.e. the fields on a template from + # enter_bug.cgi) can be access via Bugzilla.cgi.param. It can be used to + # pull out various custom fields and format an initial Description entry + # from them. + #%] +[% USE Bugzilla %] +[% cgi = Bugzilla.cgi %] +User-Agent: [%+ cgi.user_agent() %] +Build Identifier: [%+ cgi.param("buildid") %] + +[%+ cgi.param("comment") IF cgi.param("comment") %] + +[%+ IF cgi.param("reproducible") != "Choose one..." -%] +Reproducible: [%+ cgi.param("reproducible") %] +[% END %] + +[% IF !(cgi.param("reproduce_steps").match('^1\.\s*2\.\s*3\.\s*$') || cgi.param("reproduce_steps").match('^\s*$')) %] +Steps to Reproduce: +[%+ cgi.param("reproduce_steps") %] +[% END %] + +[% IF cgi.param("actual_results") -%] +Actual Results: +[%+ cgi.param("actual_results") %] +[% END %] + +[% IF cgi.param("expected_results") %] +Expected Results: +[%+ cgi.param("expected_results") %] +[% END %] + +[%+ cgi.param("additional_info") %] diff --git a/template/en/default/bug/create/comment.txt.tmpl b/template/en/default/bug/create/comment.txt.tmpl new file mode 100644 index 0000000..e7339d3 --- /dev/null +++ b/template/en/default/bug/create/comment.txt.tmpl @@ -0,0 +1,32 @@ +[%# 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: + # This template has no interface. + # + # Form variables from a bug submission (i.e. the fields on a template from + # enter_bug.cgi) can be access via Bugzilla.cgi.param. It can be used to + # pull out various custom fields and format an initial Description entry + # from them. + #%] +[% USE Bugzilla %] +[% Hook.process("form") %] + + +[% Bugzilla.cgi.param("comment") %] diff --git a/template/en/default/bug/create/confirm-create-dupe.html.tmpl b/template/en/default/bug/create/confirm-create-dupe.html.tmpl new file mode 100644 index 0000000..b0a5cdd --- /dev/null +++ b/template/en/default/bug/create/confirm-create-dupe.html.tmpl @@ -0,0 +1,57 @@ +[%# 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 Olav Vitters. + # + # Contributor(s): Olav Vitters <olav@bkor.dhs.org> + #%] + +[%# INTERFACE: + # bugid: integer. ID of the bug previously used to create a bug. + # allow_override: boolean int. Is 1 if the user may submit the bug again. + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% PROCESS global/header.html.tmpl + title = "Already filed $terms.bug" +%] + +[% USE Bugzilla %] + +<table cellpadding="20"> + <tr> + <td bgcolor="#ff0000"> + <font size="+2"> + You already used the form to file [% "$terms.bug $bugid" FILTER bug_link(bugid) FILTER none %]. + </font> + </td> + </tr> +</table> + +<p><font size="big">You are highly encouraged to visit [% "$terms.bug $bugid" +FILTER bug_link(bugid) FILTER none %].</font></p> + +[% IF allow_override %] + <p>If you are sure you used the same form to submit a new [% terms.bug %], + click 'File [% terms.bug %] again'.<p> + + <form name="create" id="create" method="post" action="post_bug.cgi" + [%- IF Bugzilla.cgi.param("data") %] enctype="multipart/form-data"[% END %]> + [% PROCESS "global/hidden-fields.html.tmpl" + exclude="^(Bugzilla_login|Bugzilla_password|ignore_token)$" %] + <input type="hidden" name="ignore_token" value="[% bugid FILTER html %]"> + <input type="submit" value="File [% terms.bug %] again" id="file_bug_again"> + </form> +[% END %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/bug/create/create-guided.html.tmpl b/template/en/default/bug/create/create-guided.html.tmpl new file mode 100644 index 0000000..9f2a21b --- /dev/null +++ b/template/en/default/bug/create/create-guided.html.tmpl @@ -0,0 +1,523 @@ +[%# 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> + # Christine Begle <cbegle@mozilla.org> + #%] + +[%# INTERFACE: + # This template has the same interface as create.html.tmpl + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% USE Bugzilla %] +[% cgi = Bugzilla.cgi %] + +[% PROCESS global/header.html.tmpl + title = "Enter $terms.ABug" + onload = "PutDescription()" + style = "#somebugs { width: 100%; height: 500px }" + %] + +<p> + <font color="red"> + This is a template used on mozilla.org. This template, and the + comment-guided.txt.tmpl template that formats the data submitted via + the form in this template, are included as a demo of what it's + possible to do with custom templates in general, and custom [% terms.bug %] + entry templates in particular. As much of the text will not apply, + you should alter it + if you want to use this form on your [% terms.Bugzilla %] installation. + </font> +</p> + +[% tablecolour = "#FFFFCC" %] + +[%# This script displays the descriptions for selected components. %] +<script type="text/javascript"> +var descriptions = [ +[% FOREACH c = product.components %] + '[% c.description FILTER js %]', +[% END %] +]; + +function PutDescription() { + if ((document.getElementById) && (document.body.innerHTML)) { + var componentIndex = document.getElementById('component').selectedIndex; + if (componentIndex != -1) { + var description = document.getElementById('description'); + description.innerHTML = descriptions[componentIndex]; + } + } +} +</script> + +<a name="step1"></a> +<h3>Step 1 of 3 - has your [% terms.bug %] already been reported?</h3> + +<p> + <font color="red">Please don't skip this step - half of all + [% terms.bugs %] filed are + reported already.</font> + Check the two lists of frequently-reported [% terms.bugs %]: +</p> + +[%# Include other products if sensible %] +[% IF product.name == "Firefox" %] + [% productstring = "product=Mozilla%20Application%20Suite&product=Firefox" %] +[% ELSIF product.name == "Thunderbird" %] + [% productstring = "product=Mozilla%20Application%20Suite&product=Thunderbird" %] +[% ELSE %] + [% productstring = BLOCK %]product=[% product.name FILTER url_quote %][% END %] +[% END %] + +<p> + <a href="duplicates.cgi?[% productstring %]&format=simple" target="somebugs">All-time Top 100</a> (loaded initially) | + <a href="duplicates.cgi?[% productstring %]&format=simple&sortby=delta&reverse=1&maxrows=100&changedsince=14" target="somebugs">Hot in the last two weeks</a> +</p> + +<iframe name="somebugs" id="somebugs" + style="border: 2px black solid" + src="duplicates.cgi?[% productstring %]&format=simple"> +</iframe> + +<p> + If your [% terms.bug %] isn't there, search [% terms.Bugzilla %] by entering + a few key words having to do with your [% terms.bug %] in this box. + For example: <tt><b>pop3 mail</b></tt> or <tt><b>copy paste</b></tt>. + The results will appear above. + </p> + +[%# All bugs opened inside the past six months %] + <form action="buglist.cgi" method="get" target="somebugs"> + <input type="hidden" name="format" value="simple"> + <input type="hidden" name="order" value="relevance desc"> + <input type="hidden" name="bug_status" value="__all__"> + <input type="hidden" name="product" value="[% product.name FILTER html %]"> + [% IF product.name == "Firefox" OR + product.name == "Thunderbird" OR + product.name == "Mozilla Application Suite" OR + product.name == "Camino" %] + <input type="hidden" name="product" value="Core"> + <input type="hidden" name="product" value="Toolkit"> + <input type="hidden" name="product" value="PSM"> + <input type="hidden" name="product" value="NSPR"> + <input type="hidden" name="product" value="NSS"> + [% END %] + <input type="hidden" name="chfieldfrom" value="-6m"> + <input type="hidden" name="chfieldto" value="Now"> + <input type="hidden" name="chfield" value="[Bug creation]"> + <input type="text" name="content" size="40"> + <input type="submit" id="search" value="Search"> + </form> + +<p> + Look through the search results. If you get the + <tt><b>[% terms.zeroSearchResults %]</b></tt> message, [% terms.Bugzilla %] + found no [% terms.bugs %] that + match. Check for typing mistakes, or try fewer or different keywords. + If you find [% terms.abug %] that looks the same as yours, please add + any useful extra information you have to it, rather than opening a new one. +</p> + + +<a name="step2"></a> +<h3>Step 2 of 3 - give information</h3> + +<p> + If you've tried a few searches and your [% terms.bug %] really isn't in + there, tell us all about it. +</p> + +<form method="post" action="post_bug.cgi"> + <input type="hidden" name="format" value="guided"> + <input type="hidden" name="assigned_to" value=""> + <input type="hidden" name="priority" + value="[% default.priority FILTER html %]"> + <input type="hidden" name="version" + value="[% default.version FILTER html %]"> + <input type="hidden" name="token" value="[% token FILTER html %]"> + +<table valign="top" cellpadding="5" cellspacing="5" border="0"> + + <tr bgcolor="[% tablecolour %]"> + <td align="right" valign="top"> + <b>Product</b> + </td> + <td valign="top"> + <input type="hidden" name="product" value="[% product.name FILTER html %]"> + [% product.name FILTER html %] + </td> + </tr> + + <tr> + <td align="right" valign="top"> + <b>Component</b> + </td> + <td valign="top"> + <table border="0" cellpadding="0" cellspacing="0"> + <tr> + <td valign="top"> + <select name="component" id="component" + size="5" onchange="PutDescription()"> + [% IF NOT default.component_ %] + [%# Various b.m.o. products have a "General" component, + which is a useful default. %] + [% default.component_ = "General" %] + [% END %] + [% FOREACH c = product.components %] + <option value="[% c.name FILTER html %]" + [% " selected=\"selected\"" IF c.name == default.component_ %]> + [% c.name FILTER html %] + </option> + [% END %] + </select> + </td> + <td valign="top" width="100%"> + <div id="description" style="color: green; margin-left: 10px; + height: 5em; overflow: auto;"> + <script type="text/javascript"> + if ((document.getElementById) && (document.body.innerHTML)) { + document.write("\ + Select a component to see its description here."); + } + </script> + </div> + </td> + </tr> + </table> + + <p> + The area where the problem occurs. + To pick the right component, you could use the same one as + similar [% terms.bugs %] you found in your search, or read the full list of + <a target="_blank" href="describecomponents.cgi?product= + [% product.name FILTER url_quote %]">component + descriptions</a> (opens in new window) if you need more help. + </p> + </td> + </tr> + + [%# We override rep_platform and op_sys for simplicity. The values chosen + are based on which are most common in the b.m.o database %] + [% rep_platform = [ "PC", "Macintosh", "All", "Other" ] %] + + <tr bgcolor="[% tablecolour %]"> + <td align="right" valign="top"> + <b>Hardware Platform</b> + </td> + <td valign="top"> + [% PROCESS select sel = 'rep_platform' %] + </td> + </tr> + + [% op_sys = [ "Windows 2000", "Windows XP", "Windows Vista", "Windows 7", + "Mac OS X", "Linux", "All", "Other" ] %] + + <tr> + <td align="right" valign="top"> + <b>Operating System</b> + </td> + <td valign="top"> + [% PROCESS select sel = 'op_sys' %] + </td> + </tr> + + [% IF product.name.match("Firefox|Camino|Mozilla Application Suite") %] + [% matches = cgi.user_agent('Gecko/(\d+)') %] + [% buildid = cgi.user_agent() IF matches %] + [% END %] + + [%# Accept URL parameter build ID for non-browser products %] + [% IF cgi.param("buildid") %] + [% buildid = cgi.param("buildid") %] + [% END %] + + <tr bgcolor="[% tablecolour %]"> + <td align="right" valign="top"> + <b>Build Identifier</b> + </td> + <td valign="top"> + <input type="text" size="80" name="buildid" value="[% buildid FILTER html %]"> + <p> + This should identify the exact version of the product you were using. + If the above field is blank or you know it is incorrect, copy the + version text from the product's Help | + About menu (for browsers this will begin with "Mozilla/5.0..."). + If the product won't start, instead paste the complete URL you downloaded + it from. + </p> + </td> + </tr> + + <tr> + <td align="right" valign="top"> + <b>URL</b> + </td> + <td valign="top"> + <input type="text" size="80" name="bug_file_loc" value="http://"> + <p> + URL that demonstrates the problem you are seeing (optional).<br> + <b>IMPORTANT</b>: if the problem is with a broken web page, you need + to report it + <a href="https://bugzilla.mozilla.org/page.cgi?id=broken-website.html">a different way</a>. + </p> + </td> + </tr> + + <tr bgcolor="[% tablecolour %]"> + <td align="right" valign="top"> + <b>Summary</b> + </td> + <td valign="top"> + <input type="text" size="80" name="short_desc" id="short_desc" + maxlength="255" spellcheck="true"> + <p> + A sentence which summarises the problem. + Please be descriptive and use lots of keywords. + </p> + <p> + <tt> + <font color="#990000">Bad example</font>: mail crashed + </tt> + <br> + <tt> + <font color="#009900">Good example</font>: + crash if I close the mail window while checking for new POP mail + </tt> + </p> + </td> + </tr> + + <tr> + <td align="right" valign="top"> + <b>Details</b> + </td> + <td valign="top"> + [% INCLUDE global/textarea.html.tmpl + name = 'comment' + minrows = 6 + cols = constants.COMMENT_COLS + %] + <p> + Expand on the Summary. Please be + as specific as possible about what is wrong. + </p> + <p> + <tt> + <font color="#990000">Bad example</font>: Mozilla crashed. + You suck! + </tt> + <br> + <tt> + <font color="#009900">Good example</font>: After a crash which + happened when I was sorting in the Bookmark Manager,<br> all of my + top-level bookmark folders beginning with the letters Q to Z are + no longer present. + </tt> + </p> + </td> + </tr> + + <tr bgcolor="[% tablecolour %]"> + <td align="right" valign="top"> + <b>Reproducibility</b> + </td> + <td valign="top"> + <select name="reproducible"> + <option name="AlwaysReproducible" value="Always"> + Happens every time. + </option> + <option name="Sometimes" value="Sometimes"> + Happens sometimes, but not always. + </option> + <option name="DidntTry" value="Didn't try"> + Haven't tried to reproduce it. + </option> + <option name="NotReproducible" value="Couldn't Reproduce"> + Tried, but couldn't reproduce it. + </option> + </select> + </td> + </tr> + + <tr> + <td align="right" valign="top"> + <b>Steps to Reproduce</b> + </td> + <td valign="top"> + [% INCLUDE global/textarea.html.tmpl + name = 'reproduce_steps' + minrows = 4 + cols = constants.COMMENT_COLS + defaultcontent = "1.\n2.\n3." + %] + <p> + Describe how to reproduce the problem, step by + step. Include any special setup steps. + </p> + </td> + </tr> + + <tr bgcolor="[% tablecolour %]"> + <td valign="top" align="right"> + <b>Actual Results</b> + </td> + <td valign="top"> + [% INCLUDE global/textarea.html.tmpl + name = 'actual_results' + minrows = 4 + cols = constants.COMMENT_COLS + %] + <p> + What happened after you performed the steps above? + </p> + </td> + </tr> + + <tr> + <td valign="top" align="right"> + <b>Expected Results</b> + </td> + <td valign="top"> + [% INCLUDE global/textarea.html.tmpl + name = 'expected_results' + minrows = 4 + cols = constants.COMMENT_COLS + %] + <p> + What should the software have done instead? + </p> + </td> + </tr> + + <tr bgcolor="[% tablecolour %]"> + <td valign="top" align="right"> + <b>Additional Information</b> + </td> + <td valign="top"> + [% INCLUDE global/textarea.html.tmpl + name = 'additional_info' + minrows = 8 + cols = constants.COMMENT_COLS + %] + <p> + Add any additional information you feel may be + relevant to this [% terms.bug %], such as the <b>theme</b> you were + using (does the [% terms.bug %] still occur + with the default theme?), a + <b><a href="http://kb.mozillazine.org/Quality_Feedback_Agent">Talkback crash ID</a></b>, or special + information about <b>your computer's configuration</b>. Any information + longer than a few lines, such as a <b>stack trace</b> or <b>HTML + testcase</b>, should be added + using the "Add an Attachment" link on the [% terms.bug %], after + it is filed. If you believe that it's relevant, please also include + your build configuration, obtained by typing <tt>about:buildconfig</tt> + into your URL bar. + <br> + <br> + If you are reporting a crash, note the module in + which the software crashed (e.g., <tt>Application Violation in + gkhtml.dll</tt>). + </p> + </td> + </tr> + + <tr> + <td valign="top" align="right"> + <b>Severity</b> + </td> + <td valign="top"> + <select name="bug_severity"> + <option name="critical" value="critical"> + Critical: The software crashes, hangs, or causes you to + lose data. + </option> + <option name="major" value="major"> + Major: A major feature is broken. + </option> + <option name="normal" value="normal" selected="selected"> + Normal: It's [% terms.abug %] that should be fixed. + </option> + <option name="minor" value="minor"> + Minor: Minor loss of function, and there's an easy workaround. + </option> + <option name="trivial" value="trivial"> + Trivial: A cosmetic problem, such as a misspelled word or + misaligned text. + </option> + <option name="enhancement" value="enhancement"> + Enhancement: Request for new feature or enhancement. + </option> + </select> + <p> + Say how serious the problem is, or if your [% terms.bug %] is a + request for a new feature. + </p> + </td> + </tr> +</table> + + +<a name="step3"></a> +<h3>Step 3 of 3 - submit the [% terms.bug %] report</h3> + +<p> + <input type="submit" id="report" value=" Submit [% terms.Bug %] Report " + onclick="if (this.form.comment.value == '') + { alert('Please enter some details about this [% terms.bug %].'); + this.form.comment.focus(); + return false; } return true;"> +</p> + +<p> + That's it! Thanks very much. You'll be notified by email about any + progress that is made on fixing your [% terms.bug %]. + +<p> + Please be warned + that we get a lot of [% terms.bug %] reports filed - it may take quite a + while to get around to yours. You can help the process by making sure your + [%+ terms.bug %] is + complete and easy to understand, and by quickly replying to any questions + which may arrive by email. +</p> + + </form> + +[% PROCESS global/footer.html.tmpl %] + +[%############################################################################%] +[%# Block for SELECT fields #%] +[%############################################################################%] + +[% BLOCK select %] + <select name="[% sel %]"> + [%- IF default.$sel %] + <option value="[% default.$sel FILTER html %]" selected="selected"> + [% default.$sel FILTER html -%] + </option> + [% END %] + [%- FOREACH x = $sel %] + [% NEXT IF x == default.$sel %] + <option value="[% x FILTER html %]"> + [% x FILTER html -%] + </option> + [%- END %] + </select> +[% END %] diff --git a/template/en/default/bug/create/create.html.tmpl b/template/en/default/bug/create/create.html.tmpl new file mode 100644 index 0000000..4b17457 --- /dev/null +++ b/template/en/default/bug/create/create.html.tmpl @@ -0,0 +1,705 @@ +[%# 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> + # Ville Skyttä <ville.skytta@iki.fi> + # Shane H. W. Travis <travis@sedsystems.ca> + # Marc Schumann <wurblzap@gmail.com> + # Akamai Technologies <bugzilla-dev@akamai.com> + # Max Kanat-Alexander <mkanat@bugzilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% title = BLOCK %]Enter [% terms.Bug %]: [% product.name FILTER html %][% END %] + +[% PROCESS global/header.html.tmpl + title = title + style_urls = [ 'skins/standard/create_attachment.css', + 'skins/standard/yui/calendar.css' ] + javascript_urls = [ "js/attachment.js", "js/util.js", "js/yui/calendar.js", + "js/field.js", "js/TUI.js" ] + onload = 'set_assign_to();' +%] + +<script type="text/javascript"> +<!-- + +var initialowners = new Array([% product.components.size %]); +var last_initialowner; +var initialccs = new Array([% product.components.size %]); +var components = new Array([% product.components.size %]); +var comp_desc = new Array([% product.components.size %]); +var flags = new Array([% product.components.size %]); +[% IF Param("useqacontact") %] + var initialqacontacts = new Array([% product.components.size %]); + var last_initialqacontact; +[% END %] +[% count = 0 %] +[%- FOREACH c = product.components %] + components[[% count %]] = "[% c.name FILTER js %]"; + comp_desc[[% count %]] = "[% c.description FILTER html_light FILTER js %]"; + initialowners[[% count %]] = "[% c.default_assignee.login FILTER js %]"; + [% flag_list = [] %] + [% FOREACH f = c.flag_types.bug %] + [% NEXT UNLESS f.is_active %] + [% flag_list.push(f.id) %] + [% END %] + [% FOREACH f = c.flag_types.attachment %] + [% NEXT UNLESS f.is_active %] + [% flag_list.push(f.id) %] + [% END %] + flags[[% count %]] = [[% flag_list.join(",") FILTER js %]]; + [% IF Param("useqacontact") %] + initialqacontacts[[% count %]] = "[% c.default_qa_contact.login FILTER js %]"; + [% END %] + + [% SET initial_cc_list = [] %] + [% FOREACH cc_user = c.initial_cc %] + [% initial_cc_list.push(cc_user.login) %] + [% END %] + initialccs[[% count %]] = "[% initial_cc_list.join(', ') FILTER js %]"; + + [% count = count + 1 %] +[%- END %] + +function set_assign_to() { + // Based on the selected component, fill the "Assign To:" field + // with the default component owner, and the "QA Contact:" field + // with the default QA Contact. It also selectively enables flags. + var form = document.Create; + var assigned_to = form.assigned_to.value; + +[% IF Param("useqacontact") %] + var qa_contact = form.qa_contact.value; +[% END %] + + var index = -1; + if (form.component.type == 'select-one') { + index = form.component.selectedIndex; + } else if (form.component.type == 'hidden') { + // Assume there is only one component in the list + index = 0; + } + if (index != -1) { + var owner = initialowners[index]; + var component = components[index]; + if (assigned_to == last_initialowner + || assigned_to == owner + || assigned_to == '') { + form.assigned_to.value = owner; + last_initialowner = owner; + } + + document.getElementById('initial_cc').innerHTML = initialccs[index]; + document.getElementById('comp_desc').innerHTML = comp_desc[index]; + + [% IF Param("useqacontact") %] + var contact = initialqacontacts[index]; + if (qa_contact == last_initialqacontact + || qa_contact == contact + || qa_contact == '') { + form.qa_contact.value = contact; + last_initialqacontact = contact; + } + [% END %] + + // First, we disable all flags. Then we re-enable those + // which are available for the selected component. + var inputElements = document.getElementsByTagName("select"); + var inputElement, flagField; + for ( var i=0 ; i<inputElements.length ; i++ ) { + inputElement = inputElements.item(i); + if (inputElement.name.search(/^flag_type-(\d+)$/) != -1) { + var id = inputElement.name.replace(/^flag_type-(\d+)$/, "$1"); + inputElement.disabled = true; + // Also disable the requestee field, if it exists. + inputElement = document.getElementById("requestee_type-" + id); + if (inputElement) inputElement.disabled = true; + } + } + // Now enable flags available for the selected component. + for (var i = 0; i < flags[index].length; i++) { + flagField = document.getElementById("flag_type-" + flags[index][i]); + // Do not enable flags the user cannot set nor request. + if (flagField && flagField.options.length > 1) { + flagField.disabled = false; + // Re-enabling the requestee field depends on the status + // of the flag. + toggleRequesteeField(flagField, 1); + } + } + } +} + +function handleWantsAttachment(wants_attachment) { + if (wants_attachment) { + document.getElementById('attachment_false').style.display = 'none'; + document.getElementById('attachment_true').style.display = 'block'; + } + else { + document.getElementById('attachment_false').style.display = 'block'; + document.getElementById('attachment_true').style.display = 'none'; + clearAttachmentFields(); + } +} + + +TUI_alternates['expert_fields'] = 'Show Advanced Fields'; +// Hide the Advanced Fields by default, unless the user has a cookie +// that specifies otherwise. +TUI_hide_default('expert_fields'); + +--> +</script> + +[% USE Bugzilla %] +[% SET select_fields = {} %] +[% FOREACH field = Bugzilla.get_fields( + { type => constants.FIELD_TYPE_SINGLE_SELECT, custom => 0 }) +%] + [% select_fields.${field.name} = field %] +[% END %] + +<form name="Create" id="Create" method="post" action="post_bug.cgi" + enctype="multipart/form-data"> +<input type="hidden" name="product" value="[% product.name FILTER html %]"> +<input type="hidden" name="token" value="[% token FILTER html %]"> + +<table cellspacing="4" cellpadding="2" border="0"> +<tbody> + <tr> + <td colspan="4"> + [%# Migration note: The following file corresponds to the old Param + # 'entryheaderhtml' + #%] + [% PROCESS 'bug/create/user-message.html.tmpl' %] + </td> + </tr> + + <tr> + <td colspan="2"> + <a id="expert_fields_controller" class="controller bz_default_hidden" + href="javascript:TUI_toggle_class('expert_fields')">Hide + Advanced Fields</a> + [%# Show the link if the browser supports JS %] + <script type="text/javascript"> + YAHOO.util.Dom.removeClass('expert_fields_controller', + 'bz_default_hidden'); + </script> + </td> + <td colspan="2"> + (<span class="required_star">*</span> = + <span class="required_explanation">Required Field</span>) + </td> + </tr> + + <tr> + <th>Product:</th> + <td width="10%">[% product.name FILTER html %]</td> + + <th>Reporter:</th> + <td width="100%">[% user.login FILTER html %]</td> + </tr> + + [%# We can't use the select block in these two cases for various reasons. %] + <tr> + <th class="required"> + <a href="describecomponents.cgi?product=[% product.name FILTER url_quote %]"> + Component</a>: + </th> + <td> + <select name="component" onchange="set_assign_to();" size="7" + aria-required="true" class="required"> + [%# Build the lists of assignees and QA contacts if "usemenuforusers" is enabled. %] + [% IF Param("usemenuforusers") %] + [% assignees_list = user.get_userlist.clone %] + [% qa_contacts_list = user.get_userlist.clone %] + [% END %] + + [%- FOREACH c = product.components %] + <option value="[% c.name FILTER html %]" + [% " selected=\"selected\"" IF c.name == default.component_ %]> + [% c.name FILTER html -%] + </option> + [% IF Param("usemenuforusers") %] + [% INCLUDE build_userlist default_user = c.default_assignee, + userlist = assignees_list %] + [% INCLUDE build_userlist default_user = c.default_qa_contact, + userlist = qa_contacts_list %] + [% END %] + [%- END %] + </select> + </td> + + <td colspan="2"> + [%# Enclose the fieldset in a nested table so that its width changes based + # on the length on the component description. %] + <table> + <tr> + <td> + <fieldset> + <legend>Component Description</legend> + <div id="comp_desc" class="comment">Select a component to read its description.</div> + </fieldset> + </td> + </tr> + </table> + </td> + </tr> + + <tr> + <th rowspan="3">Version:</th> + <td rowspan="3"> + <select name="version" size="5"> + [%- FOREACH v = version %] + <option value="[% v FILTER html %]" + [% ' selected="selected"' IF v == default.version %]>[% v FILTER html -%] + </option> + [%- END %] + </select> + </td> + + [% INCLUDE bug/field.html.tmpl + bug = default, field = select_fields.bug_severity, editable = 1, + value = default.bug_severity %] + </tr> + + <tr> + [% INCLUDE bug/field.html.tmpl + bug = default, field = select_fields.rep_platform, editable = 1, + value = default.rep_platform %] + </tr> + + <tr> + [% INCLUDE bug/field.html.tmpl + bug = default, field = select_fields.op_sys, editable = 1, + value = default.op_sys %] + </tr> +</tbody> + +<tbody class="expert_fields"> + <tr> + [% IF Param('usetargetmilestone') && Param('letsubmitterchoosemilestone') %] + [% sel = { description => 'Target Milestone', name => 'target_milestone' } %] + [% INCLUDE select %] + [% ELSE %] + <td colspan="2"> </td> + [% END %] + + [% IF Param('letsubmitterchoosepriority') %] + [% INCLUDE bug/field.html.tmpl + bug = default, field = select_fields.priority, editable = 1, + value = default.priority %] + [% ELSE %] + <td colspan="2"> </td> + [% END %] + </tr> +</tbody> + +[% IF !Param('defaultplatform') || !Param('defaultopsys') %] + <tbody> + <tr> + <th> </th> + <td colspan="3" class="comment"> + We've made a guess at your + [% IF Param('defaultplatform') %] + operating system. Please check it + [% ELSIF Param('defaultopsys') %] + platform. Please check it + [% ELSE %] + operating system and platform. Please check them + [% END %] + and make any corrections if necessary. + </td> + </tr> + </tbody> +[% END %] + +<tbody class="expert_fields"> + <tr> + <td colspan="4"> </td> + </tr> + + <tr> +[% IF bug_status.size <= 1 %] + <input type="hidden" name="bug_status" + value="[% default.bug_status FILTER html %]"> + <th>Initial State:</th> + <td>[% display_value("bug_status", default.bug_status) FILTER html %]</td> +[% ELSE %] + [% sel = { description => 'Initial State', name => 'bug_status' } %] + [% INCLUDE select %] +[% END %] + + <td> </td> + [%# Calculate the number of rows we can use for flags %] + [% num_rows = 6 + (Param("useqacontact") ? 1 : 0) + + (user.is_timetracker ? 3 : 0) + + (Param("usebugaliases") ? 1 : 0) + %] + + <td rowspan="[% num_rows FILTER html %]"> + [% IF product.flag_types.bug.size > 0 %] + [% display_flag_headers = 0 %] + [% any_flags_requesteeble = 0 %] + + [% FOREACH flag_type = product.flag_types.bug %] + [% NEXT UNLESS flag_type.is_active %] + [% display_flag_headers = 1 %] + [% SET any_flags_requesteeble = 1 IF flag_type.is_requestable && flag_type.is_requesteeble %] + [% END %] + + [% IF display_flag_headers %] + [% PROCESS "flag/list.html.tmpl" flag_types = product.flag_types.bug + any_flags_requesteeble = any_flags_requesteeble + flag_table_id = "bug_flags" + %] + [% END %] + [% END %] + </td> + </tr> + + <tr> + <th><a href="page.cgi?id=fields.html#assigned_to">Assign To</a>:</th> + <td colspan="2"> + [% INCLUDE global/userselect.html.tmpl + name => "assigned_to" + value => assigned_to + disabled => assigned_to_disabled + size => 30 + emptyok => 1 + custom_userlist => assignees_list + %] + <noscript>(Leave blank to assign to component's default assignee)</noscript> + </td> + </tr> + +[% IF Param("useqacontact") %] + <tr> + <th>QA Contact:</th> + <td colspan="2"> + [% INCLUDE global/userselect.html.tmpl + name => "qa_contact" + value => qa_contact + disabled => qa_contact_disabled + size => 30 + emptyok => 1 + custom_userlist => qa_contacts_list + %] + <noscript>(Leave blank to assign to default qa contact)</noscript> + </td> + </tr> +[% END %] + + <tr> + <th>CC:</th> + <td colspan="2"> + [% INCLUDE global/userselect.html.tmpl + name => "cc" + value => cc + disabled => cc_disabled + size => 30 + multiple => 5 + %] + </td> + </tr> + + <tr> + <th>Default CC:</th> + <td colspan="2"> + <div id="initial_cc"> + </div> + </td> + </tr> + + <tr> + <td colspan="3"> </td> + </tr> + +[% IF user.is_timetracker %] + <tr> + <th>Estimated Hours:</th> + <td colspan="2"> + <input name="estimated_time" size="6" maxlength="6" value="[% estimated_time FILTER html %]"> + </td> + </tr> + <tr> + <th>Deadline:</th> + <td colspan="2"> + <input name="deadline" size="10" maxlength="10" value="[% deadline FILTER html %]"> + <small>(YYYY-MM-DD)</small> + </td> + </tr> + + <tr> + <td colspan="3"> </td> + </tr> +[% END %] + +[% IF Param("usebugaliases") %] + <tr> + <th>Alias:</th> + <td colspan="2"> + <input name="alias" size="20" value="[% alias FILTER html %]"> + </td> + </tr> +[% END %] + + <tr> + <th>URL:</th> + <td colspan="2"> + <input name="bug_file_loc" size="40" + value="[% bug_file_loc FILTER html %]"> + </td> + </tr> +</tbody> + +<tbody class="expert_fields"> + [% USE Bugzilla %] + + [% FOREACH field = Bugzilla.active_custom_fields %] + [% NEXT UNLESS field.enter_bug %] + [% SET value = ${field.name}.defined ? ${field.name} : "" %] + <tr> + [% INCLUDE bug/field.html.tmpl + bug = default, field = field, value = value, editable = 1, + value_span = 3 %] + </tr> + [% END %] +</tbody> + +<tbody> + + <tr> + <th class="required">Summary:</th> + <td colspan="3"> + <input name="short_desc" size="70" value="[% short_desc FILTER html %]" + maxlength="255" spellcheck="true" aria-required="true" + class="required"> + </td> + </tr> + + <tr> + <th>Description:</th> + <td colspan="3"> + [% defaultcontent = BLOCK %] + [% IF cloned_bug_id %] ++++ This [% terms.bug %] was initially created as a clone of [% terms.Bug %] #[% cloned_bug_id %] +++ + + + [% END %] + [%-# We are within a BLOCK. The comment will be correctly HTML-escaped + # by global/textarea.html.tmpl. So we must not escape the comment here. %] + [% comment FILTER none %] + [%- END %] + [% INCLUDE global/textarea.html.tmpl + name = 'comment' + id = 'comment' + minrows = 10 + maxrows = 25 + cols = constants.COMMENT_COLS + defaultcontent = defaultcontent + %] + <br> + </td> + </tr> + + [% IF user.is_insider %] + <tr class="expert_fields"> + <th> </th> + <td colspan="3"> + + <input type="checkbox" id="commentprivacy" name="commentprivacy" + [% " checked=\"checked\"" IF commentprivacy %]> + <label for="commentprivacy"> + Make description private (visible only to members of the + <strong>[% Param('insidergroup') FILTER html %]</strong> group) + </label> + </td> + </tr> + [% END %] + + <tr> + <th>Attachment:</th> + <td colspan="3"> + <script type="text/javascript"> + <!-- + document.write( '<div id="attachment_false">' + + '<input type="button" value="Add an attachment" ' + + 'onClick="handleWantsAttachment(true)"> ' + + '<em style="display: none">This button has no ' + + 'functionality for you because your browser does ' + + 'not support CSS or does not use it.<\/em>' + + '<\/div>' + + '<div id="attachment_true" style="display: none">' + + '<input type="button" ' + + 'value="Don\'t add an attachment " ' + + 'onClick="handleWantsAttachment(false)">'); + //--> + </script> + <fieldset> + <legend>Add an attachment</legend> + <table class="attachment_entry"> + [% PROCESS attachment/createformcontents.html.tmpl + flag_types = product.flag_types.attachment + any_flags_requesteeble = 1 + flag_table_id ="attachment_flags" %] + </table> + </fieldset> + <script type="text/javascript"> + <!-- + document.write('<\/div>'); + //--> + </script> + </td> + </tr> +</tbody> + +<tbody class="expert_fields"> + [% IF user.in_group('editbugs', product.id) %] + [% IF use_keywords %] + <tr> + <th><a href="describekeywords.cgi">Keywords</a>:</th> + <td colspan="3"> + <input id="keywords" name="keywords" size="40" + value="[% keywords FILTER html %]"> (optional) + </td> + </tr> + [% END %] + + <tr> + <th>Depends on:</th> + <td colspan="3"> + <input name="dependson" accesskey="d" value="[% dependson FILTER html %]"> + </td> + </tr> + <tr> + <th>Blocks:</th> + <td colspan="3"> + <input name="blocked" accesskey="b" value="[% blocked FILTER html %]"> + </td> + </tr> + [% END %] +</tbody> + +<tbody class="expert_fields"> + [% IF group.size %] + <tr> + <th> </th> + <td colspan="3"> + <br> + <strong> + Only users in all of the selected groups can view this [% terms.bug %]: + </strong> + <br> + <font size="-1"> + (Leave all boxes unchecked to make this a public [% terms.bug %].) + </font> + <br> + <br> + + <!-- Checkboxes --> + [% FOREACH g = group %] + + <input type="checkbox" id="bit-[% g.bit %]" + name="bit-[% g.bit %]" value="1" + [% " checked=\"checked\"" IF g.checked %]> + <label for="bit-[% g.bit %]">[% g.description FILTER html_light %]</label><br> + [% END %] + </td> + </tr> + [% END %] +</tbody> + +<tbody> + [%# Form controls for entering additional data about the bug being created. %] + [% Hook.process("form") %] + + <tr> + <th> </th> + <td colspan="3"> + <input type="submit" id="commit" value="Submit [% terms.Bug %]" + onclick="if (this.form.short_desc.value == '') + { alert('Please enter a summary sentence for this [% terms.bug %].'); + return false; } return true;"> + + <input type="submit" name="maketemplate" id="maketemplate" + value="Remember values as bookmarkable template" + class="expert_fields"> + </td> + </tr> +</tbody> + </table> + <input type="hidden" name="form_name" value="enter_bug"> +</form> + +[%# Links or content with more information about the bug being created. %] +[% Hook.process("end") %] + +[% PROCESS global/footer.html.tmpl %] + +[%############################################################################%] +[%# Block for SELECT fields #%] +[%############################################################################%] + +[% BLOCK select %] + [% IF sel.description %] + <th> + <a href="page.cgi?id=fields.html#[% sel.name %]">[% sel.description %]</a>: + </th> + [% END %] + + <td> + <select name="[% sel.name %]" id="[% sel.name %]"> + [%- FOREACH x = ${sel.name} %] + <option value="[% x FILTER html %]" + [% " selected=\"selected\"" IF x == default.${sel.name} %]> + [% display_value(sel.name, x) FILTER html %] + </option> + [% END %] + </select> + + [% IF sel.name == "bug_status" %] + <script type="text/javascript"> + <!-- + [%+ INCLUDE "bug/field-events.js.tmpl" + field = select_fields.bug_status %] + //--> + </script> + [% END %] + </td> +[% END %] + +[% BLOCK build_userlist %] + [% user_found = 0 %] + [% default_login = default_user.login %] + [% RETURN UNLESS default_login %] + + [% FOREACH user = userlist %] + [% IF user.login == default_login %] + [% user_found = 1 %] + [% LAST %] + [% END %] + [% END %] + + [% userlist.push({login => default_login, + identity => default_user.identity, + visible => 1}) + UNLESS user_found %] +[% END %] diff --git a/template/en/default/bug/create/created.html.tmpl b/template/en/default/bug/create/created.html.tmpl new file mode 100644 index 0000000..d9eaccb --- /dev/null +++ b/template/en/default/bug/create/created.html.tmpl @@ -0,0 +1,61 @@ +[%# 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: + # id: number; the ID of the bug that was created. + # sentmail: array of hash; bugs for which BugMail should be sent, contains: + # type: string; type of change for this bug, either 'created' if this bug + # was created or 'dep' if it was added as a dependent/blocker + # id: integer; the ID of the bug + # bug: object; Bugzilla::Bug object of the bug that was created (used in + # template bug/edit.html.tmpl + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS "bug/show-header.html.tmpl" %] +[% PROCESS global/header.html.tmpl + title = "$terms.Bug $id Submitted – $filtered_desc" + header = "$terms.Bug $id Submitted" +%] + +[% header_done = 1 %] + +[% FOREACH item = sentmail %] + [% PROCESS bug/process/results.html.tmpl + type = item.type + id = item.id + sent_bugmail = item + %] +[% END %] + +<br> + +<hr> + +[% PROCESS bug/edit.html.tmpl %] + +<hr> + +[% PROCESS bug/navigate.html.tmpl bottom_navigator => 1 %] + +<br> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/bug/create/make-template.html.tmpl b/template/en/default/bug/create/make-template.html.tmpl new file mode 100644 index 0000000..1397483 --- /dev/null +++ b/template/en/default/bug/create/make-template.html.tmpl @@ -0,0 +1,46 @@ +[%# 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> + # Marc Schumann <wurblzap@gmail.com> + #%] + +[%# INTERFACE: + # url: URL to a pre-filled bug entry form. + # short_desc: Bug summary as entered in the form. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl + title = "Bookmarks are your friend" + header = "Template constructed" +%] + +<p> + You can bookmark this link: + “<a href="enter_bug.cgi?[% url FILTER html %]"> + [% IF short_desc %] + [% short_desc FILTER html %] + [% ELSE %] + [% terms.Bug %] entry template + [% END %]</a>”. + This bookmark will bring up the <em>Enter [% terms.Bug %]</em> page with the + fields initialized as you've requested. +</p> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/bug/create/user-message.html.tmpl b/template/en/default/bug/create/user-message.html.tmpl new file mode 100644 index 0000000..ac2cc29 --- /dev/null +++ b/template/en/default/bug/create/user-message.html.tmpl @@ -0,0 +1,36 @@ +[%# 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): Matthew Tuck <matty@chariot.net.au> + #%] + +[%# Migration note: this file corresponds to the old Param + # 'entryheaderhtml' + #%] + +[%# You can make the output of this template product-specific by using + # Template Toolkit IF statements. The current product name is stored in + # the 'product' variable. + #%] + +[% PROCESS global/variables.none.tmpl %] + +Before reporting [% terms.abug %], please read the +<a href="page.cgi?id=bug-writing.html"> +[% terms.bug %] writing guidelines</a>, please look at the list of +<a href="duplicates.cgi">most frequently reported [% terms.bugs %]</a>, and please +<a href="query.cgi">search</a> for the [% terms.bug %]. diff --git a/template/en/default/bug/dependency-graph.html.tmpl b/template/en/default/bug/dependency-graph.html.tmpl new file mode 100644 index 0000000..37dcde0 --- /dev/null +++ b/template/en/default/bug/dependency-graph.html.tmpl @@ -0,0 +1,106 @@ +[%# 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: + # bug_id: integer. The number of the bug(s). + # multiple_bugs: boolean. True if bug_id contains > 1 bug number. + # doall: boolean. True if we are displaying every bug in the database. + # showsummary: boolean. True if we are showing bug summaries. + # rankdir: string. "TB" if we are ranking top-to-bottom, + "LR" if left-to-right. + # image_url: string. The URL of the graphic showing the dependencies. + # map_url: string. The URL of the map file for the image. (Optional) + # image_map: string. The image map for the graphic showing the + dependencies. (Optional) + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% title = "Dependency Graph" + header = title + %] + +[% IF NOT multiple_bugs AND NOT doall %] + [% filtered_desc = short_desc FILTER html %] + [% title = "$title for $terms.bug $bug_id" + header = "$header for $terms.bug <a href=\"show_bug.cgi?id=$bug_id\">$bug_id</a>" + subheader = filtered_desc + %] +[% END %] + +[% PROCESS global/header.html.tmpl %] + +[% image_map %] + +<p> + Green circles represent open [% terms.bugs %]. +</p> + +[% IF image_map %] + <img src="[% image_url %]" alt="Dependency graph" usemap="#imagemap"> +[% ELSE %] + <a href="[% map_url %]"> + <img src="[% image_url %]" alt="Dependency graph" ismap="ismap"> + </a> +[% END %] + +<hr> + +<form action="showdependencygraph.cgi" method="GET"> + <table> + <tr> + <th align="left"><label for="id">[% terms.Bug %] numbers</label>:</th> + <td><input id="id" name="id" value="[% bug_id %]"></td> + <td> + <input type="checkbox" id="showsummary" name="showsummary" [% " checked" IF showsummary %]> + <label for="showsummary">Show the summaries of all displayed [% terms.bugs %]</label> + </td> + </tr> + + <tr> + <th align="left"><label for="display">Display:</label></th> + <td colspan="2"> + <select id="display" name="display"> + <option value="tree"[% 'selected="selected"' IF (!display || display == "tree") %]> + Restrict to [% terms.bugs %] having a direct relationship with entered [% terms.bugs %]</option> + <option value="web" [% 'selected="selected"' IF display == "web" %]> + Show all [% terms.bugs %] having any relationship with entered [% terms.bugs %]</option> + <option value="doall" [% 'selected="selected"' IF display == "doall" %]> + Show every [% terms.bug %] in the system with dependencies</option> + </select> + </td> + </tr> + + <tr> + <th align="left"><label for="rankdir">Orientation:</label></th> + <td colspan="2"> + <select id="rankdir" name="rankdir"> + <option value="TB"[% " selected" IF rankdir == "TB" %]>Top to bottom</option> + <option value="BT"[% " selected" IF rankdir == "BT" %]>Bottom to top</option> + <option value="LR"[% " selected" IF rankdir == "LR" %]>Left to right</option> + <option value="RL"[% " selected" IF rankdir == "RL" %]>Right to left</option> + </select> + </td> + </tr> + </table> + <input type="submit" id="change" value="Change Parameters"> +</form> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/bug/dependency-tree.html.tmpl b/template/en/default/bug/dependency-tree.html.tmpl new file mode 100644 index 0000000..c42c3c4 --- /dev/null +++ b/template/en/default/bug/dependency-tree.html.tmpl @@ -0,0 +1,266 @@ +[%# 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): Tobias Burnus <burnus@net-b.de> + # Ville Skyttä <ville.skytta@iki.fi> + # Myk Melez <myk@mozilla.org> + # André Batosti <batosti@async.com.br> + #%] + +[% PROCESS 'global/field-descs.none.tmpl' %] + +[% filtered_desc = blocked_tree.$bugid.short_desc FILTER html %] +[% PROCESS global/header.html.tmpl + title = "Dependency tree for $terms.Bug $bugid" + header = "Dependency tree for + <a href=\"show_bug.cgi?id=$bugid\">$terms.Bug $bugid</a>" + javascript_urls = ["js/expanding-tree.js"] + style_urls = ["skins/standard/dependency-tree.css"] + subheader = filtered_desc + doc_section = "hintsandtips.html#dependencytree" +%] + +[% PROCESS depthControlToolbar %] + +[% INCLUDE tree_section ids=dependson_ids type=1 %] + +[% INCLUDE tree_section ids=blocked_ids type=2 %] + +[% PROCESS depthControlToolbar %] + +[% PROCESS global/footer.html.tmpl %] + +[%###########################################################################%] +[%# Tree-drawing blocks #%] +[%###########################################################################%] + +[% BLOCK tree_section %] + [%# INTERFACE + # - ids: a list of bug IDs to be displayed as children + # - type: the type of tree. 1 = depends on, 2 = blockeds + # GLOBALS + # - seen: Maintains a global hash of bugs that have been displayed + #%] + [% global.seen = {} %] + [%# Display the tree of bugs that this bug depends on. %] + <h3> + <a href="show_bug.cgi?id=[% bugid %]">[% terms.Bug %] [%+ bugid %]</a> + [% IF type == 1 %] + [% tree_name = "dependson_tree" %] + [% IF ids.size %] + depends on + [% ELSE %] + does not depend on any [% terms.bugs %]. + [% END %] + [% ELSIF type == 2 %] + [% tree_name = "blocked_tree" %] + [% IF ids.size %] + blocks + [% ELSE %] + does not block any [% terms.bugs %]. + [% END %] + [% END %] + [% IF ids.size %] + [%+ (ids.size == 1) ? "one" : ids.size %] + [%+ IF hide_resolved %]open[% END %] + [%+ (ids.size == 1) ? terms.bug : terms.bugs %]: + [% END %] + </h3> + [% IF ids.size %] + ([% IF maxdepth -%]Up to [% maxdepth %] level[% "s" IF maxdepth > 1 %] deep | [% END -%] + <a href="buglist.cgi?bug_id=[% ids.join(",") %]">view as [% terms.bug %] list</a> + [% IF user.in_group('editbugs') && ids.size > 1 %] + | <a href="buglist.cgi?bug_id=[% ids.join(",") %]&tweak=1">change several</a> + [% END %]) + <ul class="tree"> + [% INCLUDE display_tree tree=$tree_name %] + </ul> + [% END %] +[% END %] + + +[% BLOCK display_tree %] + [%# INTERFACE + # - bugid: the ID of the bug being displayed + # - tree: a hash of bug objects and of bug dependencies + #%] + [% bug = tree.$bugid %] + <li> + [%- INCLUDE bullet bugid=bugid tree=tree -%] + <span class="summ[% "_deep" IF tree.dependencies.$bugid.size %]" + id="[% bugid FILTER html %]" + [% IF global.seen.$bugid %] + onMouseover="duplicatedover('[% bugid FILTER html %]')" + onMouseout="duplicatedout('[% bugid FILTER html %]')" + [% END %]> + [%- INCLUDE buglink bug=bug bugid=bugid %] + </span> + [% IF global.seen.$bugid %] + <b><a title="Already displayed above; click to locate" + onclick="duplicated('[% bugid FILTER html %]')" + href="#b[% bugid %]">(*)</a></b> + [% ELSIF tree.dependencies.$bugid.size %] + <ul> + [% FOREACH depid = tree.dependencies.$bugid %] + [% INCLUDE display_tree bugid=depid %] + [% END %] + </ul> + [% END %] + </li> + [% global.seen.$bugid = 1 %] +[% END %] + +[% BLOCK bullet %] + [% IF tree.dependencies.$bugid.size && ! global.seen.$bugid %] + [% extra_class = " b_open" %] + [% extra_args = 'onclick="return doToggle(this, event)"' %] + [% END %] + <a name="b[% bugid %]" + class="b [%+ extra_class FILTER none %]" + title="Click to expand or contract this portion of the tree. Hold down the Ctrl key while clicking to expand or contract all subtrees." + [% extra_args FILTER none %]> </a> +[% END %] + +[% BLOCK buglink %] + [% isclosed = !bug.isopened %] + [% FILTER closed(isclosed) -%] + <a title="[% INCLUDE buginfo bug=bug %]" + href="show_bug.cgi?id=[% bugid %]"> + <b>[%- bugid %]:</b> + <span class="summ_text">[%+ bug.short_desc FILTER html %]</span> + <span class="summ_info">[[% INCLUDE buginfo %]]</span> + </a> + <a href="showdependencytree.cgi?id=[% bugid FILTER url_quote %]" + class="tree_link"> + <img src="skins/standard/dependency-tree/tree.png" + title="See dependency tree for [% terms.bug %] [%+ bugid FILTER html %]"> + </a> + [% END %] +[% END %] + +[% BLOCK buginfo %] + [% display_value("bug_status", bug.bug_status) FILTER html -%] [%+ display_value("resolution", bug.resolution) FILTER html %]; + [%-%] assigned to [% bug.assigned_to.login FILTER email FILTER html %] + [%-%][% "; Target: " _ bug.target_milestone IF bug.target_milestone %] +[% END %] + +[%###########################################################################%] +[%# Block for depth control toolbar #%] +[%###########################################################################%] + +[% BLOCK depthControlToolbar %] + <table cellpadding="3" border="0" cellspacing="0" bgcolor="#e0e0e0"> + <tr> + [%# Hide/show resolved button + Swaps text depending on the state of hide_resolved %] + <td align="center"> + <form method="get" action="showdependencytree.cgi" + style="display: inline; margin: 0px;"> + <input name="id" type="hidden" value="[% bugid %]"> + [% IF maxdepth %] + <input name="maxdepth" type="hidden" value="[% maxdepth %]"> + [% END %] + <input type="hidden" name="hide_resolved" value="[% hide_resolved ? 0 : 1 %]"> + <input type="submit" id="toggle_visibility" + value="[% IF hide_resolved %]Show[% ELSE %]Hide[% END %] Resolved"> + </form> + </td> + + <td> + Max Depth: + </td> + + <td> + + </td> + + <td> + <form method="get" action="showdependencytree.cgi" + style="display: inline; margin: 0px;"> + [%# set to one form %] + <input type="submit" id="change_maxdepth" + value=" 1 " + [% "disabled" IF realdepth < 2 || maxdepth == 1 %]> + <input name="id" type="hidden" value="[% bugid %]"> + <input name="maxdepth" type="hidden" value="1"> + <input name="hide_resolved" type="hidden" value="[% hide_resolved %]"> + </form> + </td> + + <td> + <form method="get" action="showdependencytree.cgi" + style="display: inline; margin: 0px;"> + [%# Minus one form + Allow subtracting only when realdepth and maxdepth > 1 %] + <input name="id" type="hidden" value="[% bugid %]"> + <input name="maxdepth" type="hidden" value="[% + maxdepth == 1 ? 1 + : ( maxdepth ? maxdepth - 1 : realdepth - 1 ) + %]"> + <input name="hide_resolved" type="hidden" value="[% hide_resolved %]"> + <input type="submit" id="decrease_depth" value=" < " + [% "disabled" IF realdepth < 2 || ( maxdepth && maxdepth < 2 ) %]> + </form> + </td> + + <td> + <form method="get" action="showdependencytree.cgi" + style="display: inline; margin: 0px;"> + [%# Limit entry form: the button can not do anything when total depth + is less than two, so disable it %] + <input name="maxdepth" size="4" maxlength="4" value="[% + maxdepth > 0 && maxdepth <= realdepth ? maxdepth : "" + %]"> + <input name="id" type="hidden" value="[% bugid %]"> + <input name="hide_resolved" type="hidden" value="[% hide_resolved %]"> + <noscript> + <input type="submit" id="change_depth" value="Change" + [% "disabled" IF realdepth < 2 %]> + </noscript> + </form> + </td> + + <td> + <form method="get" action="showdependencytree.cgi" + style="display: inline; margin: 0px;"> + [%# plus one form + Disable button if total depth < 2, or if depth set to unlimited %] + <input name="id" type="hidden" value="[% bugid %]"> + [% IF maxdepth %] + <input name="maxdepth" type="hidden" value="[% maxdepth + 1 %]"> + [% END %] + <input name="hide_resolved" type="hidden" value="[% hide_resolved %]"> + <input type="submit" id="increase_depth" value=" > " + [% "disabled" IF realdepth < 2 || !maxdepth || maxdepth >= realdepth %]> + </form> + </td> + + <td> + <form method="get" action="showdependencytree.cgi" + style="display: inline; margin: 0px;"> + [%# Unlimited button %] + <input name="id" type="hidden" value="[% bugid %]"> + <input name="hide_resolved" type="hidden" value="[% hide_resolved %]"> + <input type="submit" id="remove_limit" + value=" Unlimited " + [% "disabled" IF maxdepth == 0 || maxdepth == realdepth %]> + </form> + </td> + </tr> +</table> + +[% END %] diff --git a/template/en/default/bug/edit.html.tmpl b/template/en/default/bug/edit.html.tmpl new file mode 100644 index 0000000..80c6fcd --- /dev/null +++ b/template/en/default/bug/edit.html.tmpl @@ -0,0 +1,1161 @@ +[%# 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> + # Vaskin Kissoyan <vkissoyan@yahoo.com> + # Max Kanat-Alexander <mkanat@bugzilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + # Olav Vitters <olav@bkor.dhs.org> + # Guy Pyrzak <guy.pyrzak@gmail.com> + # Elliotte Martin <emartin@everythingsolved.com> + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% PROCESS bug/time.html.tmpl %] + +[% USE Bugzilla %] +[% SET select_fields = {} %] +[% FOREACH field = Bugzilla.get_fields( + { type => constants.FIELD_TYPE_SINGLE_SELECT, custom => 0 }) +%] + [% select_fields.${field.name} = field %] +[% END %] + + <script type="text/javascript"> + <!-- + + /* Outputs a link to call replyToComment(); used to reduce HTML output */ + function addReplyLink(id, real_id) { + /* XXX this should really be updated to use the DOM Core's + * createElement, but finding a container isn't trivial. + */ + [% IF user.settings.quote_replies.value != 'off' %] + document.write('[<a href="#add_comment" onclick="replyToComment(' + + id + ',' + real_id + '); return false;">reply<' + '/a>]'); + [% END %] + } + + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id) { + var prefix = "(In reply to comment #" + id + ")\n"; + var replytext = ""; + [% IF user.settings.quote_replies.value == 'quoted_reply' %] + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + + /* make sure we split on all newlines -- IE or Moz use \r and \n + * respectively. + */ + text = text.split(/\r|\n/); + + for (var i=0; i < text.length; i++) { + replytext += "> " + text[i] + "\n"; + } + + replytext = prefix + replytext + "\n"; + [% ELSIF user.settings.quote_replies.value == 'simple_reply' %] + replytext = prefix; + [% END %] + + [% IF user.is_insider %] + if (document.getElementById('isprivate_' + real_id).checked) { + document.getElementById('newcommentprivacy').checked = 'checked'; + } + [% END %] + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + textarea.value += replytext; + + textarea.focus(); + } + + if (typeof Node == 'undefined') { + /* MSIE doesn't define Node, so provide a compatibility object */ + window.Node = { + TEXT_NODE: 3, + ENTITY_REFERENCE_NODE: 5 + }; + } + + /* Concatenates all text from element's childNodes. This is used + * instead of innerHTML because we want the actual text (and + * innerText is non-standard). + */ + function getText(element) { + var child, text = ""; + for (var i=0; i < element.childNodes.length; i++) { + child = element.childNodes[i]; + var type = child.nodeType; + if (type == Node.TEXT_NODE || type == Node.ENTITY_REFERENCE_NODE) { + text += child.nodeValue; + } else { + /* recurse into nodes of other types */ + text += getText(child); + } + } + return text; + } + +[% IF user.is_timetracker %] + var fRemainingTime = [% bug.remaining_time %]; // holds the original value + function adjustRemainingTime() { + // subtracts time spent from remaining time + var new_time; + + // prevent negative values if work_time > fRemainingTime + new_time = + Math.max(fRemainingTime - document.changeform.work_time.value, 0.0); + // get upto 2 decimal places + document.changeform.remaining_time.value = + Math.round(new_time * 100)/100; + } + + function updateRemainingTime() { + // if the remaining time is changed manually, update fRemainingTime + fRemainingTime = document.changeform.remaining_time.value; + } + +[% END %] + + //--> + </script> + +<form name="changeform" method="post" action="process_bug.cgi"> + + <input type="hidden" name="delta_ts" value="[% bug.delta_ts %]"> + <input type="hidden" name="longdesclength" value="[% bug.comments.size %]"> + <input type="hidden" name="id" value="[% bug.bug_id %]"> + <input type="hidden" name="token" value="[% issue_hash_token([bug.id, bug.delta_ts]) FILTER html %]"> + + [% PROCESS section_title %] + <table class="edit_form"> + <tr> + [%# 1st Column %] + <td id="bz_show_bug_column_1" class="bz_show_bug_column"> + <table> + [%# *** ID, product, component, status, resolution, Hardware, and OS *** %] + [% PROCESS section_status %] + + [% PROCESS section_spacer %] + + [% PROCESS section_details1 %] + + [% PROCESS section_spacer %] + + [%# *** severity, priority, version and milestone *** %] + [% PROCESS section_details2 %] + + [%# *** assigned to and qa contact *** %] + [% PROCESS section_people %] + + [% PROCESS section_spacer %] + + [% PROCESS section_url_keyword_whiteboard %] + + [% PROCESS section_spacer %] + + [%# *** Dependencies *** %] + [% PROCESS section_dependson_blocks %] + + </table> + </td> + <td> + <div class="bz_column_spacer"> </div> + </td> + [%# 2nd Column %] + <td id="bz_show_bug_column_2" class="bz_show_bug_column"> + <table cellpadding="3" cellspacing="1"> + [%# *** Reported and modified dates *** %] + [% PROCESS section_dates %] + + [% PROCESS section_cclist %] + + [% PROCESS section_spacer %] + + [% PROCESS section_see_also %] + + [% PROCESS section_customfields %] + + [% PROCESS section_spacer %] + + [% Hook.process("after_custom_fields") %] + + [% PROCESS section_flags %] + + </table> + </td> + </tr> + <tr> + <td colspan="3"> + <hr id="bz_top_half_spacer"> + </td> + </tr> + </table> + + <table id="bz_big_form_parts" cellspacing="0" cellpadding="0"><tr> + <td> + [% IF user.is_timetracker %] + [% PROCESS section_timetracking %] + [% END %] + + [%# *** Attachments *** %] + + [% PROCESS attachment/list.html.tmpl + attachments = bug.attachments + bugid = bug.bug_id + num_attachment_flag_types = bug.num_attachment_flag_types + show_attachment_flags = bug.show_attachment_flags + %] + + [% PROCESS comment_box %] + </td> + <td> + [% PROCESS section_restrict_visibility %] + </td> + </tr></table> + + [%# *** Additional Comments *** %] + <div id="comments"> + [% PROCESS bug/comments.html.tmpl + comments = bug.comments + mode = user.id ? "edit" : "show" + %] + </div> + +</form> + +[%############################################################################%] +[%# Block for the Title (alias and short desc) #%] +[%############################################################################%] + +[% BLOCK section_title %] + [%# That's the main table, which contains all editable fields. %] + <div class="bz_alias_short_desc_container edit_form"> + [% PROCESS commit_button id="_top"%] + <a href="show_bug.cgi?id=[% bug.bug_id %]"> + [%-# %]<b>[% terms.Bug %] [% bug.bug_id FILTER html %]</b> + [%-# %]</a> -<span id="summary_alias_container" class="bz_default_hidden"> + [% IF Param("usebugaliases") %] + [% IF bug.alias != "" %] + (<span id="alias_nonedit_display">[% bug.alias FILTER html %]</span>) + [% END %] + [% END %] + <span id="short_desc_nonedit_display">[% bug.short_desc FILTER quoteUrls(bug) %]</span> + [% IF bug.check_can_change_field('short_desc', 0, 1) || + bug.check_can_change_field('alias', 0, 1) %] + <small class="editme">(<a href="#" id="editme_action">edit</a>)</small> + [% END %] + </span> + + + <div id="summary_alias_input"> + <table id="summary"> + [% IF Param("usebugaliases") %] + <tr> + [% IF bug.check_can_change_field('alias', 0, 1) %] + <td> + <label + for="alias" + title="a name for the + [% terms.bug %] that can be used in place of its ID number, + [%%] e.g. when adding it to a list of dependencies" + >Alias</label>:</td><td> + [% ELSIF bug.alias %] + <td colspan="2">( + [% ELSE %] + <td colspan="2"> + [% END %] + [% PROCESS input inputname => "alias" + size => "20" + maxlength => "20" + no_td => 1 + %][% ")" IF NOT bug.check_can_change_field('alias', 0, 1) + && bug.alias %] + </td> + </tr> + [% END %] + [%# *** Summary *** %] + <tr> + <td> + <label accesskey="s" for="short_desc"><u>S</u>ummary</label>: + </td> + <td> + [% PROCESS input inputname => "short_desc" size => "80" colspan => 2 + maxlength => 255 spellcheck => "true" no_td => 1 %] + </td> + </tr> + </table> + </div> + </div> + <script type="text/javascript"> + hideAliasAndSummary('[% bug.short_desc FILTER js %]', '[% bug.alias FILTER js %]'); + </script> +[% END %] + +[%############################################################################%] +[%# Block for the first table in the "Details" section #%] +[%############################################################################%] + +[% BLOCK section_details1 %] + + [%#############%] + [%# PRODUCT #%] + [%#############%] + + <tr> + [% INCLUDE bug/field.html.tmpl + bug = bug, field = select_fields.product, + override_legal_values = bug.choices.product + desc_url = 'describecomponents.cgi', value = bug.product + editable = bug.check_can_change_field('product', 0, 1) %] + </tr> + [%###############%] + [%# Component #%] + [%###############%] + <tr> + <td class="field_label"> + <label for="component" accesskey="m"> + <b><a href="describecomponents.cgi?product=[% bug.product FILTER url_quote %]"> + Co<u>m</u>ponent</a>: + </b> + </label> + </td> + [% PROCESS select selname => "component" %] + </tr> + <tr> + <td class="field_label"> + <label for="version"><b>Version</b></label>: + </td> + + [% PROCESS select selname => "version" %] + </tr> + [%############%] + [%# PLATFORM #%] + [%############%] + <tr> + <td class="field_label"> + <label for="rep_platform" accesskey="h"><b>Platform</b></label>: + </td> + <td class="field_value"> + [% INCLUDE bug/field.html.tmpl + bug = bug, field = select_fields.rep_platform, + no_tds = 1, value = bug.rep_platform + editable = bug.check_can_change_field('rep_platform', 0, 1) %] + [%+ INCLUDE bug/field.html.tmpl + bug = bug, field = select_fields.op_sys, + no_tds = 1, value = bug.op_sys + editable = bug.check_can_change_field('op_sys', 0, 1) %] + <script type="text/javascript"> + assignToDefaultOnChange(['product', 'component']); + </script> + </td> + </tr> + + + +[% END %] + +[%############################################################################%] +[%# Block for the status section #%] +[%############################################################################%] + +[% BLOCK section_status %] + <tr> + <td class="field_label"> + <b><a href="page.cgi?id=fields.html#status">Status</a></b>: + </td> + <td id="bz_field_status"> + <span id="static_bug_status"> + [% display_value("bug_status", bug.bug_status) FILTER html %] + [% IF bug.resolution %] + [%+ display_value("resolution", bug.resolution) FILTER html %] + [% IF bug.dup_id %] + of [% "${terms.bug} ${bug.dup_id}" FILTER bug_link(bug.dup_id) FILTER none %] + [% END %] + [% END %] + [% IF bug.user.canedit || bug.user.isreporter %] + (<a href="#add_comment" + onclick="window.setTimeout(function() { document.getElementById('bug_status').focus(); }, 10)">edit</a>) + [% END %] + </span> + </td> + </tr> +[% END %] + +[%############################################################################%] +[%# Block for the second table in the "Details" section #%] +[%############################################################################%] + +[% BLOCK section_details2 %] + + [%###############################################################%] + [%# Importance (priority, severity and votes) #%] + [%###############################################################%] + <tr> + <td class="field_label"> + <label for="priority" accesskey="i"> + <b><a href="page.cgi?id=fields.html#importance"><u>I</u>mportance</a></b></label>: + </td> + <td> + [% INCLUDE bug/field.html.tmpl + bug = bug, field = select_fields.priority, + no_tds = 1, value = bug.priority + editable = bug.check_can_change_field('priority', 0, 1) %] + [%+ INCLUDE bug/field.html.tmpl + bug = bug, field = select_fields.bug_severity, + no_tds = 1, value = bug.bug_severity + editable = bug.check_can_change_field('bug_severity', 0, 1) %] + [% IF bug.use_votes %] + <span id="votes_container"> + [% IF bug.votes %] + with + <a href="votes.cgi?action=show_bug&bug_id=[% bug.bug_id %]"> + [% bug.votes %] + [% IF bug.votes == 1 %] + vote + [% ELSE %] + votes + [% END %]</a> + [% END %] + (<a href="votes.cgi?action=show_user&bug_id= + [% bug.bug_id %]#vote_[% bug.bug_id %]">vote</a>) + </span> + [% END %] + </td> + </tr> + + [% IF Param("usetargetmilestone") && bug.target_milestone %] + <tr> + <td class="field_label"> + <label for="target_milestone"> + <a href="page.cgi?id=fields.html#target_milestone"> + Target Milestone</a></label>: + </td> + [% PROCESS select selname = "target_milestone" %] + </tr> + [% END %] + +[% END %] + +[%############################################################################%] +[%# Block for the table in the "People" section #%] +[%############################################################################%] + +[% BLOCK section_people %] + + <tr> + <td class="field_label"> + <b><a href="page.cgi?id=fields.html#assigned_to">Assigned To</a></b>: + </td> + <td> + [% IF bug.check_can_change_field("assigned_to", 0, 1) %] + <div id="bz_assignee_edit_container" class="bz_default_hidden"> + <span> + [% INCLUDE global/user.html.tmpl who = bug.assigned_to %] + (<a href="#" id="bz_assignee_edit_action">edit</a>) + </span> + </div> + <div id="bz_assignee_input"> + [% INCLUDE global/userselect.html.tmpl + id => "assigned_to" + name => "assigned_to" + value => bug.assigned_to.login + size => 30 + %] + <br> + <input type="checkbox" id="set_default_assignee" name="set_default_assignee" value="1"> + <label id="set_default_assignee_label" for="set_default_assignee">Reset Assignee to default</label> + </div> + <script type="text/javascript"> + hideEditableField('bz_assignee_edit_container', + 'bz_assignee_input', + 'bz_assignee_edit_action', + 'assigned_to', + '[% bug.assigned_to.login FILTER js %]' ); + initDefaultCheckbox('assignee'); + </script> + [% ELSE %] + [% INCLUDE global/user.html.tmpl who = bug.assigned_to %] + [% END %] + </td> + </tr> + + [% IF Param('useqacontact') %] + <tr> + <td class="field_label"> + <label for="qa_contact" accesskey="q"><b><u>Q</u>A Contact</b></label>: + </td> + <td> + [% IF bug.check_can_change_field("qa_contact", 0, 1) %] + [% IF bug.qa_contact != "" %] + <div id="bz_qa_contact_edit_container" class="bz_default_hidden"> + <span> + <span id="bz_qa_contact_edit_display"> + [% INCLUDE global/user.html.tmpl who = bug.qa_contact %]</span> + (<a href="#" id="bz_qa_contact_edit_action">edit</a>) + </span> + </div> + [% END %] + <div id="bz_qa_contact_input"> + [% INCLUDE global/userselect.html.tmpl + id => "qa_contact" + name => "qa_contact" + value => bug.qa_contact.login + size => 30 + emptyok => 1 + %] + <br> + <input type="checkbox" id="set_default_qa_contact" name="set_default_qa_contact" value="1"> + <label for="set_default_qa_contact" id="set_default_qa_contact_label">Reset QA Contact to default</label> + </div> + <script type="text/javascript"> + [% IF bug.qa_contact != "" %] + hideEditableField('bz_qa_contact_edit_container', + 'bz_qa_contact_input', + 'bz_qa_contact_edit_action', + 'qa_contact', + '[% bug.qa_contact.login FILTER js %]'); + [% END %] + initDefaultCheckbox('qa_contact'); + </script> + [% ELSE %] + [% INCLUDE global/user.html.tmpl who = bug.qa_contact %] + [% END %] + </td> + </tr> + [% END %] +[% END %] + +[%############################################################################%] +[%# Block for URL Keyword and Whiteboard #%] +[%############################################################################%] +[% BLOCK section_url_keyword_whiteboard %] +[%# *** URL Whiteboard Keywords *** %] + <tr> + <td class="field_label"> + <label for="bug_file_loc" accesskey="u"><b> + [% IF bug.bug_file_loc + AND NOT bug.bug_file_loc.match("^(javascript|data)") %] + <a href="[% bug.bug_file_loc FILTER html %]"><u>U</u>RL</a> + [% ELSE %] + <u>U</u>RL + [% END %] + [%%]</b></label>: + </td> + <td> + [% IF bug.check_can_change_field("bug_file_loc", 0, 1) %] + <span id="bz_url_edit_container" class="bz_default_hidden"> + [% IF bug.bug_file_loc + AND NOT bug.bug_file_loc.match("^(javascript|data)") %] + <a href="[% bug.bug_file_loc FILTER html %]" target="_blank" + title="[% bug.bug_file_loc FILTER html %]"> + [% bug.bug_file_loc FILTER truncate(40) FILTER html %]</a> + [% ELSE %] + [% bug.bug_file_loc FILTER html %] + [% END %] + (<a href="#" id="bz_url_edit_action">edit</a>)</span> + [% END %] + <span id="bz_url_input_area"> + [% url_output = PROCESS input no_td=1 inputname => "bug_file_loc" size => "40" colspan => 2 %] + [% IF NOT bug.check_can_change_field("bug_file_loc", 0, 1) %] + <a href="[% bug.bug_file_loc FILTER html %]">[% url_output FILTER none %]</a> + [% ELSE %] + [% url_output FILTER none %] + [% END %] + </span> + [% IF bug.check_can_change_field("bug_file_loc", 0, 1) %] + <script type="text/javascript"> + hideEditableField('bz_url_edit_container', + 'bz_url_input_area', + 'bz_url_edit_action', + 'bug_file_loc', + "[% bug.bug_file_loc FILTER js %]"); + </script> + [% END %] + </td> + </tr> + + [% IF Param('usestatuswhiteboard') %] + <tr> + <td class="field_label"> + <label for="status_whiteboard" accesskey="w"><b><u>W</u>hiteboard</b></label>: + </td> + [% PROCESS input inputname => "status_whiteboard" size => "40" colspan => 2 %] + </tr> + [% END %] + + [% IF use_keywords %] + <tr> + <td class="field_label"> + <label for="keywords" accesskey="k"> + <b><a href="describekeywords.cgi"><u>K</u>eywords</a></b></label>: + </td> + [% PROCESS input inputname => "keywords" size => 40 colspan => 2 + value => bug.keywords.join(', ') %] + </tr> + [% END %] +[% END %] + +[%############################################################################%] +[%# Block for Depends On / Blocks #%] +[%############################################################################%] +[% BLOCK section_dependson_blocks %] + <tr> + [% PROCESS dependencies + dep = { title => "Depends on", fieldname => "dependson" } %] + </tr> + + <tr> + [% PROCESS dependencies accesskey = "b" + dep = { title => "<u>B</u>locks", fieldname => "blocked" } %] + + <tr> + <th> </th> + + <td colspan="2" align="left" id="show_dependency_tree_or_graph"> + Show dependency <a href="showdependencytree.cgi?id=[% bug.bug_id %]&hide_resolved=1">tree</a> + + [% IF Param('webdotbase') %] + / <a href="showdependencygraph.cgi?id=[% bug.bug_id %]">graph</a> + [% END %] + </td> + </tr> +[% END %] + + +[%############################################################################%] +[%# Block for Restricting Visibility #%] +[%############################################################################%] + +[% BLOCK section_restrict_visibility %] + [% RETURN UNLESS bug.groups.size %] + + <div class="bz_group_visibility_section"> + [% inallgroups = 1 %] + [% inagroup = 0 %] + [% emitted_description = 0 %] + + [% FOREACH group = bug.groups %] + [% SET inallgroups = 0 IF NOT group.ingroup %] + [% SET inagroup = 1 IF group.ison %] + + [% NEXT IF group.mandatory %] + + [% IF NOT emitted_description %] + [% emitted_description = 1 %] + <div id="bz_restrict_group_visibility_help"> + <b>Only users in all of the selected groups can view this + [%+ terms.bug %]:</b> + <p class="instructions"> + Unchecking all boxes makes this a more public [% terms.bug %]. + </p> + </div> + [% END %] + + [% IF group.ingroup %] + <input type="hidden" name="defined_bit-[% group.bit %]" value="1"> + [% END %] + + <input type="checkbox" value="1" name="bit-[% group.bit %]" + id="bit-[% group.bit %]" + [% ' checked="checked"' IF group.ison %] + [% ' disabled="disabled"' IF NOT group.ingroup %]> + <label for="bit-[% group.bit %]"> + [%- group.description FILTER html_light %]</label> + <br> + [% END %] + + [% IF emitted_description %] + [% IF NOT inallgroups %] + <p class="instructions">Only members of a group can change the + visibility of [% terms.abug %] for that group.</p> + [% END %] + [% END %] + + [% IF inagroup %] + <div id="bz_enable_role_visibility_help"> + <b>Users in the roles selected below can always view + this [% terms.bug %]:</b> + </div> + <div id="bz_enable_role_visibility"> + <div> + [% user_can_edit_accessible = + bug.check_can_change_field("reporter_accessible", 0, 1) + %] + [% IF user_can_edit_accessible %] + <input type="hidden" name="defined_reporter_accessible" value="1"> + [% END %] + <input type="checkbox" value="1" + name="reporter_accessible" id="reporter_accessible" + [% " checked" IF bug.reporter_accessible %] + [% " disabled=\"disabled\"" UNLESS user_can_edit_accessible %]> + <label for="reporter_accessible">Reporter</label> + </div> + <div> + [% user_can_edit_accessible = + bug.check_can_change_field("cclist_accessible", 0, 1) + %] + [% IF user_can_edit_accessible %] + <input type="hidden" name="defined_cclist_accessible" value="1"> + [% END %] + <input type="checkbox" value="1" + name="cclist_accessible" id="cclist_accessible" + [% " checked" IF bug.cclist_accessible %] + [% " disabled=\"disabled\"" UNLESS user_can_edit_accessible %]> + <label for="cclist_accessible">CC List</label> + </div> + <p class="instructions"> + The assignee + [% IF (Param('useqacontact')) %] + and QA contact + [% END %] + can always see [% terms.abug %], and this section does not + take effect unless the [% terms.bug %] is restricted to at + least one group. + </p> + </div> + [% END %] + </div> [%# bz_group_visibility_section %] +[% END %] + +[%############################################################################%] +[%# Block for Dates #%] +[%############################################################################%] + +[% BLOCK section_dates %] + <tr> + <td class="field_label"> + <b>Reported</b>: + </td> + <td> + [% bug.creation_ts FILTER time %] by [% INCLUDE global/user.html.tmpl who = bug.reporter %] + </td> + </tr> + + <tr> + <td class="field_label"> + <b> Modified</b>: + </td> + <td> + [% bug.delta_ts FILTER time FILTER replace(':\d\d$', '') FILTER replace(':\d\d ', ' ')%] + (<a href="show_activity.cgi?id=[% bug.bug_id %]">[%# terms.Bug %]History</a>) + </td> + + </tr> +[% END %] + +[%############################################################################%] +[%# Block for CC LIST #%] +[%############################################################################%] +[% BLOCK section_cclist %] + <tr> + <td class="field_label"> + <label for="newcc" accesskey="a"><b>CC List</b>:</label> + </td> + <td> + [% IF user.id %] + [% IF NOT bug.cc || NOT bug.cc.contains(user.login) %] + [% has_role = bug.user.isreporter + || bug.assigned_to.id == user.id + || (Param('useqacontact') + && bug.qa_contact + && bug.qa_contact.id == user.id) %] + <input type="checkbox" id="addselfcc" name="addselfcc" + [% " checked=\"checked\"" + IF user.settings.state_addselfcc.value == 'always' + || (!has_role + && user.settings.state_addselfcc.value == 'cc_unless_role') %]> + <label for="addselfcc">Add me to CC list</label> + <br> + [% END %] + [% END %] + [% bug.cc.size || 0 FILTER html %] + [% IF bug.cc.size == 1 %] + user + [% ELSE %] + users + [% END %] + [% IF user.id %] + [% IF bug.cc.contains( user.email ) %] + including you + [% END %] + [% END %] + <span id="cc_edit_area_showhide_container" class="bz_default_hidden"> + (<a href="#" id="cc_edit_area_showhide">[% IF user.id %]edit[% ELSE %]show[% END %]</a>) + </span> + <div id="cc_edit_area"> + <br> + [% IF user.id %] + <div> + <div><label for="cc"><b>Add</b></label></div> + [% INCLUDE global/userselect.html.tmpl + id => "newcc" + name => "newcc" + value => "" + size => 30 + multiple => 5 + %] + </div> + [% END %] + [% IF bug.cc %] + <select id="cc" name="cc" multiple="multiple" size="5"> + [% FOREACH c = bug.cc %] + <option value="[% c FILTER email FILTER html %]"> + [% c FILTER email FILTER html %]</option> + [% END %] + </select> + [% IF user.id %] + <br> + <input type="checkbox" id="removecc" name="removecc"> + [%%]<label for="removecc">Remove selected CCs</label> + <br> + [% END %] + [% END %] + </div> + <script type="text/javascript"> + hideEditableField( 'cc_edit_area_showhide_container', + 'cc_edit_area', + 'cc_edit_area_showhide', + '', + ''); + </script> + </td> + </tr> +[% END %] + +[%############################################################################%] +[%# Block for See Also #%] +[%############################################################################%] +[% BLOCK section_see_also %] + [% IF Param('use_see_also') || bug.see_also.size %] + <tr> + [% INCLUDE bug/field.html.tmpl + field = bug_fields.see_also + value = bug.see_also + editable = bug.check_can_change_field('see_also', 0, 1) + %] + </tr> + [% END %] +[% END %] + +[%############################################################################%] +[%# Block for FLAGS #%] +[%############################################################################%] + +[% BLOCK section_flags %] + [%# *** Flags *** %] + [% show_bug_flags = 0 %] + [% FOREACH type = bug.flag_types %] + [% IF (type.flags && type.flags.size > 0) || (user.id && type.is_active) %] + [% show_bug_flags = 1 %] + [% LAST %] + [% END %] + [% END %] + [% IF show_bug_flags %] + <tr> + <td class="field_label flags_label"> + <label><b>Flags:</b></label> + </td> + <td></td> + </tr> + <tr> + <td colspan="2"> + [% IF bug.flag_types.size > 0 %] + [% PROCESS "flag/list.html.tmpl" flag_no_header = 1 + flag_types = bug.flag_types + any_flags_requesteeble = bug.any_flags_requesteeble %] + [% END %] + </td> + </tr> + [% END %] +[% END %] + +[%############################################################################%] +[%# Block for Custom Fields #%] +[%############################################################################%] + +[% BLOCK section_customfields %] +[%# *** Custom Fields *** %] + + [% FOREACH field = Bugzilla.active_custom_fields %] + <tr> + [% PROCESS bug/field.html.tmpl value=bug.${field.name} + editable = bug.check_can_change_field(field.name, 0, 1) + value_span = 2 %] + </tr> + [% END %] +[% END %] + +[%############################################################################%] +[%# Block for Section Spacer #%] +[%############################################################################%] + +[% BLOCK section_spacer %] + <tr> + <td colspan="2" class="bz_section_spacer"></td> + </tr> +[% END %] + + + + +[%############################################################################%] +[%# Block for dependencies #%] +[%############################################################################%] + +[% BLOCK dependencies %] + + <th class="field_label"> + <label for="[% dep.fieldname %]"[% " accesskey=\"$accesskey\"" IF accesskey %]> + [% dep.title %]</label>: + </th> + <td> + <span id="[% dep.fieldname %]_input_area"> + [% IF bug.check_can_change_field(dep.fieldname, 0, 1) %] + <input name="[% dep.fieldname %]" id="[% dep.fieldname %]" + class="text_input" + value="[% bug.${dep.fieldname}.join(', ') %]"> + [% END %] + </span> + + [% FOREACH depbug = bug.${dep.fieldname} %] + [% depbug FILTER bug_link(depbug, use_alias => 1) FILTER none %][% " " %] + [% END %] + [% IF bug.check_can_change_field(dep.fieldname, 0, 1) %] + <span id="[% dep.fieldname %]_edit_container" class="edit_me bz_default_hidden" > + (<a href="#" id="[% dep.fieldname %]_edit_action">edit</a>) + </span> + <script type="text/javascript"> + hideEditableField('[% dep.fieldname %]_edit_container', + '[% dep.fieldname %]_input_area', + '[% dep.fieldname %]_edit_action', + '[% dep.fieldname %]', + "[% bug.${dep.fieldname}.join(', ') %]"); + </script> + [% END %] + </td> + + [% accesskey = undef %] + +[% END %] + +[%############################################################################%] +[%# Block for Time Tracking Group #%] +[%############################################################################%] + +[% BLOCK section_timetracking %] + <table class="bz_time_tracking_table"> + <tr> + <th> + <label for="estimated_time">Orig. Est.</label> + </th> + <th> + Current Est. + </th> + <th> + <label for="work_time">Hours Worked</label> + </th> + <th> + <label for="remaining_time">Hours Left</label> + </th> + <th> + %Complete + </th> + <th> + Gain + </th> + <th> + <label for="deadline">Deadline</label> + </th> + </tr> + <tr> + <td> + <input name="estimated_time" id="estimated_time" + value="[% PROCESS formattimeunit + time_unit=bug.estimated_time %]" + size="6" maxlength="6"> + </td> + <td> + [% PROCESS formattimeunit + time_unit=(bug.actual_time + bug.remaining_time) %] + </td> + <td> + [% PROCESS formattimeunit time_unit=bug.actual_time %] + + <input name="work_time" id="work_time" + value="0" size="3" maxlength="6" + onchange="adjustRemainingTime();"> + </td> + <td> + <input name="remaining_time" id="remaining_time" + value="[% PROCESS formattimeunit + time_unit=bug.remaining_time %]" + size="6" maxlength="6" onchange="updateRemainingTime();"> + </td> + <td> + [% PROCESS calculatepercentage act=bug.actual_time + rem=bug.remaining_time %] + </td> + <td> + [% PROCESS formattimeunit time_unit=bug.estimated_time - (bug.actual_time + bug.remaining_time) %] + </td> + <td> + <input name="deadline" id="deadline" value="[% bug.deadline %]" + size="10" maxlength="10"><br /> + <small>(YYYY-MM-DD)</small> + </td> + </tr> + <tr> + <td colspan="7" class="bz_summarize_time"> + <a href="summarize_time.cgi?id=[% bug.bug_id %]&do_depends=1"> + Summarize time (including time for [% terms.bugs %] + blocking this [% terms.bug %])</a> + </td> + </tr> + </table> +[% END %] + +[%############################################################################%] +[%# Block for the Additional Comments box #%] +[%############################################################################%] + +[% BLOCK comment_box %] + <div class="bz_section_additional_comments"> + <a name="add_comment"></a> + [% IF user.id %] + <label for="comment" accesskey="c"><b>Additional + <u>C</u>omments</b></label>: + + [% IF user.is_insider %] + <input type="checkbox" name="commentprivacy" value="1" + id="newcommentprivacy" + onClick="updateCommentTagControl(this, form)"> + <label for="newcommentprivacy"> + Make comment private (visible only to members of the + <strong>[% Param('insidergroup') FILTER html %]</strong> group) + </label> + [% END %] + + <!-- This table keeps the submit button aligned with the box. --> + <table><tr><td> + [% INCLUDE global/textarea.html.tmpl + name = 'comment' + id = 'comment' + minrows = 10 + maxrows = 25 + cols = constants.COMMENT_COLS + %] + [% Hook.process("after_comment_textarea", 'bug/edit.html.tmpl') %] + <br> + [% PROCESS commit_button id=""%] + + <table class="status" cellspacing="0" cellpadding="0"> + <tr> + <td class="field_label"> + <b><a href="page.cgi?id=fields.html#status">Status</a></b>: + </td> + <td> + <a name="bug_status_bottom"></a> + [% PROCESS bug/knob.html.tmpl %] + </td> + </tr> + </table> + </td></tr></table> + + [%# For logged-out users %] + [% ELSE %] + <table><tr><td><fieldset> + <legend>Note</legend> + You need to + <a href="show_bug.cgi?id= + [%- bug.bug_id %]&GoAheadAndLogIn=1">log in</a> + before you can comment on or make changes to this [% terms.bug %]. + </fieldset></table><tr></td> + [% END %] + </div> +[% END %] + +[%############################################################################%] +[%# Block for SELECT fields #%] +[%############################################################################%] + +[% BLOCK select %] + <td> + [% IF bug.check_can_change_field(selname, 0, 1) + AND bug.choices.${selname}.size > 1 %] + <select id="[% selname %]" name="[% selname %]"> + [% FOREACH x = bug.choices.${selname} %] + <option value="[% x.name FILTER html %]" + [% " selected" IF x.name == bug.${selname} %]> + [%- x.name FILTER html %] + </option> + [% END %] + </select> + [% ELSE %] + [% bug.${selname} FILTER html %] + [% END %] + </td> +[% END %] + +[%############################################################################%] +[%# Block for INPUT fields #%] +[%############################################################################%] + +[% BLOCK input %] + [% IF no_td != 1 %] + <td[% " colspan=\"$colspan\"" IF colspan %]> + [% END %] + [% val = value ? value : bug.$inputname %] + [% IF bug.check_can_change_field(inputname, 0, 1) %] + <input id="[% inputname %]" name="[% inputname %]" class="text_input" + value="[% val FILTER html %]"[% " size=\"$size\"" IF size %] + [% " maxlength=\"$maxlength\"" IF maxlength %] + [% " spellcheck=\"$spellcheck\"" IF spellcheck %]> + [% ELSE %] + [% IF size && val.length > size %] + <span title="[% val FILTER html %]"> + [% val FILTER truncate(size) FILTER html %] + </span> + [% ELSE %] + [% val FILTER html %] + [% END %] + [% END %] + [% IF no_td != 1 %] + </td> + [% END %] + [% no_td = 0 %] + [% maxlength = 0 %] + [% colspan = 0 %] + [% size = 0 %] + [% value = undef %] + [% spellcheck = undef %] +[% END %] +[% BLOCK commit_button %] + [% IF user.id %] + <div class="knob-buttons"> + <input type="submit" value="Save Changes" + id="commit[% id FILTER css_class_quote %]"> + [% IF bug.user.canmove %] + <input type="submit" name="action" id="action[% id FILTER css_class_quote %]" value="[% Param("move-button-text") %]"> + [% END %] + </div> + [% END %] +[% END %] diff --git a/template/en/default/bug/field-events.js.tmpl b/template/en/default/bug/field-events.js.tmpl new file mode 100644 index 0000000..06fba12 --- /dev/null +++ b/template/en/default/bug/field-events.js.tmpl @@ -0,0 +1,40 @@ +[%# 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 the San Jose State + # University Foundation. Portions created by the Initial Developer + # are Copyright (C) 2008 the Initial Developer. All Rights Reserved. + # + # Contributor(s): Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[%# INTERFACE: + # field: a Bugzilla::Field object + #%] + +[% FOREACH controlled_field = field.controls_visibility_of %] + showFieldWhen('[% controlled_field.name FILTER js %]', + '[% field.name FILTER js %]', + '[% controlled_field.visibility_value.name FILTER js %]'); +[% END %] +[% FOREACH legal_value = field.legal_values %] + [% FOREACH controlled_field = legal_value.controlled_values.keys %] + [% SET cont_ids = [] %] + [% FOREACH val = legal_value.controlled_values.$controlled_field %] + [% cont_ids.push(val.id) %] + [% END %] + showValueWhen('[% controlled_field FILTER js %]', + [[% cont_ids.join(',') FILTER js %]], + '[% field.name FILTER js %]', + [% legal_value.id FILTER js %]); + [% END %] +[% END %] diff --git a/template/en/default/bug/field.html.tmpl b/template/en/default/bug/field.html.tmpl new file mode 100644 index 0000000..bb678d7 --- /dev/null +++ b/template/en/default/bug/field.html.tmpl @@ -0,0 +1,215 @@ +[%# 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): Myk Melez <myk@mozilla.org> + # Max Kanat-Alexander <mkanat@bugzilla.org> + # Elliotte Martin <elliotte_martin@yahoo.com> + #%] + +[%# INTERFACE: + # field: a Bugzilla::Field object + # value: The value of the field for this bug. + # override_legal_values (optional): The list of legal values, for select fields. + # editable: Whether the field should be displayed as an editable + # <input> or as just the plain text of its value. + # allow_dont_change: display the --do_not_change-- option for select fields. + # value_span: A colspan for the table cell containing + # the field value. + # no_tds: boolean; if true, don't display the label <th> or the + # wrapping <td> for the field. + # desc_url: string; Normally the label of a non-custom field links to + # fields.html. If you want it to link elsewhere, specify the + # relative URL you want to link to, here. Remember to call + # url_quote on any query string arguments. + # bug (optional): The current Bugzilla::Bug being displayed, or a hash + # with default field values being displayed on a page. + #%] + +[% SET hidden = 0 %] +[% IF field.visibility_field.defined %] + [% IF !bug.${field.visibility_field.name} + .contains(field.visibility_value.name) + %] + [% SET hidden = 1 %] + [% END %] +[% END %] + +[% IF NOT no_tds %] + <th class="field_label [% ' bz_hidden_field' IF hidden %]" + id="field_label_[% field.name FILTER html %]"> + [% IF editable %] + <label for="[% field.name FILTER html %]"> + [% END %] + [% IF desc_url %] + <a href="[% desc_url FILTER html %]"> + [% ELSIF !field.custom %] + <a href="page.cgi?id=fields.html#[% field.name FILTER url_quote %]"> + [% END -%] + [% field_descs.${field.name} FILTER html %]: + [%- '</a>' IF (!field.custom || desc_url) %] + [% '</label>' IF editable %] + </th> +[% END %] + +[% IF NOT no_tds %] +<td class="field_value [% ' bz_hidden_field' IF hidden %]" + id="field_container_[% field.name FILTER html %]" + [% " colspan=\"$value_span\"" FILTER none IF value_span %]> +[% END %] +[% Hook.process('start_field_column') %] +[% IF editable %] + [% SWITCH field.type %] + [% CASE constants.FIELD_TYPE_FREETEXT %] + <input id="[% field.name FILTER html %]" class="text_input" + name="[% field.name FILTER html %]" + value="[% value FILTER html %]" size="40" + maxlength="[% constants.MAX_FREETEXT_LENGTH FILTER none %]"> + [% CASE constants.FIELD_TYPE_DATETIME %] + <input name="[% field.name FILTER html %]" size="20" + id="[% field.name FILTER html %]" + value="[% value FILTER html %]" + onchange="updateCalendarFromField(this)"> + <button type="button" class="calendar_button" + id="button_calendar_[% field.name FILTER html %]" + onclick="showCalendar('[% field.name FILTER js %]')"> + <span>Calendar</span> + </button> + + <div id="con_calendar_[% field.name FILTER html %]" + class="yui-skin-sam"></div> + + <script type="text/javascript"> + createCalendar('[% field.name FILTER js %]') + </script> + [% CASE constants.FIELD_TYPE_BUG_ID %] + <span id="[% field.name FILTER html %]_input_area"> + <input name="[% field.name FILTER html %]" id="[% field.name FILTER html %]" + value="[% value FILTER html %]" size="7"> + </span> + + [% IF bug.${field.name} %] + [% bug.${field.name} FILTER bug_link(bug.${field.name}) FILTER none %] + [% END %] + <span id="[% field.name FILTER html %]_edit_container" class="edit_me bz_default_hidden"> + (<a href="#" id="[% field.name FILTER html %]_edit_action">edit</a>) + </span> + <script type="text/javascript"> + hideEditableField('[% field.name FILTER js %]_edit_container', + '[% field.name FILTER js %]_input_area', + '[% field.name FILTER js %]_edit_action', + '[% field.name FILTER js %]', + "[% bug.${field.name} FILTER js %]"); + </script> + [% CASE [ constants.FIELD_TYPE_SINGLE_SELECT + constants.FIELD_TYPE_MULTI_SELECT ] %] + <select id="[% field.name FILTER html %]" + name="[% field.name FILTER html %]" + [% IF field.type == constants.FIELD_TYPE_MULTI_SELECT %] + [% SET field_size = 5 %] + [% IF field.legal_values.size < 5 %] + [% SET field_size = field.legal_values.size %] + [% END %] + size="[% field_size FILTER html %]" multiple="multiple" + [% END %] + > + [% IF allow_dont_change %] + <option value="[% dontchange FILTER html %]" + [% ' selected="selected"' IF value == dontchange %]> + [% dontchange FILTER html %] + </option> + [% END %] + [% IF override_legal_values %] + [% legal_values = override_legal_values %] + [% ELSE %] + [% legal_values = field.legal_values %] + [% END %] + [% FOREACH legal_value = legal_values %] + [% SET control_value = legal_value.visibility_value %] + [% SET control_field = field.value_field %] + <option value="[% legal_value.name FILTER html %]" + id="v[% legal_value.id FILTER html %]_ + [%- field.name FILTER html %]" + [%# We always show selected values, even if they should be + # hidden %] + [% IF value.contains(legal_value.name).size %] + selected="selected" + [% ELSIF (control_field && control_value + && !bug.${control_field.name}.contains(control_value.name)) + || !legal_value.is_active + %] + class="bz_hidden_option" disabled="disabled" + [% END %]> + [%- display_value(field.name, legal_value.name) FILTER html ~%] + </option> + [% END %] + </select> + [%# When you pass an empty multi-select in the web interface, + # it doesn't appear at all in the CGI object. Instead of + # forcing all users of process_bug to always specify every + # multi-select, we have this field defined if the multi-select + # field is defined, and then if this is passed but the multi-select + # isn't, we know that the multi-select was emptied. + %] + [% IF field.type == constants.FIELD_TYPE_MULTI_SELECT %] + <input type="hidden" name="defined_[% field.name FILTER html %]"> + [% END %] + + <script type="text/javascript"> + <!-- + initHidingOptionsForIE('[% field.name FILTER js %]'); + [%+ INCLUDE "bug/field-events.js.tmpl" field = field %] + //--> + </script> + + [% CASE constants.FIELD_TYPE_TEXTAREA %] + [% INCLUDE global/textarea.html.tmpl + id = field.name name = field.name minrows = 4 maxrows = 8 + cols = 60 defaultcontent = value %] + [% CASE constants.FIELD_TYPE_BUG_URLS %] + [% '<ul class="bug_urls">' IF value.size %] + [% FOREACH url = value %] + <li> + <a href="[% url FILTER html %]">[% url FILTER html %]</a> + [% IF editable %] + <label><input type="checkbox" value="[% url FILTER html %]" + name="remove_[% field.name FILTER html %]"> + Remove</label> + [% END %] + </li> + [% END %] + [% '</ul>' IF value.size %] + + [% IF editable && Param('use_see_also') %] + <label for="[% field.name FILTER html %]"> + <strong>Add [% terms.Bug %] URLs:</strong> + </label><br> + <input type="text" id="[% field.name FILTER html %]" size="40" + class="text_input" name="[% field.name FILTER html %]"> + [% END %] + [% END %] +[% ELSIF field.type == constants.FIELD_TYPE_TEXTAREA %] + <div class="uneditable_textarea">[% value FILTER wrap_comment(60) + FILTER html %]</div> +[% ELSIF field.type == constants.FIELD_TYPE_BUG_ID %] + [% IF bug.${field.name} %] + [% bug.${field.name} FILTER bug_link(bug.${field.name}) FILTER none %] + [% END %] +[% ELSE %] + [% value.join(', ') FILTER html %] +[% END %] +[% Hook.process('end_field_column') %] +[% '</td>' IF NOT no_tds %] diff --git a/template/en/default/bug/format_comment.txt.tmpl b/template/en/default/bug/format_comment.txt.tmpl new file mode 100644 index 0000000..7d33c23 --- /dev/null +++ b/template/en/default/bug/format_comment.txt.tmpl @@ -0,0 +1,68 @@ +[%# 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 Marc Schumann. + # Portions created by Marc Schumann are Copyright (c) 2008 Marc Schumann. + # All rights reserved. + # + # Contributor(s): Marc Schumann <wurblzap@gmail.com> + #%] + +[%# NOTE: Everywhere you use this template, you must call + # "FILTER remove('^X')" on the result. This is unfortunately the only way + # to preserve leading whitespace in comments. + #%] + +[%# INTERFACE: + # comment: A Bugzilla::Comment object. + # is_bugmail: boolean; True if this comment is going into a plain-text + # bugmail. + #%] + +[%# Please don't use field-descs here. It can slow down Bugzilla. %] +[% PROCESS 'global/variables.none.tmpl' %] + +[% SET comment_body = comment.body %] + +[% IF comment.type == constants.CMT_DUPE_OF %] +X[% comment_body %] + +*** This [% terms.bug %] has been marked as a duplicate of [% terms.bug %] [%+ comment.extra_data %] *** +[% ELSIF comment.type == constants.CMT_HAS_DUPE %] +*** [% terms.Bug %] [%+ comment.extra_data %] has been marked as a duplicate of this [% terms.bug %]. *** +[% ELSIF comment.type == constants.CMT_POPULAR_VOTES %] +*** This [% terms.bug %] has been confirmed by popular vote. *** +[% ELSIF comment.type == constants.CMT_MOVED_TO %] +X[% comment_body %] + +[%+ terms.Bug %] moved to [% Param("move-to-url") %]. +If the move succeeded, [% comment.extra_data %] will receive a mail containing +the number of the new [% terms.bug %] in the other database. +If all went well, please paste in a link to the new [% terms.bug %]. +Otherwise, reopen this [% terms.bug %]. +[% ELSIF comment.type == constants.CMT_ATTACHMENT_CREATED %] +Created attachment [% comment.extra_data %] +[% IF is_bugmail %] + --> [% urlbase _ "attachment.cgi?id=" _ comment.extra_data %] +[% END %] +[%+ comment.attachment.description %] + +[%+ comment.body %] +[% ELSIF comment.type == constants.CMT_ATTACHMENT_UPDATED %] +Comment on attachment [% comment.extra_data %] +[% IF is_bugmail %] + --> [% urlbase _ "attachment.cgi?id=" _ comment.extra_data %] +[% END %] +[%+ comment.attachment.description %] + +[%+ comment.body %] +[% END %] diff --git a/template/en/default/bug/knob.html.tmpl b/template/en/default/bug/knob.html.tmpl new file mode 100644 index 0000000..ac14e6d --- /dev/null +++ b/template/en/default/bug/knob.html.tmpl @@ -0,0 +1,100 @@ +[%# 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> + # Vaskin Kissoyan <vkissoyan@yahoo.com> + # Frédéric Buclin <LpSolit@gmail.com> + # Guy Pyrzak <guy.pyrzak@gmail.com> + #%] + +[% PROCESS global/variables.none.tmpl %] +<div id="status"> + [% PROCESS bug/field.html.tmpl + no_tds = 1 + field = bug_fields.bug_status + value = bug.bug_status + override_legal_values = bug.choices.bug_status + editable = bug.choices.bug_status.size > 1 + %] + + [% IF bug.resolution + OR bug.check_can_change_field('resolution', bug.resolution, 1) + %] + <noscript><br>resolved as </noscript> + [% END %] + + <span id="resolution_settings"> + [% PROCESS bug/field.html.tmpl + no_tds = 1 + field = bug_fields.resolution + value = bug.resolution + override_legal_values = bug.choices.resolution + editable = bug.check_can_change_field('resolution', bug.resolution, 1) + %] + </span> + + [% IF bug.check_can_change_field('dup_id', 0, 1) %] + <noscript><br> duplicate</noscript> + <span id="duplicate_settings">of + <span id="dup_id_container" class="bz_default_hidden"> + [% "${terms.bug} ${bug.dup_id}" FILTER bug_link(bug.dup_id) FILTER none %] + (<a href="#" id="dup_id_edit_action">edit</a>) + </span + ><input id="dup_id" name="dup_id" size="6" + value="[% bug.dup_id FILTER html %]"> + </span> + [% IF bug.dup_id %] + <noscript>[% bug.dup_id FILTER bug_link(bug.dup_id) FILTER none %]</noscript> + [% END %] + <div id="dup_id_discoverable" class="bz_default_hidden"> + <a href="#" id="dup_id_discoverable_action">Mark as Duplicate</a> + </div> + [% ELSIF bug.dup_id %] + <noscript><br> duplicate</noscript> + <span id="duplicate_display">of + [% "${terms.bug} ${bug.dup_id}" FILTER bug_link(bug.dup_id) FILTER none %]</span> + [% END %] +</div> + +<script type="text/javascript"> + var close_status_array = [ + [% FOREACH status = bug.choices.bug_status %] + [% NEXT IF status.is_open %] + '[% status.name FILTER js %]'[% ',' UNLESS loop.last %] + [% END %] + ]; + YAHOO.util.Dom.removeClass('dup_id_discoverable', 'bz_default_hidden'); + hideEditableField( "dup_id_container", "dup_id", 'dup_id_edit_action', + 'dup_id', '[% bug.dup_id FILTER js %]' ) + showHideStatusItems( "", ['[% "is_duplicate" IF bug.dup_id %]', + '[% bug.bug_status FILTER js %]']); + YAHOO.util.Event.addListener( 'bug_status', "change", showHideStatusItems, + ['[% "is_duplicate" IF bug.dup_id %]', + '[% bug.bug_status FILTER js %]']); + YAHOO.util.Event.addListener( 'resolution', "change", showDuplicateItem); + YAHOO.util.Event.addListener( 'dup_id_discoverable_action', + 'click', + setResolutionToDuplicate, + '[% Param('duplicate_or_move_bug_status') + FILTER js %]'); + YAHOO.util.Event.addListener( window, 'load', showHideStatusItems, + ['[% "is_duplicate" IF bug.dup_id %]', + '[% bug.bug_status FILTER js %]'] ); + + [% INCLUDE "bug/field-events.js.tmpl" field = select_fields.bug_status %] + [% INCLUDE "bug/field-events.js.tmpl" field = select_fields.resolution %] +</script> diff --git a/template/en/default/bug/navigate.html.tmpl b/template/en/default/bug/navigate.html.tmpl new file mode 100644 index 0000000..4a3d063 --- /dev/null +++ b/template/en/default/bug/navigate.html.tmpl @@ -0,0 +1,87 @@ +[%# 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> + #%] + +[% PROCESS global/variables.none.tmpl %] +[% IF bottom_navigator == 1 %] + <ul class="related_actions"> + <li><a href="show_bug.cgi?format=multiple&id= + [% bug.bug_id FILTER url_quote %]">Format For Printing</a></li> + <li> - <a href="show_bug.cgi?ctype=xml&id= + [% bug.bug_id FILTER url_quote %]">XML</a></li> + <li> - <a href="enter_bug.cgi?cloned_bug_id= + [% bug.bug_id FILTER url_quote %]">Clone This + [% terms.Bug %]</a></li> + [%# Links to more things users can do with this bug. %] + [% Hook.process("links") %] + <li> - <a href="#">Top of page </a></li> + </ul> +[% END %] + + +<div class="navigation"> +[% IF last_bug_list.size > 0 %] + [% this_bug_idx = lsearch(last_bug_list, bug.id) %] + <b>[% terms.Bug %] List:</b> + [% IF this_bug_idx != -1 %] + ([% this_bug_idx + 1 %] of [% last_bug_list.size %]) + [% END %] + + [% IF this_bug_idx != -1 %] + <a href="show_bug.cgi?id= + [%- last_bug_list.first FILTER url_quote %]">First</a> + <a href="show_bug.cgi?id= + [%- last_bug_list.last FILTER url_quote %]">Last</a> + [% END %] + + [% IF bug.bug_id %] + [% IF this_bug_idx != -1 %] + [% IF this_bug_idx > 0 %] + [% prev_bug = this_bug_idx - 1 %] + <a href="show_bug.cgi?id= + [%- last_bug_list.$prev_bug FILTER url_quote %]">Prev</a> + [% ELSE %] + <i><font color="#777777">Prev</font></i> + [% END %] + + [% IF this_bug_idx + 1 < last_bug_list.size %] + [% next_bug = this_bug_idx + 1 %] + <a href="show_bug.cgi?id= + [%- last_bug_list.$next_bug FILTER url_quote %]">Next</a> + [% ELSE %] + <i><font color="#777777">Next</font></i> + [% END %] + [% ELSE %] + (This [% terms.bug %] is not in your last search results) + [% END %] + [% ELSE %] + + [% END %] + + <a href="buglist.cgi?regetlastlist=1">Show last search results</a> +[% ELSE %] + [%# With no list, don't show link to search results %] + <i><font color="#777777">First</font></i> + <i><font color="#777777">Last</font></i> + <i><font color="#777777">Prev</font></i> + <i><font color="#777777">Next</font></i> + + <i><font color="#777777">No search results available</font></i> +[% END %] +</div> diff --git a/template/en/default/bug/process/bugmail.html.tmpl b/template/en/default/bug/process/bugmail.html.tmpl new file mode 100644 index 0000000..b0132a2 --- /dev/null +++ b/template/en/default/bug/process/bugmail.html.tmpl @@ -0,0 +1,60 @@ +[%# 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): Bradley Baetz <bbaetz@student.usyd.edu.au> + # J. Paul Reed <preed@sigkill.com> + #%] + +[%# INTERFACE: + # mailing_bugid: The bug ID that email is being sent for. + # sent_bugmail: The results of Bugzilla::BugMail::Send(). + #%] + +[% PROCESS global/variables.none.tmpl %] + +<dl> +[% PROCESS emails + description = "Email sent to" + names = sent_bugmail.sent +%] + +[% PROCESS emails + description = "Excluding" + names = sent_bugmail.excluded +%] +</dl> + +[%############################################################################%] +[%# Block for a set of email addresses #%] +[%############################################################################%] + +[% BLOCK emails %] + <dt>[% description FILTER html %]:</dt> + <dd> + [% IF user.can_see_bug(mailing_bugid) %] + [% IF names.size > 0 %] + [%+ FOREACH name = names %] + <code>[% name FILTER html %]</code>[% ", " UNLESS loop.last() %] + [% END %] + [% ELSE %] + no one + [% END %] + [% ELSE %] + (list of e-mails not available) + [% END %] + </dd> +[% END %] diff --git a/template/en/default/bug/process/confirm-duplicate.html.tmpl b/template/en/default/bug/process/confirm-duplicate.html.tmpl new file mode 100644 index 0000000..d89c8da --- /dev/null +++ b/template/en/default/bug/process/confirm-duplicate.html.tmpl @@ -0,0 +1,75 @@ +[%# 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): Myk Melez <myk@mozilla.org> + #%] + +[%# INTERFACE: + # original_bug_id: number; the bug number for the bug + # against which a bug is being duped + # duplicate_bug_id: number; the bug number for the bug + # being duped + # cclist_accessible: boolean; whether or not users on the cc: list + # of the original bug can access that bug. + #%] + +[% PROCESS global/variables.none.tmpl %] +[% PROCESS global/header.html.tmpl title="Duplicate Warning" %] +[% orig_bug = "$terms.bug $original_bug_id" + FILTER bug_link(original_bug_id) %] + +<p> + When marking [% terms.abug %] as a duplicate, the reporter of the duplicate + is normally added to the CC list of the original. The permissions + on [% orig_bug FILTER none %] (the original) are currently set + such that the reporter would not normally be able to see it. +</p> + +<p> + <b>Adding the reporter to the CC list of [% orig_bug FILTER none %] + [% IF cclist_accessible %] + will immediately + [% ELSE %] + might, in the future, + [% END %] + allow him/her access to view this [% terms.bug %].</b> + Do you wish to do this? +</p> + +<form method="post" action="process_bug.cgi"> + +[% PROCESS "global/hidden-fields.html.tmpl" exclude="^Bugzilla_(login|password)$" %] + +<p> + <input type="radio" name="confirm_add_duplicate" value="1"> + Yes, add the reporter to CC list on [% orig_bug FILTER none %] +</p> +<p> + <input type="radio" name="confirm_add_duplicate" value="0" checked="checked"> + No, do not add the reporter to CC list on [% orig_bug FILTER none %] +</p> +<p> + [% "Throw away my changes, and revisit $terms.bug $duplicate_bug_id" + FILTER bug_link(duplicate_bug_id) FILTER none %] +</p> +<p> + <input type="submit" id="process" value="Submit"> +</p> + +</form> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/bug/process/header.html.tmpl b/template/en/default/bug/process/header.html.tmpl new file mode 100644 index 0000000..79f0126 --- /dev/null +++ b/template/en/default/bug/process/header.html.tmpl @@ -0,0 +1,46 @@ +[%# 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: + # As global/header.html.tmpl. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% USE Bugzilla %] + +[% PROCESS "bug/show-header.html.tmpl" %] + +[% IF title_tag == "bug_processed" %] + [% title = BLOCK %] + [% IF Bugzilla.cgi.param('id') %] + [% terms.Bug %] [%+ id FILTER html %] + [% ELSE %] + [% terms.Bugs %] + [% END %] + processed + [% END %] +[% ELSIF title_tag == "mid_air" %] + [% title = "Mid-air collision!" %] +[% ELSIF title_tag == "change_votes" %] + [% title = "Change Votes" %] +[% END %] + +[% PROCESS global/header.html.tmpl %] diff --git a/template/en/default/bug/process/midair.html.tmpl b/template/en/default/bug/process/midair.html.tmpl new file mode 100644 index 0000000..34031fc --- /dev/null +++ b/template/en/default/bug/process/midair.html.tmpl @@ -0,0 +1,109 @@ +[%# 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): Myk Melez <myk@mozilla.org> + #%] + +[%# INTERFACE: + # operations: array; bug activity since the user last displayed the bug form, + # used by bug/activity/table.html.tmpl to display recent changes that will + # be overwritten if the user submits these changes. See that template + # for further documentation. + # start_at: number; the comment at which show/comments.tmpl should begin + # displaying comments, either the index of the last comment (if the user + # entered a comment along with their change) or a number less than that + # (if they didn't), in which case no comments are displayed. + # comments: array; all the comments on the bug. + # bug: Bugzilla::Bug; the bug being changed. + #%] + +[%# The global Bugzilla->cgi object is used to obtain form variable values. %] +[% USE Bugzilla %] +[% cgi = Bugzilla.cgi %] + +[% PROCESS global/variables.none.tmpl %] + +[% UNLESS header_done %] + [% PROCESS bug/process/header.html.tmpl %] +[% END %] + +<h1>Mid-air collision detected!</h1> + +<p> + Someone else has made changes to + [%+ "$terms.bug $bug.id" FILTER bug_link(bug) FILTER none %] + at the same time you were trying to. + The changes made were: +</p> + +<p> + [% PROCESS "bug/activity/table.html.tmpl" incomplete_data=0 %] +</p> + +[% IF comments.size > start_at %] +<p> + Added the comment(s): + <blockquote> + [% PROCESS "bug/comments.html.tmpl" %] + </blockquote> +</p> +[% END %] + +[% IF cgi.param("comment") %] +<p> + Your comment was:<br> + <blockquote><pre class="bz_comment_text"> + [% cgi.param("comment") FILTER wrap_comment FILTER html %] + </pre></blockquote> +</p> +[% END %] + +<p> +You have the following choices: +</p> + +<ul> + <li> + <form method="post" action="process_bug.cgi"> + <input type="hidden" name="delta_ts" + value="[% bug.delta_ts FILTER html %]"> + [% PROCESS "global/hidden-fields.html.tmpl" + exclude="^Bugzilla_login|Bugzilla_password|delta_ts$" %] + <input type="submit" id="process" value="Submit my changes anyway"> + This will cause all of the above changes to be overwritten + [% ", except for the added comment(s)" IF comments.size > start_at %]. + </form> + </li> + [% IF cgi.param("comment") %] + <li> + <form method="post" action="process_bug.cgi"> + <input type="hidden" name="id" value="[% cgi.param("id") FILTER html %]"> + <input type="hidden" name="delta_ts" value="[% bug.delta_ts FILTER html %]"> + <input type="hidden" name="comment" value="[% cgi.param("comment") FILTER html %]"> + <input type="hidden" name="commentprivacy" value="[% cgi.param("commentprivacy") FILTER html %]"> + <input type="hidden" name="token" value="[% cgi.param("token") FILTER html %]"> + <input type="submit" id="process_comment" value="Submit only my new comment"> + </form> + </li> + [% END %] + <li> + Throw away my changes, and + [%+ "revisit $terms.bug $bug.id" FILTER bug_link(bug) FILTER none %] + </li> +</ul> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/bug/process/results.html.tmpl b/template/en/default/bug/process/results.html.tmpl new file mode 100644 index 0000000..ee218d4 --- /dev/null +++ b/template/en/default/bug/process/results.html.tmpl @@ -0,0 +1,58 @@ +[%# 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): Myk Melez <myk@mozilla.org> + #%] + +[%# INTERFACE: + # id: number; the ID of the bug that was changed/checked. + # + # type: string; the type of change/check that was made: "bug" when a bug + # is changed, "dupe" when a duplication notation is added to a bug, + # and "dep" when a bug is checked for changes to its dependencies. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% UNLESS header_done %] + [% PROCESS bug/process/header.html.tmpl %] +[% END %] + +[% DEFAULT type="bug" %] + +[% Link = BLOCK %][% "$terms.Bug $id" FILTER bug_link(id) %][% END %] +[% link = BLOCK %][% "$terms.bug $id" FILTER bug_link(id) %][% END %] + +[% + title = { + 'bug' => "Changes submitted for $link" , + 'dupe' => "Duplicate notation added to $link" , + 'dep' => "Checking for dependency changes on $link" , + 'votes' => "$Link confirmed by number of votes" , + 'created' => "$Link has been added to the database" , + 'move' => "$Link has been moved to another database" , + } +%] + +<dl> + <dt>[% title.$type %]</dt> + <dd> + [% PROCESS "bug/process/bugmail.html.tmpl" mailing_bugid = id %] + [%# Links to more information about the changed bug. %] + [% Hook.process("links") %] + </dd> +</dl> diff --git a/template/en/default/bug/process/verify-new-product.html.tmpl b/template/en/default/bug/process/verify-new-product.html.tmpl new file mode 100644 index 0000000..1cc186c --- /dev/null +++ b/template/en/default/bug/process/verify-new-product.html.tmpl @@ -0,0 +1,205 @@ +[%# 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): Myk Melez <myk@mozilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + # Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[%# INTERFACE: + # product: object; the new product. + # versions: array; versions for the new product. + # components: array; components for the new product. + # milestones: array; milestones for the new product. + # defaults: hash; keys are names of fields, values are defaults for + # those fields + # + # verify_bug_groups: If groups need to be confirmed in addition to fields. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl + title = 'Verify New Product Details...' %] + +<form action="process_bug.cgi" method="post"> + +[% SET exclude_items = ['version', 'component', 'target_milestone'] %] +[% IF verify_bug_groups %] + [% exclude_items.push('bit-\d+') %] +[% END %] +[% Hook.process('exclude') %] + +[% PROCESS "global/hidden-fields.html.tmpl" + exclude = '^' _ exclude_items.join('|') _ '$' %] + +<input type="hidden" name="confirm_product_change" value="1"> + +[%# Verify the version, component, and target milestone fields. %] +<h3>Verify Version, Component + [%- ", Target Milestone" + IF Param("usetargetmilestone") + && bug.check_can_change_field('target_milestone', 0, 1) %]</h3> + +<p> +[% IF Param("usetargetmilestone") + && bug.check_can_change_field('target_milestone', 0, 1) +%] + You are moving the [% terms.bug %](s) to the product + <b>[% product.name FILTER html %]</b>, + and the version, component, and/or target milestone fields are no longer + correct. Please set the correct version, component, and target milestone now: +[% ELSE %] + You are moving the [% terms.bug %](s) to the product + <b>[% product.name FILTER html %]</b>, + and the version and component fields are no longer correct. + Please set the correct version and component now: +[% END %] +</p> + +<table> + <tr> + <td> + <b>Version:</b><br> + [% IF versions.size == 1 %] + [% SET default_version = versions.0 %] + [% ELSE %] + [% SET default_version = defaults.version %] + [% END %] + [% PROCESS "global/select-menu.html.tmpl" + name="version" + options=versions + default=default_version + size=10 %] + </td> + <td> + <b>Component:</b><br> + [% IF components.size == 1 %] + [% SET default_component = components.0 %] + [% ELSE %] + [% SET default_component = defaults.component %] + [% END %] + [% PROCESS "global/select-menu.html.tmpl" + name="component" + options=components + default=default_component + size=10 %] + </td> + [% IF Param("usetargetmilestone") + && bug.check_can_change_field('target_milestone', 0, 1) + %] + <td> + <b>Target Milestone:</b><br> + [% PROCESS "global/select-menu.html.tmpl" + name="target_milestone" + options=milestones + default=defaults.milestone + size=10 %] + </td> + [% END %] + [% Hook.process('field') %] + </tr> +</table> + +[% IF verify_bug_groups %] + <h3>Verify [% terms.Bug %] Group</h3> + + [% IF old_groups.size %] + <p>These groups are not legal for the '[% product.name FILTER html %]' + product or you are not allowed to restrict [% terms.bugs %] to these groups. + [%+ terms.Bugs %] will no longer be restricted to these groups and may become + public if no other group applies:<br> + [% FOREACH group = old_groups %] + <input type="checkbox" id="bit-[% group.id FILTER html %]" + name="bit-[% group.id FILTER html %]" disabled="disabled" value="1"> + <label for="bit-[% group.id FILTER html %]"> + [% group.name FILTER html %]: [% group.description FILTER html %] + </label> + <br> + [% END %] + </p> + [% END %] + + [% mandatory_groups = [] %] + [% optional_groups = [] %] + + [% FOREACH gid = product.group_controls.keys %] + [% group = product.group_controls.$gid %] + [% NEXT UNLESS group.group.is_active %] + + [% IF group.membercontrol == constants.CONTROLMAPMANDATORY + || (group.othercontrol == constants.CONTROLMAPMANDATORY && !user.in_group(group.group.name)) %] + [% mandatory_groups.push(group) %] + [% ELSIF (group.membercontrol != constants.CONTROLMAPNA && user.in_group(group.group.name)) + || group.othercontrol != constants.CONTROLMAPNA %] + [% optional_groups.push(group) %] + [% END %] + [% END %] + + [% IF optional_groups.size %] + <p>These groups are optional. You can decide to restrict [% terms.bugs %] to + one or more of the following groups:<br> + [% FOREACH group = optional_groups %] + <input type="hidden" name="defined_bit-[% group.group.id FILTER html %]" + value="1"> + <input type="checkbox" id="bit-[% group.group.id FILTER html %]" + name="bit-[% group.group.id FILTER html %]" + [%+ ((group.membercontrol == constants.CONTROLMAPDEFAULT && user.in_group(group.group.name)) + || (group.othercontrol == constants.CONTROLMAPDEFAULT && !user.in_group(group.group.name)) + || cgi.param("bit-$group.group.id") == 1) ? + 'checked="checked"' : '' + %] value="1"> + <label for="bit-[% group.group.id FILTER html %]"> + [% group.group.name FILTER html %]: [% group.group.description FILTER html %] + </label> + <br> + [% END %] + </p> + [% END %] + + [% IF mandatory_groups.size %] + <p>These groups are mandatory and [% terms.bugs %] will be automatically + restricted to these groups:<br> + [% FOREACH group = mandatory_groups %] + <input type="checkbox" id="bit-[% group.group.id FILTER html %]" checked="checked" + name="bit-[% group.group.id FILTER html %]" value="1" disabled="disabled"> + <label for="bit-[% group.group.id FILTER html %]"> + [% group.group.name FILTER html %]: [% group.group.description FILTER html %] + </label> + <br> + [% END %] + </p> + [% END %] +[% END %] + +<input type="submit" id="change_product" value="Commit"> + +</form> +<hr> + +[%# If 'id' is defined, then we are editing a single bug. + # Else we are editing several bugs at once. %] + +[% IF cgi.param('id') AND cgi.param('id').match('^\d+$') %] + [% id = cgi.param('id') %] + Cancel and Return to [% "$terms.bug $id" FILTER bug_link(id) FILTER none %] +[% ELSE %] + Cancel and Return to <a href="buglist.cgi?regetlastlist=1">the last search results</a> +[% END %] + +[% PROCESS global/footer.html.tmpl %] + diff --git a/template/en/default/bug/show-header.html.tmpl b/template/en/default/bug/show-header.html.tmpl new file mode 100644 index 0000000..3f81e57 --- /dev/null +++ b/template/en/default/bug/show-header.html.tmpl @@ -0,0 +1,50 @@ +[%# 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> + # Vaskin Kissoyan <vkissoyan@yahoo.com> + # Bradley Baetz <bbaetz@student.usyd.edu.au> + # Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[%# This template should be called with PROCESS before processing + # "global/header.html.tmpl" in any template that is going to load the + # bug form. It expects only a "bug" object, and can even manage to get + # along without that. Some of these variables are just defaults that will + # be overridden by the calling templates. + #%] + +[% filtered_desc = bug.short_desc FILTER html %] +[% subheader = filtered_desc %] +[% filtered_timestamp = bug.delta_ts FILTER time %] +[% title = "$terms.Bug $bug.bug_id – $filtered_desc" %] +[% header = "$terms.Bug $bug.bug_id" %] +[% header_addl_info = "Last modified: $filtered_timestamp" %] +[% javascript_urls = [ "js/util.js", "js/field.js", "js/yui/calendar.js" ] %] +[% style_urls = [ "skins/standard/yui/calendar.css", + "skins/standard/show_bug.css" ] %] +[% doc_section = "bug_page.html" %] + +[% bodyclasses = ['bz_bug', + "bz_status_$bug.bug_status", + "bz_product_$bug.product", + "bz_component_$bug.component", + "bz_bug_$bug.bug_id", + ] %] +[% FOREACH group = bug.groups_in %] + [% bodyclasses.push("bz_group_$group.name") %] +[% END %] diff --git a/template/en/default/bug/show-multiple.html.tmpl b/template/en/default/bug/show-multiple.html.tmpl new file mode 100644 index 0000000..177bea1 --- /dev/null +++ b/template/en/default/bug/show-multiple.html.tmpl @@ -0,0 +1,366 @@ +[%# 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> + # Gervase Markham <gerv@gerv.net> + # Toms Baugis <toms@myrealbox.com> + # Olav Vitters <olav@bkor.dhs.org> + # Max Kanat-Alexander <mkanat@bugzilla.org> + # Elliotte Martin <emartin@everythingsolved.com> + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% PROCESS global/header.html.tmpl + title = "Full Text $terms.Bug Listing" + h1 = "" + style_urls = ["skins/standard/show_multiple.css", + "skins/standard/buglist.css"] + doc_section = "bug_page.html" +%] +[% PROCESS bug/time.html.tmpl %] +[% IF bugs.first %] + [% ids = [] %] + [% FOREACH bug = bugs %] + [% PROCESS bug_display %] + [% ids.push(bug.bug_id) UNLESS bug.error %] + [% END %] + [% IF ids.size > 1 %] + <div class="bz_query_buttons"> + <form method="post" action="buglist.cgi"> + <input type="hidden" name="bug_id" value="[% ids.join(",") FILTER html %]"> + <input type="submit" id="short_format" value="Short Format"> + </form> + </div> + [% END %] +[% ELSE %] + <p> + You'd have more luck if you gave me some [% terms.bug %] numbers. + </p> +[% END %] + + +[% PROCESS global/footer.html.tmpl %] + + +[%###########################################################################%] +[%# Block for an individual bug #%] +[%###########################################################################%] + +[% BLOCK bug_display %] + <h1> + [% terms.Bug %] + <a href="show_bug.cgi?id=[% bug.bug_id FILTER html %]">[% bug.bug_id FILTER html %]</a> + [% IF Param("usebugaliases") AND bug.alias AND NOT bug.error %] + (<a href="show_bug.cgi?id=[% bug.alias FILTER url_quote %]"> + [% bug.alias FILTER html %]</a>) + [% END %] + </h1> + + <table class="bugfields"> + [% IF bug.error %] + <tr> + <td class="error"> + [% IF bug.error == "InvalidBugId" %] + '[%+ bug.bug_id FILTER html %]' is not a valid [% terms.bug %] number + [%- IF Param("usebugaliases") %] nor a known [% terms.bug %] alias[% END %]. + [% ELSIF bug.error == "NotPermitted" %] + You are not allowed to view this [% terms.bug %]. + [% ELSIF bug.error == "NotFound" %] + This [% terms.bug %] cannot be found. + [% ELSE %] + [%+ bug.error FILTER html %] + [% END %] + </td> + </tr> + [% ELSE %] + [%# The rightcell block (also called by the row block) automatically shows + # the fields from rightcells %] + [% rightcells = ['reporter', 'assigned_to'] %] + [% IF Param('useqacontact') %] + [% rightcells.push('qa_contact') %] + [% END %] + [% rightcells.push('') %] + [% IF bug.cc %] + [% rightcells.push('cc') %] + [% END %] + [% IF bug.keywords %] + [% rightcells.push('keywords') %] + [% END %] + + [%# Determine if the bug has a flag %] + [% FOREACH type = bug.flag_types %] + [% IF type.flags.size %] + [% rightcells.push('flags') %] + [% LAST %] + [% END %] + [% END %] + + [% PROCESS row cell = "short_desc" fullrow = 1 %] + + <tr> + <th>[% field_descs.product FILTER html %]:</th> + <td> + [% IF Param("useclassification") && bug.classification_id != 1 %] + [[% bug.classification FILTER html %]] + [% END %] + [% bug.product FILTER html %] + </td> + + [% PROCESS rightcell %] + </tr> + + [% PROCESS row cell = "component" %] + + <tr> + <th>[% field_descs.bug_status FILTER html %]:</th> + <td> + [% display_value("bug_status", bug.bug_status) FILTER html %] + [%+ display_value("resolution", bug.resolution) FILTER html %] + </td> + + [% PROCESS rightcell %] + </tr> + + <tr> + <th>[% field_descs.bug_severity FILTER html %]:</th> + <td class="bz_[% bug.bug_severity FILTER css_class_quote -%]"> + [% display_value("bug_severity", bug.bug_severity) FILTER html %] + </td> + + [% PROCESS rightcell %] + </tr> + + <tr> + <th>[% field_descs.priority FILTER html %]:</th> + <td class="bz_[% bug.priority FILTER css_class_quote -%]"> + [% bug.priority FILTER html %] + </td> + + [% PROCESS rightcell %] + </tr> + + [% PROCESS row cell = "version" %] + [% PROCESS row cell = "target_milestone" IF Param('usetargetmilestone') %] + [% PROCESS row cell = "rep_platform" %] + [% PROCESS row cell = "op_sys" %] + + [% IF bug.bug_file_loc %] + <tr> + <th>[% field_descs.bug_file_loc FILTER html %]:</th> + <td colspan="3"> + [% IF bug.bug_file_loc.match("^(javascript|data)") %] + [% bug.bug_file_loc FILTER html %] + [% ELSE %] + <a href="[% bug.bug_file_loc FILTER html %]"> + [% bug.bug_file_loc FILTER html %]</a> + [% END %] + </td> + </tr> + [% END %] + + [% IF Param("usestatuswhiteboard") %] + [% PROCESS row cell = "status_whiteboard" fullrow = 1 %] + [% END %] + + [% USE Bugzilla %] + [% field_counter = 0 %] + [% FOREACH field = Bugzilla.active_custom_fields %] + [% field_counter = field_counter + 1 %] + [%# Odd-numbered fields get an opening <tr> %] + [% '<tr>' IF field_counter % 2 %] + [% PROCESS bug/field.html.tmpl value=bug.${field.name} editable=0 %] + [%# Even-numbered fields get a closing <tr> %] + [% '</tr>' IF !(field_counter % 2) %] + [% END %] + [%# And we have to finish the row if we ended on an odd number. %] + [% '<th></th><td></td></tr>' IF field_counter % 2 %] + + [% IF (bug.dependson.size || bug.blocked.size) %] + [% PROCESS dependencies name = "dependson" %] + [% PROCESS dependencies name = "blocked" %] + [% END %] + + [% IF user.is_timetracker %] + <tr> + <th>Time tracking:</th> + <td colspan="3"> + <table class="timetracking"> + <tr> + <th>[% field_descs.estimated_time FILTER html %]</th> + <th>[% field_descs.actual_time FILTER html %]</th> + <th>[% field_descs.work_time FILTER html %]</th> + <th>[% field_descs.remaining_time FILTER html %]</th> + <th>[% field_descs.percentage_complete FILTER html %]</th> + <th>Gain</th> + </tr> + <tr> + <td> + [% PROCESS formattimeunit time_unit = bug.estimated_time %] + </td> + <td> + [% PROCESS formattimeunit + time_unit=(bug.remaining_time + bug.actual_time) %] + </td> + <td>[% PROCESS formattimeunit time_unit = bug.actual_time %]</td> + <td> + [% PROCESS formattimeunit time_unit = bug.remaining_time %] + </td> + <td> + [% PROCESS calculatepercentage act = bug.actual_time + rem = bug.remaining_time %] + </td> + <td> + [% PROCESS formattimeunit + time_unit=bug.estimated_time - + (bug.actual_time + bug.remaining_time) %] + </td> + </tr> + </table> + </td> + </tr> + [% PROCESS row cell="deadline" %] + [% END %] + + [% IF bug.attachments.size %] + <tr> + <th>Attachments:</th> + <td colspan="3"> + [% IF bug.show_attachment_flags %] + <table> + <tr> + <th>Description</th> + <th>Flags</th> + </tr> + [% FOREACH attachment = bug.attachments %] + <tr> + <td> + <a href="attachment.cgi?id=[% attachment.id %]"> + [% attachment.description FILTER html %] + </a>[% "<br>" IF not loop.last() %] + </td> + <td> + [% IF attachment.flags.size == 0 %] + <i>none</i> + [% ELSE %] + [% FOREACH flag = attachment.flags %] + [% flag.setter.nick FILTER html %]: + [%+ flag.type.name FILTER html FILTER no_break %][% flag.status %] + [% IF flag.status == "?" && flag.requestee %] + ([% flag.requestee.nick FILTER html %]) + [% END %][% ", " IF not loop.last() %] + [% END %] + [% END %] + </td> + </tr> + [% END %] + </table> + [% ELSE %] + [% FOREACH attachment = bug.attachments %] + <a href="attachment.cgi?id=[% attachment.id %]"> + [% attachment.description FILTER html %] + </a>[% "<br>" IF not loop.last() %] + [% END %] + [% END %] + </td> + </tr> + [% END %] + [% END %] + + [% Hook.process("last_row", "bug/show-multiple.html.tmpl") %] + + </table> + + + <br> + + [% PROCESS bug/comments.html.tmpl + comments = bug.comments %] + +[% END %] + + +[%###########################################################################%] +[%# Block for standard table rows #%] +[%###########################################################################%] + +[% BLOCK row %] + <tr> + <th>[% field_descs.${cell} FILTER html %]:</th> + <td[% " colspan=3" IF fullrow %]>[% display_value(cell, bug.${cell}) FILTER html %]</td> + [% PROCESS rightcell IF !fullrow %] + </tr> + [% fullrow = 0 %] +[% END %] + + +[%############################################################################%] +[%# Block for dependencies #%] +[%############################################################################%] + +[% BLOCK dependencies %] + <tr> + <th>[% terms.Bug %] [%+ field_descs.${name} FILTER html %]:</th> + <td> + [% FOREACH depbug = bug.${name} %] + [% depbug FILTER bug_link(depbug) FILTER none %][% ", " IF not loop.last() %] + [% END %] + </td> + + [% PROCESS rightcell %] + </tr> +[% END %] + +[%############################################################################%] +[%# Block for cells shown right of the table #%] +[%############################################################################%] + +[% BLOCK rightcell %] + [% IF rightcells %] + [% name = rightcells.shift %] + [% IF name == "cc" %] + <th class="rightcell">[% field_descs.cc FILTER html %]:</th> + <td> + [% FOREACH c = bug.cc %] + [% c FILTER email FILTER html %][% ", " IF not loop.last() %] + [% END %] + [% ELSIF name == "reporter" || name == "assigned_to" + || name == "qa_contact" %] + <th class="rightcell">[% field_descs.${name} FILTER html %]:</th> + <td>[% bug.${name}.identity FILTER email FILTER html %]</td> + [% ELSIF name == "flags" %] + <th class="rightcell">Flags:</th> + <td> + [% FOREACH type = bug.flag_types %] + [% FOREACH flag = type.flags %] + [% flag.setter.nick FILTER html %]: + [%+ flag.type.name FILTER html FILTER no_break %][% flag.status %] + [%+ IF flag.status == "?" && flag.requestee %] + ([% flag.requestee.nick FILTER html %]) + [% END %]<br> + [% END %] + [% END %] + </td> + [% ELSIF name != "" %] + <th class="rightcell">[% field_descs.${name} FILTER html %]:</th> + <td>[% display_value(name, bug.${name}) FILTER html %]</td> + [% ELSE %] + <td> </td> + <td> </td> + [% END %] + [% END %] +[% END %] diff --git a/template/en/default/bug/show.html.tmpl b/template/en/default/bug/show.html.tmpl new file mode 100644 index 0000000..8d8e63a --- /dev/null +++ b/template/en/default/bug/show.html.tmpl @@ -0,0 +1,53 @@ +[%# 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> + # Vaskin Kissoyan <vkissoyan@yahoo.com> + # Bradley Baetz <bbaetz@student.usyd.edu.au> + # Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[% PROCESS global/variables.none.tmpl %] + +[%# This script/template only handles one bug #%] +[% bug = bugs.0 %] + +[% IF !header_done %] + [% PROCESS "bug/show-header.html.tmpl" %] + [% PROCESS global/header.html.tmpl %] +[% END %] + +[% IF nextbug %] + <hr> + <p> + The next [% terms.bug %] in your list is [% terms.bug %] + <a href="show_bug.cgi?id=[% bug.bug_id %]">[% bug.bug_id %]</a>: + </p> + <hr> +[% END %] + +[% PROCESS bug/navigate.html.tmpl %] + +[% PROCESS bug/edit.html.tmpl %] + +<hr> + +[% PROCESS bug/navigate.html.tmpl bottom_navigator => 1%] + +<br> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/bug/show.xml.tmpl b/template/en/default/bug/show.xml.tmpl new file mode 100644 index 0000000..2349602 --- /dev/null +++ b/template/en/default/bug/show.xml.tmpl @@ -0,0 +1,157 @@ +[%# 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): Bradley Baetz <bbaetz@student.usyd.edu.au> + # Colin Ogilvie <mozilla@colinogilvie.co.uk> + # + #%] +[% PROCESS bug/time.html.tmpl %] +<?xml version="1.0" [% IF Param('utf8') %]encoding="UTF-8" [% END %]standalone="yes" ?> +<!DOCTYPE bugzilla SYSTEM "[% urlbase FILTER html %]bugzilla.dtd"> + +<bugzilla version="[% constants.BUGZILLA_VERSION %]" + urlbase="[% urlbase FILTER xml %]" + [%# Note that the maintainer's email is not filtered, + # intentionally. Even logged-out users should be able + # to see that, since it will be in error messages anyway. + %] + maintainer="[% Param('maintainer') FILTER xml %]" +[% IF user.id %] + exporter="[% user.email FILTER email FILTER xml %]" +[% END %] +> + +[% FOREACH bug = bugs %] + [% IF bug.error %] + <bug error="[% bug.error FILTER xml %]"> + <bug_id>[% bug.bug_id FILTER xml %]</bug_id> + </bug> + [% ELSE %] + <bug> + [% FOREACH field = bug.fields %] + [% IF displayfields.$field %] + [%+ PROCESS bug_field %] + [% END %] + [% END %] + + [%# This is here so automated clients can still use process_bug.cgi %] + [% IF displayfields.token && user.id %] + <token>[% issue_hash_token([bug.id, bug.delta_ts]) FILTER xml %]</token> + [% END %] + + [%# Now handle 'special' fields #%] + [% IF displayfields.group %] + [% FOREACH g = bug.groups %] + [% NEXT UNLESS g.ison %] + <group id="[% g.bit FILTER xml %]">[% g.name FILTER xml %]</group> + [% END %] + [% END %] + + [%# Bug Flags %] + [% PROCESS section_flags obj => bug %] + + [% IF displayfields.long_desc %] + [% FOREACH c = bug.comments %] + [% NEXT IF c.is_private && !user.is_insider %] + <long_desc isprivate="[% c.is_private FILTER xml %]"> + <commentid>[% c.id FILTER xml %]</commentid> + [% IF c.is_about_attachment %] + <attachid>[% c.extra_data FILTER xml %]</attachid> + [% END %] + <who name="[% c.author.name FILTER xml %]">[% c.author.email FILTER email FILTER xml %]</who> + <bug_when>[% c.creation_ts FILTER time("%Y-%m-%d %T %z") FILTER xml %]</bug_when> + [% IF user.is_timetracker && (c.work_time - 0 != 0) %] + <work_time>[% PROCESS formattimeunit time_unit = c.work_time FILTER xml %]</work_time> + [% END %] + <thetext>[% c.body_full FILTER xml %]</thetext> + </long_desc> + [% END %] + [% END %] + + [% IF displayfields.attachment %] + [% FOREACH a = bug.attachments %] + [% NEXT IF a.isprivate && !user.is_insider %] + <attachment + isobsolete="[% a.isobsolete FILTER xml %]" + ispatch="[% a.ispatch FILTER xml %]" + isprivate="[% a.isprivate FILTER xml %]" + isurl="[% a.isurl FILTER xml %]" + > + <attachid>[% a.id %]</attachid> + <date>[% a.attached FILTER time("%Y-%m-%d %T %z") FILTER xml %]</date> + <delta_ts>[% a.modification_time FILTER time("%Y-%m-%d %T %z") FILTER xml %]</delta_ts> + <desc>[% a.description FILTER xml %]</desc> + <filename>[% a.filename FILTER xml %]</filename> + <type>[% a.contenttype FILTER xml %]</type> + <size>[% a.datasize FILTER xml %]</size> + <attacher>[% a.attacher.email FILTER email FILTER xml %]</attacher> + [%# This is here so automated clients can still use attachment.cgi %] + [% IF displayfields.token && user.id %] + <token>[% issue_hash_token([a.id, a.modification_time]) FILTER xml %]</token> + [% END %] + [% IF displayfields.attachmentdata %] + <data encoding="base64">[% a.data FILTER base64 %]</data> + [% END %] + + [% PROCESS section_flags obj => a %] + </attachment> + [% END %] + [% END %] + + [% Hook.process("bug_end") %] + + </bug> + [% END %] +[% END %] + +</bugzilla> + +[% BLOCK bug_field %] + [% FOREACH val = bug.$field %] + [%# We need to handle some fields differently. This should become + # nicer once we have custfields, and a type attribute for the fields + #%] + [% name = '' %] + [% IF field == 'reporter' OR field == 'assigned_to' OR + field == 'qa_contact' %] + [% name = val.name %] + [% val = val.email FILTER email %] + [% ELSIF field == 'cc' %] + [% val = val FILTER email %] + [% ELSIF field == 'creation_ts' OR field == 'delta_ts' %] + [% val = val FILTER time("%Y-%m-%d %T %z") %] + [% END %] + <[% field %][% IF name != '' %] name="[% name FILTER xml %]"[% END -%]> + [%- val FILTER xml %]</[% field %]> + [% END %] +[% END %] + +[% BLOCK section_flags %] + [% RETURN UNLESS displayfields.flag %] + + [% FOREACH flag = obj.flags %] + <flag name="[% flag.type.name FILTER xml %]" + id="[% flag.id FILTER xml %]" + type_id="[% flag.type_id FILTER xml %]" + status="[% flag.status FILTER xml %]" + setter="[% flag.setter.email FILTER email FILTER xml %]" + [% IF flag.status == "?" && flag.requestee %] + requestee="[% flag.requestee.email FILTER email FILTER xml %]" + [% END %] + /> + [% END %] +[% END %] diff --git a/template/en/default/bug/summarize-time.html.tmpl b/template/en/default/bug/summarize-time.html.tmpl new file mode 100644 index 0000000..eb5ba7a --- /dev/null +++ b/template/en/default/bug/summarize-time.html.tmpl @@ -0,0 +1,335 @@ +[%# 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): Christian Reis <kiko@async.com.br> + # Frédéric Buclin <LpSolit@gmail.com> + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% title = "Time Summary " %] +[% IF do_depends %] + [% title = title _ "for " %] + [% header = "$terms.Bug $ids.0" FILTER bug_link(ids.0) FILTER none %] + [% header = title _ header _ " (and $terms.bugs blocking it)" %] + [% title = title _ "$terms.Bug $ids.0" %] +[% ELSE %] + [% title = title _ "($ids.size $terms.bugs selected)" %] + [% header = title %] +[% END %] + +[% PROCESS global/header.html.tmpl + title = title + header = header + style_urls = ["skins/standard/summarize-time.css"] + doc_section = "timetracking.html" + %] + +[% INCLUDE query_form %] + +[% IF do_report %] + + [% global.grand_total = 0 global.estimated = 0 global.remaining = 0 %] + + [% FOREACH workdata = part_list %] + [%# parts contains date ranges (from, to). %] + [% part = parts.shift %] + <div align="right"> + <h4 style="padding-right: 2em; margin: 0;"> + [% IF part.0 or part.1 %] + [% part.0 OR "Up" FILTER html %] to [% part.1 OR "now" FILTER html %] + [% ELSE %] + Full summary (no period specified) + [% END %] + </h4> + </div> + [% IF group_by == "number" %] + [% INCLUDE number_report %] + [% ELSE %] + [% INCLUDE owner_report %] + [% END %] + [% END %] + + [% IF detailed %] + <h4 style="margin: 0"> + Total of [% global.remaining FILTER format("%.2f") %]h remains from + original estimate of [% global.estimated FILTER format("%.2f") %]h + [% IF global.deadline %] + (deadline [% global.deadline FILTER html %]) + [% END %] + </h4> + [% END %] + + [% IF monthly %] + <h4 style="margin: 0">Total of [% global.grand_total FILTER format("%.2f") %] hours worked</h4> + <hr noshade size="1"> + [% END %] + + [% IF null.size > 0 %] + [% INCLUDE inactive_report %] + <h4 style="margin: 0">Total of [% null.size %] inactive [% terms.bugs %]</h4> + [% END %] + +[% END %] + +[% PROCESS global/footer.html.tmpl %] + +[%# + # + # Developer reporting + # + #%] + +[% BLOCK owner_report %] + [% global.total = 0 global.bug_count = {} global.owner_count = {} %] + <table cellpadding="4" cellspacing="0" width="90%" class="realitems owner"> + [% FOREACH owner = workdata.keys.sort %] + [% INCLUDE do_one_owner owner=owner ownerdata=workdata.$owner + detailed=detailed %] + [% END %] + + [% additional = "$global.owner_count.size developers @ + $global.bug_count.size $terms.bugs" %] + [% INCLUDE section_total colspan=3 additional=additional %] + </table> +[% END %] + +[% BLOCK do_one_owner %] + [% global.owner_count.$owner = 1 %] + <tr><td colspan="5" class="owner_header"> + <b>[% owner FILTER html %]</b> + </td></tr> + [% col = 0 subtotal = 0%] + [% FOREACH bugdata=ownerdata.nsort("bug_id") %] + [% bug_id = bugdata.bug_id %] + [% INCLUDE calc_bug_total id=bug_id %] + [% global.bug_count.$bug_id = 1 %] + [% IF detailed %] + [% INCLUDE bug_header cid=col id=bug_id bugdata=bugdata extra=1 %] + [% col = col + 1 %] + [% END %] + [% subtotal = subtotal + bugdata.total_time %] + [% END %] + <tr> + <td colspan="4" align="right"><b>Total</b>:</td> + <td align="right" class="subtotal" width="100"> + <b>[% subtotal FILTER format("%.2f") %]</b></td> + [% global.total = global.total + subtotal %] + </tr> +[% END %] + +[%# + # + # Bug Number reporting + # + #%] + +[% BLOCK number_report %] + [% global.total = 0 global.owner_count = {} global.bug_count = {} %] + + <table cellpadding="4" cellspacing="0" width="90%" class="realitems number"> + [% FOREACH bug = workdata.keys.nsort %] + [% INCLUDE do_one_bug id=bug bugdata=workdata.$bug + detailed=detailed %] + [% END %] + + [% additional = "$global.bug_count.size $terms.bugs & + $global.owner_count.size developers" %] + [% INCLUDE section_total additional=additional colspan=2 %] + </table> +[% END %] + +[% BLOCK do_one_bug %] + [% subtotal = 0.00 cid = 0 %] + [% INCLUDE calc_bug_total id=id %] + [% global.bug_count.$id = 1 %] + [% INCLUDE bug_header id=id %] + + [% FOREACH owner = bugdata.sort("login_name") %] + [% work_time = owner.total_time %] + [% subtotal = subtotal + work_time %] + [% login_name = owner.login_name %] + [% global.owner_count.$login_name = 1 %] + [% IF detailed %] + [% cid = cid + 1 %] + <tr class="owner_header[% 2 FILTER none IF cid % 2 %]"> + <td> </td> + <td colspan="2"><b>[% login_name FILTER html %]</b></td> + <td align="right"> + [% work_time FILTER format("%.2f") %]</td> + </tr> + [% END %] + [% END %] + <tr> + <td colspan="2"> </td> + <td align="right"> + <b>Total</b>: + </td> + <td align="right" class="subtotal" width="100"> + <b>[% subtotal FILTER format("%.2f") %]</b> + </td> + </tr> + [% global.total = global.total + subtotal %] +[% END %] + +[% BLOCK bug_header %] + <tr class="bug_header[% '2' IF cid % 2 %]"> + <td width="80" valign="top"> + <b>[% "$terms.Bug $id" FILTER bug_link(id) FILTER none %]</b> + </td> + <td width="100"><b>[% display_value("bug_status", bugs.$id.bug_status) FILTER html %]</b></td> + <td colspan="2">[% bugs.$id.short_desc FILTER html %]</td> + [% IF extra %] + <td align="right" valign="top">[% bugdata.total_time FILTER html %]</td> + [% END %] + </tr> + [% IF detailed %] + <tr class="bug_header[% '2' IF cid % 2 %]"> + <td> </td> + <td colspan="3"> + <table width="100%" cellpadding="0" cellspacing="0"> + <tr> + <td width="33%"> + Estimated: [% bugs.$id.estimated_time FILTER format("%.2f") %]h + </td> + <td width="33%"> + Remaining: [% bugs.$id.remaining_time FILTER format("%.2f") %]h + </td> + <td width="33%"> + Deadline: [% bugs.$id.deadline || "<b>Not set</b>" %] + </td> + </tr> + </table> + </td> + [% IF extra %] + <td> </td> + [% END %] + </tr> + [% END %] +[% END %] + +[% BLOCK calc_bug_total %] + [% IF !global.bug_count.$id %] + [% global.estimated = global.estimated + bugs.$id.estimated_time %] + [% global.remaining = global.remaining + bugs.$id.remaining_time %] + [% IF !global.deadline || bugs.$id.deadline && + global.deadline.replace("-", "") < bugs.$id.deadline.replace("-", "") %] + [% SET global.deadline = bugs.$id.deadline %] + [% END %] + [% END %] +[% END %] + +[% BLOCK inactive_report %] + <h3>Inactive [% terms.bugs %]</h3> + <table cellpadding="4" cellspacing="0" width="90%" class="zeroitems"> + [% cid = 0 %] + [% FOREACH bug_id = null.nsort %] + [% INCLUDE bug_header id=bug_id cid=cid %] + [% cid = cid + 1 %] + [% END %] + </table> +[% END %] + + +[% BLOCK section_total %] + [% IF global.total > 0 %] + <tr class="section_total"> + <td><b>Totals</b></td> + <td colspan="[% colspan FILTER html %]" align="right"><b>[% additional FILTER html %]</b></td> + <td align="right"><b>[% global.total FILTER format("%.2f") %]</b></td> + </tr> + [% ELSE %] + <tr> + <td>No time allocated during the specified period.</td> + </tr> + [% END %] + [% global.grand_total = global.grand_total + global.total %] +[% END %] + +[%# + # + # The query form + # + #%] + +[% BLOCK query_form %] +<hr noshade size=1> +<form method="post" name="summary" style="display: inline" action="summarize_time.cgi"> +<input type="hidden" name="do_depends" value="[% do_depends FILTER html %]"> +<input type="hidden" name="id" value="[% ids.join(",") FILTER html %]"> +<input type="hidden" name="do_report" value="1"> + +[% IF warn_swap_dates %] + <h4 style="border: 1px solid red; margin: 1em; padding: 0.5em">The + end date specified occurs before the start date, which doesn't + make sense; the dates below have therefore been swapped.</h4> +[% END %] + +<table> +<tr> +<td align="right"> + <b><label accesskey="s" + for="start_date">Period <u>s</u>tarting</label></b>: +</td><td colspan="3"> + <input type="text" id="start_date" name="start_date" size="11" + align="right" value="[% start_date FILTER html %]" maxlength="10"> + + <b>and <label accesskey="e" for="end_date"><u>e</u>nding</label></b>: + <input type="text" name="end_date" size="11" id="end_date" + align="right" value ="[% end_date FILTER html %]" maxlength="10"> +</td><td align="right"> + <input type="submit" id="summarize" value="Summarize"> +</td></tr> +<tr> +<td> </td><td colspan="4"> + <small>(Dates are optional, and in YYYY-MM-DD format)</small> +</td> +<tr><td align="right"> + <b>Group by</b>: +</td><td colspan="2"> + <input type="radio" name="group_by" id="number" value="number" [%+ + 'checked="checked"' IF group_by == "number" + %]><label + for="number" accesskey="n">[% terms.Bug %] <u>N</u>umber</label> + <input type="radio" name="group_by" id="owner" value="owner" [%+ + 'checked="checked"' IF group_by == "owner" + %]><label + for="owner" accesskey="d"><u>D</u>eveloper</label> +</td><td colspan="2"> + <label for="ctype"><b>Format</b></label>: <select name="ctype" id="ctype"> + <option value="html">HTML Report</option> + </select> +</td></tr><tr> +<td> </td><td colspan="4"> + <input type="checkbox" name="monthly" [% 'checked="checked"' IF + monthly %] id="monthly"> + <label for="monthly" accesskey="m">Split by <u>m</u>onth</label> + [%# XXX: allow splitting by other intervals %] + + <input type="checkbox" name="detailed" [% 'checked="checked"' IF + detailed %] id="detailed"> + <label for="detailed" accesskey="t">De<u>t</u>ailed summaries</label> + + <input type="checkbox" name="inactive" [% 'checked="checked"' IF + inactive %] id="inactive"> + <label for="inactive" accesskey="i">Also show <u>i</u>nactive + [%+ terms.bugs %]</label> +</td> +</tr></table> + +</form> +<script type="text/javascript"> +<!-- + document.forms['summary'].start_date.focus() +//--></script> +<hr noshade size=1> +[% END %] diff --git a/template/en/default/bug/time.html.tmpl b/template/en/default/bug/time.html.tmpl new file mode 100644 index 0000000..e070e7d --- /dev/null +++ b/template/en/default/bug/time.html.tmpl @@ -0,0 +1,47 @@ +[%# 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): Jeff Hedlund <jeff.hedlund@matrixsi.com> + # + #%] + +[% BLOCK formattimeunit %] + [%# INTERFACE: + # time_unit: the number converting, converts to 2 decimal places + # unless the last character is a 0, then it truncates to + # 1 decimal place + #%] + [% time_unit = time_unit FILTER format('%.2f') %] + [% IF time_unit.match('0\Z') %] + [% time_unit FILTER format('%.1f') %] + [% ELSE %] + [% time_unit FILTER format('%.2f') %] + [% END %] +[% END %] + +[% BLOCK calculatepercentage %] + [%# INTERFACE: + # act: actual time + # rem: remaining time + # %] + [% IF (act + rem) > 0 %] + [% (act / (act + rem)) * 100 + FILTER format("%d") %] + [% ELSE %] + 0 + [% END %] +[% END %] diff --git a/template/en/default/bug/votes/delete-all.html.tmpl b/template/en/default/bug/votes/delete-all.html.tmpl new file mode 100644 index 0000000..41b7512 --- /dev/null +++ b/template/en/default/bug/votes/delete-all.html.tmpl @@ -0,0 +1,51 @@ +[%# 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: + # This template has no interface. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl + title = "Remove your votes?" + %] + +<p> + You are about to remove all of your [% terms.bug %] votes. Are you sure you wish to + remove your vote from every [% terms.bug %] you've voted on? +</p> + +<form action="votes.cgi" method="post"> + <input type="hidden" name="action" value="vote"> + <p> + <input type="radio" name="delete_all_votes" value="1"> + Yes, delete all my votes + </p> + <p> + <input type="radio" name="delete_all_votes" value="0" checked="checked"> + No, go back and review my votes + </p> + <p> + <input type="submit" id="vote" value="Submit"> + </p> +</form> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/bug/votes/list-for-bug.html.tmpl b/template/en/default/bug/votes/list-for-bug.html.tmpl new file mode 100644 index 0000000..a599dc0 --- /dev/null +++ b/template/en/default/bug/votes/list-for-bug.html.tmpl @@ -0,0 +1,60 @@ +[%# 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: + # bug_id: integer. ID of the bug we are listing the votes for. + # users: list of hashes. May be empty. Each hash has two members: + # login_name: string. The login name of the user whose vote is attached + # vote_count: integer. The number of times that user has votes for this bug. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl + title = "Show Votes" + subheader = "$terms.Bug <a href=\"show_bug.cgi?id=$bug_id\">$bug_id</a>" + %] + +[% total = 0 %] +<table cellspacing="4"> + <tr> + <th>Who</th> + <th>Number of votes</th> + </tr> + + [% FOREACH voter = users %] + [% total = total + voter.vote_count %] + <tr> + <td> + <a href="votes.cgi?action=show_user&user_id= + [%- voter.id FILTER url_quote %]"> + [% voter.login_name FILTER email FILTER html %] + </a> + </td> + <td align="right"> + [% voter.vote_count %] + </td> + </tr> + [% END %] +</table> + +<p>Total votes: [% total %]</p> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/bug/votes/list-for-user.html.tmpl b/template/en/default/bug/votes/list-for-user.html.tmpl new file mode 100644 index 0000000..2f97616 --- /dev/null +++ b/template/en/default/bug/votes/list-for-user.html.tmpl @@ -0,0 +1,185 @@ +[%# 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: + # voting_user: hash containing a 'login' field + # + # products: list of hashes containing details of products relating to + # voting: + # name: name of product + # bugs: list of bugs the user has voted for + # bug_ids: list of bug ids the user has voted for + # onevoteonly: one or more votes allowed per bug? + # total: users current vote count for the product + # maxvotes: max votes allowed for a user in this product + # maxperbug: max votes per bug allowed for a user in this product + # + # bug_id: number; if the user is voting for a bug, this is the bug id + # + # canedit: boolean; Should the votes be presented in a form, or readonly? + # + # all_bug_ids: List of all bug ids the user has voted for, across all products + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% IF !header_done %] + [% subheader = voting_user.login FILTER html %] + [% IF canedit %] + [% title = "Change Votes" %] + [% IF bug_id %] + [%# We .select and .focus the input so it works for textbox and + checkbox %] + [% onload = "document.forms['voting_form'].bug_" _ bug_id _ + ".select();document.forms['voting_form'].bug_" _ bug_id _ + ".focus()" %] + [% END %] + [% ELSE %] + [% title = "Show Votes" %] + [% END %] + [% PROCESS global/header.html.tmpl + style_urls = [ "skins/standard/voting.css" ] + %] +[% ELSE %] + <hr> +[% END %] + +[% IF votes_recorded %] + <p> + <font color="red"> + The changes to your votes have been saved. + </font> + </p> +[% ELSE %] + <br> +[% END %] + +[% IF products.size %] + <form name="voting_form" method="post" action="votes.cgi"> + <input type="hidden" name="action" value="vote"> + <table cellspacing="4"> + <tr> + <td></td> + <th>Votes</th> + <th>[% terms.Bug %] #</th> + <th>Summary</th> + </tr> + + [% onevoteproduct = 0 %] + [% multivoteproduct = 0 %] + [% FOREACH product = products %] + [% IF product.onevoteonly %] + [% onevoteproduct = 1 %] + [% ELSE %] + [% multivoteproduct = 1 %] + [% END %] + <tr> + <th>[% product.name FILTER html %]</th> + <td colspan="2" ><a href="buglist.cgi?bug_id= + [%- product.bug_ids.join(",") FILTER url_quote %]">([% terms.bug %] list)</a> + </td> + <td> + [% IF product.maxperbug < product.maxvotes AND + product.maxperbug > 1 %] + <font size="-1"> + (Note: only [% product.maxperbug %] vote + [% "s" IF product.maxperbug != 1 %] allowed per [% terms.bug %] in + this product.) + </font> + [% END %] + </td> + </tr> + + [% FOREACH bug = product.bugs %] + <tr [% IF bug.id == bug_id && canedit %] + class="bz_bug_being_voted_on" [% END %]> + <td>[% IF bug.id == bug_id && canedit %]Enter New Vote here → + [%- END %]</td> + <td align="right"><a name="vote_[% bug.id %]"> + [% IF canedit %] + [% IF product.onevoteonly %] + <input type="checkbox" name="[% bug.id %]" value="1" + [% " checked" IF bug.count %] id="bug_[% bug.id %]"> + [% ELSE %] + <input name="[% bug.id %]" value="[% bug.count %]" + size="2" id="bug_[% bug.id %]"> + [% END %] + [% ELSE %] + [% bug.count %] + [% END %] + </a></td> + <td align="center"> + [% bug.id FILTER bug_link(bug) FILTER none %] + </td> + <td> + [% bug.summary FILTER html %] + (<a href="votes.cgi?action=show_bug&bug_id=[% bug.id %]">Show Votes</a>) + </td> + </tr> + [% END %] + + <tr> + <td></td> + <td colspan="3">[% product.total %] vote + [% "s" IF product.total != 1 %] used out of [% product.maxvotes %] + allowed. + <br> + <br> + </td> + </tr> + [% END %] + </table> + + [% IF canedit %] + <input type="submit" value="Change My Votes" id="change"> or + <a href="buglist.cgi?bug_id=[% all_bug_ids.join(",") FILTER url_quote %]">view all + as [% terms.bug %] list</a> + <br> + <br> + To change your votes, + [% IF multivoteproduct %] + type in new numbers (using zero to mean no votes) + [% " or " IF onevoteproduct %] + [% END %] + [% IF onevoteproduct %] + change the checkbox + [% END %] + and then click <b>Change My Votes</b>. + [% ELSE %] + <a href="buglist.cgi?bug_id=[% all_bug_ids.join(",") FILTER url_quote %]">View all + as [% terms.bug %] list</a> + [% END %] + </form> +[% ELSE %] + <p> + [% IF canedit %] + You are + [% ELSE %] + This user is + [% END %] + currently not voting on any [% terms.bugs %]. + </p> +[% END %] + +<p> + <a href="page.cgi?id=voting.html">Help with voting</a>. +</p> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/config.js.tmpl b/template/en/default/config.js.tmpl new file mode 100644 index 0000000..0d63583 --- /dev/null +++ b/template/en/default/config.js.tmpl @@ -0,0 +1,142 @@ +[%# 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): Myk Melez <myk@mozilla.org> + #%] +// +// This file contains installation specific values for third-party clients. +// +// Note: this interface is experimental and under development. +// We may and probably will make breaking changes to it in the future. + +// the global bugzilla url +var installation = { + base_url : '[% urlbase FILTER js %]', + install_version : '[% constants.BUGZILLA_VERSION FILTER js %]', + maintainer : '[% Param('maintainer') FILTER js %]' +}; + + +// Status and Resolution +// ===================== +var status = [ [% FOREACH x = status %]'[% x FILTER js %]', [% END %] ]; +var status_open = [ [% FOREACH x = open_status %]'[% x FILTER js %]', [% END %] ]; +var status_closed = [ [% FOREACH x = closed_status %]'[% x FILTER js %]', [% END %] ]; +var resolution = [ [% FOREACH x = resolution %]'[% x FILTER js %]', [% END %] ]; + + +// Keywords +// ======== + +var keyword = [ [% FOREACH x = keyword %]'[% x FILTER js %]', [% END %] ]; + + +// Platforms +// ========= + +var platform = [ [% FOREACH x = platform %]'[% x FILTER js %]', [% END %] ]; + + +// Severities +// ========== + +var severity = [ [% FOREACH x = severity %]'[% x FILTER js %]', [% END %] ]; + + +// Custom Fields +// ============= + +[% FOREACH cf = custom_fields %] +var [% cf.name FILTER js %] = [ [% FOREACH x = cf.legal_values %]'[% x.name FILTER js %]', [% END %] ]; +[% END %] + + +// Products and Components +// ======================= +// +// It is not necessary to list all products and components here. +// Instead, you can define a "blacklist" for some commonly used words +// or word fragments that occur in a product or component name +// but should _not_ trigger product/component search. + + +// A list of all products and their components, versions, and target milestones: + +var component = new Object(); +var version = new Object(); +var target_milestone = new Object(); + +[% FOREACH p = products %] + component['[% p.name FILTER js %]'] = [ [% FOREACH x = p.components %]'[% x.name FILTER js %]', [% END %] ]; + version['[% p.name FILTER js %]'] = [ [% FOREACH x = p.versions %]'[% x.name FILTER js %]', [% END %] ]; + target_milestone['[% p.name FILTER js %]'] = [ [% FOREACH x = p.milestones %]'[% x.name FILTER js %]', [% END %] ]; +[% END %] + +// Product and Component Exceptions +// ================================ +// +// A blacklist for some commonly used words or word fragments +// that occur in a product or component name but should *not* +// trigger product/component search in QuickSearch. + +var product_exceptions = new Array( + // Example: + //"row" // [Browser] + // // ^^^ + //,"new" // [MailNews] + // // ^^^ +); + +var component_exceptions = new Array( + // Example: + //"hang" // [mozilla.org] Bugzilla: Component/Keyword Changes + // // ^^^^ +); + +// Queryable Fields +// ================ +[% PROCESS "global/field-descs.none.tmpl" %] +var field = [ +[% FOREACH x = field %] + { name: '[% x.name FILTER js %]', + description: '[% (field_descs.${x.name} OR x.description) FILTER js %]', + [%-# These values are meaningful for custom fields only. %] + [% IF x.custom %] + type: '[% x.type FILTER js %]', + type_desc: '[% field_types.${x.type} FILTER js %]', + enter_bug: '[% x.enter_bug FILTER js %]', + [% END %] + }, +[% END %] +]; + +// Deprecated Variables +// ==================== +// +// Other names for various variables. These are deprecated +// and could go away at any time. Use them at your own risk! + +var bugzilla = installation.base_url; +var statuses = status; +var statuses_resolved = status_closed; +var resolutions = resolution; +var keywords = keyword; +var platforms = platform; +var severities = severity; +var cpts = component; +var vers = version; +var tms = target_milestone; diff --git a/template/en/default/config.rdf.tmpl b/template/en/default/config.rdf.tmpl new file mode 100644 index 0000000..ec80f76 --- /dev/null +++ b/template/en/default/config.rdf.tmpl @@ -0,0 +1,262 @@ +[%# 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): Myk Melez <myk@mozilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] + +<?xml version="1.0"[% IF Param('utf8') %] encoding="UTF-8"[% END %]?> +<!-- Note: this interface is experimental and under development. + - We may and probably will make breaking changes to it in the future. --> + +<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:bz="http://www.bugzilla.org/rdf#"> + +<bz:installation rdf:about="[% urlbase FILTER xml %]"> + <bz:install_version>[% constants.BUGZILLA_VERSION FILTER html %]</bz:install_version> + <bz:maintainer>[% Param('maintainer') FILTER html %]</bz:maintainer> + + <bz:status> + <Seq> + [% FOREACH item = status %] + <li>[% item FILTER html %]</li> + [% END %] + </Seq> + </bz:status> + + <bz:status_open> + <Seq> + [% FOREACH item = open_status %] + <li>[% item FILTER html %]</li> + [% END %] + </Seq> + </bz:status_open> + + <bz:status_closed> + <Seq> + [% FOREACH item = closed_status %] + <li>[% item FILTER html %]</li> + [% END %] + </Seq> + </bz:status_closed> + + <bz:resolution> + <Seq> + [% FOREACH item = resolution %] + <li>[% item FILTER html %]</li> + [% END %] + </Seq> + </bz:resolution> + + <bz:keyword> + <Seq> + [% FOREACH item = keyword %] + <li>[% item FILTER html %]</li> + [% END %] + </Seq> + </bz:keyword> + + <bz:platform> + <Seq> + [% FOREACH item = platform %] + <li>[% item FILTER html %]</li> + [% END %] + </Seq> + </bz:platform> + + <bz:op_sys> + <Seq> + [% FOREACH item = op_sys %] + <li>[% item FILTER html %]</li> + [% END %] + </Seq> + </bz:op_sys> + + <bz:priority> + <Seq> + [% FOREACH item = priority %] + <li>[% item FILTER html %]</li> + [% END %] + </Seq> + </bz:priority> + + <bz:severity> + <Seq> + [% FOREACH item = severity %] + <li>[% item FILTER html %]</li> + [% END %] + </Seq> + </bz:severity> + +[% FOREACH cf = custom_fields %] + <bz:[% cf.name FILTER html %]> + <Seq> + [% FOREACH item = cf.legal_values %] + <li>[% item.name FILTER html %]</li> + [% END %] + </Seq> + </bz:[% cf.name FILTER html %]> + +[% END %] + + <bz:products> + <Seq> + [% FOREACH product = products %] + <li> + <bz:product rdf:about="[% urlbase FILTER xml %]product.cgi?name=[% product.name FILTER url_quote %]"> + <bz:name>[% product.name FILTER html %]</bz:name> + + <bz:components> + <Seq> + [% FOREACH component = product.components %] + <li resource="[% urlbase FILTER xml %]component.cgi?name=[% component.name FILTER url_quote + %]&product=[% product.name FILTER url_quote %]"/> + [% END %] + </Seq> + </bz:components> + + <bz:versions> + <Seq> + [% FOREACH version = product.versions %] + <li resource="[% urlbase FILTER xml %]version.cgi?name=[% version.name FILTER url_quote %]"/> + [% END %] + </Seq> + </bz:versions> + + [% IF Param('usetargetmilestone') %] + <bz:target_milestones> + <Seq> + [% FOREACH milestone = product.milestones %] + <li resource="[% urlbase FILTER xml %]milestone.cgi?name=[% milestone.name FILTER url_quote %]"/> + [% END %] + </Seq> + </bz:target_milestones> + [% END %] + + </bz:product> + </li> + [% END %] + </Seq> + </bz:products> + + [% all_visible_flag_types = {} %] + <bz:components> + <Seq> + [% FOREACH product = products %] + [% FOREACH component = product.components %] + <li> + <bz:component rdf:about="[% urlbase FILTER xml %]component.cgi?name=[% component.name FILTER url_quote + %]&product=[% product.name FILTER url_quote %]"> + <bz:name>[% component.name FILTER html %]</bz:name> + [% IF show_flags %] + <bz:flag_types> + <Seq> + [% flag_types = component.flag_types.bug.merge(component.flag_types.attachment) %] + [% FOREACH flag_type = flag_types %] + [% NEXT UNLESS flag_type.is_active %] + [% all_visible_flag_types.${flag_type.id} = flag_type %] + <li resource="[% urlbase FILTER xml %]flag.cgi?id=[% flag_type.id FILTER url_quote + %]&name=[% flag_type.name FILTER url_quote %]" /> + [% END %] + </Seq> + </bz:flag_types> + [% END %] + </bz:component> + </li> + [% END %] + [% END %] + </Seq> + </bz:components> + + <bz:versions> + <Seq> + [% FOREACH product = products %] + [% FOREACH version = product.versions %] + <li> + <bz:version rdf:about="[% urlbase FILTER xml %]version.cgi?name=[% version.name FILTER url_quote %]"> + <bz:name>[% version.name FILTER html %]</bz:name> + </bz:version> + </li> + [% END %] + [% END %] + </Seq> + </bz:versions> + + [% IF Param('usetargetmilestone') %] + <bz:target_milestones> + <Seq> + [% FOREACH product = products %] + [% FOREACH milestone = product.milestones %] + <li> + <bz:target_milestone rdf:about="[% urlbase FILTER xml %]milestone.cgi?name=[% milestone.name FILTER url_quote %]"> + <bz:name>[% milestone.name FILTER html %]</bz:name> + </bz:target_milestone> + </li> + [% END %] + [% END %] + </Seq> + </bz:target_milestones> + [% END %] + + [% IF show_flags %] + <bz:flag_types> + <Seq> + [% FOREACH flag_type = all_visible_flag_types.values.sort('name') %] + <li> + <bz:flag_type rdf:about="[% urlbase FILTER xml %]flag.cgi?id=[% flag_type.id FILTER url_quote + %]&name=[% flag_type.name FILTER url_quote %]"> + <bz:id>[% flag_type.id FILTER html %]</bz:id> + <bz:name>[% flag_type.name FILTER html %]</bz:name> + <bz:description>[% flag_type.description FILTER html %]</bz:description> + <bz:type>[% flag_type.target_type FILTER html %]</bz:type> + <bz:requestable>[% flag_type.is_requestable FILTER html %]</bz:requestable> + <bz:specifically_requestable>[% flag_type.is_requesteeble FILTER html %]</bz:specifically_requestable> + <bz:multiplicable>[% flag_type.is_multiplicable FILTER html %]</bz:multiplicable> + [% IF user.in_group("editcomponents") %] + <bz:grant_group>[% flag_type.grant_group.name FILTER html %]</bz:grant_group> + <bz:request_group>[% flag_type.request_group.name FILTER html %]</bz:request_group> + [% END %] + </bz:flag_type> + </li> + [% END %] + </Seq> + </bz:flag_types> + [% END %] + + <bz:fields> + <Seq> + [% PROCESS "global/field-descs.none.tmpl" %] + [% FOREACH item = field %] + <li> + <bz:field rdf:about="[% urlbase FILTER xml %]field.cgi?name=[% item.name FILTER url_quote %]"> + <bz:name>[% item.name FILTER html %]</bz:name> + <bz:description>[% (field_descs.${item.name} OR item.description) FILTER html %]</bz:description> + [%-# These values are meaningful for custom fields only. %] + [% IF item.custom %] + <bz:type>[% item.type FILTER html %]</bz:type> + <bz:type_desc>[% field_types.${item.type} FILTER html %]</bz:type_desc> + <bz:enter_bug>[% item.enter_bug FILTER html %]</bz:enter_bug> + [% END %] + </bz:field> + </li> + [% END %] + </Seq> + </bz:fields> +</bz:installation> + +</RDF> diff --git a/template/en/default/email/lockout.txt.tmpl b/template/en/default/email/lockout.txt.tmpl new file mode 100644 index 0000000..ac65257 --- /dev/null +++ b/template/en/default/email/lockout.txt.tmpl @@ -0,0 +1,39 @@ +[%# 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 the Mozilla Corporation. + # Portions created by the Initial Developer are Copyright (C) 2008 + # the Initial Developer. All Rights Reserved. + # + # Contributor(s): + # Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[% PROCESS global/variables.none.tmpl %] + +From: [% Param('mailfrom') %] +To: [% Param('maintainer') %] +Subject: [[% terms.Bugzilla %]] Account Lock-Out: [% locked_user.login %] ([% attempts.0.ip_addr %]) +X-Bugzilla-Type: admin + +The IP address [% attempts.0.ip_addr %] failed too many login attempts ( +[%- constants.MAX_LOGIN_ATTEMPTS +%]) for +the account [% locked_user.login %]. + +The login attempts occurred at these times: + +[% FOREACH login = attempts %] + [%+ login.login_time FILTER time %] +[% END %] + +This IP will be able to log in again using this account at +[%+ unlock_at FILTER time %]. diff --git a/template/en/default/email/newchangedmail.txt.tmpl b/template/en/default/email/newchangedmail.txt.tmpl new file mode 100644 index 0000000..65e0287 --- /dev/null +++ b/template/en/default/email/newchangedmail.txt.tmpl @@ -0,0 +1,88 @@ +[%# 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): André Batosti <batosti@async.com.br> + #%] + +[% PROCESS "global/variables.none.tmpl" %] +From: [% Param('mailfrom') %] +To: [% to_user.email %] +Subject: [[% terms.Bug %] [%+ bugid %]] [% 'New: ' IF isnew %][%+ summary %] +X-Bugzilla-Reason: [% reasonsheader %] +X-Bugzilla-Type: [% isnew ? 'new' : 'changed' %] +X-Bugzilla-Watch-Reason: [% reasonswatchheader %] +[% IF Param('useclassification') %] +X-Bugzilla-Classification: [% classification %] +[% END %] +X-Bugzilla-Product: [% product %] +X-Bugzilla-Component: [% comp %] +X-Bugzilla-Keywords: [% keywords %] +X-Bugzilla-Severity: [% severity %] +X-Bugzilla-Who: [% changer %] +X-Bugzilla-Status: [% status %] +X-Bugzilla-Priority: [% priority %] +X-Bugzilla-Assigned-To: [% assignedto %] +X-Bugzilla-Target-Milestone: [% targetmilestone %] +X-Bugzilla-Changed-Fields: [% changedfields %] +[%+ threadingmarker %] + +[%+ urlbase %]show_bug.cgi?id=[% bugid %] +[%- IF diffs %] + +[%+ diffs %] +[% END -%] +[% FOREACH comment = new_comments %] + +[%- IF comment.count %] +--- Comment #[% comment.count %] from [% comment.author.identity %] [%+ comment.creation_ts FILTER time(undef, to_user.timezone) %] --- +[% END %] +[%+ comment.body_full({ is_bugmail => 1, wrap => 1 }) %] +[% END %] + +-- [%# Protect the trailing space of the signature marker %] +Configure [% terms.bug %]mail: [% urlbase %]userprefs.cgi?tab=email +------- You are receiving this mail because: ------- +[% FOREACH relationship = reasons %] + [% SWITCH relationship %] + [% CASE constants.REL_ASSIGNEE %] +You are the assignee for the [% terms.bug %]. + [% CASE constants.REL_REPORTER %] +You reported the [% terms.bug %]. + [% CASE constants.REL_QA %] +You are the QA contact for the [% terms.bug %]. + [% CASE constants.REL_CC %] +You are on the CC list for the [% terms.bug %]. + [% CASE constants.REL_VOTER %] +You are a voter for the [% terms.bug %]. + [% CASE constants.REL_GLOBAL_WATCHER %] +You are watching all [% terms.bug %] changes. + [% END %] +[% END %] +[% FOREACH relationship = reasons_watch %] + [% SWITCH relationship %] + [% CASE constants.REL_ASSIGNEE %] +You are watching the assignee of the [% terms.bug %]. + [% CASE constants.REL_REPORTER %] +You are watching the reporter. + [% CASE constants.REL_QA %] +You are watching the QA contact of the [% terms.bug %]. + [% CASE constants.REL_CC %] +You are watching someone on the CC list of the [% terms.bug %]. + [% CASE constants.REL_VOTER %] +You are watching a voter for the [% terms.bug %]. + [% END %] +[% END %] diff --git a/template/en/default/email/sanitycheck.txt.tmpl b/template/en/default/email/sanitycheck.txt.tmpl new file mode 100644 index 0000000..8826d4e --- /dev/null +++ b/template/en/default/email/sanitycheck.txt.tmpl @@ -0,0 +1,36 @@ +[%# 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): Frédéric Buclin <LpSolit@gmail.com> + #%] + +[% PROCESS "global/variables.none.tmpl" %] +From: [% Param('mailfrom') %] +To: [% addressee %] +Subject: [[% terms.Bugzilla %]] Sanity Check Results +X-Bugzilla-Type: sanitycheck + +[%+ urlbase %]sanitycheck.cgi + +Below can you read the sanity check results. +[% IF error_found %] +Some errors have been found. +[% ELSE %] +No errors have been found. +[% END %] + +[% output %] diff --git a/template/en/default/email/sudo.txt.tmpl b/template/en/default/email/sudo.txt.tmpl new file mode 100644 index 0000000..74fbc49 --- /dev/null +++ b/template/en/default/email/sudo.txt.tmpl @@ -0,0 +1,43 @@ +[%# 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) 2005 Netscape Communications Corporation. All + # Rights Reserved. + # + # Contributor(s): A. Karl Kornel <karl@kornel.name> + #%] + +[% PROCESS global/variables.none.tmpl %] + +Content-Type: text/plain +From: [% Param('mailfrom') %] +To: [% user.email %] +Subject: [[% terms.Bugzilla %]] Your account [% user.login -%] + is being impersonated +X-Bugzilla-Type: admin + + [%+ sudoer.identity %] has used the 'sudo' feature to access +[%+ terms.Bugzilla %] using your account. + +[% IF reason %] + [%+ sudoer.identity %] provided the following reason for doing this: + +[% reason FILTER wrap_comment %] +[% ELSE %] + [%+ sudoer.identity %] did not provide a reason for doing this. +[% END %] + + If you feel that this action was inappropriate, please contact +[%+ Param("maintainer") %]. For more information on this feature, +visit <[% urlbase %]page.cgi?id=sudo.html>. diff --git a/template/en/default/email/votes-removed.txt.tmpl b/template/en/default/email/votes-removed.txt.tmpl new file mode 100644 index 0000000..bfb37c9 --- /dev/null +++ b/template/en/default/email/votes-removed.txt.tmpl @@ -0,0 +1,55 @@ +[%# 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): Emmanuel Seyman <eseyman@linagora.com> + #%] + +[% PROCESS global/variables.none.tmpl %] + +From: [% Param('mailfrom') %] +To: [% to %] +Subject: [% terms.Bug %] [%+ bugid %] Some or all of your votes have been removed. +X-Bugzilla-Type: voteremoved + +Some or all of your votes have been removed from [% terms.bug %] [%+ bugid %]. + +You had [% votesold FILTER html %] [%+ IF votesold == 1 %]vote[% ELSE %]votes[% END +%] on this [% terms.bug %], but [% votesremoved FILTER html %] have been removed. + +[% IF votesnew %] +You still have [% votesnew FILTER html %] [%+ IF votesnew == 1 %]vote[% ELSE %]votes[% END %] on this [% terms.bug %]. +[% ELSE %] +You have no more votes remaining on this [% terms.bug %]. +[% END %] + +Reason: +[% IF reason == "votes_bug_moved" %] + This [% terms.bug %] has been moved to a different product. + +[% ELSIF reason == "votes_too_many_per_bug" %] + The rules for voting on this product has changed; + you had too many votes for a single [% terms.bug %]. + +[% ELSIF reason == "votes_too_many_per_user" %] + The rules for voting on this product has changed; you had + too many total votes, so all votes have been removed. +[% END %] + + + +[% urlbase %]show_bug.cgi?id=[% bugid %] + diff --git a/template/en/default/email/whine.txt.tmpl b/template/en/default/email/whine.txt.tmpl new file mode 100644 index 0000000..e90480e --- /dev/null +++ b/template/en/default/email/whine.txt.tmpl @@ -0,0 +1,65 @@ +[%# 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): Emmanuel Seyman <eseyman@linagora.com> + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] +From: [% Param("mailfrom") %] +To: [% email %][% Param("emailsuffix") %] +Subject: Your [% terms.Bugzilla %] [%+ terms.bug %] list needs attention. +X-Bugzilla-Type: whine + +[This e-mail has been automatically generated.] + +You have one or more [% terms.bugs %] assigned to you in the [% terms.Bugzilla %] +[% terms.bug %] tracking system ([% urlbase %]) that require +attention. + +All of these [% terms.bugs %] are in the [% display_value("bug_status", "NEW") %] or +[%= display_value("bug_status", "REOPENED") %] state, and have not been +touched in [% Param("whinedays") %] days or more. +You need to take a look at them, and decide on an initial action. + +Generally, this means one of three things: + +(1) You decide this [% terms.bug %] is really quick to deal with (like, it's [% display_value("resolution", "INVALID") %]), + and so you get rid of it immediately. +(2) You decide the [% terms.bug %] doesn't belong to you, and you reassign it to + someone else. (Hint: if you don't know who to reassign it to, make + sure that the Component field seems reasonable, and then use the + "Reset Assignee to default" option.) +(3) You decide the [% terms.bug %] belongs to you, but you can't solve it this moment. + Accept the [% terms.bug %] by setting the status to [% display_value("bug_status", "ASSIGNED") %]. + +To get a list of all [% display_value("bug_status", "NEW") %]/[% display_value("bug_status", "REOPENED") %] [%+ terms.bugs %], you can use this URL (bookmark +it if you like!): + + [% urlbase %]buglist.cgi?bug_status=NEW&bug_status=REOPENED&assigned_to=[% email %] + +Or, you can use the general query page, at +[%+ urlbase %]query.cgi + +Appended below are the individual URLs to get to all of your [% display_value("bug_status", "NEW") %] [%+ terms.bugs %] +that haven't been touched for [% Param("whinedays") %] days or more. + +You will get this message once a day until you've dealt with these [% terms.bugs %]! + +[% FOREACH bug = bugs %] + [%+ bug.summary %] + -> [% urlbase %]show_bug.cgi?id=[% bug.id %] +[% END %] diff --git a/template/en/default/extensions/config.pm.tmpl b/template/en/default/extensions/config.pm.tmpl new file mode 100644 index 0000000..6997ec1 --- /dev/null +++ b/template/en/default/extensions/config.pm.tmpl @@ -0,0 +1,41 @@ +[%# -*- mode: perl -*- %] +[%# 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 Everything Solved, Inc. + # Portions created by the Initial Developer are Copyright (C) 2009 the + # Initial Developer. All Rights Reserved. + # + # Contributor(s): + # Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[%# INTERFACE: + # name: string; The name of the extension. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS extensions/license.txt.tmpl %] + +package B[% %]ugzilla::Extension::[% name %]; +use strict; + +use constant NAME => '[% name %]'; + +use constant REQUIRED_MODULES => [ +]; + +use constant OPTIONAL_MODULES => [ +]; + +__PACKAGE__->NAME; diff --git a/template/en/default/extensions/extension.pm.tmpl b/template/en/default/extensions/extension.pm.tmpl new file mode 100644 index 0000000..2492271 --- /dev/null +++ b/template/en/default/extensions/extension.pm.tmpl @@ -0,0 +1,46 @@ +[%# -*- mode: perl -*- %] +[%# 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 Everything Solved, Inc. + # Portions created by the Initial Developer are Copyright (C) 2009 the + # Initial Developer. All Rights Reserved. + # + # Contributor(s): + # Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[%# INTERFACE: + # name: string; The name of the extension. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS extensions/license.txt.tmpl %] + +package B[% %]ugzilla::Extension::[% name %]; +use strict; +use base qw(B[% %]ugzilla::Extension); + +# This code for this is in [% path %]/lib/Util.pm +use B[% %]ugzilla::Extension::[% name %]::Util; + +our $VERSION = '0.01'; + +# See the documentation of B[% %]ugzilla::Hook ("perldoc B[% %]ugzilla::Hook" +# in the bugzilla directory) for a list of all available hooks. +sub install_update_db { + my ($self, $args) = @_; + +} + +__PACKAGE__->NAME; diff --git a/template/en/default/extensions/hook-readme.txt.tmpl b/template/en/default/extensions/hook-readme.txt.tmpl new file mode 100644 index 0000000..efceec1 --- /dev/null +++ b/template/en/default/extensions/hook-readme.txt.tmpl @@ -0,0 +1,27 @@ +[%# 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 Everything Solved, Inc. + # Portions created by the Initial Developer are Copyright (C) 2009 the + # Initial Developer. All Rights Reserved. + # + # Contributor(s): + # Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[% PROCESS global/variables.none.tmpl %] + +Template hooks go in this directory. Template hooks are called in normal +[%+ terms.Bugzilla %] templates like [[% '%' %] Hook.process('some-hook') %]. +More information about them can be found in the documentation of +B[% %]ugzilla::Extension. (Do "perldoc B[% %]ugzilla::Extension" from the main +[%+ terms.Bugzilla %] directory to see that documentation.) diff --git a/template/en/default/extensions/license.txt.tmpl b/template/en/default/extensions/license.txt.tmpl new file mode 100644 index 0000000..964e075 --- /dev/null +++ b/template/en/default/extensions/license.txt.tmpl @@ -0,0 +1,47 @@ +[%# -*- mode: perl -*- %] +[%# 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 Everything Solved, Inc. + # Portions created by the Initial Developer are Copyright (C) 2009 the + # Initial Developer. All Rights Reserved. + # + # Contributor(s): + # Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[%# INTERFACE: + # name: string; The name of the extension. + #%] + +[% PROCESS global/variables.none.tmpl %] + +# -*- 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 [% name %] [%+ terms.Bugzilla %] Extension. +# +# The Initial Developer of the Original Code is YOUR NAME +# Portions created by the Initial Developer are Copyright (C) [% year %] the +# Initial Developer. All Rights Reserved. +# +# Contributor(s): +# YOUR NAME <YOUR EMAIL ADDRESS> diff --git a/template/en/default/extensions/name-readme.txt.tmpl b/template/en/default/extensions/name-readme.txt.tmpl new file mode 100644 index 0000000..6d25c83 --- /dev/null +++ b/template/en/default/extensions/name-readme.txt.tmpl @@ -0,0 +1,38 @@ +[%# 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 Everything Solved, Inc. + # Portions created by the Initial Developer are Copyright (C) 2009 the + # Initial Developer. All Rights Reserved. + # + # Contributor(s): + # Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[% PROCESS global/variables.none.tmpl %] + +Normal templates go in this directory. You can load them in your +code like this: + +use B[% %]ugzilla::Error; +my $template = B[% %]ugzilla->template; +$template->process('[% name FILTER lower %]/some-template.html.tmpl') + or ThrowTemplateError($template->error()); + +That would be how to load a file called some-template.html.tmpl that +was in this directory. + +Note that you have to be careful that the full path of your template +never conflicts with a template that exists in [% terms.Bugzilla %] or in +another extension, or your template might override that template. That's why +we created this directory called '[% name FILTER lower %]' for you, so you +can put your templates in here to help avoid conflicts. diff --git a/template/en/default/extensions/util.pm.tmpl b/template/en/default/extensions/util.pm.tmpl new file mode 100644 index 0000000..32076a6 --- /dev/null +++ b/template/en/default/extensions/util.pm.tmpl @@ -0,0 +1,42 @@ +[%# -*- mode: perl -*- %] +[%# 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 Everything Solved, Inc. + # Portions created by the Initial Developer are Copyright (C) 2009 the + # Initial Developer. All Rights Reserved. + # + # Contributor(s): + # Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[%# INTERFACE: + # name: string; The name of the extension. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS extensions/license.txt.tmpl %] + +package B[% %]ugzilla::Extension::[% name %]::Util; +use strict; +use base qw(Exporter); +our @EXPORT = qw( + +); + +# This file can be loaded by your extension via +# "use B[% %]ugzilla::Extension::[% name %]::Util". You can put functions +# used by your extension in here. (Make sure you also list them in +# @EXPORT.) + +1; diff --git a/template/en/default/filterexceptions.pl b/template/en/default/filterexceptions.pl new file mode 100644 index 0000000..2c096df --- /dev/null +++ b/template/en/default/filterexceptions.pl @@ -0,0 +1,531 @@ +# -*- 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 are the Bugzilla tests. +# +# The Initial Developer of the Original Code is Jacob Steenhagen. +# Portions created by Jacob Steenhagen are +# Copyright (C) 2001 Jacob Steenhagen. All +# Rights Reserved. +# +# Contributor(s): Gervase Markham <gerv@gerv.net> + +# Important! The following classes of directives are excluded in the test, +# and so do not need to be added here. Doing so will cause warnings. +# See 008filter.t for more details. +# +# Comments - [%#... +# Directives - [% IF|ELSE|UNLESS|FOREACH... +# Assignments - [% foo = ... +# Simple literals - [% " selected" ... +# Values always used for numbers - [% (i|j|k|n|count) %] +# Params - [% Param(... +# Safe functions - [% (time2str)... +# Safe vmethods - [% foo.size %] [% foo.length %] +# [% foo.push() %] +# TT loop variables - [% loop.count %] +# Already-filtered stuff - [% wibble FILTER html %] +# where the filter is one of html|csv|js|url_quote|quoteUrls|time|uri|xml|none + +%::safe = ( + +'whine/schedule.html.tmpl' => [ + 'event.key', + 'query.id', + 'query.sort', + 'schedule.id', + 'option.0', + 'option.1', +], + +'whine/mail.html.tmpl' => [ + 'bug.bug_id', +], + +'flag/list.html.tmpl' => [ + 'flag.id', + 'flag.status', + 'type.id', +], + +'search/boolean-charts.html.tmpl' => [ + '"field${chartnum}-${rownum}-${colnum}"', + '"value${chartnum}-${rownum}-${colnum}"', + 'field.name', + '"${chartnum}-${rownum}-${newor}"', + '"${chartnum}-${newand}-0"', + 'newchart', + 'jsmagic', +], + +'search/form.html.tmpl' => [ + 'qv.name', + 'qv.description', + 'field.name', + 'field.description', + 'field.accesskey', + 'sel.name', +], + +'search/search-specific.html.tmpl' => [ + 'status.name', +], + +'search/tabs.html.tmpl' => [ + 'content', +], + +'request/queue.html.tmpl' => [ + 'column_headers.$group_field', + 'column_headers.$column', + 'request.status', + 'request.bug_id', + 'request.attach_id', +], + +'reports/keywords.html.tmpl' => [ + 'keyword.bug_count', +], + +'reports/report-table.csv.tmpl' => [ + 'data.$tbl.$col.$row', + 'colsepchar', +], + +'reports/report-table.html.tmpl' => [ + '"&$tbl_vals" IF tbl_vals', + '"&$col_vals" IF col_vals', + '"&$row_vals" IF row_vals', + 'classes.$row_idx.$col_idx', + 'urlbase', + 'data.$tbl.$col.$row', + 'row_total', + 'col_totals.$col', + 'grand_total', +], + +'reports/report.html.tmpl' => [ + 'width', + 'height', + 'imageurl', + 'formaturl', + 'other_format.name', + 'sizeurl', + 'switchbase', + 'format', + 'cumulate', +], + +'reports/chart.html.tmpl' => [ + 'width', + 'height', + 'imageurl', + 'sizeurl', + 'height + 100', + 'height - 100', + 'width + 100', + 'width - 100', +], + +'reports/series-common.html.tmpl' => [ + 'sel.name', + '"onchange=\"$sel.onchange\"" IF sel.onchange', +], + +'reports/chart.csv.tmpl' => [ + 'data.$j.$i', + 'colsepchar', +], + +'reports/create-chart.html.tmpl' => [ + 'series.series_id', + 'newidx', +], + +'reports/edit-series.html.tmpl' => [ + 'default.series_id', +], + +'list/edit-multiple.html.tmpl' => [ + 'group.id', + 'menuname', +], + +'list/list.rdf.tmpl' => [ + 'template_version', + 'bug.bug_id', + 'column', +], + +'list/table.html.tmpl' => [ + 'tableheader', + 'bug.bug_id', + 'abbrev.$id.title || field_descs.$id || column.title', +], + +'list/list.csv.tmpl' => [ + 'bug.bug_id', + 'colsepchar', +], + +'list/list.js.tmpl' => [ + 'bug.bug_id', +], + +'global/choose-product.html.tmpl' => [ + 'target', +], + +# You are not permitted to add any values here. Everything in this file should +# be filtered unless there's an extremely good reason why not, in which case, +# use the "none" dummy filter. +'global/code-error.html.tmpl' => [ +], + +'global/header.html.tmpl' => [ + 'javascript', + 'style', + 'onload', + 'title', + '" – $header" IF header', + 'subheader', + 'header_addl_info', + 'message', +], + +'global/messages.html.tmpl' => [ + 'message_tag', + 'series.frequency * 2', +], + +'global/per-bug-queries.html.tmpl' => [ + '" value=\"$bugids\"" IF bugids', +], + +'global/select-menu.html.tmpl' => [ + 'options', + 'size', +], + +'global/tabs.html.tmpl' => [ + 'content', +], + +# You are not permitted to add any values here. Everything in this file should +# be filtered unless there's an extremely good reason why not, in which case, +# use the "none" dummy filter. +'global/user-error.html.tmpl' => [ +], + +'global/confirm-user-match.html.tmpl' => [ + 'script', + 'fields.${field_name}.flag_type.name', +], + +'global/site-navigation.html.tmpl' => [ + 'bug.bug_id', + 'bug.votes', +], + +'bug/comments.html.tmpl' => [ + 'comment.id', + 'bug.bug_id', +], + +'bug/dependency-graph.html.tmpl' => [ + 'image_map', # We need to continue to make sure this is safe in the CGI + 'image_url', + 'map_url', + 'bug_id', +], + +'bug/dependency-tree.html.tmpl' => [ + 'bugid', + 'maxdepth', + 'hide_resolved', + 'ids.join(",")', + 'maxdepth + 1', + 'maxdepth > 0 && maxdepth <= realdepth ? maxdepth : ""', + 'maxdepth == 1 ? 1 + : ( maxdepth ? maxdepth - 1 : realdepth - 1 )', +], + +'bug/edit.html.tmpl' => [ + 'bug.deadline', + 'bug.remaining_time', + 'bug.delta_ts', + 'bug.bug_id', + 'bug.votes', + 'group.bit', + 'dep.title', + 'dep.fieldname', + 'bug.${dep.fieldname}.join(\', \')', + 'selname', + '" accesskey=\"$accesskey\"" IF accesskey', + 'inputname', + '" colspan=\"$colspan\"" IF colspan', + '" size=\"$size\"" IF size', + '" maxlength=\"$maxlength\"" IF maxlength', + '" spellcheck=\"$spellcheck\"" IF spellcheck', +], + +'bug/show-multiple.html.tmpl' => [ + 'attachment.id', + 'flag.status', +], + +'bug/show.html.tmpl' => [ + 'bug.bug_id', +], + +'bug/show.xml.tmpl' => [ + 'constants.BUGZILLA_VERSION', + 'a.id', + 'field', +], + +'bug/summarize-time.html.tmpl' => [ + 'global.grand_total FILTER format("%.2f")', + 'subtotal FILTER format("%.2f")', + 'work_time FILTER format("%.2f")', + 'global.total FILTER format("%.2f")', + 'global.remaining FILTER format("%.2f")', + 'global.estimated FILTER format("%.2f")', + 'bugs.$id.remaining_time FILTER format("%.2f")', + 'bugs.$id.estimated_time FILTER format("%.2f")', +], + + +'bug/time.html.tmpl' => [ + 'time_unit FILTER format(\'%.1f\')', + 'time_unit FILTER format(\'%.2f\')', + '(act / (act + rem)) * 100 + FILTER format("%d")', +], + +'bug/votes/list-for-bug.html.tmpl' => [ + 'voter.vote_count', + 'total', +], + +'bug/votes/list-for-user.html.tmpl' => [ + 'product.maxperbug', + 'bug.id', + 'bug.count', + 'product.total', + 'product.maxvotes', +], + +'bug/process/results.html.tmpl' => [ + 'title.$type', + '"$terms.Bug $id" FILTER bug_link(id)', + '"$terms.bug $id" FILTER bug_link(id)', +], + +'bug/create/create.html.tmpl' => [ + 'g.bit', + 'sel.name', + 'sel.description', + 'cloned_bug_id', +], + +'bug/create/create-guided.html.tmpl' => [ + 'tablecolour', + 'sel', + 'productstring', +], + +'bug/activity/table.html.tmpl' => [ + 'change.attachid', +], + +'attachment/create.html.tmpl' => [ + 'bug.bug_id', + 'attachment.id', +], + +'attachment/created.html.tmpl' => [ + 'attachment.id', + 'attachment.bug_id', +], + +'attachment/edit.html.tmpl' => [ + 'attachment.id', + 'attachment.bug_id', + 'a', + 'editable_or_hide', +], + +'attachment/list.html.tmpl' => [ + 'attachment.id', + 'flag.status', + 'bugid', + 'obsolete_attachments', +], + +'attachment/midair.html.tmpl' => [ + 'attachment.id', +], + +'attachment/show-multiple.html.tmpl' => [ + 'a.id', + 'flag.status' +], + +'attachment/updated.html.tmpl' => [ + 'attachment.id', +], + +'attachment/diff-header.html.tmpl' => [ + 'attachid', + 'id', + 'bugid', + 'oldid', + 'newid', + 'patch.id', +], + +'attachment/diff-file.html.tmpl' => [ + 'lxr_prefix', + 'file.minus_lines', + 'file.plus_lines', + 'bonsai_prefix', + 'section.old_start', + 'section_num', + 'current_line_old', + 'current_line_new', +], + +'admin/admin.html.tmpl' => [ + 'class' +], + +'admin/table.html.tmpl' => [ + 'link_uri' +], + +'admin/custom_fields/cf-js.js.tmpl' => [ + 'constants.FIELD_TYPE_SINGLE_SELECT', + 'constants.FIELD_TYPE_MULTI_SELECT', +], + +'admin/params/common.html.tmpl' => [ + 'sortlist_separator', +], + +'admin/products/groupcontrol/confirm-edit.html.tmpl' => [ + 'group.count', +], + +'admin/products/groupcontrol/edit.html.tmpl' => [ + 'group.id', + 'constants.CONTROLMAPNA', + 'constants.CONTROLMAPSHOWN', + 'constants.CONTROLMAPDEFAULT', + 'constants.CONTROLMAPMANDATORY', +], + +'admin/products/list.html.tmpl' => [ + 'classification_url_part', +], + +'admin/products/footer.html.tmpl' => [ + 'classification_url_part', + 'classification_text', +], + +'admin/flag-type/confirm-delete.html.tmpl' => [ + 'flag_type.flag_count', + 'flag_type.id', +], + +'admin/flag-type/edit.html.tmpl' => [ + 'action', + 'type.id', + 'type.target_type', + 'type.sortkey || 1', + 'typeLabelLowerPlural', + 'typeLabelLowerSingular', + 'selname', +], + +'admin/flag-type/list.html.tmpl' => [ + 'type.id', +], + + +'admin/components/confirm-delete.html.tmpl' => [ + 'comp.bug_count' +], + +'admin/groups/delete.html.tmpl' => [ + 'shared_queries' +], + +'admin/users/confirm-delete.html.tmpl' => [ + 'attachments', + 'reporter', + 'assignee_or_qa', + 'cc', + 'component_cc', + 'flags.requestee', + 'flags.setter', + 'longdescs', + 'quips', + 'votes', + 'series', + 'watch.watched', + 'watch.watcher', + 'whine_events', + 'whine_schedules', + 'otheruser.id' +], + +'admin/users/edit.html.tmpl' => [ + 'otheruser.id', + 'group.id', +], + +'admin/components/edit.html.tmpl' => [ + 'comp.bug_count' +], + +'admin/workflow/edit.html.tmpl' => [ + 'status.id', + 'new_status.id', +], + +'admin/workflow/comment.html.tmpl' => [ + 'status.id', + 'new_status.id', +], + +'account/auth/login-small.html.tmpl' => [ + 'qs_suffix', +], + +'account/prefs/email.html.tmpl' => [ + 'relationship.id', + 'event.id', + 'prefname', +], + +'account/prefs/prefs.html.tmpl' => [ + 'current_tab.label', + 'current_tab.name', +], + +'account/prefs/saved-searches.html.tmpl' => [ + 'group.id', +], + +); diff --git a/template/en/default/flag/list.html.tmpl b/template/en/default/flag/list.html.tmpl new file mode 100644 index 0000000..1110fb6 --- /dev/null +++ b/template/en/default/flag/list.html.tmpl @@ -0,0 +1,213 @@ +[%# 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): Myk Melez <myk@mozilla.org> + #%] + +[% IF user.id AND !read_only_flags %] + +[%# We list flags by looping twice over the flag types relevant for the bug. + # In the first loop, we display existing flags and then, for active types, + # we display UI for adding new flags. In the second loop, we display UI + # for adding additional new flags for those types for which a flag already + # exists but which are multiplicable (can have multiple flags of the type + # on a single bug/attachment). + #%] + +[% DEFAULT flag_table_id = "flags" %] + +<script type="text/javascript" src="js/flag.js"></script> + +<table id="[% flag_table_id FILTER html %]"> + [% UNLESS flag_no_header %] + <tr> + <th colspan="3"> + Flags: + </th> + [% IF any_flags_requesteeble %] + <th> + Requestee: + </th> + [% END %] + </tr> + [% END %] + + [%# Step 1: Display every flag type (except inactive types with no flags). %] + [% FOREACH type = flag_types %] + + [%# Step 1a: Display existing flag(s). %] + [% FOREACH flag = type.flags %] + <tr> + <td> + [% flag.setter.nick FILTER html %]: + </td> + <td> + <label title="[% type.description FILTER html %]" + for="flag-[% flag.id %]"> + [%- type.name FILTER html FILTER no_break -%]</label> + </td> + <td> + <select id="flag-[% flag.id %]" name="flag-[% flag.id %]" + title="[% type.description FILTER html %]" + onchange="toggleRequesteeField(this);" + class="flag_select flag_type-[% type.id %]"> + [%# Only display statuses the user is allowed to set. %] + [% IF user.can_request_flag(type) || flag.setter_id == user.id %] + <option value="X"></option> + [% END %] + [% IF type.is_active %] + [% IF (type.is_requestable && user.can_request_flag(type)) || flag.status == "?" %] + <option value="?" [% "selected" IF flag.status == "?" %]>?</option> + [% END %] + [% IF user.can_set_flag(type) || flag.status == "+" %] + <option value="+" [% "selected" IF flag.status == "+" %]>+</option> + [% END %] + [% IF user.can_set_flag(type) || flag.status == "-" %] + <option value="-" [% "selected" IF flag.status == "-" %]>-</option> + [% END %] + [% ELSE %] + <option value="[% flag.status %]" selected="selected">[% flag.status %]</option> + [% END %] + </select> + </td> + [% IF any_flags_requesteeble %] + <td> + [% IF (type.is_active && type.is_requestable && type.is_requesteeble) || flag.requestee %] + <span style="white-space: nowrap;"> + [% IF Param('usemenuforusers') %] + [% flag_custom_list = flag.type.grant_list %] + [% IF !(type.is_active && type.is_requestable && type.is_requesteeble) %] + [%# We are here only because there was already a requestee. In this case, + the only valid action is to remove the requestee or leave it alone; + nothing else. %] + [% flag_custom_list = [flag.requestee] %] + [% END %] + [% INCLUDE global/userselect.html.tmpl + name => "requestee-$flag.id" + id => "requestee-$flag.id" + value => flag.requestee.login + multiple => 0 + emptyok => 1 + custom_userlist => flag_custom_list + %] + [% ELSE %] + (<input type="text" class="requestee" maxlength="255" + id="requestee-[% flag.id %]" + name="requestee-[% flag.id %]" + [% IF flag.status == "?" && flag.requestee %] + value="[% flag.requestee.login FILTER html %]" + [% END %]>) + [% END %] + </span> + [% END %] + </td> + [% END %] + </tr> + [% END %] + + [%# Step 1b: Display UI for setting flag. %] + [% IF (!type.flags || type.flags.size == 0) && type.is_active %] + + [% PROCESS flag_row first_cell_empty = 1 addl_text = "" %] + [% END %] + [% END %] + + [%# Step 2: Display flag type again (if type is multiplicable). %] + [% FOREACH type = flag_types %] + [% NEXT UNLESS type.flags && type.flags.size > 0 && type.is_multiplicable && type.is_active %] + [% IF !separator_displayed %] + <tr><td colspan="3"><hr></td></tr> + [% separator_displayed = 1 %] + [% END %] + + [% PROCESS flag_row first_cell_empty = 0 addl_text = "addl." %] + [% END %] +</table> + +[% ELSE %] + [%# The user is logged out. Display flags as read-only. %] + [% header_displayed = 0 %] + [% FOREACH type = flag_types %] + [% FOREACH flag = type.flags %] + [% IF !flag_no_header AND !header_displayed %] + <p><b>Flags:</b></p> + [% header_displayed = 1 %] + [% END %] + [% flag.setter.nick FILTER html %]: + [%+ type.name FILTER html FILTER no_break %][% flag.status %] + [% IF flag.requestee %] + ([% flag.requestee.nick FILTER html %]) + [% END %]<br> + [% END %] + [% END %] +[% END %] + +[%# Display a table row for unset flags %] + +[% BLOCK flag_row %] + <tr> + [% IF first_cell_empty %] + <td> </td> + <td> + [% ELSE %] + <td colspan="2"> + [% END %] + + [% addl_text FILTER html %] + <label title="[% type.description FILTER html %]" for="flag_type-[% type.id %]"> + [%- type.name FILTER html FILTER no_break %]</label> + </td> + <td> + <select id="flag_type-[% type.id %]" name="flag_type-[% type.id %]" + title="[% type.description FILTER html %]" + [% " disabled=\"disabled\"" UNLESS (type.is_requestable && user.can_request_flag(type)) || user.can_set_flag(type) %] + onchange="toggleRequesteeField(this);" + class="flag_select flag_type-[% type.id %]"> + <option value="X"></option> + [% IF type.is_requestable && user.can_request_flag(type) %] + <option value="?">?</option> + [% END %] + [% IF user.can_set_flag(type) %] + <option value="+">+</option> + <option value="-">-</option> + [% END %] + </select> + </td> + [% IF any_flags_requesteeble %] + <td> + [% IF type.is_requestable && type.is_requesteeble %] + <span style="white-space: nowrap;"> + [% IF Param('usemenuforusers') %] + [% INCLUDE global/userselect.html.tmpl + name => "requestee_type-$type.id" + id => "requestee_type-$type.id" + multiple => type.is_multiplicable * 3 + emptyok => !type.is_multiplicable + value => "" + custom_userlist => type.grant_list + %] + [% ELSE %] + (<input type="text" class="requestee" maxlength="255" + id="requestee_type-[% type.id %]" + name="requestee_type-[% type.id %]">) + [% END %] + </span> + [% END %] + </td> + [% END %] + </tr> +[% END %] diff --git a/template/en/default/global/banner.html.tmpl b/template/en/default/global/banner.html.tmpl new file mode 100644 index 0000000..ab1c2a8 --- /dev/null +++ b/template/en/default/global/banner.html.tmpl @@ -0,0 +1,26 @@ +[%# 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> + # Matthew Tuck <matty@chariot.net.au> + # Vitaly Harisov <vitaly@rathedg.com> + #%] + +[%# Migration note: this file corresponds to the old Param 'bannerhtml' %] + + <div id="banner"> + </div> diff --git a/template/en/default/global/choose-classification.html.tmpl b/template/en/default/global/choose-classification.html.tmpl new file mode 100644 index 0000000..9342d81 --- /dev/null +++ b/template/en/default/global/choose-classification.html.tmpl @@ -0,0 +1,63 @@ +[%# 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 Albert Ting + # + # Contributor(s): Albert Ting <alt@sonic.net> + #%] + +[%# INTERFACE: + # classifications: an array of classification objects containing + # at least one product accessible by the user. + #%] + +[% IF target == "enter_bug.cgi" %] + [% title = "Select Classification" %] + [% subheader = "Please select the classification." %] +[% END %] + +[% DEFAULT title = "Choose the classification" %] +[% PROCESS global/header.html.tmpl %] + +<table> + <tr> + <th align="right"> + <a href="[% target FILTER url_quote %]?classification=__all + [% IF cloned_bug_id %]&cloned_bug_id=[% cloned_bug_id FILTER url_quote %][% END -%] + [%- IF format %]&format=[% format FILTER url_quote %][% END %]"> + All</a>: + </th> + + <td valign="top"> Show all products</td> + </tr> + <tr> + <th colspan="2"> </th> + </tr> + +[% FOREACH class = classifications %] + <tr> + <th align="right"> + <a href="[% target FILTER url_quote %]?classification=[% class.name FILTER url_quote -%] + [%- IF cloned_bug_id %]&cloned_bug_id=[% cloned_bug_id FILTER url_quote %][% END -%] + [%- IF format %]&format=[% format FILTER url_quote %][% END %]"> + [% class.name FILTER html %]</a>: + </th> + + [% IF class.description %] + <td valign="top"> [% class.description FILTER html_light %]</td> + [% END %] + </tr> +[% END %] + +</table> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/global/choose-product.html.tmpl b/template/en/default/global/choose-product.html.tmpl new file mode 100644 index 0000000..5c9ad09 --- /dev/null +++ b/template/en/default/global/choose-product.html.tmpl @@ -0,0 +1,75 @@ +[%# 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: + # classifications: array of hashes, with an 'object' key representing a + # classification object and 'products' the list of + # product objects the user can enter bugs into. + # target: the script that displays this template. + # cloned_bug_id: ID of the bug being cloned. + # format: the desired format to display the target. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% IF target == "enter_bug.cgi" %] + [% title = "Enter $terms.Bug" %] + [% h2 = BLOCK %]First, you must pick a product on which to enter [% terms.abug %]: [% END %] +[% ELSIF target == "describecomponents.cgi" %] + [% title = "Browse" %] + [% h2 = "Select a product category to browse:" %] +[% END %] + +[% DEFAULT title = "Choose a Product" %] +[% PROCESS global/header.html.tmpl %] + +<h2>[% h2 FILTER html %]</h2> + +<table> + +[% FOREACH c = classifications %] + [% IF c.object %] + <tr> + <th colspan="2" align="left">[% c.object.name FILTER html %]: + [%+ c.object.description FILTER html_light %]</th> + </tr> + [% END %] + + [% FOREACH p = c.products %] + <tr> + <th align="right" valign="top"> + <a href="[% target %]?product=[% p.name FILTER url_quote -%] + [%- IF cloned_bug_id %]&cloned_bug_id=[% cloned_bug_id FILTER url_quote %][% END -%] + [%- IF format %]&format=[% format FILTER url_quote %][% END %]"> + [% p.name FILTER html FILTER no_break %]</a>: + </th> + + <td valign="top">[% p.description FILTER html_light %]</td> + </tr> + [% END %] + + <tr> + <th colspan="2"> </th> + </tr> +[% END %] + +</table> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/global/code-error.html.tmpl b/template/en/default/global/code-error.html.tmpl new file mode 100644 index 0000000..753695b --- /dev/null +++ b/template/en/default/global/code-error.html.tmpl @@ -0,0 +1,574 @@ +[%# 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: + # header_done: boolean. True if the header has already been printed. + # error: string. The tag of the error. + # variables: hash. Useful data about the problem. The keys are the variable + # names, and the values the variable values. + #%] + +[%# This is a list of all the possible code errors. Please keep them in + # alphabetical order by error tag, and leave a blank line between errors. + # + # Note that you must explicitly filter every single template variable + # in this file; if you do not wish to change it, use the "none" filter. + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% DEFAULT title = "Internal Error" %] + +[% error_message = BLOCK %] + [% IF error == "action_unrecognized" %] + [% docslinks = {'query.html' => "Searching for $terms.bugs", + 'query.html#list' => "$terms.Bug lists"} %] + I don't recognize the value (<em>[% action FILTER html %]</em>) + of the <em>action</em> variable. + + [% ELSIF error == "attachment_already_obsolete" %] + Attachment #[% attach_id FILTER html %] ([% description FILTER html %]) + is already obsolete. + + [% ELSIF error == "attachment_local_storage_disabled" %] + [% title = "Local Storage Disabled" %] + You cannot store attachments locally. This feature is disabled. + + [% ELSIF error == "attachment_url_disabled" %] + [% title = "Attachment URL Disabled" %] + You cannot attach a URL. This feature is currently disabled. + + [% ELSIF error == "auth_invalid_email" %] + [% title = "Invalid Email Address" %] + We received an email address (<b>[% addr FILTER html %]</b>) + that didn't pass our syntax checking for a legal email address, + when trying to create or update your account. + [% IF default %] + A legal address must contain exactly one '@', + and at least one '.' after the @. + [% ELSE %] + [%+ Param('emailregexpdesc') %] + [% END %] + It must also not contain any of these special characters: + <tt>\ ( ) & < > , ; : " [ ]</tt>, or any whitespace. + + [% ELSIF error == "authres_unhandled" %] + The result value of [% value FILTER html %] was not handled by + the login code. + + [% ELSIF error == "bad_page_cgi_id" %] + [% title = "Invalid Page ID" %] + The ID <code>[% page_id FILTER html %]</code> is not a + valid page identifier. + + [% ELSIF error == "bad_arg" %] + Bad argument <code>[% argument FILTER html %]</code> sent to + <code>[% function FILTER html %]</code> function. + + [% ELSIF error == "bug_error" %] + Trying to retrieve [% terms.bug %] [%+ bug.bug_id FILTER html %] returned + the error [% bug.error FILTER html %]. + + [% ELSIF error == "chart_data_not_generated" %] + [% admindocslinks = {'extraconfig.html' => 'Setting up Charting'} %] + [% IF product %] + Charts for the <em>[% product FILTER html %]</em> product are not + available yet because no charting data has been collected for it since it + was created. + [% ELSE %] + No charting data has been collected yet. + [% END %] + Please wait a day and try again. + If you're seeing this message after a day, then you should contact + <a href="mailto:[% Param('maintainer') %]">[% Param('maintainer') %]</a> + and reference this error. + + [% ELSIF error == "chart_datafile_corrupt" %] + The chart data file [% file FILTER html %] is corrupt. + + [% ELSIF error == "chart_dir_nonexistent" %] + One of the directories <tt>[% dir FILTER html %]</tt> and + <tt>[% graph_dir FILTER html %]</tt> does not exist. + + [% ELSIF error == "chart_file_open_fail" %] + Unable to open the chart datafile <tt>[% filename FILTER html %]</tt>. + + [% ELSIF error == "column_not_null_without_default" %] + Failed adding the column [% name FILTER html %]: + You cannot add a NOT NULL column with no default to an existing table + unless you specify something for the <code>$init_value</code> argument. + + [% ELSIF error == "column_not_null_no_default_alter" %] + You cannot alter the [% name FILTER html %] column to be NOT NULL + without specifying a default or something for $set_nulls_to, because + there are NULL values currently in it. + + [% ELSIF error == "comment_extra_data_not_allowed" %] + You tried to set the <code>extra_data</code> field to + '[% extra_data FILTER html %]' but comments of type [% type FILTER html %] + do not accept an <code>extra_data</code> argument. + + [% ELSIF error == "comment_extra_data_required" %] + Comments of type [% type FILTER html %] require an <code>extra_data</code> + argument to be set. + + [% ELSIF error == "comment_extra_data_not_numeric" %] + You tried to set the <code>extra_data</code> field to + '[% extra_data FILTER html %]' but comments of type [% type FILTER html %] + require a numeric <code>extra_data</code> argument. + + [% ELSIF error == "comment_type_invalid" %] + '[% type FILTER html %]' is not a valid comment type. + + [% ELSIF error == "db_rename_conflict" %] + Name conflict: Cannot rename [% old FILTER html %] to + [% new FILTER html %] because [% new FILTER html %] already exists. + + [% ELSIF error == "cookies_need_value" %] + Every cookie must have a value. + + [% ELSIF error == "env_no_email" %] + [% terms.Bugzilla %] did not receive an email address from the + environment. + [% IF Param("auth_env_email") %] + This means that the '[% Param("auth_env_email") FILTER html %]' + environment variable was empty or did not exist. + [% ELSE %] + You need to set the "auth_env_email" parameter to the name of + the environment variable that will contain the user's email + address. + [% END %] + + [% ELSIF error == "extension_must_be_subclass" %] + <code>[% package FILTER html %]</code> from + <code>[% filename FILTER html %]</code> is not a subclass of + <code>[% class FILTER html %]</code>. + + [% ELSIF error == "extension_must_return_name" %] + <code>[% extension FILTER html %]</code> returned + <code>[% returned FILTER html %]</code>, which is not a valid name + for an extension. Extensions must return their name, not <code>1</code> + or a number. See the documentation of + <a href="[% docs_urlbase FILTER html %]api/Bugzilla/Extension.html">Bugzilla::Extension</a> + for details. + + [% ELSIF error == "extension_no_name" %] + We did not find a <code>NAME</code> method in + <code>[% package FILTER html %]</code> (loaded from + <code>[% filename FILTER html %]</code>). This means that + the extension has one or more of the following problems: + + <ul> + <li><code>[% filename FILTER html %]</code> did not define a + <code>[% package FILTER html %]</code> package.</li> + <li><code>[% package FILTER html %]</code> did not define a + <code>NAME</code> method (or the <code>NAME</code> method + returned an empty string).</li> + </ul> + + [% ELSIF error == "extern_id_conflict" %] + The external ID '[% extern_id FILTER html %]' already exists + in the database for '[% username FILTER html %]', but your + account source says that '[% extern_user FILTER html %]' has that ID. + + [% ELSIF error == "field_choice_must_use_type" %] + When you call a class method on <code>Bugzilla::Field::Choice</code>, + you must call <code>Bugzilla::Field::Choice->type('some_field')</code> + to generate the right class (you can't call class methods directly + on Bugzilla::Field::Choice). + + [% ELSIF error == "field_not_custom" %] + '[% field.description FILTER html %]' ([% field.name FILTER html %]) + is not a custom field. + + [% ELSIF error == "field_type_mismatch" %] + Cannot seem to handle <code>[% field FILTER html %]</code> + and <code>[% type FILTER html %]</code> together. + + [% ELSIF error == "field_type_not_specified" %] + [% title = "Field Type Not Specified" %] + You must specify a type when creating a custom field. + + [% ELSIF error == "illegal_content_type_method" %] + Your form submission got corrupted somehow. The <em>content + method</em> field, which specifies how the content type gets determined, + should have been either <em>autodetect</em>, <em>list</em>, + or <em>manual</em>, but was instead + <em>[% contenttypemethod FILTER html %]</em>. + + [% ELSIF error == "illegal_field" %] + A legal [% field FILTER html %] was not set. + + [% ELSIF error == "inactive_group" %] + Attempted to add [% terms.bug %] to the '[% name FILTER html %]' + group, which is not used for [% terms.bugs %]. + + [% ELSIF error == "invalid_attach_id_to_obsolete" %] + The attachment number of one of the attachments you wanted to obsolete, + [% attach_id FILTER html %], is invalid. + + [% ELSIF error == "invalid_customfield_type" %] + [% title = "Invalid Field Type" %] + The type <em>[% type FILTER html %]</em> is not a valid field type. + + [% ELSIF error == "invalid_dimensions" %] + [% title = "Invalid Dimensions" %] + The width or height specified is not a positive integer. + + [% ELSIF error == "invalid_feature" %] + [% title = "Invalid Feature Name" %] + [% feature FILTER html %] is not a valid feature name. See + <code>OPTIONAL_MODULES</code> in + <code>Bugzilla::Install::Requirements</code> for valid names. + + [% ELSIF error == "invalid_flag_association" %] + [% title = "Invalid Flag Association" %] + Some flags do not belong to + [% IF attach_id %] + attachment [% attach_id FILTER html %]. + [% ELSE %] + [%+ terms.bug %] [%+ bug_id FILTER html %]. + [% END %] + + [% ELSIF error == "invalid_series_id" %] + [% title = "Invalid Series" %] + The series_id [% series_id FILTER html %] is not valid. It may be that + this series has been deleted. + + [% ELSIF error == "invalid_webservergroup" %] + There is no such group: [% group FILTER html %]. Check your $webservergroup + setting in [% constants.bz_locations.localconfig FILTER html %]. + + [% ELSIF error == "mismatched_bug_ids_on_obsolete" %] + Attachment [% attach_id FILTER html %] ([% description FILTER html %]) + is attached to [% terms.bug %] [%+ attach_bug_id FILTER html %], + but you tried to flag it as obsolete while creating a new attachment to + [% terms.bug %] [%+ my_bug_id FILTER html %]. + + [% ELSIF error == "feature_disabled" %] + The [% install_string("feature_$feature") FILTER html %] feature is not + available in this [% terms.Bugzilla %]. + [% IF user.in_group('admin') %] + If you would like to enable this feature, please run + <kbd>checksetup.pl</kbd> to see how to install the necessary + requirements for this feature. + [% END %] + + [% ELSIF error == "flag_unexpected_object" %] + [% title = "Object Not Recognized" %] + Flags cannot be set for objects of type [% caller FILTER html %]. + They can only be set for [% terms.bugs %] and attachments. + + [% ELSIF error == "flag_requestee_disabled" %] + [% title = "Flag not Requestable from Specific Person" %] + You can't ask a specific person for + <em>[% type.name FILTER html %]</em>. + + [% ELSIF error == "flag_status_invalid" %] + The flag status <em>[% status FILTER html %]</em> + [% IF id %] + for flag ID #[% id FILTER html %] + [% END %] + is invalid. + + [% ELSIF error == "flag_type_inactive" %] + [% title = "Inactive Flag Type" %] + The flag type [% type FILTER html %] is inactive and cannot be used + to create new flags. + + [% ELSIF error == "flag_type_nonexistent" %] + There is no flag type with the ID <em>[% id FILTER html %]</em>. + + [% ELSIF error == "flag_type_target_type_invalid" %] + The target type was neither <em>[% terms.bug %]</em> nor <em>attachment</em> + but rather <em>[% target_type FILTER html %]</em>. + + [% ELSIF error == "invalid_field_name" %] + Can't use [% field FILTER html %] as a field name. + + [% ELSIF error == "invalid_keyword_id" %] + The keyword ID <em>[% id FILTER html %]</em> couldn't be + found. + + [% ELSIF error == "invalid_user" %] + [% title = "Invalid User" %] + There is no user account + [% IF user_id %] + with ID <em>[% user_id FILTER html %]</em>. + [% ELSIF user_login %] + with login name <em>[% user_login FILTER html %]</em>. + [% ELSE %] + given. + [% END %] + + [% ELSIF error == "jobqueue_insert_failed" %] + [% title = "Job Queue Failure" %] + Inserting a <code>[% job FILTER html %]</code> job into the Job + Queue failed with the following error: [% errmsg FILTER html %] + + [% ELSIF error == "jobqueue_no_job_mapping" %] + <code>Bugzilla::JobQueue</code> has not been configured to handle + the job "[% job FILTER html %]". You need to add this job type + to the <code>JOB_MAP</code> constant in <code>Bugzilla::JobQueue</code>. + + [% ELSIF error == "ldap_bind_failed" %] + Failed to bind to the LDAP server. The error message was: + <code>[% errstr FILTER html %]</code> + + [% ELSIF error == "ldap_cannot_retreive_attr" %] + The specified LDAP attribute [% attr FILTER html %] was not found. + + [% ELSIF error == "ldap_connect_failed" %] + Could not connect to the LDAP server(s) <code>[% server FILTER html %]</code>. + + [% ELSIF error == "ldap_start_tls_failed" %] + Could not start TLS with LDAP server: <code>[% error FILTER html %]</code>. + + [% ELSIF error == "ldap_search_error" %] + An error occurred while trying to search LDAP for + "[% username FILTER html %]": + [% IF errstr %] + <code>[% errstr FILTER html %]</code> + [% ELSE %] + Unable to find user in LDAP + [% END %] + + [% ELSIF error == "ldap_server_not_defined" %] + The LDAP server for authentication has not been defined. + + [% ELSIF error == "mail_send_error" %] + There was an error sending mail from '[% mail.header('From') FILTER html %]' + to '[% mail.header('To') FILTER html %]': + [% msg FILTER html %] + + [% ELSIF error == "missing_bug_id" %] + No [% terms.bug %] ID was given. + + [% ELSIF error == "missing_series_id" %] + Having inserted a series into the database, no series_id was returned for + it. Series: [% series.category FILTER html %] / + [%+ series.subcategory FILTER html %] / + [%+ series.name FILTER html %]. + + [% ELSIF error == "need_quipid" %] + A valid quipid is needed. + + [% ELSIF error == "no_manual_moved" %] + You cannot set the resolution of [% terms.abug %] to [% display_value("resolution", "MOVED") FILTER html %] without + moving the [% terms.bug %]. + + [% ELSIF error == "no_open_bug_status" %] + [% title = "$terms.Bug Cannot Be Confirmed" %] + There is no valid transition from + [%+ display_value("bug_status", "UNCONFIRMED") FILTER html %] to an open state. + + [% ELSIF error == "param_invalid" %] + [% title = "Invalid Parameter" %] + <code>[% param FILTER html %]</code> is not a valid parameter + for the [% function FILTER html %] function. + + [% ELSIF error == "param_must_be_numeric" %] + [% title = "Invalid Parameter" %] + Invalid parameter <code>[% param FILTER html %]</code> passed to + <code>[% function FILTER html %]</code>: It must be numeric. + + [% ELSIF error == "param_required" %] + [% title = "Missing Parameter" %] + The function <code>[% function FILTER html %]</code> requires + a <code>[% param FILTER html %]</code> argument, and that + argument was not set. + + [% ELSIF error == "params_required" %] + [% title = "Missing Parameter" %] + The function <code>[% function FILTER html %]</code> requires + that you set one of the following parameters: + <code>[% params.join(', ') FILTER html %]</code> + + [% ELSIF error == "product_empty_group_controls" %] + [% title = "Missing Group Controls" %] + New settings must be defined to edit group controls for + the [% group.name FILTER html %] group. + + [% ELSIF error == "product_illegal_group_control" %] + [% title = "Illegal Group Control" %] + '[% value FILTER html %]' is not a legal value for + the '[% field FILTER html %]' field. + + [% ELSIF error == "protection_violation" %] + The function <code>[% function FILTER html %]</code> was called + + [% IF argument %] + with the argument <code>[% argument FILTER html %]</code> + [% END %] + + from + + [% IF caller %] + <code>[%+ caller FILTER html %]</code>, which is + [% END %] + + outside the package. This function may only be called from + a subclass of <code>[% superclass FILTER html %]</code>. + + [% ELSIF error == "radius_preparation_error" %] + An error occurred while preparing for a RADIUS authentication request: + <code>[% errstr FILTER html %]</code>. + + [% ELSIF error == "request_queue_group_invalid" %] + The group field <em>[% group FILTER html %]</em> is invalid. + + [% ELSIF error == "report_axis_invalid" %] + <em>[% val FILTER html %]</em> is not a valid value for + [%+ IF fld == "x" %]the horizontal axis + [%+ ELSIF fld == "y" %]the vertical axis + [%+ ELSIF fld == "z" %]the multiple tables/images + [%+ ELSE %]a report axis[% END %] field. + + [% ELSIF error == "setting_info_invalid" %] + To create a new setting, you must supply a setting name, a list of + value/sortindex pairs, and the devault value. + + [% ELSIF error == "setting_name_invalid" %] + The setting name <em>[% name FILTER html %]</em> is not a valid + option. Setting names must begin with a letter, and contain only + letters, digits, or the symbols '_', '-', '.', or ':'. + + [% ELSIF error == "setting_subclass_invalid" %] + There is no such Setting subclass as + <code>[% subclass FILTER html %]</code>. + + [% ELSIF error == "setting_value_invalid" %] + The value "<code>[% value FILTER html %]</code>" is not in the list of + legal values for the <em>[% name FILTER html %]</em> setting. + + [% ELSIF error == "token_generation_error" %] + Something is seriously wrong with the token generation system. + + [% ELSIF error == "template_error" %] + [% template_error_msg FILTER html %] + + [% ELSIF error == "template_invalid" %] + Template with invalid file name found in hook call: [% name FILTER html %]. + + [% ELSIF error == "unable_to_retrieve_password" %] + I was unable to retrieve your old password from the database. + + [% ELSIF error == "undefined_field" %] + Form field [% field FILTER html %] was not defined. + + [% ELSIF error == "unknown_action" %] + [% IF action %] + Unknown action [% action FILTER html %]! + [% ELSE %] + I could not figure out what you wanted to do. + [% END %] + + [% ELSIF error == "unknown_method" %] + The requested method '[% method FILTER html %]' was not found. + + [% ELSIF error == "usage_mode_invalid" %] + '[% invalid_usage_mode FILTER html %]' is not a valid usage mode. + + [% ELSIF error == "must_be_patch" %] + [% title = "Attachment Must Be Patch" %] + Attachment #[% attach_id FILTER html %] must be a patch. + + [% ELSIF error == "not_in_transaction" %] + Attempted to end transaction without starting one first. + + [% ELSIF error == "comma_operator_deprecated" %] + [% title = "SQL query generator internal error" %] + There is an internal error in the SQL query generation code, + creating queries with implicit JOIN. + + [% ELSIF error == "invalid_post_bug_submit_action" %] + Invalid setting for post_bug_submit_action + + [% ELSE %] + [%# Try to find hooked error messages %] + [% error_message = Hook.process("errors") %] + [% IF NOT error_message %] + [% title = "Internal error" %] + An internal error has occurred, but [% terms.Bugzilla %] doesn't know + what <code>[% error FILTER html %]</code> means. + + If you are a [% terms.Bugzilla %] end-user seeing this message, please save + this page and send it to [% Param('maintainer') %]. + [% ELSE %] + [% error_message FILTER none %] + [% END %] + [% END %] +[% END %] + +[%# We only want HTML error messages for ERROR_MODE_WEBPAGE %] +[% USE Bugzilla %] +[% IF Bugzilla.error_mode != constants.ERROR_MODE_WEBPAGE %] + [% IF Bugzilla.usage_mode == constants.USAGE_MODE_BROWSER %] + [% error_message FILTER none %] + [% ELSE %] + [% error_message FILTER txt %] + [% END %] + [% RETURN %] +[% END %] + +[% UNLESS header_done %] + [% PROCESS global/header.html.tmpl %] +[% END %] + +[% PROCESS global/docslinks.html.tmpl + docslinks = docslinks + admindocslinks = admindocslinks +%] + +<tt> + <p> + [% terms.Bugzilla %] has suffered an internal error. Please save this page and send + it to [% Param("maintainer") %] with details of what you were doing at + the time this message appeared. + </p> + <script type="text/javascript"> <!-- + document.write("<p>URL: " + + document.location.href.replace(/&/g,"&") + .replace(/</g,"<") + .replace(/>/g,">") + "</p>"); + // --> + </script> +</tt> + +<table cellpadding="20"> + <tr> + <td bgcolor="#ff0000"> + <font size="+2"> + [% error_message FILTER none %] + </font> + </td> + </tr> +</table> + +[% IF variables %] + <pre> +Variables: + [% FOREACH key = variables.keys %] + [%+ key FILTER html %]: [%+ variables.$key FILTER html %] + [% END %] + </pre> +[% END %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/global/common-links.html.tmpl b/template/en/default/global/common-links.html.tmpl new file mode 100644 index 0000000..6ad638f --- /dev/null +++ b/template/en/default/global/common-links.html.tmpl @@ -0,0 +1,116 @@ +[%# 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> + # Svetlana Harisova <light@rathedg.com> + #%] + +[% DEFAULT qs_suffix = "" %] +[% USE Bugzilla %] + +<ul class="links"> + <li><a href="./">Home</a></li> + <li><span class="separator">| </span><a href="enter_bug.cgi">New</a></li> + <li><span class="separator">| </span><a href="describecomponents.cgi">Browse</a></li> + <li><span class="separator">| </span><a href="query.cgi">Search</a></li> + + <li class="form"> + <span class="separator">| </span> + <form action="buglist.cgi" method="get" + onsubmit="if (this.quicksearch.value == '') + { alert('Please enter one or more search terms first.'); + return false; } return true;"> + <input class="txt" type="text" id="quicksearch[% qs_suffix FILTER html %]" name="quicksearch"> + <input class="btn" type="submit" value="Search" + id="find[% qs_suffix FILTER html %]"> + [%-# Work around FF bug: keep this on one line %]</form> + <a href="page.cgi?id=quicksearch.html" title="Quicksearch Help">[?]</a></li> + + <li><span class="separator">| </span><a href="report.cgi">Reports</a></li> + + <li> + [% IF Param('shutdownhtml') || Bugzilla.has_flags %] + <span class="separator">| </span> + [% IF user.id %] + <a href="request.cgi?requester=[% user.login FILTER url_quote %]&requestee= + [% user.login FILTER url_quote %]&do_union=1&group=type&action=queue">My Requests</a> + [% ELSE %] + <a href="request.cgi">Requests</a> + [% END %] + [% END %] + [%-# Work around FF bug: keep this on one line %]</li> + + [% IF user.login %] + <li><span class="separator">| </span><a href="userprefs.cgi">Preferences</a></li> + [% IF user.in_group('tweakparams') || user.in_group('editusers') || user.can_bless + || (Param('useclassification') && user.in_group('editclassifications')) + || user.in_group('editcomponents') || user.in_group('admin') || user.in_group('creategroups') + || user.in_group('editkeywords') || user.in_group('bz_canusewhines') + || user.get_products_by_permission("editcomponents").size %] + <li><span class="separator">| </span><a href="admin.cgi">Administration</a></li> + [% END %] + + [% PROCESS link_to_documentation %] + + <li> + <span class="separator">| </span> + [% IF user.authorizer.can_logout %] + <a href="index.cgi?logout=1">Log out</a> + [% ELSE %] + Logged in as + [% END %] + [% IF sudoer %] + [%+ sudoer.login FILTER html %] (<b>impersonating + [%+ user.login FILTER html %]</b> + <a href="relogin.cgi?action=end-sudo">end session</a>) + [% ELSE %] + [%+ user.login FILTER html %] + [% END %] + [%-# Work around FF bug: keep this on one line %]</li> + [% ELSE %] + + [% PROCESS link_to_documentation %] + + [% IF Param('createemailregexp') + && user.authorizer.user_can_create_account %] + <li id="new_account_container[% qs_suffix FILTER html %]"> + <span class="separator">| </span> + <a href="createaccount.cgi">New Account</a> + </li> + [% END %] + + [%# Only display one login form when we're on a LOGIN_REQUIRED page. That + # way, we're guaranteed that the user will use the form that has + # hidden_fields in it (the center form) instead of this one. Also, it's + # less confusing to have one form (as opposed to three) when you're + # required to log in. + #%] + [% IF user.authorizer.can_login && !Bugzilla.page_requires_login %] + [% PROCESS "account/auth/login-small.html.tmpl" %] + [% END %] + [% END %] +</ul> + +[% Hook.process("link-row") %] +[% BLOCK link_to_documentation %] + [% IF doc_section && Param('docs_urlbase') %] + <li> + <span class="separator">| </span> + <a href="[% docs_urlbase _ doc_section FILTER html %]" target="_blank">Help</a> + </li> + [% END %] +[% END %] diff --git a/template/en/default/global/confirm-action.html.tmpl b/template/en/default/global/confirm-action.html.tmpl new file mode 100644 index 0000000..e57a83c --- /dev/null +++ b/template/en/default/global/confirm-action.html.tmpl @@ -0,0 +1,63 @@ +[%# 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 Frédéric Buclin. + # Portions created by Frédéric Buclin are Copyright (C) 2008 + # Frédéric Buclin. All Rights Reserved. + # + # Contributor(s): Frédéric Buclin <LpSolit@gmail.com> + #%] + +[%# INTERFACE: + # script_name: the script generating this warning. + # token: a valid token for the current action. + # reason: reason of the failure. + #%] + +[% PROCESS global/header.html.tmpl title = "Suspicious Action" + style_urls = ['skins/standard/global.css'] %] + +<div class="throw_error"> + [% IF reason == "expired_token" %] + Your changes have been rejected because you exceeded the time limit + of [% constants.MAX_TOKEN_AGE FILTER html %] days before submitting your + changes to [% script_name FILTER html %]. Your page may have been displayed + for too long, or old changes have been resubmitted by accident. + + [% ELSIF reason == "missing_token" %] + It looks like you didn't come from the right page. + One reason could be that you entered the URL in the address bar of your + web browser directly, which should be safe. Another reason could be that + you clicked on a URL which redirected you here <b>without your consent</b>. + + [% ELSIF reason == "invalid_token" %] + You submitted changes to [% script_name FILTER html %] with an invalid + token, which may indicate that someone tried to abuse you, for instance + by making you click on a URL which redirected you here <b>without your + consent</b>. + [% END %] + <p> + Are you sure you want to commit these changes? + </p> +</div> + +<form name="check" id="check" method="post" action="[% script_name FILTER html %]"> + [% PROCESS "global/hidden-fields.html.tmpl" + exclude="^(Bugzilla_login|Bugzilla_password|token)$" %] + <input type="hidden" name="token" value="[% token FILTER html %]"> + <input type="submit" id="confirm" value="Yes, Confirm Changes"> +</form> + +<p><a href="index.cgi">No, throw away these changes</a> (you will be redirected +to the home page).</p> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/global/confirm-user-match.html.tmpl b/template/en/default/global/confirm-user-match.html.tmpl new file mode 100644 index 0000000..67a901f --- /dev/null +++ b/template/en/default/global/confirm-user-match.html.tmpl @@ -0,0 +1,202 @@ +[%# 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): Myk Melez <myk@mozilla.org> + # Erik Stambaugh <not_erik@dasbistro.com> + #%] + +[%# INTERFACE: + # fields: hash/record; the fields being matched, each of which has: + # type: single|multi: whether or not the user can select multiple matches + # flag_type: for flag requestee fields, the type of flag being requested + # matches: hash; Hierarchical. The levels go like this: + # field_name { + # pattern_text { + # 'users' = @user_list (user objects) + # 'status' = success|fail|trunc (result of search. + # 'trunc' (truncated) means max was reached) + # } + # } + # script: string; The name of the calling script, used to create a + # self-referential URL + #%] + +[%# use the global field descs %] +[% PROCESS "global/field-descs.none.tmpl" %] + +[%# This lists fields which use the user auto-completion feature and which + # are not listed in field_descs. %] +[% field_labels = { # Used by editcomponents.cgi + "initialcc" => "Default CC List", + "initialowner" => "Default Assignee", + "initialqacontact" => "Default QA Contact", + # Used by process_bug.cgi + "masscc" => "CC List", + # Used by request.cgi + "requester" => "Requester", + "requestee" => "Requestee", + # Used by userprefs.cgi + "new_watchedusers" => "Watch List", + + } +%] +[% IF matchsuccess == 1 %] + [% PROCESS global/header.html.tmpl title="Confirm Match" %] + + [% USE Bugzilla %] + + <form method="post" + [% IF script -%] + action="[% script %]" + [%- END -%] + [% IF Bugzilla.cgi.param("data") %] + enctype="multipart/form-data" + [% END %] + > + + <p> + [% IF matchmultiple %] + [% terms.Bugzilla %] cannot make a conclusive match for one or more + of the names and/or email addresses you entered on the previous page. + <br>Please examine the lists of potential matches below and select the + ones you want, + [% ELSE %] + [% terms.Bugzilla %] is configured to require verification whenever + you enter a name or partial email address. + <br>Below are the names/addresses you entered and the matched accounts. + Please confirm that they are correct, + [% END %] + or go back to the previous page to revise the names you entered. + </p> +[% ELSE %] + [% PROCESS global/header.html.tmpl title="Match Failed" %] + <p> + [% terms.Bugzilla %] was unable to make any match at all for one or more of + the names and/or email addresses you entered on the previous page. + [% IF !user.id %] + <b>Note: You are currently logged out. Only exact matches against e-mail + addresses will be performed.</b> + [% END %] + </p> + <p>Please go back and try other names or email addresses.</p> +[% END %] + + <table border="0"> + <tr> + <td colspan="2"> + <hr width="100%" size="1"> + </td> + </tr> + + [%# this is messy to allow later expansion %] + + [% FOREACH field = matches %] + <tr> + <td align="left" valign="top"> + [% PROCESS field_names field_name=field.key %]: + </td> + <td align="left" valign="top"> + [% FOREACH query = field.value %] + <div class="user_match"> + <b>[% query.key FILTER html %]</b> + [% IF query.value.users.size %] + [% IF query.value.users.size > 1 %] + [% IF query.value.status == 'fail' %] + <font color="#FF0000"> + matches multiple users. + </font> + Please go back and try again with a more specific + name/address. + [% ELSE %] + [% IF query.value.status == 'trunc' %] + matched + more than the maximum + of [% query.value.users.size %] users:<br> + [% ELSE %] + matched:<br> + [% END %] + <select name="[% field.key FILTER html %]" + id="[% field.key FILTER html %]" + [% IF fields.${field.key}.type == 'multi' %] + multiple="multiple" + [% IF query.value.users.size > 5 %] + size="5" + [% ELSE %] + size="[% query.value.users.size %]" + [% END %] + [% END %] + > + [% FOREACH match = query.value.users %] + <option value="[% match.login FILTER html %]"> + [%- match.identity FILTER html -%] + </option> + [% END %] + </select> + [% END %] + [% ELSE %] + matched + <b>[% query.value.users.0.identity FILTER html %]</b> + [% END %] + [% ELSE %] + [% IF (query.key.length < 3) && !Param('emailsuffix') %] + <font color="#FF0000">was too short for substring match + (minimum 3 characters)</font> + [% ELSE %] + <font color="#FF0000">did not match anything</font> + [% END %] + [% END %] + </div> + [% END %] + </td> + </tr> + <tr> + <td colspan="2"> + <hr width="100%" size="1"> + </td> + </tr> + [% END %] + + </table> + +[% IF matchsuccess == 1 %] + + [% PROCESS "global/hidden-fields.html.tmpl" exclude="^Bugzilla_(login|password)$" %] + + <p> + <input type="submit" id="continue" value="Continue"> + </p> + + </form> + +[% END %] + +[% PROCESS global/footer.html.tmpl %] + + +[% BLOCK field_names %] + + [% IF field_descs.$field_name %] + [% field_descs.$field_name FILTER html %] + [% ELSIF field_labels.$field_name %] + [% field_labels.$field_name FILTER html %] + [% ELSIF field_name.match("^requestee") %] + [% fields.${field_name}.flag_type.name %] requestee + [% ELSE %] + [% field_name FILTER html %] + [% END %] + +[% END %] diff --git a/template/en/default/global/docslinks.html.tmpl b/template/en/default/global/docslinks.html.tmpl new file mode 100644 index 0000000..712dfb4 --- /dev/null +++ b/template/en/default/global/docslinks.html.tmpl @@ -0,0 +1,52 @@ +[%# 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): Marc Schumann <wurblzap@gmail.com> + #%] + +[%# INTERFACE: + # docslinks: hash. Hash keys will be used as text of the documentation links, + # hash values will be used as links to the document, relative to + # the main Bugzilla documentation directory. + # Example: If you want a 'FAQ' link to point to, the "faq-general" + # named anchor on faq.html, assign + # { 'FAQ' => "faq.html#faq-general" } + # to docslinks. + # You may only link to sections by their given ID; it is not allowed + # to link to a section which is not given an ID (thus getting + # assigned an automatically generated ID). Otherwise, the link + # would break on a recompilation of the documentation. + # admindocslinks: hash. Same as docslinks, but will only be displayed to + # members of the admin group. + #%] + +[% IF Param('docs_urlbase') && + docslinks.keys.size || (admindocslinks.keys.size && user.in_group('admin')) %] + <div id="docslinks"> + <h2>Related documentation</h2> + <ul> + [% IF user.in_group('admin') %] + [% PROCESS docslinkslist docstype = admindocslinks %] + [% END %] + [% PROCESS docslinkslist docstype = docslinks %] + </ul> + </div> +[% END %] + +[% BLOCK docslinkslist %] + [% FOREACH docslink = docstype.keys %] + <li> + <a href="[% docs_urlbase FILTER html %] + [% docslink FILTER none %]">[% docstype.$docslink FILTER html %]</a> + </li> + [% END %] +[% END %] diff --git a/template/en/default/global/field-descs.none.tmpl b/template/en/default/global/field-descs.none.tmpl new file mode 100644 index 0000000..0c17e57 --- /dev/null +++ b/template/en/default/global/field-descs.none.tmpl @@ -0,0 +1,176 @@ +[%# 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> + # Elliotte Martin <elliotte_martin@yahoo.com> + #%] + +[%# Remember to PROCESS rather than INCLUDE this template. %] + +[% PROCESS global/variables.none.tmpl %] + +[% SET search_descs = { + "noop" => "---", + "equals" => "is equal to", + "notequals" => "is not equal to", + "anyexact" => "is equal to any of the strings", + "substring" => "contains the string", + "casesubstring" => "contains the string (exact case)", + "notsubstring" => "does not contain the string", + "anywordssubstr" => "contains any of the strings", + "allwordssubstr" => "contains all of the strings", + "nowordssubstr" => "contains none of the strings", + "regexp" => "matches regular expression", + "notregexp" => "does not match regular expression", + "lessthan" => "is less than", + "lessthaneq" => "is less than or equal to", + "greaterthan" => "is greater than", + "greaterthaneq" => "is greater than or equal to", + "anywords" => "contains any of the words", + "allwords" => "contains all of the words", + "nowords" => "contains none of the words", + "changedbefore" => "changed before", + "changedafter" => "changed after", + "changedfrom" => "changed from", + "changedto" => "changed to", + "changedby" => "changed by", + "matches" => "matches", + "notmatches" => "does not match", +} %] + +[% field_types = { ${constants.FIELD_TYPE_UNKNOWN} => "Unknown Type", + ${constants.FIELD_TYPE_FREETEXT} => "Free Text", + ${constants.FIELD_TYPE_SINGLE_SELECT} => "Drop Down", + ${constants.FIELD_TYPE_MULTI_SELECT} => "Multiple-Selection Box", + ${constants.FIELD_TYPE_TEXTAREA} => "Large Text Box", + ${constants.FIELD_TYPE_DATETIME} => "Date/Time", + ${constants.FIELD_TYPE_BUG_ID} => "$terms.Bug ID", + } %] + +[%# You can use this hash to localize (translate) the values displayed + # for drop-down and multiple-select fields. Lines starting with "#" + # are comments. + #%] +[% value_descs = { + "bug_status" => { + # "UNCONFIRMED" => "UNCO", + # "NEW" => "NEWISH", + }, + + "resolution" => { + "" => "---", + # "FIXED" => "NO LONGER AN ISSUE", + # "MOVED" => "BYE-BYE", + }, +} %] + +[%# We use "FILTER none" here because only the caller can know how to + # filter the result appropriately. + #%] +[% MACRO display_value(field_name, value_name) BLOCK %][% FILTER trim %] + [% IF value_descs.${field_name}.${value_name}.defined %] + [% value_descs.${field_name}.${value_name} FILTER none %] + [% ELSE %] + [% value_name FILTER none %] + [% END %] +[% END %][% END %] + +[% IF in_template_var %] + [% vars.terms = terms %] + + [%# field_descs is loaded as a global template variable and cached + # across all templates--see VARIABLES in Bugzilla/Template.pm. + #%] + [% vars.field_descs = { + "[Bug creation]" => "[$terms.Bug creation]", + "actual_time" => "Actual Hours", + "alias" => "Alias", + "assigned_to" => "Assignee", + "attach_data.thedata" => "Attachment data", + "attachments.description" => "Attachment description", + "attachments.filename" => "Attachment filename", + "attachments.mimetype" => "Attachment mime type", + "attachments.ispatch" => "Attachment is patch", + "attachments.isobsolete" => "Attachment is obsolete", + "attachments.isprivate" => "Attachment is private", + "attachments.isurl" => "Attachment is a URL", + "attachments.submitter" => "Attachment creator", + "blocked" => "Blocks", + "bug_file_loc" => "URL", + "bug_group" => "Group", + "bug_id" => "$terms.Bug ID", + "bug_severity" => "Severity", + "bug_status" => "Status", + "changeddate" => "Changed", + "cc" => "CC", + "classification" => "Classification", + "cclist_accessible" => "CC list accessible", + "commenter" => "Commenter", + "component_id" => "Component ID", + "component" => "Component", + "content" => "Content", + "creation_ts" => "Creation date", + "deadline" => "Deadline", + "delta_ts" => "Changed", + "dependson" => "Depends on", + "dup_id" => "Duplicate", + "estimated_time" => "Orig. Est.", + "everconfirmed" => "Ever confirmed", + "flagtypes.name" => "Flags", + "keywords" => "Keywords", + "longdesc" => "Comment", + "longdescs.isprivate" => "Comment is private", + "newcc" => "CC", + "op_sys" => "OS", + "opendate" => "Opened", + "owner_idle_time" => "Time Since Assignee Touched", + "percentage_complete" => "%Complete", + "priority" => "Priority", + "product_id" => "Product ID", + "product" => "Product", + "qa_contact" => "QA Contact", + "remaining_time" => "Hours Left", + "rep_platform" => "Hardware", + "reporter" => "Reporter", + "reporter_accessible" => "Reporter accessible", + "requestees.login_name" => "Flag Requestee", + "resolution" => "Resolution", + "see_also" => "See Also", + "setters.login_name" => "Flag Setter", + "setting" => "Setting", + "settings" => "Settings", + "short_desc" => "Summary", + "status_whiteboard" => "Whiteboard", + "target_milestone" => "Target Milestone", + "version" => "Version", + "votes" => "Votes" + "work_time" => "Hours Worked", + } %] + + [%# Also include any custom fields or fields which don't have a + Description here, by copying their Description from the + database. If you want to override this for your language + or your installation, just use a hook. %] + [% UNLESS Param('shutdownhtml') %] + [% FOREACH bz_field = bug_fields.values %] + [% SET vars.field_descs.${bz_field.name} = bz_field.description + IF !vars.field_descs.${bz_field.name}.defined %] + [% END %] + [% END %] +[% END %] + +[% Hook.process("end") %] diff --git a/template/en/default/global/footer.html.tmpl b/template/en/default/global/footer.html.tmpl new file mode 100644 index 0000000..0379f02 --- /dev/null +++ b/template/en/default/global/footer.html.tmpl @@ -0,0 +1,49 @@ +[%# 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> + # Svetlana Harisova <light@rathedg.com> + #%] + +[%# INTERFACE: + # This template has no interface. However, you must fulfill the interface to + # global/useful-links.html.tmpl. + #%] + +[% INCLUDE "global/help.html.tmpl" %] + +</div> + +[%# Migration note: below this point, this file corresponds to the old Param + # 'footerhtml' + #%] + +<div id="footer"> + <div class="intro"></div> + +[%# Migration note: the old param 'blurbhtml' goes here %] + +[%# Migration note: useful-links.html.tmpl corresponds to %commandmenu% %] + + [% PROCESS "global/useful-links.html.tmpl" %] + + <div class="outro"></div> +</div> + +</body> +</html> + diff --git a/template/en/default/global/header.html.tmpl b/template/en/default/global/header.html.tmpl new file mode 100644 index 0000000..4837df5 --- /dev/null +++ b/template/en/default/global/header.html.tmpl @@ -0,0 +1,324 @@ +[%# 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> + # Vaskin Kissoyan <vkissoyan@yahoo.com> + # Vitaly Harisov <vitaly@rathedg.com> + # Svetlana Harisova <light@rathedg.com> + #%] + +[%# INTERFACE: + # (All the below interface elements are optional.) + # title: string. Page title. + # header: string. Main page header. + # subheader: string. Page subheader. + # header_addl_info: string. Additional header information. + # bodyclasses: array of extra CSS classes for the <body> + # onload: string. JavaScript code to run when the page finishes loading. + # javascript: string. Javascript to go in the header. + # javascript_urls: list. List of URLs to Javascript. + # style: string. CSS style. + # style_urls: list. List of URLs to CSS style sheets. + # message: string. A message to display to the user. May contain HTML. + # atomlink: Atom link URL, May contain HTML + #%] + +[% IF message %] + [% PROCESS global/messages.html.tmpl %] +[% END %] + +[% DEFAULT + subheader = "" + header_addl_info = "" + onload = "" + style_urls = [] +%] + +[%# We should be able to set the default value of the header variable + # to the value of the title variable using the DEFAULT directive, + # but that doesn't work if a caller sets header to the empty string + # to avoid header inheriting the value of title, since DEFAULT + # mistakenly treats empty strings as undefined and gives header the + # value of title anyway. To get around that problem we explicitly + # set header's default value here only if it is undefined. %] +[% IF !header.defined %][% header = title %][% END %] + +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" + "http://www.w3.org/TR/html4/loose.dtd"> +<html> + <head> + [% Hook.process("start") %] + <title>[% title %]</title> + +[%# Migration note: contents of the old Param 'headerhtml' would go here %] + + [% PROCESS "global/site-navigation.html.tmpl" %] + + [% PROCESS 'global/setting-descs.none.tmpl' %] + + [%# Set up the skin CSS cascade: + # 1. Standard Bugzilla stylesheet set (persistent) + # 2. Standard Bugzilla stylesheet set (selectable) + # 3. All third-party "skin" stylesheet sets (selectable) + # 4. Page-specific styles + # 5. Custom Bugzilla stylesheet set (persistent) + # "Selectable" skin file sets may be either preferred or alternate. + # Exactly one is preferred, determined by the "skin" user preference. + #%] + [% IF user.settings.skin.value != 'standard' %] + [% user_skin = user.settings.skin.value %] + [% END %] + [% style_urls.unshift('skins/standard/global.css') %] + + [%# CSS cascade, part 1: Standard Bugzilla stylesheet set (persistent). + # Always present. + #%] + [% FOREACH style_url = style_urls %] + <link href="[% style_url FILTER html %]" + rel="stylesheet" + type="text/css"> + [% END %] + <!--[if lte IE 7]> + [%# Internet Explorer treats [if IE] HTML comments as uncommented. + # Use it to import CSS fixes so that Bugzilla looks decent on IE 7 + # and below. + #%] + <link href="skins/standard/IE-fixes.css" + rel="stylesheet" + type="text/css"> + <![endif]--> + + [%# CSS cascade, part 2: Standard Bugzilla stylesheet set (selectable) + # Present if skin selection is enabled. + #%] + [% IF user.settings.skin.is_enabled %] + [% FOREACH style_url = style_urls %] + <link href="[% style_url FILTER html %]" + rel="[% 'alternate ' IF user_skin %]stylesheet" + title="[% setting_descs.standard FILTER html %]" + type="text/css"> + [% END %] + <!--[if lte IE 7]> + [%# Internet Explorer treats [if IE] HTML comments as uncommented. + # Use it to import CSS fixes so that Bugzilla looks decent on IE 7 + # and below. + #%] + <link href="skins/standard/IE-fixes.css" + rel="[% 'alternate ' IF user_skin %]stylesheet" + title="[% setting_descs.standard FILTER html %]" + type="text/css"> + <![endif]--> + [% END %] + + [%# CSS cascade, part 3: Third-party stylesheet set (selectable). + # All third-party skins are present if skin selection is enabled. + # The admin-selected skin is always present. + #%] + [% FOREACH contrib_skin = user.settings.skin.legal_values %] + [% NEXT IF contrib_skin == 'standard' %] + [% NEXT UNLESS contrib_skin == user_skin + OR user.settings.skin.is_enabled %] + [% contrib_skin = contrib_skin FILTER url_quote %] + [% IF contrib_skin.match('\.css$') %] + [%# 1st skin variant: single-file stylesheet %] + <link href="[% "skins/contrib/$contrib_skin" %]" + rel="[% 'alternate ' UNLESS contrib_skin == user_skin %]stylesheet" + title="[% contrib_skin FILTER html %]" + type="text/css"> + [% ELSE %] + [%# 2nd skin variant: stylesheet set %] + [% FOREACH style_url = style_urls %] + [% IF style_url.match('^skins/standard/') %] + <link href="[% style_url.replace('^skins/standard/', + "skins/contrib/$contrib_skin/") %]" + rel="[% 'alternate ' UNLESS contrib_skin == user_skin %]stylesheet" + title="[% contrib_skin FILTER html %]" + type="text/css"> + [% END %] + [% END %] + <!--[if lte IE 7]> + [%# Internet Explorer treats [if IE] HTML comments as uncommented. + # Use it to import CSS fixes so that Bugzilla looks decent on IE 7 + # and below. + #%] + <link href="skins/contrib/[% contrib_skin FILTER html %]/IE-fixes.css" + rel="[% 'alternate ' UNLESS contrib_skin == user_skin %]stylesheet" + title="[% contrib_skin FILTER html %]" + type="text/css"> + <![endif]--> + [% END %] + [% END %] + + [%# CSS cascade, part 4: page-specific styles. + #%] + [% IF style %] + <style type="text/css"> + [% style %] + </style> + [% END %] + + [%# CSS cascade, part 5: Custom Bugzilla stylesheet set (persistent). + # Always present. Site administrators may override all other style + # definitions, including skins, using custom stylesheets. + #%] + [% FOREACH style_url = style_urls %] + [% IF style_url.match('^skins/standard/') %] + <link href="[% style_url.replace('^skins/standard/', "skins/custom/") + FILTER html %]" rel="stylesheet" type="text/css"> + [% END %] + [% END %] + <!--[if lte IE 7]> + [%# Internet Explorer treats [if IE] HTML comments as uncommented. + # Use it to import CSS fixes so that Bugzilla looks decent on IE 7 + # and below. + #%] + <link href="skins/custom/IE-fixes.css" + rel="stylesheet" + type="text/css"> + <![endif]--> + + <script src="js/yui/yahoo-dom-event.js" type="text/javascript"></script> + <script src="js/yui/cookie.js" type="text/javascript"></script> + <script src="js/global.js" type="text/javascript"></script> + <script type="text/javascript"> + <!-- + YAHOO.namespace('bugzilla'); + if (YAHOO.env.ua.gecko) { + YAHOO.util.Event._simpleRemove(window, "unload", + YAHOO.util.Event._unload); + } + [%# The language selector needs javascript to set its cookie, + # so it is hidden in HTML/CSS by the "bz_default_hidden" class. + # If the browser can run javascript, it will then "unhide" + # the language selector using the following code. + #%] + function unhide_language_selector() { + YAHOO.util.Dom.removeClass( + 'lang_links_container', 'bz_default_hidden' + ); + } + YAHOO.util.Event.onDOMReady(unhide_language_selector); + + [%# Make some Bugzilla information available to all scripts. + # We don't import every parameter and constant because we + # don't want to add a lot of uncached JS to every page. + #%] + var BUGZILLA = { + param: { + cookiepath: '[% Param('cookiepath') FILTER js %]' + }, + + string: { + attach_desc_required: + 'You must enter a Description for this attachment.' + } + }; + [% IF javascript %] + [% javascript %] + [% END %] + // --> + </script> + + [% IF javascript_urls %] + [% FOREACH javascript_url = javascript_urls %] + <script src="[% javascript_url FILTER html %]" type="text/javascript"></script> + [% END %] + [% END %] + + [%# this puts the live bookmark up on firefox for the Atom feed %] + [% IF atomlink %] + <link rel="alternate" + type="application/atom+xml" title="Atom feed" + href="[% atomlink FILTER html %]"> + [% END %] + + [%# Required for the 'Autodiscovery' feature in Firefox 2 and IE 7. %] + <link rel="search" type="application/opensearchdescription+xml" + title="[% terms.Bugzilla %]" href="./search_plugin.cgi"> + <link rel="shortcut icon" href="images/favicon.ico" > + [% Hook.process("additional_header") %] + </head> + +[%# Migration note: contents of the old Param 'bodyhtml' go in the body tag, + # but set the onload attribute in the DEFAULT directive above. + #%] + + <body onload="[% onload %]" + class="[% urlbase.replace('^https?://','').replace('/$','').replace('[-~@:/.]+','-') %] + [% FOREACH class = bodyclasses %] + [% ' ' %][% class FILTER css_class_quote %] + [% END %]"> + +[%# Migration note: the following file corresponds to the old Param + # 'bannerhtml' + #%] + +<div id="header"> + +[% INCLUDE global/banner.html.tmpl %] + +<table border="0" cellspacing="0" cellpadding="0" id="titles"> +<tr> + <td id="title"> + <p>[% terms.Bugzilla %] + [% " – $header" IF header %]</p> + </td> + + [% IF subheader %] + <td id="subtitle"> + <p class="subheader">[% subheader %]</p> + </td> + [% END %] + + [% IF header_addl_info %] + <td id="information"> + <p class="header_addl_info">[% header_addl_info %]</p> + </td> + [% END %] +</tr> +</table> + +<table id="lang_links_container" cellpadding="0" cellspacing="0" + class="bz_default_hidden"><tr><td> +[% IF Bugzilla.languages.size > 1 %] + <ul class="links"> + [% FOREACH lang = Bugzilla.languages.sort %] + <li>[% IF NOT loop.first %]<span class="separator"> | </span>[% END %] + [% IF lang == current_language %] + <span class="lang_current">[% lang FILTER html FILTER upper %]</span> + [% ELSE %] + <a href="#" onclick="set_language('[% lang FILTER none %]');"> + [%- lang FILTER html FILTER upper %]</a> + [% END %] + </li> + [% END %] + </ul> +[% END %] +</td></tr></table> + +[% PROCESS "global/common-links.html.tmpl" qs_suffix = "_top" %] +</div> [%# header %] + +<div id="bugzilla-body"> + +[% IF Param('announcehtml') %] +[% Param('announcehtml') FILTER none %] +[% END %] + +[% IF message %] +<div id="message">[% message %]</div> +[% END %] diff --git a/template/en/default/global/help.html.tmpl b/template/en/default/global/help.html.tmpl new file mode 100644 index 0000000..36439bc --- /dev/null +++ b/template/en/default/global/help.html.tmpl @@ -0,0 +1,32 @@ +[%# 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> + #%] + +[% USE Bugzilla %] +[% cgi = Bugzilla.cgi %] + +[% IF cgi.param("help") %] + <script type="text/javascript"> <!-- + [% FOREACH h = help_html %] + g_helpTexts["[% h.id FILTER js %]"] = "[%- h.html FILTER js -%]"; + [% END %] + // --> + </script> +[% END %] + diff --git a/template/en/default/global/hidden-fields.html.tmpl b/template/en/default/global/hidden-fields.html.tmpl new file mode 100644 index 0000000..24f15c4 --- /dev/null +++ b/template/en/default/global/hidden-fields.html.tmpl @@ -0,0 +1,58 @@ +[%# 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): Myk Melez <myk@mozilla.org> + #%] + +[%# INTERFACE: + # exclude: string; a regular expression matching fields to exclude + # from the list of hidden fields generated by this template + #%] + +[%# The global Bugzilla->cgi object is used to obtain form variable values. %] +[% USE Bugzilla %] +[% cgi = Bugzilla.cgi %] + +[%# Generate hidden form fields for non-excluded fields. %] +[% FOREACH field = cgi.param() %] + [% NEXT IF exclude && field.search(exclude) %] + [%# The '.slice(0)' bit is here to force the 'param(field)' to be evaluated + in a list context, so we can avoid extra code checking for single valued or + empty fields %] + [% IF field == "data" && cgi.param("data") %] + <div class="box"> + <p> + We were unable to store the file you uploaded because of incomplete information + in the form you just submitted. Because we are unable to retain the file between + form submissions, you must re-attach the file in addition to completing the + remaining missing information above. + </p> + <p> + Please re-attach the file <b>[% cgi.param(field) FILTER html %]</b> in + the field below: + </p> + <p> + <input type="file" id="data" name="data" size="50"> + </p> + </div> + [% ELSE %] + [% FOREACH mvalue = cgi.param(field).slice(0) %] + <input type="hidden" name="[% field FILTER html %]" + value="[% mvalue FILTER html FILTER html_linebreak %]"> + [% END %] + [% END %] +[% END %] diff --git a/template/en/default/global/initialize.none.tmpl b/template/en/default/global/initialize.none.tmpl new file mode 100644 index 0000000..a6c4897 --- /dev/null +++ b/template/en/default/global/initialize.none.tmpl @@ -0,0 +1,32 @@ +[%# 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): Myk Melez <myk@mozilla.org> + #%] + +[%# This template is a place to put directives that should get processed + # every time a primary template gets processed. Primary templates are those + # called from Perl code rather than from other templates via the PROCESS + # and INCLUDE directives. + # + # This template gets auto-processed at the beginning of primary templates + # via the PRE_PROCESS configuration parameter. Note that it gets processed + # for non-HTML templates too, so don't put HTML-specific stuff in here; + # put that into header.html.tmpl instead. + #%] + +[% USE Hook %] diff --git a/template/en/default/global/js-products.html.tmpl b/template/en/default/global/js-products.html.tmpl new file mode 100644 index 0000000..8ca206f --- /dev/null +++ b/template/en/default/global/js-products.html.tmpl @@ -0,0 +1,34 @@ +[%# 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): Myk Melez <myk@mozilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + #%] + +[%# The javascript block gets used in header.html.tmpl. %] +[% javascript = BLOCK %] + var useclassification = false; // No classification level in use + var first_load = true; // Is this the first time we load the page? + var last_sel = []; // Caches last selection + var cpts = new Array(); + [% n = 1 %] + [% FOREACH prod = products %] + cpts['[% n %]'] = [ + [%- FOREACH comp = prod.components %]'[% comp.name FILTER js %]'[% ", " UNLESS loop.last %] [%- END -%] ]; + [% n = n+1 %] + [% END %] +[% END %] diff --git a/template/en/default/global/message.html.tmpl b/template/en/default/global/message.html.tmpl new file mode 100644 index 0000000..e578a7f --- /dev/null +++ b/template/en/default/global/message.html.tmpl @@ -0,0 +1,42 @@ +[%# 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): + #%] + +[%# INTERFACE: + # url: string. An optional URL to go to. + # link: string. The link text for that URL. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% DEFAULT title = "$terms.Bugzilla Message" %] + +[% PROCESS global/header.html.tmpl %] + +[%# The "header" template automatically displays a message if it finds one. + Note that the global messages list is in messages.html.tmpl. %] + +[%# Display a URL if the calling script or message block has included one. %] +[% IF url && link %] + <p> + <a href="[% url FILTER html %]">[% link FILTER html %]</a> + </p> +[% END %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/global/message.txt.tmpl b/template/en/default/global/message.txt.tmpl new file mode 100644 index 0000000..9329cdb --- /dev/null +++ b/template/en/default/global/message.txt.tmpl @@ -0,0 +1,25 @@ +[%# 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 Max Kanat-Alexander. + # Portions created by Max Kanat-Alexander are Copyright (C) 2005 + # Max Kanat-Alexander. All Rights Reserved. + # + # Contributor(s): Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[% PROCESS global/variables.none.tmpl %] + +[%# Yes, this may show some HTML. But it's the best we + # can do at the moment. %] +[% PROCESS global/messages.html.tmpl %] +[% message FILTER txt %] diff --git a/template/en/default/global/messages.html.tmpl b/template/en/default/global/messages.html.tmpl new file mode 100644 index 0000000..7351aa0 --- /dev/null +++ b/template/en/default/global/messages.html.tmpl @@ -0,0 +1,858 @@ +[%# 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> + # Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[%# This is a list of all the possible messages. Please keep them in + # alphabetical order by message tag, and leave a blank line between messages. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% message_tag = message %] + +[% message = BLOCK %] + [% IF message_tag == "account_created" %] + The user account [% otheruser.login FILTER html %] has been created + successfully. + [% IF groups.size %] + You may want to edit the group settings now, using the form below. + [% END %] + + [% ELSIF message_tag == "account_creation_canceled" %] + [% title = "User Account Creation Canceled" %] + The creation of the user account [% account FILTER html %] has been + canceled. + + [% ELSIF message_tag == "account_updated" %] + [% IF changed_fields.size + + groups_added_to.size + groups_removed_from.size + + groups_granted_rights_to_bless.size + groups_denied_rights_to_bless.size %] + [% title = "User $loginold updated" %] + The following changes have been made to the user account + [%+ loginold FILTER html %]: + <ul> + [% FOREACH field = changed_fields %] + <li> + [% IF field == 'login_name' %] + The login is now [% otheruser.login FILTER html %]. + [% ELSIF field == 'realname' %] + The real name has been updated. + [% ELSIF field == 'cryptpassword' %] + A new password has been set. + [% ELSIF field == 'disabledtext' %] + The disable text has been modified. + [% ELSIF field == 'disable_mail' %] + [% IF otheruser.email_disabled %] + [% terms.Bug %]mail has been disabled. + [% ELSE %] + [% terms.Bug %]mail has been enabled. + [% END %] + [% END %] + </li> + [% END %] + [% IF groups_added_to.size %] + <li> + The account has been added to the + [%+ groups_added_to.join(', ') FILTER html %] + group[% 's' IF groups_added_to.size > 1 %]. + </li> + [% END %] + [% IF groups_removed_from.size %] + <li> + The account has been removed from the + [%+ groups_removed_from.join(', ') FILTER html %] + group[% 's' IF groups_removed_from.size > 1 %]. + </li> + [% END %] + [% IF groups_granted_rights_to_bless.size %] + <li> + The account has been granted rights to bless the + [%+ groups_granted_rights_to_bless.join(', ') FILTER html %] + group[% 's' IF groups_granted_rights_to_bless.size > 1 %]. + </li> + [% END %] + [% IF groups_denied_rights_to_bless.size %] + <li> + The account has been denied rights to bless the + [%+ groups_denied_rights_to_bless.join(', ') FILTER html %] + group[% 's' IF groups_denied_rights_to_bless.size > 1 %]. + </li> + [% END %] + </ul> + [% ELSE %] + [% title = "User $otheruser.login not changed" %] + You didn't request any changes to the user's account + [%+ otheruser.login FILTER html %]. + [% END %] + + [% ELSIF message_tag == "account_deleted" %] + [% title = "User $otheruser.login deleted" %] + The user account [% otheruser.login FILTER html %] has been deleted + successfully. + + [% ELSIF message_tag == "account_disabled" %] + The user account [% account FILTER html %] is disabled, so you + cannot change its password. + + [% ELSIF message_tag == "attachment_creation_failed" %] + The [% terms.bug %] was created successfully, but attachment creation + failed. + Please add your attachment by clicking the "Add an Attachment" link + below. + + [% ELSIF message_tag == "bug_group_description" %] + Access to [% terms.bugs %] in the [% product.name FILTER html %] product + + [% ELSIF message_tag == "buglist_adding_field" %] + [% title = "Adding field to search page..." %] + [% link = "Click here if the page does not redisplay automatically." %] + + [% ELSIF message_tag == "buglist_updated_named_query" %] + [% title = "Search updated" %] + Your search named <code><a + href="buglist.cgi?cmdtype=runnamed&namedcmd=[% queryname FILTER url_quote %]" + >[% queryname FILTER html %]</a></code> has been updated. + + [% ELSIF message_tag == "buglist_new_default_query" %] + OK, you now have a new default search. You may + also bookmark the result of any individual search. + + [% ELSIF message_tag == "buglist_new_named_query" %] + [% title = "Search created" %] + OK, you have a new search named <code><a + href="buglist.cgi?cmdtype=runnamed&namedcmd=[% queryname FILTER url_quote %]" + >[% queryname FILTER html %]</a></code>. + + [% ELSIF message_tag == "buglist_query_gone" %] + [% title = "Search is gone" %] + [% link = "Go back to the search page." %] + OK, the <b>[% namedcmd FILTER html %]</b> search is gone. + + [% ELSIF message_tag == "buglist_sorted_by_relevance" %] + [% terms.Bugs %] on this list are sorted by relevance, with the most + relevant [% terms.bugs %] at the top. + + [% ELSIF message_tag == "change_columns" %] + [% title = "Change columns" %] + Resubmitting your search with new columns... + Click <a href="[% redirect_url FILTER html %]">here</a> + if the page does not automatically refresh. + + [% ELSIF message_tag == "classification_created" %] + [% title = "New Classification Created" %] + The <em>[% classification.name FILTER html %]</em> classification has been created. + + [% ELSIF message_tag == "classification_deleted" %] + [% title = "Classification Deleted" %] + The <em>[% classification.name FILTER html %]</em> classification has been deleted. + + [% ELSIF message_tag == "classification_updated" %] + [% title = "Classification Updated" %] + [% IF changes.keys.size %] + Changes to the <em>[% classification.name FILTER html %]</em> classification + have been saved: + <ul> + [% IF changes.name.defined %] + <li>Name updated to '[% classification.name FILTER html %]'</li> + [% END %] + [% IF changes.description.defined %] + [% IF classification.description %] + <li>Description updated to '[% classification.description FILTER html %]'</li> + [% ELSE %] + <li>Description removed</li> + [% END %] + [% END %] + [% IF changes.sortkey.defined %] + <li>Sortkey updated to '[% classification.sortkey FILTER html %]'</li> + [% END %] + [% Hook.process('classification_updated_fields') %] + </ul> + [% ELSE %] + No changes made to <em>[% classification.name FILTER html %]</em>. + [% END %] + + [% ELSIF message_tag == "component_created" %] + [% title = "Component Created" %] + The component <em>[% comp.name FILTER html %]</em> has been created. + + [% ELSIF message_tag == "component_deleted" %] + [% title = "Component Deleted" %] + The component <em>[% comp.name FILTER html %]</em> has been deleted. + [% IF comp.bug_count %] + All [% terms.bugs %] being in this component and all references + to them have also been deleted. + [% END %] + + [% ELSIF message_tag == "component_updated" %] + [% title = "Component Updated" %] + [% IF changes.keys.size %] + Changes to the component <em>[% comp.name FILTER html %]</em> have been saved: + <ul> + [% IF changes.name.defined %] + <li>Name updated to '[% comp.name FILTER html %]'</li> + [% END %] + [% IF changes.description.defined %] + <li>Description updated to '[% comp.description FILTER html_light %]'</li> + [% END %] + [% IF changes.initialowner.defined %] + <li>Default assignee updated to '[% comp.default_assignee.login FILTER html %]'</li> + [% END %] + [% IF changes.initialqacontact.defined %] + [% IF comp.default_qa_contact.id %] + <li>Default QA contact updated to '[% comp.default_qa_contact.login FILTER html %]'</li> + [% ELSE %] + <li>Default QA contact deleted</li> + [% END %] + [% END %] + [% IF changes.cc_list.defined %] + [% IF comp.initial_cc.size %] + [% cc_list = [] %] + [% FOREACH cc_user = comp.initial_cc %] + [% cc_list.push(cc_user.login) %] + [% END %] + <li>Default CC list updated to [% cc_list.join(", ") FILTER html %]</li> + [% ELSE %] + <li>Default CC list deleted</li> + [% END %] + [% END %] + [% Hook.process('component_updated_fields') %] + </ul> + [% ELSE %] + No changes made to <em>[% comp.name FILTER html %]</em>. + [% END %] + + [% ELSIF message_tag == "custom_field_created" %] + [% title = "Custom Field Created" %] + The new custom field '[% field.name FILTER html %]' has been + successfully created. + + [% ELSIF message_tag == "custom_field_deleted" %] + [% title = "Custom Field Deleted" %] + The custom field '[% field.name FILTER html %]' has been + successfully deleted. + + [% ELSIF message_tag == "custom_field_updated" %] + [% title = "Custom Field Updated" %] + Properties of the '[% field.name FILTER html %]' field have been + successfully updated. + + [% ELSIF message_tag == "default_settings_updated" %] + [% IF changes_saved %] + Changes to default preferences have been saved. + [% ELSE %] + No changes made. + [% END %] + + [% ELSIF message_tag == "emailold_change_canceled" %] + [% title = "Cancel Request to Change Email Address" %] + The request to change the email address for your account to + [%+ new_email FILTER html %] has been canceled. + + [% ELSIF message_tag == "email_change_canceled" %] + [% title = "Cancel Request to Change Email Address" %] + The request to change the email address for the + account [%+ old_email FILTER html %] to + [%+ new_email FILTER html %] has been canceled. + + [% ELSIF message_tag == "email_change_canceled_reinstated" %] + [% title = "Cancel Request to Change Email Address" %] + The request to change the email address for the + account [%+ old_email FILTER html %] to + [%+ new_email FILTER html %] has been canceled. + Your old account settings have been reinstated. + + [% ELSIF message_tag == "extension_created" %] + An extension named [% name FILTER html %] has been created + in [% path FILTER html %]. Make sure you change "YOUR NAME" and + "YOUR EMAIL ADDRESS" in the code to your name and your email address. + + [% ELSIF message_tag == "field_value_created" %] + [% title = "New Field Value Created" %] + The value <em>[% value.name FILTER html %]</em> has been added as a + valid choice for the <em>[% field.description FILTER html %]</em> + (<em>[% field.name FILTER html %]</em>) field. + [% IF field.name == "bug_status" %] + You should now visit the <a href="editworkflow.cgi">status workflow + page</a> to include your new [% terms.bug %] status. + [% END %] + + [% ELSIF message_tag == "field_value_deleted" %] + [% title = "Field Value Deleted" %] + The value <em>[% value.name FILTER html %]</em> of the + <em>[% field.description FILTER html %]</em> + (<em>[% field.name FILTER html %]</em>) field has been deleted. + + [% ELSIF message_tag == "field_value_updated" %] + [% title = "Field Value Updated" %] + [% IF changes.keys.size %] + The <em>[% value_old FILTER html %]</em> value of the + <em>[% field.description FILTER html %]</em> + (<em>[% field.name FILTER html %]</em>) field has been changed: + <ul> + [% IF changes.value %] + <li>Field value updated to + <em>[% changes.value.1 FILTER html %]</em>. + [% IF value.is_default %] + (Note that this value is the default for this field. All + references to the default value will now point to this new value.) + [% END %] + </li> + [% END %] + [% IF changes.sortkey %] + <li>Sortkey updated to + <em>[% changes.sortkey.1 FILTER html %]</em>.</li> + [% END %] + [% IF changes.visibility_value_id %] + [% IF value.visibility_value.defined %] + <li>It only appears when + [%+ value.field.value_field.description FILTER html %] is set to + '[%+ value.visibility_value.name FILTER html %]'.</li> + [% ELSE %] + <li>It now always appears, no matter what + [%+ value.field.value_field.description FILTER html %] is set to. + </li> + [% END %] + [% END %] + </ul> + [% ELSE %] + No changes made to the field value <em>[% value_old FILTER html %]</em>. + [% END %] + + [% ELSIF message_tag == "flag_cleared" %] + Some flags didn't apply in the new product/component + and have been cleared. + + [% ELSIF message_tag == "flag_creation_failed" %] + [% title = "Flag Creation Failure" %] + An error occured while validating flags: + [%+ flag_creation_error FILTER none %] + + [% ELSIF message_tag == "get_field_desc" %] + [% field_descs.$field_name FILTER html %] + + [% ELSIF message_tag == "get_resolution" %] + [% display_value("resolution", resolution) FILTER html %] + + [% ELSIF message_tag == "get_status" %] + [% display_value("bug_status", status) FILTER html %] + + [% ELSIF message_tag == "group_created" %] + [% title = "New Group Created" %] + The group <em>[% group.name FILTER html %]</em> has been created. + + [% ELSIF message_tag == "group_deleted" %] + [% title = "Group Deleted" %] + The group <em>[% name FILTER html %]</em> has been deleted. + + [% ELSIF message_tag == "group_membership_removed" %] + [% title = "Group Membership Removed" %] + [% IF users.size %] + Explicit membership to the <em>[% group FILTER html %]</em> group removed + [% IF regexp %] for users matching '[% regexp FILTER html %]'[% END %]: + [% FOREACH user = users %] + [%+ user.login FILTER html %] + [% END %] + [% ELSE %] + No users are being affected by your action. + [% END %] + + [% ELSIF message_tag == "group_updated" %] + [% IF changes.keys.size %] + The following changes have been made to the '[% group.name FILTER html %]' + group: + <ul> + [% FOREACH field = changes.keys.sort %] + [% SWITCH field %] + [% CASE 'name' %] + <li>The name was changed to '[% changes.name.1 FILTER html %]'</li> + [% CASE 'description' %] + <li>The description was updated.</li> + [% CASE 'userregexp' %] + <li>The regular expression was updated.</li> + [% CASE 'isactive' %] + [% IF changes.isactive.1 %] + <li>The group will now be used for [% terms.bugs %].</li> + [% ELSE %] + <li>The group will no longer be used for [% terms.bugs %].</li> + [% END %] + [% CASE 'icon_url' %] + <li>The group icon URL has been updated.</li> + [% CASE 'members_add' %] + <li>The following groups are now members of this group: + [%+ changes.members_add.join(', ') FILTER html %]</li> + [% CASE 'members_remove' %] + <li>The following groups are no longer members of this group: + [%+ changes.members_remove.join(', ') FILTER html %]</li> + [% CASE 'member_of_add' %] + <li>This group is now a member of the following groups: + [%+ changes.member_of_add.join(', ') FILTER html %]</li> + [% CASE 'member_of_remove' %] + <li>This group is no longer a member of the following groups: + [%+ changes.member_of_remove.join(', ') FILTER html %]</li> + [% CASE 'bless_from_add' %] + <li>The following groups may now add users to this group: + [%+ changes.bless_from_add.join(', ') FILTER html %]</li> + [% CASE 'bless_from_remove' %] + <li>The following groups may no longer add users to this group: + [%+ changes.bless_from_remove.join(', ') FILTER html %]</li> + [% CASE 'bless_to_add' %] + <li>This group may now add users to the following groups: + [%+ changes.bless_to_add.join(', ') FILTER html %]</li> + [% CASE 'bless_to_remove' %] + <li>This group may no longer add users to the following groups: + [%+ changes.bless_to_remove.join(', ') FILTER html %]</li> + [% CASE 'visible_from_add' %] + <li>The following groups can now see users in this group: + [%+ changes.visible_from_add.join(', ') FILTER html %]</li> + [% CASE 'visible_from_remove' %] + <li>The following groups may no longer see users in this group: + [%+ changes.visible_from_remove.join(', ') FILTER html %]</li> + [% CASE 'visible_to_me_add' %] + <li>This group may now see users in the following groups: + [%+ changes.visible_to_me_add.join(', ') FILTER html %]</li> + [% CASE 'visible_to_me_remove' %] + <li>This group may no longer see users in the following groups: + [%+ changes.visible_to_me_remove.join(', ') FILTER html %]</li> + [% END %] + [% END %] + </ul> + [% ELSE %] + You didn't request any change for the '[% group.name FILTER html %]' + group. + [% END %] + + [% ELSIF message_tag == "invalid_column_name" %] + The custom sort order specified contains one or more invalid + column names: <em>[% invalid_fragments.join(', ') FILTER html %]</em>. + They have been removed from the sort list. + + [% ELSIF message_tag == "job_queue_depth" %] + [% count FILTER html %] jobs in the queue. + + [% ELSIF message_tag == "keyword_created" %] + [% title = "New Keyword Created" %] + The keyword <em>[% name FILTER html %]</em> has been created. + + [% ELSIF message_tag == "keyword_deleted" %] + [% title = "Keyword Deleted" %] + The <em>[% keyword.name FILTER html %]</em> keyword has been deleted. + <b>After you have finished editing keywords, you need to + <a href="sanitycheck.cgi?rebuildkeywordcache=1">rebuild the keyword + cache</a></b> (on a very large installation of [% terms.Bugzilla %], + this can take several minutes). + + [% ELSIF message_tag == "keyword_updated" %] + [% title = "Keyword Updated" %] + [% IF changes.keys.size %] + Changes to the <em>[% keyword.name FILTER html %]</em> keyword have + been saved: + <ul> + [% IF changes.name.defined %] + <li> + Keyword renamed to <em>[% keyword.name FILTER html %]</em>. + <b>After you have finished editing keywords, you need to + <a href="sanitycheck.cgi?rebuildkeywordcache=1">rebuild + the keyword cache</a></b> (on a very large installation + of [% terms.Bugzilla %], this can take several minutes). + </li> + [% END %] + [% IF changes.description.defined %] + <li>Description updated to <em>[% keyword.description FILTER html %]</em></li> + [% END %] + </ul> + [% ELSE %] + No changes made. + [% END %] + + [% ELSIF message_tag == "logged_out" %] + [% title = "Logged Out" %] + [% url = "index.cgi?GoAheadAndLogIn=1" %] + [% link = "Log in again." %] + <b>Your login has been forgotten</b>. + The cookie that was remembering your login is now gone. You will be + prompted for a login the next time it is required. + + [% ELSIF message_tag == "login_changed" %] + [% title = "$terms.Bugzilla Login Changed" %] + Your [% terms.Bugzilla %] login has been changed. + + [% ELSIF message_tag == "migrate_component_created" %] + Component created: [% comp.name FILTER html %] + (in [% product.name FILTER html %]) + + [% ELSIF message_tag == "migrate_creating_bugs" %] + Creating [% terms.bugs %]... + + [% ELSIF message_tag == "migrate_field_created" %] + New custom field: [% field.description FILTER html %] + ([% field.name FILTER html %]) + + [% ELSIF message_tag == "migrate_product_created" %] + Product created: [% created.name FILTER html %] + + [% ELSIF message_tag == "migrate_reading_bugs" %] + Reading [% terms.bugs %]... + + [% ELSIF message_tag == "migrate_reading_products" %] + Reading products... + + [% ELSIF message_tag == "migrate_reading_users" %] + Reading users... + + [% ELSIF message_tag == "migrate_translating_bugs" %] + Converting [% terms.bug %] values to be appropriate for + [%+ terms.Bugzilla %]... + + [% ELSIF message_tag == "migrate_user_created" %] + User created: [% created.email FILTER html %] + [% IF password %] Password: [% password FILTER html %][% END %] + + [% ELSIF message_tag == "migrate_value_created" %] + [% IF product.defined %] + [% product.name FILTER html %] + [% END %] + [%+ field_descs.${field.name} FILTER html %] value + created: [% value FILTER html %] + + [% ELSIF message_tag == "milestone_created" %] + [% title = "Milestone Created" %] + The milestone <em>[% milestone.name FILTER html %]</em> has been created. + + [% ELSIF message_tag == "milestone_deleted" %] + [% title = "Milestone Deleted" %] + The milestone <em>[% milestone.name FILTER html %]</em> has been deleted. + [% IF milestone.bug_count %] + [%+ terms.Bugs %] targetted to this milestone have been retargetted to + the default milestone <em>[% product.default_milestone FILTER html %]</em>. + [% END %] + + [% ELSIF message_tag == "milestone_updated" %] + [% title = "Milestone Updated" %] + [% IF changes.size %] + Changes to the milestone <em>[% milestone.name FILTER html %]</em> + have been saved: + <ul> + [% IF changes.value.defined %] + <li>Milestone name updated to <em>[% milestone.name FILTER html %]</em></li> + [% END %] + [% IF changes.sortkey.defined %] + <li>Sortkey updated to <em>[% milestone.sortkey FILTER html %]</em> + [% END %] + </ul> + [% ELSE %] + No changes made to milestone <em>[% milestone.name FILTER html %]</em>. + [% END %] + + [% ELSIF message_tag == "parameters_updated" %] + [% title = "Parameters Updated" %] + [% IF param_changed.size > 0 %] + [% FOREACH param = param_changed %] + Changed <em>[% param FILTER html %]</em><br> + [% IF param == 'utf8' && Param('utf8') %] + <strong>You must now re-run checksetup.pl.</strong><br> + [% END %] + [% END %] + [% ELSE %] + No changes made. + [% END %] + + [% IF shutdown_is_active == 1 %] + <hr> + [% terms.Bugzilla %] has now been shut down. To re-enable the system, + clear the <em>shutdownhtml</em> field. + [% END%] + + [% ELSIF message_tag == "password_change_canceled" %] + [% title = "Cancel Request to Change Password" %] + Your request has been canceled. + + [% ELSIF message_tag == "password_change_request" %] + [% title = "Request to Change Password" %] + A token for changing your password has been emailed to you. + Follow the instructions in that email to change your password. + + [% ELSIF message_tag == "password_changed" %] + [% title = "Password Changed" %] + Your password has been changed. + + [% ELSIF message_tag == "flag_type_created" %] + [% title = BLOCK %]Flag Type '[% name FILTER html %]' Created[% END %] + The flag type <em>[% name FILTER html %]</em> has been created. + + [% ELSIF message_tag == "flag_type_changes_saved" %] + [% title = BLOCK %]Flag Type '[% name FILTER html %]' Changes Saved[% END %] + Your changes to the flag type <em>[% name FILTER html %]</em> + have been saved. + + [% ELSIF message_tag == "flag_type_deleted" %] + [% title = BLOCK %]Flag Type '[% name FILTER html %]' Deleted[% END %] + The flag type <em>[% name FILTER html %]</em> has been deleted. + + [% ELSIF message_tag == "flag_type_deactivated" %] + [% title = BLOCK %]Flag Type '[% flag_type.name FILTER html %]' Deactivated[% END %] + The flag type <em>[% flag_type.name FILTER html %]</em> has been deactivated. + + [% ELSIF message_tag == "install_admin_get_email" %] + Enter the e-mail address of the administrator: + + [% ELSIF message_tag == "install_admin_get_name" %] + Enter the real name of the administrator: + + [% ELSIF message_tag == "install_admin_get_password" %] + Enter a password for the administrator account: + + [% ELSIF message_tag == "install_admin_created" %] + [% user.login FILTER html %] is now set up as an administrator. + + [% ELSIF message_tag == "install_admin_setup" %] + Looks like we don't have an administrator set up yet. + Either this is your first time using [% terms.Bugzilla %], or your + administrator's privileges might have accidentally been deleted. + + [% ELSIF message_tag == "install_column_add" %] + Adding new column '[% column FILTER html %]' to the '[% table FILTER html %]' table... + + [% ELSIF message_tag == "install_column_drop" %] + Deleting the '[% column FILTER html %]' column from the '[% table FILTER html %]' table... + + [% ELSIF message_tag == "install_column_rename" %] + Renaming column '[% old FILTER html %]' to '[% new FILTER html %]'... + + [% ELSIF message_tag == "install_confirm_password" %] + Please retype the password to verify: + + [% ELSIF message_tag == "install_default_classification" %] + Creating default classification '[% name FILTER html %]'... + + [% ELSIF message_tag == "install_default_product" %] + Creating initial dummy product '[% name FILTER html %]'... + + [% ELSIF message_tag == "install_file_perms_fix" %] + Fixing file permissions... + + [% ELSIF message_tag == "install_fk_add" %] + Adding foreign key: [% table FILTER html %].[% column FILTER html %] -> [% fk.TABLE FILTER html %].[% fk.COLUMN FILTER html %]... + + [% ELSIF message_tag == "install_fk_drop" %] + Dropping foreign key: [% table FILTER html %].[% column FILTER html %] -> [% fk.TABLE FILTER html %].[% fk.COLUMN FILTER html %]... + + [% ELSIF message_tag == "install_fk_invalid" %] + ERROR: There are invalid values for the [% column FILTER html %] column in the [% table FILTER html %] + table. (These values do not exist in the [% foreign_table FILTER html %] table, in the + [% foreign_column FILTER html %] column.) + + Before continuing with checksetup, you will need to fix these values, + either by deleting these rows from the database, or changing the values + of [% column FILTER html %] in [% table FILTER html %] to point to valid values in [% foreign_table FILTER html %].[% foreign_column FILTER html %]. + + The bad values from the [% table FILTER html %].[% column FILTER html %] column are: + [%+ values.join(', ') FILTER html %] + + [% ELSIF message_tag == "install_fk_invalid_fixed" %] + WARNING: There were invalid values in [% table FILTER html %].[% column FILTER html %] + that have been [% IF action == 'delete' %]deleted[% ELSE %]set to NULL[% END %]: + [%+ values.join(', ') FILTER html %] + + [% ELSIF message_tag == "install_group_create" %] + Creating group [% name FILTER html %]... + + [% ELSIF message_tag == "install_setting_new" %] + Adding a new user setting called '[% name FILTER html %]' + + [% ELSIF message_tag == "install_table_drop" %] + Dropping the '[% name FILTER html %]' table... + + [% ELSIF message_tag == "install_table_rename" %] + Renaming the '[% old FILTER html %]' table to '[% new FILTER html %]'... + + [% ELSIF message_tag == "install_urlbase_default" %] + Now that you have installed [% terms.Bugzilla %], you should visit the + 'Parameters' page (linked in the footer of the Administrator + account) to ensure it is set up as you wish - this includes + setting the 'urlbase' option to the correct URL. + + [% ELSIF message_tag == "install_reset_password" %] + Enter a new password for [% user.login FILTER html %]: + + [% ELSIF message_tag == "install_reset_password_done" %] + New password set. + + [% ELSIF message_tag == "install_webservergroup_empty" %] + **************************************************************************** + WARNING! You have not entered a value for the "webservergroup" parameter + in localconfig. This means that certain files and directories which need + to be editable by both you and the web server must be world writable, and + other files (including the localconfig file which stores your database + password) must be world readable. This means that _anyone_ who can obtain + local access to this machine can do whatever they want to your + [%+ terms.Bugzilla %] installation, and is probably also able to run + arbitrary Perl code as the user that the web server runs as. + + You really, really, really need to change this setting. + **************************************************************************** + + [% ELSIF message_tag == "install_webservergroup_not_in" %] + Warning: you have entered a value for the "webservergroup" parameter in + localconfig, but you are not either a) running this script as [% constants.ROOT_USER FILTER html %]; + or b) a member of this group. This can cause permissions problems and + decreased security. If you experience problems running [% terms.Bugzilla %] + scripts, log in as [% constants.ROOT_USER FILTER html %] and re-run this script, become a + member of the group, or remove the value of the "webservergroup" parameter. + + [% ELSIF message_tag == "install_webservergroup_windows" %] + Warning: You have set webservergroup in [% constants.bz_locations.localconfig FILTER html %] + Please understand that this does not bring you any security when + running under Windows. + Verify that the file permissions in your [% terms.Bugzilla %] directory are + suitable for your system. Avoid unnecessary write access. + + [% ELSIF message_tag == "product_created" %] + [% title = "Product Created" %] + The product <em>[% product.name FILTER html %]</em> has been created. You will need to + <a href="editcomponents.cgi?action=add&product=[% product.name FILTER url_quote %]"> + add at least one component</a> before anyone can enter [% terms.bugs %] against this product. + + [% ELSIF message_tag == "product_deleted" %] + [% title = "Product Deleted" %] + The product <em>[% product.name FILTER html %]</em> and all its versions, + components, milestones and group controls have been deleted. + [% IF product.bug_count %] + All [% terms.bugs %] being in this product and all references + to them have also been deleted. + [% END %] + + [% ELSIF message_tag == "product_invalid" %] + [% title = "$terms.Bugzilla Component Descriptions" %] + The product <em>[% product FILTER html %]</em> does not exist + or you don't have access to it. The following is a list of the + products you can choose from. + + [% ELSIF message_tag == "remaining_time_zeroed" %] + The [% field_descs.remaining_time FILTER html %] field has been + set to zero automatically as part of closing this [% terms.bug %] + or moving it from one closed state to another. + + [% ELSIF message_tag == "sanitycheck" %] + [%# We use this way to call sanitycheck-specific messages so that + # we can still use get_text(). %] + [% PROCESS "admin/sanitycheck/messages.html.tmpl" %] + + [% ELSIF message_tag == "series_all_open" %] + All Open + + [% ELSIF message_tag == "series_all_closed" %] + All Closed + + [% ELSIF message_tag == "series_subcategory" %] + -All- + + [% ELSIF message_tag == "sudo_started" %] + [% title = "Sudo session started" %] + The sudo session has been started. For the next 6 hours, or until you + end the session, everything you do you do as the user you are + impersonating ([% target FILTER html %]). + + [% ELSIF message_tag == "sudo_ended" %] + [% title = "Sudo session complete" %] + The sudo session has been ended. From this point forward, everything you + do you do as yourself. + + [% ELSIF message_tag == "series_created" %] + [% title = "Series Created" %] + The series <em>[% series.category FILTER html %] / + [%+ series.subcategory FILTER html %] / + [%+ series.name FILTER html %]</em> + has been created. Note that you may need to wait up to + [%+ series.frequency * 2 %] days before there will be enough data for a + chart of this series to be produced. + + [% ELSIF message_tag == "series_deleted" %] + [% title = "Series Deleted" %] + The series <em>[% series.category FILTER html %] / + [%+ series.subcategory FILTER html %] / + [%+ series.name FILTER html %]</em> + has been deleted. + + [% ELSIF message_tag == "shutdown" %] + [% title = "$terms.Bugzilla is Down" %] + [% Param("shutdownhtml") %] + [% IF userid %] + <p>For security reasons, you have been logged out automatically. + The cookie that was remembering your login is now gone. + [% END %] + + [% ELSIF message_tag == "term" %] + [% terms.$term FILTER html %] + + [% ELSIF message_tag == "unexpected_flag_types" %] + Some flags could not be set. Please check your changes. + + [% ELSIF message_tag == "user_match_failed" %] + You entered a username that did not match any known + [% terms.Bugzilla %] users, so we have instead left + the [% match_field FILTER html %] field blank. + + [% ELSIF message_tag == "user_match_multiple" %] + You entered a username that matched more than one + user, so we have instead left the [% match_field FILTER html %] + field blank. + + [% ELSIF message_tag == "version_created" %] + [% title = "Version Created" %] + The version <em>[% version.name FILTER html %]</em> of product + <em>[% product.name FILTER html %]</em> has been created. + + [% ELSIF message_tag == "version_deleted" %] + [% title = "Version Deleted" %] + The version <em>[% version.name FILTER html %]</em> of product + <em>[% product.name FILTER html %]</em> has been deleted. + + [% ELSIF message_tag == "version_updated" %] + [% title = "Version Updated" %] + [% IF changes.size %] + [% IF changes.value.defined %] + Version renamed to <em>[% version.name FILTER html %]</em>. + [% END %] + [% ELSE %] + No changes made to version <em>[% version.name FILTER html %]</em>. + [% END %] + + [% ELSIF message_tag == "workflow_updated" %] + The workflow has been updated. + [% END %] +[% END %] + +[% IF !message %] + [% message = Hook.process('messages') %] +[% END %] + +[%# Give sensible error if the message function is used incorrectly. #%] +[% IF !message %] + [% message = BLOCK %] + You are using [% terms.Bugzilla %]'s messaging functions incorrectly. You + passed in the string '[% message_tag %]'. The correct use is to pass + in a tag, and define that tag in the file messages.html.tmpl.<br> + <br> + If you are a [% terms.Bugzilla %] end-user seeing this message, please + save this page and send it to [% Param('maintainer') %]. + [% END %] +[% END %] diff --git a/template/en/default/global/per-bug-queries.html.tmpl b/template/en/default/global/per-bug-queries.html.tmpl new file mode 100644 index 0000000..3c62e35 --- /dev/null +++ b/template/en/default/global/per-bug-queries.html.tmpl @@ -0,0 +1,100 @@ +[%# 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): Frédéric Buclin <LpSolit@gmail.com> + #%] + +[% IF user.id && user.settings.per_bug_queries.value == "on" %] + <li id="links-special"> + <script type="text/javascript"> + <!-- + function update_text() { + // 'lob' means list_of_bugs. + var lob_action = document.getElementById('lob_action'); + var action = lob_action.options[lob_action.selectedIndex].value; + var text = document.getElementById('lob_direction'); + var new_query_text = document.getElementById('lob_new_query_text'); + + if (action == "add") { + text.innerHTML = "to"; + new_query_text.style.display = 'inline'; + } + else { + text.innerHTML = "from"; + new_query_text.style.display = 'none'; + } + } + + function manage_old_lists() { + var old_lists = document.getElementById('lob_oldqueryname'); + // If there is no saved searches available, returns. + if (!old_lists) return; + + var new_query = document.getElementById('lob_newqueryname').value; + + if (new_query != "") { + old_lists.disabled = true; + } + else { + old_lists.disabled = false; + } + } + //--> + </script> + + [%# Get existing lists of bugs for this user %] + [% lists_of_bugs = [] %] + [% FOREACH q = user.queries %] + [% NEXT UNLESS q.type == constants.LIST_OF_BUGS %] + [% lists_of_bugs.push(q.name) %] + [% END %] + <div class="label"></div> + <ul class="links"><li class="form"> + <form id="list_of_bugs" action="buglist.cgi" method="get"> + <input type="hidden" name="cmdtype" value="doit"> + <input type="hidden" name="remtype" value="asnamed"> + <input type="hidden" name="list_of_bugs" value="1"> + <select id="lob_action" name="action" onchange="update_text();"> + <option value="add">Add</option> + [% IF lists_of_bugs.size %] + <option value="remove">Remove</option> + [% END %] + </select> + + [% IF Param('docs_urlbase') %] + <a href="[% docs_urlbase FILTER html %]query.html#individual-buglists">the named tag</a> + [% ELSE %] + the named tag + [% END %] + + [% IF lists_of_bugs.size %] + <select id="lob_oldqueryname" name="oldqueryname"> + [% FOREACH query = lists_of_bugs %] + <option value="[% query FILTER html %]">[% query FILTER html %]</option> + [% END %] + </select> + [% END %] + <span id="lob_new_query_text"> + [% " or create and add the tag" IF lists_of_bugs.size %] + <input class="txt" type="text" id="lob_newqueryname" + size="20" maxlength="64" name="newqueryname" + onkeyup="manage_old_lists();"> + </span> + <span id="lob_direction">to</span> + [%+ terms.bugs %] + <input type="text" name="bug_ids" size="12" maxlength="80" + [%- " value=\"$bugids\"" IF bugids %]> + <input type="submit" value="Commit" id="commit_list_of_bugs"> + </form> + </li></ul> + </li> +[% END %] diff --git a/template/en/default/global/select-menu.html.tmpl b/template/en/default/global/select-menu.html.tmpl new file mode 100644 index 0000000..f8d4d68 --- /dev/null +++ b/template/en/default/global/select-menu.html.tmpl @@ -0,0 +1,64 @@ +[%# 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): Myk Melez <myk@mozilla.org> + #%] + +[%# INTERFACE: + # name: string; the name of the menu. + # + # multiple: boolean; whether or not the menu is multi-select + # + # size: integer; the number of items to display at once + # + # options: array or hash; the items with which to populate the array. + # If a hash is passed, the hash keys become the names displayed + # to the user while the hash values become the value of the item. + # + # default: string; the item selected in the menu by default. + # + # onchange: code; JavaScript to be run when the user changes the value + # selected in the menu. + #%] + +[%# Get the scalar representation of the options reference, + # which looks like "ARRAY(0xA352BA3F)" or "HASH(0xA352BA3F)", + # so we can figure out whether it is a reference to an array + # or a hash. + #%] +[% options_type = BLOCK %][% options %][% END %] + +<select name="[% name FILTER html %]" + [% IF onchange %]onchange="[% onchange FILTER html %]"[% END %] + [% IF multiple %] multiple [% END %] + [% IF size %] size="[% size %]" [% END %]> + [% IF options_type.search("ARRAY") %] + [% FOREACH value = options %] + <option value="[% value FILTER html %]" + [% " selected" IF value == default %]> + [% value FILTER html %] + </option> + [% END %] + [% ELSIF options_type.search("HASH") %] + [% FOREACH option = options %] + <option value="[% option.value FILTER html %]" + [% " selected" IF option.value == default %]> + [% option.key FILTER html %] + </option> + [% END %] + [% END %] +</select> diff --git a/template/en/default/global/setting-descs.none.tmpl b/template/en/default/global/setting-descs.none.tmpl new file mode 100644 index 0000000..661334c --- /dev/null +++ b/template/en/default/global/setting-descs.none.tmpl @@ -0,0 +1,51 @@ +[%# 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): Shane H. W. Travis <travis@sedsystems.ca> + # + #%] + +[%# Remember to PROCESS rather than INCLUDE this template. %] + +[% PROCESS global/variables.none.tmpl %] + +[% setting_descs = { + "comment_sort_order" => "When viewing $terms.abug, show comments in this order", + "csv_colsepchar" => "Field separator character for CSV files", + "display_quips" => "Show a quip at the top of each $terms.bug list", + "zoom_textareas" => "Zoom textareas large when in use (requires JavaScript)", + "newest_to_oldest" => "Newest to Oldest", + "newest_to_oldest_desc_first" => "Newest to Oldest, but keep Description at the top", + "off" => "Off", + "oldest_to_newest" => "Oldest to Newest", + "on" => "On", + "per_bug_queries" => "Enable tags for $terms.bugs", + "post_bug_submit_action" => "After changing $terms.abug", + "next_bug" => "Show next $terms.bug in my list", + "same_bug" => "Show the updated $terms.bug", + "standard" => "Classic", + "skin" => "$terms.Bugzilla's general appearance (skin)", + "nothing" => "Do Nothing", + "state_addselfcc" => "Automatically add me to the CC list of $terms.bugs I change", + "always" => "Always", + "never" => "Never", + "cc_unless_role" => "Only if I have no role on them", + "lang" => "Language used in email", + "quote_replies" => "Quote the associated comment when you click on its reply link", + "quoted_reply" => "Quote the full comment", + "simple_reply" => "Reference the comment number only", + "timezone" => "Timezone used to display dates and times", + "local" => "Same as the server", + } +%] + +[% Hook.process('settings') %] diff --git a/template/en/default/global/site-navigation.html.tmpl b/template/en/default/global/site-navigation.html.tmpl new file mode 100644 index 0000000..df60b76 --- /dev/null +++ b/template/en/default/global/site-navigation.html.tmpl @@ -0,0 +1,101 @@ +[%# 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): Toms Baugis <toms.baugis@tietoenator.com> + # Gervase Markham <gerv@gerv.net> + #%] + +[%# INTERFACE: + # bug.bug_id: integer. Number of current bug (for navigation purposes) + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% USE Bugzilla %] +[% cgi = Bugzilla.cgi %] + +[% IF NOT (cgi.user_agent("MSIE [1-6]") OR cgi.user_agent("Mozilla/4")) %] + <link rel="Top" href="[% urlbase FILTER html %]"> + + [%# *** Attachment *** %] + [% IF attachment && attachment.bug_id %] + <link rel="Up" href="show_bug.cgi?id=[% attachment.bug_id FILTER none %]"> + [% END %] + + + [%# *** Dependencies, Votes, Activity, Print-version *** %] + [% IF bug %] + <link rel="Show" title="Dependency Tree" + href="showdependencytree.cgi?id=[% bug.bug_id %]&hide_resolved=1"> + [% IF Param('webdotbase') %] + <link rel="Show" title="Dependency Graph" + href="showdependencygraph.cgi?id=[% bug.bug_id %]"> + [% END %] + + [% IF bug.use_votes %] + <link rel="Show" title="Votes ([% bug.votes %])" + href="votes.cgi?action=show_bug&bug_id=[% bug.bug_id %]"> + [% END %] + + <link rel="Show" title="[% terms.Bug %] Activity" + href="show_activity.cgi?id=[% bug.bug_id %]"> + <link rel="Show" title="Printer-Friendly Version" + href="show_bug.cgi?format=multiple&id=[% bug.bug_id %]"> + [% END %] + + + [%# *** Saved Searches *** %] + [% IF user.showmybugslink %] + [% user_login = user.login FILTER url_quote %] + <link rel="Saved Searches" title="My [% terms.Bugs %]" + href="[% Param('mybugstemplate').replace('%userid%', user_login) %]"> + [% END %] + + [% FOREACH q = user.queries %] + <link rel="Saved Searches" + title="[% q.name FILTER html %]" + href="buglist.cgi?cmdtype=runnamed&namedcmd=[% q.name FILTER url_quote %]"> + [% END %] + + [% FOREACH q = user.queries_subscribed %] + <link rel="Saved Search" + title="[% q.name FILTER html %] ([% q.user.login FILTER html %])" + href="buglist.cgi?cmdtype=dorem&remaction=run&namedcmd= + [% q.name FILTER url_quote %]&sharer_id= + [% q.user.id FILTER url_quote %]"> + [% END %] + + [%# *** Bugzilla Administration Tools *** %] + [% IF user.login %] + [% '<link rel="Administration" title="Parameters" + href="editparams.cgi">' IF user.in_group('tweakparams') %] + [% '<link rel="Administration" title="Users" + href="editusers.cgi">' IF user.in_group('editusers') %] + [% '<link rel="Administration" title="Products" href="editproducts.cgi">' + IF user.in_group('editcomponents') || user.get_products_by_permission("editcomponents").size %] + [% '<link rel="Administration" title="Flag Types" + href="editflagtypes.cgi">' IF user.in_group('editcomponents') %] + [% '<link rel="Administration" title="Groups" + href="editgroups.cgi">' IF user.in_group('creategroups') %] + [% '<link rel="Administration" title="Keywords" + href="editkeywords.cgi">' IF user.in_group('editkeywords') %] + [% '<link rel="Administration" title="Whining" + href="editwhines.cgi">' IF user.in_group('bz_canusewhines') %] + [% '<link rel="Administration" title="Sanity Check" + href="sanitycheck.cgi">' IF user.in_group('editcomponents') %] + [% END %] +[% END %] diff --git a/template/en/default/global/tabs.html.tmpl b/template/en/default/global/tabs.html.tmpl new file mode 100644 index 0000000..85556c4 --- /dev/null +++ b/template/en/default/global/tabs.html.tmpl @@ -0,0 +1,56 @@ +[%# 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> + # Myk Melez <myk@mozilla.org> + # Marc Schumann <wurblzap@gmail.com> + #%] + +[%# INTERFACE: + # tabs: List of hashes. Must have at least one item. Each hash has: + # name: string. Name of the tab. + # link: string. relative URL to the tab's resource on this installation. + # label: string. text displayed in the tab. + # current_tab_name: string. name of the currently selected tab + #%] + +<div class="tabbed"> + <table class="tabs" cellspacing="0" cellpadding="10" border="0" width="100%"> + <tr> + <td class="spacer"> </td> + + [% FOREACH tab = tabs %] + [% IF tab.name == current_tab_name %] + <td id="tab_[% tab.name FILTER html %]" class="selected"> + [% tab.label FILTER html %]</td> + [% ELSE %] + <td id="tab_[% tab.name FILTER html %]" class="clickable_area" + onClick="document.location='[% tab.link FILTER html %]'"> + <a href="[% tab.link FILTER html %]">[% tab.label FILTER html %]</a> + </td> + [% END %] + [% END %] + + <td class="spacer"> </td> + </tr> + </table> + + <div class="tabbody"> + [% content %] + </div> + +</div> diff --git a/template/en/default/global/textarea.html.tmpl b/template/en/default/global/textarea.html.tmpl new file mode 100644 index 0000000..d20422e --- /dev/null +++ b/template/en/default/global/textarea.html.tmpl @@ -0,0 +1,50 @@ +[%# 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): Marc Schumann <wurblzap@gmail.com> + #%] + +[%# INTERFACE: + # + # id: (optional) The "id"-attribute of the textarea. + # name: (optional) The "name"-attribute of the textarea. + # accesskey: (optional) The "accesskey"-attribute of the textarea. + # style: (optional) The "style"-attribute of the textarea. + # classes: (optional) The "class"-attribute of the textarea. + # wrap: (deprecated; optional) The "wrap"-attribute of the textarea. + # minrows: (required) Number of rows the textarea shall have initially + # and when not having focus. + # maxrows: (optional) Number of rows the textarea shall have if + # maximized (which happens on getting focus). If not given, + # the textarea doesn't maximize when getting focus. + # defaultrows: (optional) Number of rows the textarea shall have if + # the zoom_textareas user preference if off. If not given, + # minrows will be used. + # cols: (required) Number of columns the textarea shall have. + # defaultcontent: (optional) Default content for the textarea. + #%] + +<textarea [% IF name %]name="[% name FILTER html %]"[% END %] + [% IF id %] id="[% id FILTER html %]"[% END %] + [% IF accesskey %] accesskey="[% accesskey FILTER html %]"[% END %] + [% IF style %] style="[% style FILTER html %]"[% END %] + [% IF classes %] class="[% classes FILTER html %]"[% END %] + [% IF wrap %] wrap="[% wrap FILTER html %]"[% END %] + [% IF defaultrows && user.settings.zoom_textareas.value == 'off' %] + rows="[% defaultrows FILTER html %]" + [% ELSE %] + rows="[% minrows FILTER html %]" + [% END %] + cols="[% cols FILTER html %]" + [% IF maxrows && user.settings.zoom_textareas.value == 'on' %] + onFocus="this.rows=[% maxrows FILTER html %]" + [% END %]>[% defaultcontent FILTER html %]</textarea> 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 0000000..1f12249 --- /dev/null +++ b/template/en/default/global/useful-links.html.tmpl @@ -0,0 +1,81 @@ +[%# 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> + # Svetlana Harisova <light@rathedg.com> + # Marc Schumann <wurblzap@gmail.com> + #%] + +[%# Migration note: this whole file corresponds to the old %commandmenu% + substitution param in 'footerhtml' %] + +[% PROCESS global/variables.none.tmpl %] + +<ul id="useful-links"> + <li id="links-actions"> + [% PROCESS "global/common-links.html.tmpl" qs_suffix = "_bottom" %] + </li> + + [%# Saved searches %] + + [% IF user.showmybugslink OR user.queries.size + OR user.queries_subscribed.size + %] + [% print_pipe = 0 %] + <li id="links-saved"> + <ul class="links"> + [% IF user.showmybugslink %] + [% filtered_username = user.login FILTER url_quote %] + <li><a href="[% Param('mybugstemplate').replace('%userid%', filtered_username) %]">My [% terms.Bugs %]</a></li> + [% print_pipe = 1 %] + [% END %] + + [% FOREACH q = user.queries %] + [% IF q.link_in_footer %] + <li>[% '<span class="separator">| </span>' IF print_pipe %] + <a href="buglist.cgi?cmdtype=runnamed&namedcmd=[% q.name FILTER url_quote %]">[% q.name FILTER html %]</a></li> + [% print_pipe = 1 %] + [% END %] + [% END %] + [% new_line = print_pipe %] + [% print_pipe = 0 %] + [% FOREACH q = user.queries_subscribed %] + [% IF new_line %] + <br> + [% new_line = 0 %] + [% END %] + <li> + [% '<span class="separator">| </span>' IF print_pipe %] + <a href="buglist.cgi?cmdtype=dorem&remaction=run&namedcmd= + [% q.name FILTER url_quote %]&sharer_id= + [% q.user.id FILTER url_quote %]" + class="shared" + title="Shared by [% q.user.identity FILTER html %]" + >[% q.name FILTER html FILTER no_break %]</a></li> + [% print_pipe = 1 %] + [% END %] + </ul> + </li> + [% END %] + + [%# Individual bugs addition %] + + [% PROCESS "global/per-bug-queries.html.tmpl" %] + + [%# Sections of links to more things users can do on this installation. %] + [% Hook.process("end") %] +</ul> diff --git a/template/en/default/global/user-error.html.tmpl b/template/en/default/global/user-error.html.tmpl new file mode 100644 index 0000000..4698c94 --- /dev/null +++ b/template/en/default/global/user-error.html.tmpl @@ -0,0 +1,1806 @@ +[%# 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> + # Frédéric Buclin <LpSolit@gmail.com> + # Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[%# INTERFACE: + # header_done: boolean. True if the Bugzilla header has already been printed. + # error: string. The tag of the error, or the error message to be displayed + # (deprecated). May contain HTML if it's an error message. + #%] + +[%# This is a list of all the possible user errors. Please keep them in + # alphabetical order by error tag, and leave a blank line between errors. + # + # Note that you must explicitly filter every single template variable + # in this file; if you do not wish to change it, use the "none" filter. + # + # Extension- or custom-specific error handling can be easily added + # via hooks: just place additional code into + # template/en/hook/global/user-error-errors.html.tmpl + # Note: be aware of uniqueness of error string parameter value, since + # nobody can guarantee the hook files processing order in the future. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% DEFAULT title = "Error" %] + +[% error_message = BLOCK %] + [% IF error == "account_creation_disabled" %] + [% title = "Account Creation Disabled" %] + User account creation has been disabled. + <hr> + New accounts must be created by an administrator. The + maintainer is [% Param("maintainer") %]. + + [% ELSIF error == "account_creation_restricted" %] + [% title = "Account Creation Restricted" %] + User account creation has been restricted. + <hr> + Contact your administrator or the maintainer + ([% Param("maintainer") %]) for information about + creating an account. + + [% ELSIF error == "account_disabled" %] + [% title = "Account Disabled" %] + [% disabled_reason FILTER none %] + <hr> + If you believe your account should be restored, please + send email to [% Param("maintainer") %] explaining why. + + [% ELSIF error == "account_exists" %] + [% title = "Account Already Exists" %] + There is already an account with + [% IF email %] + the login name [% email FILTER html %]. + [% ELSE %] + that login name. + [% END %] + + [% ELSIF error == "account_locked" %] + [% title = "Account Locked" %] + Your IP ([% ip_addr FILTER html %]) has been locked out of this + account until [% unlock_at FILTER time %], as you have + exceeded the maximum number of login attempts. + + [% ELSIF error == "alias_has_comma_or_space" %] + [% title = "Invalid Characters In Alias" %] + The alias you entered, <em>[% alias FILTER html %]</em>, + contains one or more commas or spaces. Aliases cannot contain + commas or spaces because those characters are used to separate + aliases from each other in lists. Please choose an alias + that does not contain commas and spaces. + + [% ELSIF error == "alias_in_use" %] + [% title = "Alias In Use" %] + [% terms.Bug %] [%+ bug_id FILTER bug_link(bug_id) FILTER none %] + has already taken the alias <em>[% alias FILTER html %]</em>. + Please choose another one. + + [% ELSIF error == "alias_is_numeric" %] + [% title = "Alias Is Numeric" %] + You tried to give this [% terms.bug %] the alias <em>[% alias FILTER html %]</em>, + but aliases cannot be merely numbers, since they could + then be confused with [% terms.bug %] IDs. Please choose an + alias containing at least one letter. + + [% ELSIF error == "alias_too_long" %] + [% title = "Alias Too Long" %] + [% terms.Bug %] aliases cannot be longer than 20 characters. + Please choose a shorter alias. + + [% ELSIF error == "auth_cant_create_account" %] + [% title = "Can't create accounts" %] + This site is using an authentication scheme which does not permit + account creation. Please contact an administrator to get a new account + created. + + [% ELSIF error == "auth_failure" %] + [% title = "Authorization Required" %] + [% admindocslinks = {'groups.html' => 'Group Security'} %] + Sorry, + [% IF group %] + you aren't a member of the '[% group FILTER html %]' group, + [% END %] + + [% IF reason %] + [% IF group %] and [% END %] + [% IF reason == "cant_bless" %] + you don't have permissions to add or remove people from a group, + [% ELSIF reason == "not_visible" %] + there are visibility restrictions on certain user groups, + [% END %] + [% END %] + + [% IF group || reason %] and so [% END %] you are not authorized to + [% IF action == "access" %] + access + [% ELSIF action == "add" %] + add new + [% ELSIF action == "begin" %] + begin + [% ELSIF action == "modify" %] + modify + [% ELSIF action == "delete" %] + delete + [% ELSIF action == "edit" %] + add, modify or delete + [% ELSIF action == "move" %] + move + [% ELSIF action == "run" %] + run + [% ELSIF action == "schedule" %] + schedule + [% ELSIF action == "use" %] + use + [% ELSIF action == "approve" %] + approve + [% END %] + + [% IF object == "administrative_pages" %] + administrative pages + [% ELSIF object == "attachment" %] + [% IF attach_id %] + attachment #[% attach_id FILTER html %] + [% ELSE %] + this attachment + [% END %] + [% ELSIF object == "bugs" %] + [%+ terms.bugs %] + [% ELSIF object == "charts" %] + the "New Charts" feature + [% ELSIF object == "classifications" %] + classifications + [% ELSIF object == "components" %] + components + [% ELSIF object == "custom_fields" %] + custom fields + [% ELSIF object == "field_values" %] + field values + [% ELSIF object == "flagtypes" %] + flag types + [% ELSIF object == "group_access" %] + group access + [% ELSIF object == "groups" %] + groups + [% ELSIF object == "keywords" %] + keywords + [% ELSIF object == "milestones" %] + milestones + [% ELSIF object == "multiple_bugs" %] + multiple [% terms.bugs %] at once + [% ELSIF object == "parameters" %] + parameters + [% ELSIF object == "products" %] + products + [% ELSIF object == "quips" %] + quips + [% ELSIF object == "reports" %] + whine reports + [% ELSIF object == "sanity_check" %] + a sanity check + [% ELSIF object == "settings" %] + settings + [% ELSIF object == "sudo_session" %] + a sudo session + [% ELSIF object == "timetracking_summaries" %] + time-tracking summary reports + [% ELSIF object == "user" %] + the user [% IF userid %] with ID '[% userid FILTER html %]' + [% ELSE %]you specified [% END %] + [% ELSIF object == "users" %] + users + [% ELSIF object == "versions" %] + versions + [% ELSIF object == "workflow" %] + the workflow + [% END %]. + + [% Hook.process("auth_failure") %] + + [% ELSIF error == "attachment_deletion_disabled" %] + [% title = "Attachment Deletion Disabled" %] + Attachment deletion is disabled on this installation. + + [% ELSIF error == "attachment_illegal_url" %] + [% title = "Illegal Attachment URL" %] + <em>[% url FILTER html %]</em> is not a legal URL for attachments. + It must start either with http://, https:// or ftp://. + + [% ELSIF error == "attachment_removed" %] + [% title = "Attachment Removed" %] + The attachment you are attempting to access has been removed. + + [% ELSIF error == "bug_access_denied" %] + [% title = "Access Denied" %] + [% admindocslinks = {'groups.html' => 'Group Security'} %] + You are not authorized to access [% terms.bug %] #[% bug_id FILTER html %]. + + [% ELSIF error == "bug_access_query" %] + [% title = "Access Denied" %] + [% docslinks = {'myaccount.html' => 'Creating an account'} %] + You are not authorized to access [% terms.bug %] #[% bug_id FILTER html %]. + To see this [% terms.bug %], you must + first <a href="show_bug.cgi?id= + [% bug_id FILTER url_quote %]&GoAheadAndLogIn=1">log + in to an account</a> with the appropriate permissions. + + [% ELSIF error == "bug_url_invalid" %] + [% title = "Invalid $terms.Bug URL" %] + <code>[% url FILTER html %]</code> is not a valid URL to [% terms.abug %]. + [% IF reason == 'http' %] + URLs must start with "http" or "https". + [% ELSIF reason == 'show_bug' %] + [%+ terms.Bug %] URLs should point to <code>show_bug.cgi</code> + in a [% terms.Bugzilla %] installation. + [% ELSIF reason == 'id' %] + There is no valid [% terms.bug %] id in that URL. + [% END %] + + [% ELSIF error == "bug_url_too_long" %] + [% title = "Invalid $terms.Bug URL" %] + [% terms.Bug %] URLs can not be longer than + [%+ constants.MAX_BUG_URL_LENGTH FILTER none %] characters long. + <code>[% url FILTER html %]</code> is too long. + + [% ELSIF error == "buglist_parameters_required" %] + [% title = "Parameters Required" %] + [% docslinks = {'query.html' => "Searching for $terms.bugs", + 'query.html#list' => "$terms.Bug lists"} %] + You may not search, or create saved searches, without any search terms. + + [% ELSIF error == "chart_too_large" %] + [% title = "Chart Too Large" %] + Sorry, but 2000 x 2000 is the maximum size for a chart. + + [% ELSIF error == "comment_id_invalid" %] + [% id FILTER html %] is not a valid comment id. + + [% ELSIF error == "comment_invalid_isprivate" %] + You tried to modify the privacy of comment id [% id FILTER html %], + but that is not a valid comment on this [% terms.bug %]. + + [% ELSIF error == "comment_is_private" %] + Comment id [% id FILTER html %] is private. + + [% ELSIF error == "comment_required" %] + [% title = "Comment Required" %] + You have to specify a + [% IF old && new %] + <b>comment</b> when changing the status of [% terms.abug %] from + [%+ old.name FILTER html %] to [% new.name FILTER html %]. + [% ELSIF new %] + description for this [% terms.bug %]. + [% ELSE %] + <b>comment</b> on this change. + [% END %] + + [% ELSIF error == "comment_too_long" %] + [% title = "Comment Too Long" %] + Comments cannot be longer than + [%+ constants.MAX_COMMENT_LENGTH FILTER html %] characters. + + [% ELSIF error == "auth_classification_not_enabled" %] + [% title = "Classification Not Enabled" %] + Sorry, classification is not enabled. + + [% ELSIF error == "classification_name_too_long" %] + [% title = "Classification Name Too Long" %] + The name of a classification is limited to [% constants.MAX_CLASSIFICATION_SIZE FILTER html %] + characters. '[% name FILTER html %]' is too long ([% name.length %] characters). + +[% ELSIF error == "classification_not_specified" %] + [% title = "You Must Supply A Classification Name" %] + You must enter a classification name. + + [% ELSIF error == "classification_already_exists" %] + [% title = "Classification Already Exists" %] + A classification with the name '[% name FILTER html %]' already exists. + + [% ELSIF error == "classification_invalid_sortkey" %] + [% title = "Invalid Sortkey for Classification" %] + The sortkey '[% sortkey FILTER html %]' is invalid. It must be an + integer between 0 and [% constants.MAX_SMALLINT FILTER html %]. + + [% ELSIF error == "classification_not_deletable" %] + [% title = "Default Classification Can Not Be Deleted" %] + You can not delete the default classification + + [% ELSIF error == "classification_has_products" %] + Sorry, there are products for this classification. You + must reassign those products to another classification before you + can delete this one. + + [% ELSIF error == "component_already_exists" %] + [% title = "Component Already Exists" %] + The <em>[% product.name FILTER html %]</em> product already has + a component named <em>[% name FILTER html %]</em>. + + [% ELSIF error == "component_blank_description" %] + [% title = "Blank Component Description Not Allowed" %] + You must enter a non-blank description for this component. + + [% ELSIF error == "component_blank_name" %] + [% title = "Blank Component Name Not Allowed" %] + You must enter a name for this new component. + + [% ELSIF error == "component_has_bugs" %] + [% title = BLOCK %]Component has [% terms.Bugs %][% END %] + There are [% nb FILTER html %] [%+ terms.bugs %] entered for this component! + You must reassign those [% terms.bugs %] to another component before you + can delete this one. + + [% ELSIF error == "component_name_too_long" %] + [% title = "Component Name Is Too Long" %] + The name of a component is limited to [% constants.MAX_COMPONENT_SIZE FILTER html %] + characters. '[% name FILTER html %]' is too long ([% name.length %] characters). + + [% ELSIF error == "component_need_initialowner" %] + [% title = "Component Requires Default Assignee" %] + A default assignee is required for this component. + + [% ELSIF error == "customfield_nonexistent" %] + [% title = "Unknown Custom Field" %] + There is no custom field with the name '[% name FILTER html %]'. + + [% ELSIF error == "customfield_not_obsolete" %] + [% title = "Custom Field Not Obsolete" %] + The custom field '[% name FILTER html %]' is not obsolete. + Please obsolete a custom field before attempting to delete it. + + [% ELSIF error == "customfield_has_activity" %] + [% title = "Custom Field Has Activity" %] + The custom field '[% name FILTER html %]' cannot be deleted because + it has recorded activity. + + [% ELSIF error == "customfield_has_contents" %] + [% title = "Custom Field Has Contents" %] + The custom field '[% name FILTER html %]' cannot be deleted because + at least one [% terms.bug %] has a non empty value for this field. + + [% ELSIF error == "dependency_loop_multi" %] + [% title = "Dependency Loop Detected" %] + The following [% terms.bug %](s) would appear on both the "depends on" + and "blocks" parts of the dependency tree if these changes + are committed: + [% FOREACH dep = deps %] + [%+ dep FILTER bug_link(dep) FILTER none %] + [% END %]. + This would create a circular dependency, which is not allowed. + + [% ELSIF error == "dependency_loop_single" %] + [% title = "Dependency Loop Detected" %] + You can't make [% terms.abug %] block itself or depend on itself. + + [% ELSIF error == "dupe_id_required" %] + [% title = "Duplicate $terms.Bug Id Required" %] + You must specify [% terms.abug %] id to mark this [% terms.bug %] + as a duplicate of. + + [% ELSIF error == "dupe_not_allowed" %] + [% title = "Cannot mark $terms.bugs as duplicates" %] + You cannot mark [% terms.bugs %] as duplicates when + changing several [% terms.bugs %] at once. + + [% ELSIF error == "dupe_loop_detected" %] + [% title = "Loop detected among duplicates" %] + You cannot mark [% terms.bug %] [%+ bug_id FILTER html %] as + a duplicate of + [% IF dupe_of == bug_id %] + itself + [% ELSE %] + [%+ terms.bug %] [%+ dupe_of FILTER html %], because it + would create a duplicate loop + [% END %]. + + [% ELSIF error == "email_change_in_progress" %] + [% title = "Email Change Already In Progress" %] + Email change already in progress; please check your email. + + [% ELSIF error == "email_confirmation_failed" %] + [% title = "Email Address Confirmation Failed" %] + Email address confirmation failed. + + [% ELSIF error == "email_no_text_plain" %] + Your message did not contain any text.[% terms.Bugzilla %] does not + accept HTML-only email, or HTML email with attachments. + + [% ELSIF error == "empty_group_description" %] + [% title = "The group description can not be empty" %] + You must enter a description for the group. + + [% ELSIF error == "empty_group_name" %] + [% title = "The group name can not be empty" %] + You must enter a name for the group. + + [% ELSIF error == "entry_access_denied" %] + [% title = "Permission Denied" %] + [% admindocslinks = {'groups.html' => 'Group Security'} %] + Sorry, either the product <em>[% product FILTER html %]</em> + does not exist or you aren't authorized to + enter [% terms.abug %] into it. + + [% ELSIF error == "extension_create_no_name" %] + You must specify a name for your extension, as an argument to this script. + + [% ELSIF error == "extension_first_letter_caps" %] + The first letter of your extension's name must be a capital letter. + (You specified '[% name FILTER html %]'.) + + [% ELSIF error == "field_already_exists" %] + [% title = "Field Already Exists" %] + The field '[% field.name FILTER html %]' + ([% field.description FILTER html %]) already exists. Please + choose another name. + + [% ELSIF error == "field_cant_control_self" %] + [% title = "Field Can't Control Itself" %] + The [% field.description FILTER html %] field can't be set to control + itself. + + [% ELSIF error == "field_control_must_be_select" %] + [% title = "Invalid Field Type Selected" %] + Only drop-down and multi-select fields can be used to control + the visibility/values of other fields. [% field.description FILTER html %] + is not the right type of field. + + [% ELSIF error == "field_invalid_name" %] + [% title = "Invalid Field Name" %] + '[% name FILTER html %]' is not a valid name for a field. + A name may contain only letters, numbers, and the underscore character. + + [% ELSIF error == "field_invalid_sortkey" %] + [% title = "Invalid Sortkey for Field" %] + The sortkey [% sortkey FILTER html %] that you have provided for + this field is not a valid positive integer. + + [% ELSIF error == "field_missing_description" %] + [% title = "Missing Description for Field" %] + You must enter a description for this field. + + [% ELSIF error == "field_missing_name" %] + [% title = "Missing Name for Field" %] + You must enter a name for this field. + + [% ELSIF error == "field_value_control_select_only" %] + [% title = "Invalid Value Control Field" %] + Only Drop-Down or Multi-Select fields can have a field that + controls their values. + + [% ELSIF error == "fieldname_invalid" %] + [% title = "Specified Field Does Not Exist" %] + The field '[% field.name FILTER html %]' does not exist or + cannot be edited with this interface. + + [% ELSIF error == "fieldvalue_already_exists" %] + [% title = "Field Value Already Exists" %] + The value '[% value.name FILTER html %]' already exists for the + [%+ field.description FILTER html %] field. + + [% ELSIF error == "fieldvalue_is_controller" %] + [% title = "Value Controls Other Fields" %] + You cannot delete the [% value.field.description FILTER html %] + '[% value.name FILTER html %]' because + [% IF fields.size %] + it controls the visibility of the following fields: + [%+ fields.join(', ') FILTER html %]. + [% END %] + [% ' and ' IF fields.size AND vals.size %] + [% IF vals.size %] + it controls the visibility of the following field values: + <ul> + [% FOREACH field_name = vals.keys %] + [% FOREACH val = vals.${field_name} %] + <li>[% val.field.name FILTER html %]: + '[% val.name FILTER html %]'</li> + [% END %] + [% END %] + </ul> + [% END %] + + [% ELSIF error == "fieldvalue_is_default" %] + [% title = "Specified Field Value Is Default" %] + '[% value.name FILTER html %]' is the default value for + the '[% field.description FILTER html %]' field and cannot be deleted. + [% IF user.in_group('tweakparams') %] + You have to <a href="editparams.cgi?section=bugfields# + [%- param_name FILTER url_quote %]">change</a> the default value first. + [% END %] + + [% ELSIF error == "fieldvalue_name_too_long" %] + [% title = "Field Value Is Too Long" %] + The value of a field is limited to + [%+ constants.FIELD_VALUE_MAX_SIZE FILTER none %] characters. + '[% value FILTER html %]' is too long ([% value.length %] characters). + + [% ELSIF error == "fieldvalue_not_editable" %] + [% title = "Field Value Not Editable" %] + The value '[% old_value.name FILTER html %]' cannot be renamed because + it plays some special role for the '[% field.description FILTER html %]' + field. + + [% ELSIF error == "fieldvalue_not_deletable" %] + [% title = "Field Value Not Deletable" %] + The value '[% value.name FILTER html %]' cannot be removed because + it plays some special role for the '[% field.description FILTER html %]' + field. + + [% ELSIF error == "fieldvalue_reserved_word" %] + [% title = "Reserved Word Not Allowed" %] + You cannot use the value '[% value FILTER html %]' for the + '[% field.description FILTER html %]' field. This value is used internally. + Please choose another one. + + [% ELSIF error == "fieldvalue_sortkey_invalid" %] + [% title = "Invalid Field Value Sortkey" %] + The sortkey '[% sortkey FILTER html %]' for the + [%+ field.description FILTER html %] field is not a valid + (positive) number. + + [% ELSIF error == "fieldvalue_still_has_bugs" %] + [% title = "You Cannot Delete This Field Value" %] + You cannot delete the value '[% value.name FILTER html %]' from the + [% field.description FILTER html %] field, because there are still + [%+ value.bug_count FILTER html %] [%+ terms.bugs %] using it. + + [% ELSIF error == "fieldvalue_undefined" %] + [% title = "Undefined Value Not Allowed" %] + You must specify a value. + + [% ELSIF error == "file_not_specified" %] + [% title = "No File Specified" %] + You did not specify a file to attach. + + [% ELSIF error == "file_too_large" %] + [% title = "File Too Large" %] + The file you are trying to attach is [% filesize FILTER html %] + kilobytes (KB) in size. Non-patch attachments cannot be more than + [%+ Param('maxattachmentsize') %] KB. <br> + We recommend that you store your attachment elsewhere + [% IF Param("allow_attach_url") %] + and then specify the URL to this file on the attachment + creation page in the <b>AttachURL</b> field. + [% ELSE %] + and then insert the URL to it in a comment, or in the URL field + for this [% terms.bug %]. + [% END %] + <br>Alternately, if your attachment is an image, you could convert + it to a compressible format like JPG or PNG and try again. + + [% ELSIF error == "flag_requestee_needs_privs" %] + [% title = "Flag Requestee Needs Privileges" %] + [% requestee.identity FILTER html %] does not have permission to set the + <em>[% flagtype.name FILTER html %]</em> flag. Please select a user who is + a member of the <em>[% flagtype.grant_group.name FILTER html %]</em> group. + + [% ELSIF error == "flag_requestee_unauthorized" %] + [% title = "Flag Requestee Not Authorized" %] + [% admindocslinks = {'flags-overview.html#flags-admin' => 'Administering Flags', + 'groups.html' => 'Group Security'} %] + [% docslinks = {'flags-overview.html' => 'An overview on Flags', + 'flags.html' => 'Using Flags'} %] + + You asked [% requestee.identity FILTER html %] + for <code>[% flag_type.name FILTER html %]</code> on [% terms.bug %] + [%+ bug_id FILTER html -%] + [% IF attach_id && attach_id > 0 %], attachment [% attach_id FILTER html %][% END %], + but that [% terms.bug %] has been restricted to users in certain groups, + and the user you asked isn't in all the groups to which + the [% terms.bug %] has been restricted. + Please choose someone else to ask, or make the [% terms.bug %] accessible + to users on its CC: list and add that user to the list. + + [% ELSIF error == "flag_requestee_unauthorized_attachment" %] + [% title = "Flag Requestee Not Authorized" %] + [% admindocslinks = {'flags-overview.html#flags-admin' => 'Administering Flags', + 'groups.html' => 'Group Security'} %] + [% docslinks = {'flags-overview.html' => 'An overview on Flags', + 'flags.html' => 'Using Flags'} %] + + You asked [% requestee.identity FILTER html %] + for <code>[% flag_type.name FILTER html %]</code> on + [%+ terms.bug %] [%+ bug_id FILTER html %], + attachment [% attach_id FILTER html %], but that attachment + is restricted to users in the [% Param("insidergroup") FILTER html %] group, + and the user you asked isn't in that group. Please choose someone else + to ask, or ask an administrator to add the user to the group. + + [% ELSIF error == "flag_type_cc_list_invalid" %] + [% title = "Flag Type CC List Invalid" %] + [% admindocslinks = {'flags-overview.html#flags-admin' => 'Administering Flags'} %] + The CC list [% cc_list FILTER html %] must be less than 200 characters long. + + [% ELSIF error == "flag_type_component_without_product" %] + [% title = "Product Missing" %] + A component was selected without a product being selected. + + [% ELSIF error == "flag_type_description_invalid" %] + [% title = "Flag Type Description Invalid" %] + [% admindocslinks = {'flags-overview.html#flags-admin' => 'Administering Flags'} %] + The description must be less than 32K. + + [% ELSIF error == "flag_type_name_invalid" %] + [% title = "Flag Type Name Invalid" %] + [% admindocslinks = {'flags-overview.html#flags-admin' => 'Administering Flags'} %] + The name <em>[% name FILTER html %]</em> must be 1-50 characters long + and must not contain any spaces or commas. + + [% ELSIF error == "flag_type_not_multiplicable" %] + [% docslinks = {'flags-overview.html' => 'An overview on Flags', + 'flags.html' => 'Using Flags'} %] + You cannot have several <em>[% type.name FILTER html %]</em> flags + for this [% IF attachment %] attachment [% ELSE %] [%+ terms.bug %] [% END %]. + + [% ELSIF error == "flag_update_denied" %] + [% title = "Flag Modification Denied" %] + [% admindocslinks = {'flags-overview.html#flags-admin' => 'Administering Flags', + 'groups.html' => 'Group Security'} %] + [% docslinks = {'flags-overview.html' => 'An overview on Flags', + 'flags.html' => 'Using Flags'} %] + You tried to [% IF status == "+" %] grant [% ELSIF status == "-" %] deny + [% ELSIF status == "X" %] clear [% ELSE %] request [% END %] + <code>[% name FILTER html %] + [% IF status == "X" %][% old_status FILTER html %][% END %]</code>. + + Only a user with the required permissions may make this change. + + [% ELSIF error == "format_not_found" %] + [% title = "Format Not Found" %] + The requested format <em>[% format FILTER html %]</em> does not exist with + a content type of <em>[% ctype FILTER html %]</em>. + + [% ELSIF error == "flag_type_sortkey_invalid" %] + [% title = "Flag Type Sort Key Invalid" %] + The sort key must be an integer between 0 and 32767 inclusive. + It cannot be <em>[% sortkey FILTER html %]</em>. + + [% ELSIF error == "freetext_too_long" %] + [% title = "Text Too Long" %] + The text you entered is too long ([% text.length FILTER html %] characters, + above the maximum length allowed of [% constants.MAX_FREETEXT_LENGTH FILTER none %] + characters): + <p><em>[% text FILTER html %]</em></p> + + [% ELSIF error == "group_cannot_delete" %] + [% title = "Cannot Delete Group" %] + The <em>[% group.name FILTER html %]</em> group cannot be deleted because + there are + <a href="editgroups.cgi?action=del&group= + [%- group.id FILTER url_quote %]">records</a> + in the database which refer to it. All references to this group must + be removed before you can remove it. + + [% ELSIF error == "group_change_denied" %] + [% title = "Cannot Add/Remove That Group" %] + You tried to add or remove group id [% group_id FILTER html %] + from [% terms.bug %] [%+ bug.id FILTER html %], but you do not + have permissions to do so. + + [% ELSIF error == "group_exists" %] + [% title = "The group already exists" %] + The group [% name FILTER html %] already exists. + + [% ELSIF error == "group_has_special_role" %] + [% title = "Group not deletable" %] + [% IF groups.size == 1 %] + [% attr = "it" %] + [% param = "parameter" %] + [% ELSE %] + [% attr = "them" %] + [% param = "parameters" %] + [% END %] + The group '[% name FILTER html %]' is used by the + '[% groups.join("' and '") FILTER html %]' [% param FILTER html %]. + In order to delete this group, you first have to change the + [%+ param FILTER html %] to make [% attr FILTER html %] point to another group. + + + [% ELSIF error == "group_invalid_removal" %] + You tried to remove [% terms.bug %] [%+ bug.id FILTER html %] + from group id [% group_id FILTER html %], but [% terms.bugs %] in the + '[% product FILTER html %]' product can not be removed from that + group. + + [% ELSIF error == "group_invalid_restriction" %] + You tried to restrict [% terms.bug %] [%+ bug.id FILTER html %] to + to group id [% group_id FILTER html %], but [% terms.bugs %] in the + '[% product FILTER html %]' product can not be restricted to + that group. + + [% ELSIF error == "group_not_specified" %] + [% title = "Group not specified" %] + No group was specified. + + [% ELSIF error == "system_group_not_deletable" %] + [% title = "System Groups not deletable" %] + <em>[% name FILTER html %]</em> is a system group. + This group cannot be deleted. + + [% ELSIF error == "group_unknown" %] + [% title = "Unknown Group" %] + The group [% name FILTER html %] does not exist. Please specify + a valid group name. Create it first if necessary! + + [% ELSIF error == "illegal_at_least_x_votes" %] + [% title = "Your Search Makes No Sense" %] + The <em>At least ___ votes</em> field must be a simple number. + You entered <tt>[% value FILTER html %]</tt>, which isn't. + + [% ELSIF error == "illegal_attachment_edit" %] + [% title = "Unauthorized Action" %] + You are not authorized to edit attachment [% attach_id FILTER html %]. + + [% ELSIF error == "illegal_attachment_edit_bug" %] + [% title = "Unauthorized Action" %] + You are not authorized to edit attachments on [% terms.bug %] + [%+ bug_id FILTER html %]. + + [% ELSIF error == "illegal_attachment_is_patch" %] + [% title = "Your Search Makes No Sense" %] + The only legal values for the <em>Attachment is patch</em> field are + 0 and 1. + + [% ELSIF error == "illegal_bug_status_transition" %] + [% title = "Illegal $terms.Bug Status Change" %] + [% IF old.defined %] + You are not allowed to change the [% terms.bug %] status from + [%+ old.name FILTER html %] to [% new.name FILTER html %]. + [% ELSE %] + You are not allowed to file new [% terms.bugs %] with the + [%+ new.name FILTER html %] status. + [% END %] + + [% ELSIF error == "illegal_change" %] + [% title = "Not allowed" %] + You tried to change the + <strong>[% field_descs.$field FILTER html %]</strong> field + [% IF oldvalue.defined %] + from <em>[% oldvalue.join(', ') FILTER html %]</em> + [% END %] + [% IF newvalue.defined %] + to <em>[% newvalue.join(', ') FILTER html %]</em> + [% END %] + , but only + [% IF privs < 3 %] + the assignee + [% IF privs < 2 %] or reporter [% END %] + of the [% terms.bug %], or + [% END %] + a user with the required permissions may change that field. + + [% ELSIF error == "illegal_change_deps" %] + [% title = "Not allowed" %] + You tried to change the + <strong>[% field_descs.$field FILTER html %]</strong> field + but only a user allowed to edit + both related [% terms.bugs %] may change that field. + + [% ELSIF error == "illegal_changed_in_last_x_days" %] + [% title = "Your Search Makes No Sense" %] + The <em>Changed in last ___ days</em> field must be a simple number. + You entered <tt>[% value FILTER html %]</tt>, which isn't. + + [% ELSIF error == "illegal_date" %] + [% title = "Illegal Date" %] + '<tt>[% date FILTER html %]</tt>' is not a legal date. + [% IF format %] + Please use the format '<tt>[% format FILTER html %]</tt>'. + [% END %] + + [% ELSIF error == "illegal_email_address" %] + [% title = "Invalid Email Address" %] + The e-mail address you entered (<b>[% addr FILTER html %]</b>) + didn't pass our syntax checking for a legal email address. + [% IF default %] + A legal address must contain exactly one '@', + and at least one '.' after the @. + [% ELSE %] + [%+ Param('emailregexpdesc') %] + [% END %] + It must also not contain any of these special characters: + <tt>\ ( ) & < > , ; : " [ ]</tt>, or any whitespace. + + [% ELSIF error == "illegal_frequency" %] + [% title = "Too Frequent" %] + Unless you are an administrator, you may not create series which are + run more often than once every [% minimum FILTER html %] days. + + [% ELSIF error == "illegal_group_control_combination" %] + [% title = "Your Group Control Combination Is Illegal" %] + [% admindocslinks = {'groups.html' => 'Assigning Group Controls to Products'} %] + Your group control combination for group " + [% groupname FILTER html %]" is illegal. + + [% ELSIF error == "illegal_is_obsolete" %] + [% title = "Your Search Makes No Sense" %] + The only legal values for the <em>Attachment is obsolete</em> field are + 0 and 1. + + [% ELSIF error == "illegal_query_name" %] + [% title = "Illegal Search Name" %] + The name of your search cannot contain any of the following characters: + <, >, &. + + [% ELSIF error == "illegal_series_creation" %] + [% admindocslinks = {'groups.html' => 'Group security'} %] + [% docslinks = {'reporting.html' => 'Reporting'} %] + You are not authorized to create series. + + [% ELSIF error == "illegal_series_edit" %] + [% admindocslinks = {'groups.html' => 'Group security'} %] + [% docslinks = {'reporting.html' => 'Reporting'} %] + You are not authorized to edit this series. To do this, you must either + be its creator, or an administrator. + + [% ELSIF error == "illegal_time" %] + [% title = "Illegal Time" %] + '<tt>[% time FILTER html %]</tt>' is not a legal time. + [% IF format %] + Please use the format '<tt>[% format FILTER html %]</tt>'. + [% END %] + + [% ELSIF error == "illegal_regexp" %] + [% title = "Illegal Regular Expression" %] + The regular expression you provided [% value FILTER html %] is not valid. + The error was: [% dberror FILTER html %]. + + [% ELSIF error == "insufficient_data_points" %] + [% docslinks = {'reporting.html' => 'Reporting'} %] + We don't have enough data points to make a graph (yet). + + [% ELSIF error == "invalid_attach_id" %] + [% title = "Invalid Attachment ID" %] + The attachment id [% attach_id FILTER html %] is invalid. + + [% ELSIF error == "bug_id_does_not_exist" %] + [% title = BLOCK %]Invalid [% terms.Bug %] ID[% END %] + [% terms.Bug %] #[% bug_id FILTER html %] does not exist. + + [% ELSIF error == "improper_bug_id_field_value" %] + [% title = BLOCK %] + [% IF bug_id %]Invalid [% ELSE %]Missing [% END %] [% terms.Bug %] ID + [% END %] + [% IF bug_id %] + '[% bug_id FILTER html %]' is not a valid [% terms.bug %] number + [% IF Param("usebugaliases") %] + nor an alias to [% terms.abug %] + [% END %]. + [% ELSE %] + [% IF field %] + The '[% field_descs.$field FILTER html %]' field + cannot be empty. + [% END %] + You must enter a valid [% terms.bug %] number! + [% END %] + + [% ELSIF error == "invalid_changedsince" %] + [% title = "Invalid 'Changed Since'" %] + The 'changed since' value, '[% changedsince FILTER html %]', must be an + integer >= 0. + + [% ELSIF error == "invalid_content_type" %] + [% title = "Invalid Content-Type" %] + The content type <em>[% contenttype FILTER html %]</em> is invalid. + Valid types must be of the form <em>foo/bar</em> where <em>foo</em> + is one of <em>[% constants.LEGAL_CONTENT_TYPES.join(', ') FILTER html %]</em>. + + [% ELSIF error == "invalid_context" %] + [% title = "Invalid Context" %] + The context [% context FILTER html %] is invalid (must be a number, + "file" or "patch"). + + [% ELSIF error == "invalid_datasets" %] + [% title = "Invalid Datasets" %] + Invalid datasets <em>[% datasets FILTER html %]</em>. Only digits, + letters and colons are allowed. + + [% ELSIF error == "invalid_format" %] + [% title = "Invalid Format" %] + The format "[% format FILTER html %]" is invalid (must be one of + [% FOREACH my_format = formats %] + "[% my_format FILTER html %]" + [% END %] + ). + + [% ELSIF error == "invalid_group_ID" %] + [% title = "Invalid group ID" %] + The group you specified doesn't exist. + + [% ELSIF error == "invalid_group_name" %] + [% title = "Invalid group name" %] + The group you specified, [% name FILTER html %], is not valid here. + + [% ELSIF error == "invalid_maxrows" %] + [% title = "Invalid Max Rows" %] + The maximum number of rows, '[% maxrows FILTER html %]', must be + a positive integer. + + [% ELSIF error == "invalid_parameter" %] + [% title = "Invalid Parameter" %] + The new value for [% name FILTER html %] is invalid: [% err FILTER html %]. + + [% ELSIF error == "invalid_product_name" %] + [% title = "Invalid Product Name" %] + The product name '[% product FILTER html %]' is invalid or does not exist. + + [% ELSIF error == "invalid_regexp" %] + [% title = "Invalid regular expression" %] + The regular expression you entered is invalid. + + [% ELSIF error == "invalid_user_group" %] + [% title = "Invalid User Group" %] + [% IF users.size > 1 %] Users [% ELSE %] User [% END %] + '[% users.join(', ') FILTER html %]' + [% IF users.size > 1 %] are [% ELSE %] is [% END %] + not able to edit the + [% IF product %] + '[% product FILTER html %]' + [% END %] + [%+ field_descs.product FILTER html %] + [% IF bug_id %] + for [% terms.bug %] '[% bug_id FILTER html %]'. + [% ELSIF new %] + and may not be included on a new [% terms.bug %]. + [% ELSE %] + for at least one [% terms.bug %] being changed. + [% END %] + + [% ELSIF error == "invalid_username" %] + [% title = "Invalid Username" %] + The name <tt>[% name FILTER html %]</tt> is not a valid username. + Either you misspelled it, or the person has not + registered for a [% terms.Bugzilla %] account. + + [% ELSIF error == "invalid_username_or_password" %] + [% title = "Invalid Username Or Password" %] + The username or password you entered is not valid. + [%# People get two login attempts before being warned about + # being locked out. + #%] + [% IF remaining <= 2 %] + If you do not enter the correct password after + [%+ remaining FILTER html %] more attempt(s), you will be + locked out of this account for + [%+ constants.LOGIN_LOCKOUT_INTERVAL FILTER html %] minutes. + [% END %] + + [% ELSIF error == "json_rpc_post_only" %] + For security reasons, you may only use JSON-RPC with the POST + HTTP method. + + [% ELSIF error == "keyword_already_exists" %] + [% title = "Keyword Already Exists" %] + A keyword with the name [% name FILTER html %] already exists. + + [% ELSIF error == "keyword_blank_description" %] + [% title = "Blank Keyword Description Not Allowed" %] + You must enter a non-blank description for the keyword. + + [% ELSIF error == "keyword_blank_name" %] + [% title = "Blank Keyword Name Not Allowed" %] + You must enter a non-blank name for the keyword. + + [% ELSIF error == "keyword_invalid_name" %] + [% title = "Invalid Keyword Name" %] + You may not use commas or whitespace in a keyword name. + + [% ELSIF error == "local_file_too_large" %] + [% title = "Local File Too Large" %] + Local file uploads must not exceed + [% Param('maxlocalattachment') %] MB in size. + + [% ELSIF error == "login_needed_for_password_change" %] + [% title = "Login Name Required" %] + You must enter a login name when requesting to change your password. + + [% ELSIF error == "login_required_for_pronoun" %] + [% title = "Login Name Required" %] + You can't use %user% without being logged in, because %user% refers + to your login name, which we don't know. + + [% ELSIF error == "login_required" %] + [%# Used for non-web-based LOGIN_REQUIRED situations. %] + You must log in before using this part of [% terms.Bugzilla %]. + + [% ELSIF error == "migrate_config_created" %] + The file <kbd>[% file FILTER html %]</kbd> contains configuration + variables that must be set before continuing with the migration. + + [% ELSIF error == "migrate_from_invalid" %] + '[% from FILTER html %]' is not a valid type of [% terms.bug %]-tracker + to migrate from. See the contents of the <kbd>B[% %]ugzilla/Migrate/</kbd> + directory for a list of valid [% terms.bug %]-trackers. + + [% ELSIF error == "milestone_already_exists" %] + [% title = "Milestone Already Exists" %] + [% admindocslinks = {'products.html' => 'Administering products', + 'milestones.html' => 'About Milestones'} %] + The milestone '[% name FILTER html %]' already exists for product ' + [%- product FILTER html %]'. + + [% ELSIF error == "milestone_blank_name" %] + [% title = "Blank Milestone Name Not Allowed" %] + You must enter a name for this milestone. + + [% ELSIF error == "milestone_is_default" %] + [% title = "Default milestone not deletable" %] + [% admindocslinks = {'products.html' => 'Administering products', + 'milestones.html' => 'About Milestones'} %] + Sorry, but [% milestone.name FILTER html %] is the default milestone + for the '[% milestone.product.name FILTER html %]' product, and so + it cannot be deleted. + + [% ELSIF error == "milestone_name_too_long" %] + [% title = "Milestone Name Is Too Long" %] + The name of a milestone is limited to [% constants.MAX_MILESTONE_SIZE FILTER html %] + characters. '[% name FILTER html %]' is too long ([% name.length %] characters). + + [% ELSIF error == "milestone_required" %] + [% title = "Milestone Required" %] + You must select a target milestone for [% terms.bug %] + [%+ bug.id FILTER html %] + if you are going to accept it. Part of accepting + [%+ terms.abug %] is giving an estimate of when it will be fixed. + + [% ELSIF error == "milestone_sortkey_invalid" %] + [% title = "Invalid Milestone Sortkey" %] + The sortkey '[% sortkey FILTER html %]' is not in the range + [%+ constants.MIN_SMALLINT FILTER html %] ≤ sortkey ≤ + [%+ constants.MAX_SMALLINT FILTER html %]. + + [% ELSIF error == "misarranged_dates" %] + [% title = "Misarranged Dates" %] + Your start date ([% datefrom FILTER html %]) is after + your end date ([% dateto FILTER html %]). + + [% ELSIF error == "missing_attachment_description" %] + [% title = "Missing Attachment Description" %] + You must enter a description for the attachment. + + [% ELSIF error == "missing_category" %] + [% title = "Missing Category" %] + You did not specify a category for this series. + + [% ELSIF error == "missing_component" %] + [% title = "Missing Component" %] + [% admindocslinks = {'products.html' => 'Administering products', + 'components.html' => 'Creating a component'} %] + Sorry, the product <em>[% product.name FILTER html %]</em> + has to have at least one component in order for you to + enter [% terms.abug %] into it.<br> + [% IF user.in_group("editcomponents", product.id) %] + <a href="editcomponents.cgi?action=add&product=[% product.name FILTER url_quote %]">Create + a new component</a>. + [% ELSE %] + Please contact [% Param("maintainer") %] and ask them + to add a component to this product. + [% END %] + + [% ELSIF error == "missing_content_type" %] + [% title = "Missing Content-Type" %] + You asked [% terms.Bugzilla %] to auto-detect the content type, but + your browser did not specify a content type when uploading the file, + so you must enter a content type manually. + + [% ELSIF error == "missing_content_type_method" %] + [% title = "Missing Content-Type Determination Method" %] + You must choose a method for determining the content type, + either <em>auto-detect</em>, <em>select from list</em>, or <em>enter + manually</em>. + + [% ELSIF error == "missing_cookie" %] + [% title = "Missing Cookie" %] + Sorry, I seem to have lost the cookie that recorded + the results of your last search. I'm afraid you will have to start + again from the <a href="query.cgi">search page</a>. + + [% ELSIF error == "missing_datasets" %] + [% title = "No Datasets Selected" %] + [% docslinks = {'reporting.html' => 'Reporting'} %] + You must specify one or more datasets to plot. + + [% ELSIF error == "missing_frequency" %] + [% title = "Missing Frequency" %] + [% docslinks = {'reporting.html' => 'Reporting'} %] + You did not specify a valid frequency for this series. + + [% ELSIF error == "missing_name" %] + [% title = "Missing Name" %] + [% docslinks = {'reporting.html' => 'Reporting'} %] + You did not specify a name for this series. + + [% ELSIF error == "missing_query" %] + [% title = "Missing Search" %] + [% docslinks = {'query.html' => "Searching for $terms.bugs", + 'query.html#list' => "$terms.Bug lists"} %] + The search named <em>[% queryname FILTER html %]</em> + [% IF sharer_id && sharer_id != user.id %] + has not been made visible to you. + [% ELSE %] + does not exist. + [% END %] + + [% ELSIF error == "missing_resolution" %] + [% title = "Resolution Required" %] + A valid resolution is required to mark [% terms.bugs %] as + [%+ status FILTER upper FILTER html %]. + + [% ELSIF error == "move_bugs_disabled" %] + [% title = BLOCK %][% terms.Bug %] Moving Disabled[% END %] + Sorry, [% terms.bug %] moving has been disabled. If you need + to move [% terms.abug %], please contact [% Param("maintainer") %]. + + [% ELSIF error == "missing_subcategory" %] + [% title = "Missing Subcategory" %] + You did not specify a subcategory for this series. + + [% ELSIF error == "missing_version" %] + [% title = "Missing Version" %] + [% admindocslinks = {'versions.html' => 'Defining versions'} %] + Sorry, the product <em>[% product.name FILTER html %]</em> + has to have at least one version in order for you to + enter [% terms.abug %] into it.<br> + [% IF user.in_group("editcomponents", product.id) %] + <a href="editversions.cgi?action=add&product=[% product.name FILTER url_quote %]">Create + a new version</a>. + [% ELSE %] + Please contact [% Param("maintainer") %] and ask them + to add a version to this product. + [% END %] + + [% ELSIF error == "need_quip" %] + [% title = "Quip Required" %] + [% docslinks = {'quips.html' => 'About quips'} %] + Please enter a quip in the text field. + + [% ELSIF error == "new_password_missing" %] + [% title = "New Password Missing" %] + You must enter a new password. + + [% ELSIF error == "no_axes_defined" %] + [% title = "No Axes Defined" %] + [% docslinks = {'reporting.html' => 'Reporting'} %] + You didn't define any axes to plot. + + [% ELSIF error == "no_bugs_chosen" %] + [% title = BLOCK %]No [% terms.Bugs %] Selected[% END %] + You apparently didn't choose any [% terms.bugs %] + [% IF action == "modify" %] + to modify. + [% ELSIF action == "view" %] + to view. + [% END %] + + [% ELSIF error == "no_bug_ids" %] + [% title = BLOCK %]No [% terms.Bugs %] Selected[% END %] + You didn't choose any [% terms.bugs %] to + [% IF action == "add" %] add to [% ELSE %] remove from [% END %] + the [% tag FILTER html %] tag. + + [% ELSIF error == "no_bugs_in_list" %] + [% title = "Delete Tag?" %] + This will remove all [% terms.bugs %] from the + <em>[% name FILTER html %]</em> tag. This will delete the tag completely. Click + <a href="buglist.cgi?cmdtype=dorem&remaction=forget&namedcmd= + [%- name FILTER url_quote %]&token= + [%- issue_hash_token([query_id, name]) FILTER url_quote %]">here</a> + if you really want to delete it. + + [% ELSIF error == "no_bugs_to_remove" %] + [% title = "No Tag Selected" %] + You didn't select a tag from which to remove [% terms.bugs %]. + + [% ELSIF error == "no_initial_bug_status" %] + [% title = "No Initial $terms.Bug Status" %] + No [% terms.bug %] status is available on [% terms.bug %] creation. + Please report the problem to [% Param("maintainer") %]. + + [% ELSIF error == "no_new_quips" %] + [% title = "No New Quips" %] + [% admindocslinks = {'quips.html' => 'Controlling quip usage'} %] + This site does not permit the addition of new quips. + + [% ELSIF error == "no_page_specified" %] + [% title = "No Page Specified" %] + You did not specify the id of a page to display. + + [% ELSIF error == "no_products" %] + [% title = "No Products" %] + [% admindocslinks = {'products.html' => 'Setting up a product', + 'components.html' => 'Adding components to products', + 'groups.html' => 'Groups security'} %] + Either no products have been defined to enter [% terms.bugs %] against or you have not + been given access to any. + + [% ELSIF error == "no_valid_action" %] + [% title = "No valid action specified" %] + Cannot edit [% field_descs.$field FILTER html %]: no valid action was specified. + + [% ELSIF error == "number_not_numeric" %] + [% title = "Numeric Value Required" %] + The value '[% num FILTER html %]' in the + <em>[% field_descs.$field FILTER html %]</em> field + is not a numeric value. + + [% ELSIF error == "number_too_large" %] + [% title = "Number Too Large" %] + The value '[% num FILTER html %]' in the + <em>[% field_descs.$field FILTER html %]</em> field + is more than the maximum allowable value of '[% max_num FILTER html %]'. + + [% ELSIF error == "number_too_small" %] + [% title = "Number Too Small" %] + The value '[% num FILTER html %]' + in the <em>[% field_descs.$field FILTER html %]</em> field + is less than the minimum allowable value of '[% min_num FILTER html %]'. + + [% ELSIF error == "object_not_specified" %] + [% type = BLOCK %][% INCLUDE object_name class = class %][% END %] + [% title = BLOCK %][% type FILTER ucfirst FILTER html %] Not + Specified[% END %] + You must select/enter a [% type FILTER html %]. + + [% ELSIF error == "object_does_not_exist" %] + [% type = BLOCK %][% INCLUDE object_name class = class %][% END %] + [% title = BLOCK %]Invalid [% type FILTER ucfirst FILTER html %][% END %] + There is no [% type FILTER html %] + [% IF id.defined %] + with the id '[% id FILTER html %]' + [% ELSE %] + named '[% name FILTER html %]' + [% END %] + [% IF product.defined %] + in the '[% product.name FILTER html %]' product + [% END %]. + [% IF class == "Bugzilla::User" %] + Either you mis-typed the name or that user has not yet registered + for a [% terms.Bugzilla %] account. + [% END %] + + [% ELSIF error == "old_password_incorrect" %] + [% title = "Incorrect Old Password" %] + You did not enter your old password correctly. + + [% ELSIF error == "old_password_required" %] + [% title = "Old Password Required" %] + You must enter your old password to change your email address. + + [% ELSIF error == "password_change_requests_not_allowed" %] + [% title = "Password Change Requests Not Allowed" %] + Please go to: http://identity.mageia.org/ to change or recover your password. + + [% ELSIF error == "passwords_dont_match" %] + [% title = "Passwords Don't Match" %] + The two passwords you entered did not match. + + [% ELSIF error == "password_too_short" %] + [% title = "Password Too Short" %] + The password must be at least + [%+ constants.USER_PASSWORD_MIN_LENGTH FILTER html %] characters long. + + [% ELSIF error == "patch_too_large" %] + [% title = "File Too Large" %] + The file you are trying to attach is [% filesize FILTER html %] + kilobytes (KB) in size. + Patches cannot be more than [% Param('maxattachmentsize') %] KB in size. + Try splitting your patch into several pieces. + + [% ELSIF error == "product_access_denied" %] + Either the product + [%+ IF id.defined %] + with the id [% id FILTER html %] + [% ELSE %] + '[% name FILTER html %]' + [% END %] + does not exist or you don't have access to it. + + [% ELSIF error == "product_doesnt_exist" %] + [% title = "Specified Product Does Not Exist" %] + The product '[% product FILTER html %]' does not exist. + + [% ELSIF error == "product_illegal_group" %] + [% title = "Illegal Group" %] + [% group.name FILTER html %] is not an active [% terms.bug %] group + and so you cannot edit group controls for it. + + [% ELSIF error == "product_illegal_votes" %] + [% title = "Votes Must Be Non-negative" %] + [% admindocslinks = {'voting.html' => 'Setting up the voting feature'} %] + '[% votes FILTER html %]' is an invalid value for the + <em> + [% IF field == "votesperuser" %] + Votes Per User + [% ELSIF field == "maxvotesperbug" %] + Maximum Votes Per [% terms.Bug %] + [% ELSIF field == "votestoconfirm" %] + Votes To Confirm + [% END %] + </em> field, which should contain a non-negative number. + + [% ELSIF error == "product_name_already_in_use" %] + [% title = "Product name already exists" %] + [% admindocslinks = {'products.html' => 'Administering products'} %] + The product name '[% product FILTER html %]' already exists. + + [% ELSIF error == "product_name_diff_in_case" %] + [% title = "Product name differs only in case" %] + [% admindocslinks = {'products.html' => 'Administering products'} %] + The product name '[% product FILTER html %]' differs from existing + product '[% existing_product FILTER html %]' only in case. + + [% ELSIF error == "product_name_too_long" %] + [% title = "Product name too long" %] + The name of a product is limited to [% constants.MAX_PRODUCT_SIZE FILTER html %] + characters. '[% name FILTER html %]' is too long ([% name.length %] characters). + + [% ELSIF error == "product_must_define_defaultmilestone" %] + [% title = "Must define new default milestone" %] + [% admindocslinks = {'products.html' => 'Administering products', + 'milestones.html' => 'About Milestones'} %] + You must <a href="editmilestones.cgi?action=add&product=[% product FILTER url_quote %]"> + create the milestone '[% milestone FILTER html %]'</a> before + it can be made the default milestone for product '[% product FILTER html %]'. + + [% ELSIF error == "product_admin_denied" %] + [% title = "Product Access Denied" %] + You are not allowed to edit properties of product '[% product FILTER html %]'. + + [% ELSIF error == "product_blank_name" %] + [% title = "Blank Product Name Not Allowed" %] + [% admindocslinks = {'products.html' => 'Administering products'} %] + You must enter a name for the product. + + [% ELSIF error == "product_disabled" %] + [% title = BLOCK %]Product closed for [% terms.Bug %] Entry[% END %] + [% admindocslinks = {'products.html' => 'Administering products'} %] + Sorry, entering [% terms.abug %] into the + product <em>[% product.name FILTER html %]</em> has been disabled. + + [% ELSIF error == "product_edit_denied" %] + [% title = "Product Edit Access Denied" %] + [% admindocslinks = {'products.html' => 'Administering products', + 'groups.html' => 'Group security'} %] + You are not permitted to edit [% terms.bugs %] in product + [%+ product FILTER html %]. + + [% ELSIF error == "product_has_bugs" %] + [% title = BLOCK %]Product has [% terms.Bugs %][% END %] + [% admindocslinks = {'products.html' => 'Administering products'} %] + There are [% nb FILTER html %] [%+ terms.bugs %] entered for this product! + You must move those [% terms.bugs %] to another product before you + can delete this one. + + [% ELSIF error == "product_must_have_description" %] + [% title = "Product needs Description" %] + [% admindocslinks = {'products.html' => 'Administering products'} %] + You must enter a description for this product. + + [% ELSIF error == "product_must_have_version" %] + [% title = "Product needs Version" %] + [% admindocslinks = {'products.html' => 'Administering products', + 'versions.html' => 'Administering versions'} %] + You must enter a valid version to create a new product. + + [% ELSIF error == "product_not_specified" %] + [% title = "No Product Specified" %] + [% admindocslinks = {'products.html' => 'Administering products', + 'components.html' => 'Administering components', + 'milestones.html' => 'Administering milestones', + 'versions.html' => 'Administering versions'} %] + No product specified when trying to edit components, milestones, versions + or product. + + [% ELSIF error == "query_name_exists" %] + [% title = "Search Name Already In Use" %] + The name <em>[% name FILTER html %]</em> is already used by another + saved search. You first have to + <a href="buglist.cgi?cmdtype=dorem&remaction=forget&namedcmd= + [%- name FILTER url_quote %]&token= + [% issue_hash_token([query_id, name]) FILTER url_quote %]">delete</a> + it if you really want to use this name. + + [% ELSIF error == "query_name_missing" %] + [% title = "No Search Name Specified" %] + [% docslinks = {'query.html#list' => "$terms.Bug lists"} %] + You must enter a name for your search. + + [% ELSIF error == "query_name_too_long" %] + [% title = "Query Name Too Long" %] + The name of the query must be less than [% constants.MAX_LEN_QUERY_NAME FILTER html %] + characters long. + + [% ELSIF error == "quicksearch_unknown_field" %] + [% title = "QuickSearch Error" %] + There is a problem with your search: + [% FOREACH field = unknown %] + <p><code>[% field FILTER html %]</code> is not a valid field name.</p> + [% END %] + [% FOREACH field = ambiguous.keys %] + <p><code>[% field FILTER html %]</code> matches more than one field: + [%+ ambiguous.${field}.join(', ') FILTER html %]</p> + [% END %] + + [% IF unknown.size %] + <p>The legal field names are + <a href="page.cgi?id=quicksearch.html#fields">listed here</a>.</p> + [% END %] + + [% ELSIF error == "reassign_to_empty" %] + [% title = "Illegal Reassignment" %] + To reassign [% terms.abug %], you must provide an address for + the new assignee. + + [% ELSIF error == "require_component" %] + [% title = "Component Needed" %] + To file this [% terms.bug %], you must first choose a component. + If necessary, just guess. + + [% ELSIF error == "require_new_password" %] + [% title = "New Password Needed" %] + You cannot change your password without choosing a new one. + + [% ELSIF error == "require_summary" %] + [% title = "Summary Needed" %] + You must enter a summary for this [% terms.bug %]. + + [% ELSIF error == "resolution_cant_clear" %] + [% terms.Bug %] [%+ bug_id FILTER bug_link(bug_id) FILTER none %] is + closed, so you cannot clear its resolution. + + [% ELSIF error == "resolution_not_allowed" %] + [% title = "Resolution Not Allowed" %] + You cannot set a resolution for open [% terms.bugs %]. + + [% ELSIF error == "saved_search_used_by_whines" %] + [% title = "Saved Search In Use" %] + [% docslinks = {'whining.html' => 'About Whining'} %] + The saved search <em>[% search_name FILTER html %]</em> is being used + by <a href="editwhines.cgi">Whining events</a> with the following subjects: + [%+ subjects FILTER html %] + + [% ELSIF error == "search_content_without_matches" %] + [% title = "Illegal Search" %] + The "content" field can only be used with "matches" search + and the "matches" search can only be used with the "content" + field. + + [% ELSIF error == "series_already_exists" %] + [% title = "Series Already Exists" %] + [% docslinks = {'reporting.html' => 'Reporting'} %] + A series named <em>[% series.category FILTER html %] / + [%+ series.subcategory FILTER html %] / + [%+ series.name FILTER html %]</em> + already exists. + + [% ELSIF error == "sidebar_supports_mozilla_only" %] + Sorry - sidebar.cgi currently only supports Mozilla based web browsers. + <a href="http://www.mozilla.org">Upgrade today</a>. :-) + + [% ELSIF error == "still_unresolved_bugs" %] + [% IF dependency_count == 1 %] + [% terms.Bug %]# <a href="show_bug.cgi?id=[% dependencies.0.bug_id FILTER none %]">[% dependencies.0.bug_id FILTER none %]</a> + still has [% dependencies.0.dependencies FILTER html %] unresolved + [% IF dependencies.0.dependencies == 1 %] + dependency + [% ELSE %] + dependencies + [% END %]. Show + <a href="showdependencytree.cgi?id=[% dependencies.0.bug_id FILTER none %]&hide_resolved=1">Dependency + Tree</a>. + [% ELSE %] + There are [% dependency_count FILTER none %] open [% terms.bugs %] which + have unresolved dependencies. + <br> + [% FOREACH bug = dependencies %] + [% terms.Bug %]# <a href="show_bug.cgi?id=[% bug.bug_id FILTER none %]">[% bug.bug_id FILTER none %]</a> + has [% bug.dependencies FILTER html %] open + [% IF bug.dependencies == 1 %] + dependency. + [% ELSE %] + dependencies. + [% END %] + (<a href="showdependencytree.cgi?id=[% bug.bug_id FILTER none %]&hide_resolved=1">Dependency + Tree</a>)<br> + [% END %] + [% END %] + + [% ELSIF error == "sudo_invalid_cookie" %] + [% title = "Invalid Sudo Cookie" %] + Your sudo cookie is invalid. Either it expired or you didn't start + a sudo session correctly. Refresh the page or load another page + to continue what you are doing as yourself. + + [% ELSIF error == "sudo_illegal_action" %] + [% title = "Impersonation Not Authorized" %] + [% IF NOT sudoer.in_group("bz_sudoers") %] + You are not allowed to impersonate users. + [% ELSIF target_user AND target_user.in_group("bz_sudo_protect") %] + You are not allowed to impersonate [% target_user.identity FILTER html %]. + [% ELSE %] + The user you tried to impersonate doesn't exist. + [% END %] + + [% ELSIF error == "sudo_in_progress" %] + [% title = "Session In Progress" %] + A sudo session (impersonating [% target FILTER html %]) is in progress. + End that session (using the link in the footer) before starting a new one. + + [% ELSIF error == "sudo_password_required" %] + [% title = "Password Required" %] + Your [% terms.Bugzilla %] password is required to begin a sudo + session. Please <a href="relogin.cgi?action=prepare-sudo&target_login= + [%- target_login FILTER html %]&reason= + [%- reason FILTER html %]">go back</a> and enter your password. + + [% ELSIF error == "sudo_preparation_required" %] + [% title = "Preparation Required" %] + You may not start a sudo session directly. Please + <a href="relogin.cgi?action=prepare-sudo&target_login= + [%- target_login FILTER html %]&reason= + [%- reason FILTER html %]">start your session normally</a>. + + [% ELSIF error == "sudo_protected" %] + [% title = "User Protected" %] + The user [% login FILTER html %] may not be impersonated by sudoers. + + [% ELSIF error == "too_many_votes_for_bug" %] + [% title = "Illegal Vote" %] + [% admindocslinks = {'voting.html' => 'Setting up the voting feature'} %] + You may only use at most [% max FILTER html %] votes for a single + [%+ terms.bug %] in the + <tt>[% product FILTER html %]</tt> product, but you are trying to + use [% votes FILTER html %]. + + [% ELSIF error == "too_many_votes_for_product" %] + [% title = "Illegal Vote" %] + [% admindocslinks = {'voting.html' => 'Setting up the voting feature'} %] + You tried to use [% votes FILTER html %] votes in the + <tt>[% product FILTER html %]</tt> product, which exceeds the maximum of + [%+ max FILTER html %] votes for this product. + + [% ELSIF error == "token_does_not_exist" %] + [% title = "Token Does Not Exist" %] + The token you submitted does not exist, has expired, or has + been canceled. + + [% ELSIF error == "too_soon_for_new_token" %] + [% title = "Too Soon For New Token" %] + You have requested + [% IF type == "password" %] + a password + [% ELSIF type == "account" %] + an account + [% END %] + token too recently to request another. Please wait a while and try again. + + [% ELSIF error == "unknown_keyword" %] + [% title = "Unknown Keyword" %] + <code>[% keyword FILTER html %]</code> is not a known keyword. + The legal keyword names are <a href="describekeywords.cgi">listed here</a>. + + [% ELSIF error == "unknown_tab" %] + [% title = "Unknown Tab" %] + <code>[% current_tab_name FILTER html %]</code> is not a legal tab name. + + [% ELSIF error == "version_already_exists" %] + [% title = "Version Already Exists" %] + [% admindocslinks = {'versions.html' => 'Administering versions'} %] + The version '[% name FILTER html %]' already exists for product ' + [%- product FILTER html %]'. + + [% ELSIF error == "version_blank_name" %] + [% title = "Blank Version Name Not Allowed" %] + You must enter a name for this version. + + [% ELSIF error == "version_has_bugs" %] + [% title = BLOCK %]Version has [% terms.Bugs %][% END %] + There are [% nb FILTER html %] [%+ terms.bugs %] associated with this + version! You must reassign those [% terms.bugs %] to another version + before you can delete this one. + + [% ELSIF error == "users_deletion_disabled" %] + [% title = "Deletion not activated" %] + [% admindocslinks = {'useradmin.html' => 'User administration'} %] + Sorry, the deletion of user accounts is not allowed. + + [% ELSIF error == "user_has_responsibility" %] + [% title = "Can't Delete User Account" %] + [% admindocslinks = {'useradmin.html' => 'User administration'} %] + The user you want to delete is set up as the default [% terms.bug %] + assignee + [% IF Param('useqacontact') %] + or QA contact + [% END %] + for at least one component. + For this reason, you cannot delete the account at this time. + + [% ELSIF error == "user_access_by_id_denied" %] + [% title = "User Access By Id Denied" %] + Logged-out users cannot use the "ids" argument to this function + to access any user information. + + [% ELSIF error == "user_access_by_match_denied" %] + [% title = "User-Matching Denied" %] + Logged-out users cannot use the "match" argument to this function + to access any user information. + + [% ELSIF error == "user_login_required" %] + [% title = "Login Name Required" %] + [% admindocslinks = {'useradmin.html' => 'User administration'} %] + You must enter a login name for the new user. + + [% ELSIF error == "user_match_failed" %] + [% title = "Match Failed" %] + <tt>[% name FILTER html %]</tt> does not exist or you are not allowed + to see that user. + + [% ELSIF error == "user_match_too_many" %] + [% title = "No Conclusive Match" %] + [% terms.Bugzilla %] cannot make a conclusive match for one or more + of the names and/or email addresses you entered for + the [% fields.join(', ') FILTER html %] field(s). + + [% ELSIF error == "user_not_insider" %] + [% title = "User Not In Insidergroup" %] + Sorry, but you are not allowed to (un)mark comments or attachments + as private. + + [% ELSIF error == "votes_must_be_nonnegative" %] + [% title = "Votes Must Be Non-negative" %] + [% admindocslinks = {'voting.html' => 'Setting up the voting feature'} %] + Only use non-negative numbers for your [% terms.bug %] votes. + + [% ELSIF error == "wrong_token_for_cancelling_email_change" %] + [% title = "Wrong Token" %] + That token cannot be used to cancel an email address change. + + [% ELSIF error == "wrong_token_for_changing_passwd" %] + [% title = "Wrong Token" %] + That token cannot be used to change your password. + + [% ELSIF error == "wrong_token_for_confirming_email_change" %] + [% title = "Wrong Token" %] + That token cannot be used to change your email address. + + [% ELSIF error == "wrong_token_for_creating_account" %] + [% title = "Wrong Token" %] + That token cannot be used to create a user account. + + [% ELSIF error == "xmlrpc_invalid_value" %] + "[% value FILTER html %]" is not a valid value for a + <[% type FILTER html %]> field. (See the XML-RPC specification + for details.) + + [% ELSIF error == "zero_length_file" %] + [% title = "File Is Empty" %] + The file you are trying to attach is empty, does not exist, or you don't + have permission to read it. + + [% ELSIF error == "illegal_user_id" %] + [% title = "Illegal User ID" %] + User ID '[% userid FILTER html %]' is not valid integer. + + [% ELSE %] + + [%# Try to find hooked error messages %] + [% error_message = Hook.process("errors") %] + + [% IF not error_message %] + [% title = "Error string not found" %] + The user error string <code>[% error FILTER html %]</code> was not found. + Please send email to [% Param("maintainer") %] describing the steps taken + to obtain this message. + [% ELSE %] + [% error_message FILTER none %] + [% END %] + [% END %] +[% END %] + +[%# We only want HTML error messages for ERROR_MODE_WEBPAGE %] +[% USE Bugzilla %] +[% IF Bugzilla.error_mode != constants.ERROR_MODE_WEBPAGE %] + [% IF Bugzilla.usage_mode == constants.USAGE_MODE_BROWSER %] + [% error_message FILTER none %] + [% ELSE %] + [% error_message FILTER txt %] + [% END %] + [% RETURN %] +[% END %] + +[% UNLESS header_done %] + [% PROCESS global/header.html.tmpl %] +[% END %] + +[% PROCESS global/docslinks.html.tmpl + docslinks = docslinks + admindocslinks = admindocslinks +%] + +<table cellpadding="20"> + <tr> + <td id="error_msg" class="throw_error"> + [% error_message FILTER none %] + </td> + </tr> +</table> + +<p> + Please press <b>Back</b> and try again. +</p> + +[%# If a saved search fails, people want the ability to edit or delete it. + # This is the best way of getting information about that possible saved + # search from any error call location. %] + +[% namedcmd = Bugzilla.cgi.param("namedcmd") %] +[% sharer_id = Bugzilla.cgi.param("sharer_id") %] +[% IF namedcmd AND error != "missing_query" + AND error != "saved_search_used_by_whines" + AND !sharer_id %] + <p> + Alternatively, you can + <a href="buglist.cgi?cmdtype=dorem&remaction=forget&namedcmd= + [% namedcmd FILTER url_quote %]">forget</a> + + [% FOREACH q = Bugzilla.user.queries %] + [% IF q.name == namedcmd %] + or <a href="query.cgi?[% q.url FILTER html %]">edit</a> + [% END %] + [% END %] + + the saved search '[% namedcmd FILTER html %]'. + </p> +[% END %] + +[% PROCESS global/footer.html.tmpl %] + +[% BLOCK object_name %] + [% IF class == "Bugzilla::Attachment" %] + attachment + [% ELSIF class == "Bugzilla::User" %] + user + [% ELSIF class == "Bugzilla::Component" %] + component + [% ELSIF class == "Bugzilla::Version" %] + version + [% ELSIF class == "Bugzilla::Milestone" %] + milestone + [% ELSIF class == "Bugzilla::Status" %] + status + [% ELSIF class == "Bugzilla::Flag" %] + flag + [% ELSIF class == "Bugzilla::FlagType" %] + flagtype + [% ELSIF class == "Bugzilla::Field" %] + field + [% ELSIF class == "Bugzilla::Group" %] + group + [% ELSIF class == "Bugzilla::Product" %] + product + [% ELSIF class == "Bugzilla::Search::Saved" %] + saved search + [% ELSIF ( matches = class.match('^Bugzilla::Field::Choice::(.+)') ) %] + [% SET field_name = matches.0 %] + [% field_descs.$field_name FILTER html %] + [% END %] +[% END %] diff --git a/template/en/default/global/user.html.tmpl b/template/en/default/global/user.html.tmpl new file mode 100644 index 0000000..df902b4 --- /dev/null +++ b/template/en/default/global/user.html.tmpl @@ -0,0 +1,39 @@ +[%# 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 Daniel Brooks. + # Portions created by the Initial Developer are Copyright (C) 2007 + # the Initial Developer. All Rights Reserved. + # + # Contributor(s): + # Daniel Brooks <db48x@db48x.net> + # Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[%# INTERFACE: + # who: A Bugzilla::User object that we are going to represent. + #%] + +<span class="vcard"> + [% FILTER collapse %] + [% IF user.id %] + <a class="email" href="mailto:[% who.email FILTER html %]" + title="[% who.identity FILTER html %]"> + [%- END -%] + [% IF who.name %] + <span class="fn">[% who.name FILTER html %]</span> + [% ELSE %] + [% who.login FILTER email FILTER html %] + [% END %] + [% '</a>' IF user.id %] + [% END %] +</span> diff --git a/template/en/default/global/userselect.html.tmpl b/template/en/default/global/userselect.html.tmpl new file mode 100644 index 0000000..35075ef --- /dev/null +++ b/template/en/default/global/userselect.html.tmpl @@ -0,0 +1,83 @@ +[%# 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): Byron Jones <bugzilla@glob.com.au> + # Frédéric Buclin <LpSolit@gmail.com> + #%] + +[%# INTERFACE: + # name: mandatory; field name + # id: optional; field id + # value: optional; default field value/selection + # onchange: optional; onchange attribute value + # disabled: optional; if true, the field is disabled + # accesskey: optional, input only; accesskey attribute value + # size: optional, input only; size attribute value + # emptyok: optional, select only; if true, prepend menu option to start of select + # multiple: optional, do multiselect box, value is size (height) of box + # custom_userlist: optional, specify a limited list of users to use + #%] + +[% IF Param("usemenuforusers") %] +<select name="[% name FILTER html %]" + [% IF id %] id="[% id FILTER html %]" [% END %] + [% IF onchange %] onchange="[% onchange FILTER html %]" [% END %] + [% IF disabled %] disabled="[% disabled FILTER html %]" [% END %] + [% IF accesskey %] accesskey="[% accesskey FILTER html %]" [% END %] + [% IF multiple %] multiple="multiple" size="[% multiple FILTER html %]" [% END %] +> + [% IF emptyok %] + <option value=""></option> + [% END %] + + [% UNLESS custom_userlist %] + [% custom_userlist = user.get_userlist %] + [% END %] + + [% SET selected = {} %] + [% IF value.defined %] + [% FOREACH selected_value IN value.split(', ') %] + [% SET selected.$selected_value = 1 %] + [% END %] + [% END %] + + [% FOREACH tmpuser = custom_userlist %] + [% IF tmpuser.visible OR selected.${tmpuser.login} == 1 %] + <option value="[% tmpuser.login FILTER html %]" + [% IF selected.${tmpuser.login} == 1 %] + selected="selected" + [%# A user account appears only once. Remove it from the list, so that + # we know if there are some selected accounts which have not been listed. %] + [% selected.delete(tmpuser.login) %] + [% END %] + >[% tmpuser.identity FILTER html %]</option> + [% END %] + [% END %] + + [%# If the list is not empty, this means some accounts have not been mentioned yet. %] + [% FOREACH selected_user = selected.keys %] + <option value="[% selected_user FILTER html %]" selected="selected">[% selected_user FILTER html %]</option> + [% END %] +</select> +[% ELSE %] +<input + name="[% name FILTER html %]" + value="[% value FILTER html %]" + [% IF onchange %] onchange="[% onchange FILTER html %]" [% END %] + [% IF disabled %] disabled="[% disabled FILTER html %]" [% END %] + [% IF accesskey %] accesskey="[% accesskey FILTER html %]" [% END %] + [% IF size %] size="[% size FILTER html %]" [% END %] + [% IF id %] id="[% id FILTER html %]" [% END %] +> +[% END %] + + diff --git a/template/en/default/global/variables.none.tmpl b/template/en/default/global/variables.none.tmpl new file mode 100644 index 0000000..dd7281e --- /dev/null +++ b/template/en/default/global/variables.none.tmpl @@ -0,0 +1,42 @@ +[%# 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): + #%] + +[%# This is a list of terms that may be changed to "brand" the Bugzilla + # instance (for example, referring to "bugs" as "issues".) When used, these + # strings are used in several different types of content, and are not + # protected with Template-Toolkit FILTERs. Consequently, no special + # characters are allowed. + # + # Remember to PROCESS rather than INCLUDE this template. + #%] + +[% terms = { + "bug" => "bug", + "Bug" => "Bug", + "abug" => "a bug", + "Abug" => "A bug", + "aBug" => "a Bug", + "ABug" => "A Bug", + "bugs" => "bugs", + "Bugs" => "Bugs", + "zeroSearchResults" => "Zarro Boogs found", + "Bugzilla" => "Bugzilla" + } +%] diff --git a/template/en/default/index.html.tmpl b/template/en/default/index.html.tmpl new file mode 100644 index 0000000..a971b59 --- /dev/null +++ b/template/en/default/index.html.tmpl @@ -0,0 +1,178 @@ +[%# -*- 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@bugzilla.org> + # Vitaly Harisov <vitaly@rathedg.com> + # Guy Pyrzak <guy.pyrzak@gmail.com> + #%] + +[%# INTERFACE: + # release: a hash containing data about new releases, if any. + #%] + +[% PROCESS global/variables.none.tmpl %] + + +[% PROCESS global/header.html.tmpl + title = "$terms.Bugzilla Main Page" + header = "Main Page" + header_addl_info = "version $constants.BUGZILLA_VERSION" + style_urls = [ 'skins/standard/index.css' ] +%] + + +<script type="text/javascript"> +<!-- +function onLoadActions() { + quicksearchHelpText('quicksearch_main', 'show'); + if( window.external.AddSearchProvider ){ + YAHOO.util.Dom.removeClass('quicksearch_plugin', 'bz_default_hidden'); + } + document.getElementById('quicksearch_top').focus(); +} +function addSidebar() { + var sidebarname=window.location.host; + if (!/bug/i.test(sidebarname)) + sidebarname="[% terms.Bugzilla %] "+sidebarname; + window.sidebar.addPanel (sidebarname, "[% urlbase FILTER html %]sidebar.cgi", ""); +} +var quicksearch_message = "Enter [% terms.abug %] # or some search terms"; + +function checkQuicksearch( form ) { + if (form.quicksearch.value == '' || form.quicksearch.value == quicksearch_message ) { + alert('Please enter one or more search terms first.'); + return false; + } + return true; +} + +function quicksearchHelpText(el_id, action){ + var el = document.getElementById(el_id); + if ( action == "show") { + if( el.value == "" ) { + el.value = quicksearch_message + YAHOO.util.Dom.addClass(el, "quicksearch_help_text"); + } + } else { + if( el.value == quicksearch_message ) { + el.value = ""; + YAHOO.util.Dom.removeClass(el, "quicksearch_help_text"); + } + } +} +YAHOO.util.Event.onDOMReady(onLoadActions); +//--> +</script> + +[% IF release %] + <div id="new_release"> + [% IF release.data %] + [% IF release.deprecated %] + <p>[% terms.Bugzilla %] [%+ release.deprecated FILTER html %] is no longer + supported. You are highly encouraged to upgrade in order to keep your + system secure.</p> + [% END %] + + <p>A new [% terms.Bugzilla %] version ([% release.data.latest_ver FILTER html %]) + is available at + <a href="[% release.data.url FILTER html %]">[% release.data.url FILTER html %]</a>.<br> + Release date: [% release.data.date FILTER html %]</p> + + <p class="notice">This message is only shown to logged in users with admin privs. + You can configure this notification from the + <a href="editparams.cgi?section=general#upgrade_notification">Parameters</a> page.</p> + [% ELSIF release.error == "cannot_download" %] + <p>The local XML file '[% release.xml_file FILTER html %]' cannot be created. + Please make sure the web server can write in this directory and that you can access + the web. If you are behind a proxy, set the + <a href="editparams.cgi?section=advanced#proxy_url">proxy_url</a> parameter correctly.</p> + [% ELSIF release.error == "no_update" %] + <p>The local XML file '[% release.xml_file FILTER html %]' cannot be updated. + Please make sure the web server can edit this file.</p> + [% ELSIF release.error == "no_access" %] + <p>The local XML file '[% release.xml_file FILTER html %]' cannot be read. + Please make sure this file has the correct rights set on it.</p> + [% ELSIF release.error == "corrupted" %] + <p>The local XML file '[% release.xml_file FILTER html %]' has an invalid XML format. + Please delete it and try accessing this page again.</p> + [% ELSIF release.error == "unknown_parameter" %] + <p>'[% Param("upgrade_notification") FILTER html %]' is not a valid notification + parameter. Please check this parameter in the + <a href="editparams.cgi?section=general#upgrade_notification">Parameters</a> page.</p> + [% END %] + </div> +[% END %] + +<div id="page-index"> + <table> + <tr> + <td> + <h1 id="welcome"> Welcome to [% terms.Bugzilla %]</h1> + <div class="intro">[% Hook.process('intro') %]</div> + <a id="enter_bug" class="bz_common_actions" + href="enter_bug.cgi"><span>File [% terms.aBug %]</span></a> + + <a id="query" class="bz_common_actions" + href="query.cgi"><span>Search</span></a> + + <a id="account" class="bz_common_actions" + [% IF user.id %] + href="userprefs.cgi"><span>User Preferences</span></a> + [% ELSE %] + href="http://identity.mageia.org/register"><span>Open a New Account</span></a> + [% END %] + + <form id="quicksearchForm" name="quicksearchForm" action="buglist.cgi" + onsubmit="return checkQuicksearch(this);"> + <div> + <input id="quicksearch_main" type="text" name="quicksearch" + onfocus="quicksearchHelpText(this.id, 'hide');" + onblur="quicksearchHelpText(this.id, 'show');" + > + <input id="find" type="submit" value="Quick Search"> + <ul class="additional_links" id="quicksearch_links"> + <li> + <a href="page.cgi?id=quicksearch.html">Quick Search help</a> + </li> + <li class="bz_default_hidden" id="quicksearch_plugin"> + | + <a href="javascript:window.external.AddSearchProvider('[% urlbase FILTER html %]search_plugin.cgi')"> + Install the Quick Search plugin + </a> + </li> + </ul> + <ul class="additional_links"> + <li> + <a href="[% docs_urlbase FILTER html %]using.html"> + [%- terms.Bugzilla %] User's Guide</a> + </li> + <li> + | + <a href="page.cgi?id=release-notes.html">Release Notes</a> + </li> + </ul> + </div> + </form> + <div class="outro">[% Hook.process('outro') %]</div> + </td> + </tr> + </table> +</div> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/index.html.tmpl~ b/template/en/default/index.html.tmpl~ new file mode 100644 index 0000000..41a46f4 --- /dev/null +++ b/template/en/default/index.html.tmpl~ @@ -0,0 +1,182 @@ +[%# -*- 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@bugzilla.org> + # Vitaly Harisov <vitaly@rathedg.com> + # Guy Pyrzak <guy.pyrzak@gmail.com> + #%] + +[%# INTERFACE: + # release: a hash containing data about new releases, if any. + #%] + +[% PROCESS global/variables.none.tmpl %] + + +[% PROCESS global/header.html.tmpl + title = "$terms.Bugzilla Main Page" + header = "Main Page" + header_addl_info = "version $constants.BUGZILLA_VERSION" + style_urls = [ 'skins/standard/index.css' ] +%] + + +<script type="text/javascript"> +<!-- +function onLoadActions() { + quicksearchHelpText('quicksearch_main', 'show'); + if( window.external.AddSearchProvider ){ + YAHOO.util.Dom.removeClass('quicksearch_plugin', 'bz_default_hidden'); + } + document.getElementById('quicksearch_top').focus(); +} +function addSidebar() { + var sidebarname=window.location.host; + if (!/bug/i.test(sidebarname)) + sidebarname="[% terms.Bugzilla %] "+sidebarname; + window.sidebar.addPanel (sidebarname, "[% urlbase FILTER html %]sidebar.cgi", ""); +} +var quicksearch_message = "Enter [% terms.abug %] # or some search terms"; + +function checkQuicksearch( form ) { + if (form.quicksearch.value == '' || form.quicksearch.value == quicksearch_message ) { + alert('Please enter one or more search terms first.'); + return false; + } + return true; +} + +function quicksearchHelpText(el_id, action){ + var el = document.getElementById(el_id); + if ( action == "show") { + if( el.value == "" ) { + el.value = quicksearch_message + YAHOO.util.Dom.addClass(el, "quicksearch_help_text"); + } + } else { + if( el.value == quicksearch_message ) { + el.value = ""; + YAHOO.util.Dom.removeClass(el, "quicksearch_help_text"); + } + } +} +YAHOO.util.Event.onDOMReady(onLoadActions); +//--> +</script> + +[% IF release %] + <div id="new_release"> + [% IF release.data %] + [% IF release.deprecated %] + <p>[% terms.Bugzilla %] [%+ release.deprecated FILTER html %] is no longer + supported. You are highly encouraged to upgrade in order to keep your + system secure.</p> + [% END %] + + <p>A new [% terms.Bugzilla %] version ([% release.data.latest_ver FILTER html %]) + is available at + <a href="[% release.data.url FILTER html %]">[% release.data.url FILTER html %]</a>.<br> + Release date: [% release.data.date FILTER html %]</p> + + <p class="notice">This message is only shown to logged in users with admin privs. + You can configure this notification from the + <a href="editparams.cgi?section=general#upgrade_notification">Parameters</a> page.</p> + [% ELSIF release.error == "cannot_download" %] + <p>The local XML file '[% release.xml_file FILTER html %]' cannot be created. + Please make sure the web server can write in this directory and that you can access + the web. If you are behind a proxy, set the + <a href="editparams.cgi?section=advanced#proxy_url">proxy_url</a> parameter correctly.</p> + [% ELSIF release.error == "no_update" %] + <p>The local XML file '[% release.xml_file FILTER html %]' cannot be updated. + Please make sure the web server can edit this file.</p> + [% ELSIF release.error == "no_access" %] + <p>The local XML file '[% release.xml_file FILTER html %]' cannot be read. + Please make sure this file has the correct rights set on it.</p> + [% ELSIF release.error == "corrupted" %] + <p>The local XML file '[% release.xml_file FILTER html %]' has an invalid XML format. + Please delete it and try accessing this page again.</p> + [% ELSIF release.error == "unknown_parameter" %] + <p>'[% Param("upgrade_notification") FILTER html %]' is not a valid notification + parameter. Please check this parameter in the + <a href="editparams.cgi?section=general#upgrade_notification">Parameters</a> page.</p> + [% END %] + </div> +[% END %] + +<div id="page-index"> + <table> + <tr> + <td> + <h1 id="welcome"> Welcome to [% terms.Bugzilla %]</h1> + <div class="intro">[% Hook.process('intro') %]</div> + <a id="enter_bug" class="bz_common_actions" + href="enter_bug.cgi"><span>File [% terms.aBug %]</span></a> + + <a id="query" class="bz_common_actions" + href="query.cgi"><span>Search</span></a> + + <a id="account" class="bz_common_actions" + [% IF user.id %] + href="userprefs.cgi"><span>User Preferences</span></a> + [% ELSIF Param('createemailregexp') + && user.authorizer.user_can_create_account + %] + href="createaccount.cgi"><span>Open a New Account</span></a> + [% ELSE %] + href="?GoAheadAndLogIn=1"><span>Log In</span></a> + [% END %] + + <form id="quicksearchForm" name="quicksearchForm" action="buglist.cgi" + onsubmit="return checkQuicksearch(this);"> + <div> + <input id="quicksearch_main" type="text" name="quicksearch" + onfocus="quicksearchHelpText(this.id, 'hide');" + onblur="quicksearchHelpText(this.id, 'show');" + > + <input id="find" type="submit" value="Quick Search"> + <ul class="additional_links" id="quicksearch_links"> + <li> + <a href="page.cgi?id=quicksearch.html">Quick Search help</a> + </li> + <li class="bz_default_hidden" id="quicksearch_plugin"> + | + <a href="javascript:window.external.AddSearchProvider('[% urlbase FILTER html %]search_plugin.cgi')"> + Install the Quick Search plugin + </a> + </li> + </ul> + <ul class="additional_links"> + <li> + <a href="[% docs_urlbase FILTER html %]using.html"> + [%- terms.Bugzilla %] User's Guide</a> + </li> + <li> + | + <a href="page.cgi?id=release-notes.html">Release Notes</a> + </li> + </ul> + </div> + </form> + <div class="outro">[% Hook.process('outro') %]</div> + </td> + </tr> + </table> +</div> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/list/change-columns.html.tmpl b/template/en/default/list/change-columns.html.tmpl new file mode 100644 index 0000000..36cd5db --- /dev/null +++ b/template/en/default/list/change-columns.html.tmpl @@ -0,0 +1,127 @@ +[%# 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): Dave Lawrence <dkl@redhat.com> + # Pascal Held <paheld@gmail.com> + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl + title = "Change Columns" + javascript_urls = "js/change-columns.js" + onload = "initChangeColumns()" +%] + +<p> + Select the columns you wish to appear in your [% terms.bug %] lists. Note that + this feature requires cookies to work. +</p> + +[% PROCESS "global/field-descs.none.tmpl" %] +[% field_descs.short_short_desc = "Summary (first 60 characters)" %] +[% field_descs.short_desc = "Full Summary" %] +[% field_descs.assigned_to_realname = "Assignee Realname" %] +[% field_descs.reporter_realname = "Reporter Realname" %] +[% field_descs.qa_contact_realname = "QA Contact Realname" %] + +<form name="changecolumns" action="colchange.cgi" onsubmit="change_submit();"> + <input type="hidden" name="rememberedquery" value="[% buffer FILTER html %]"> + <table> + <tr> + <th><div id="avail_header" class="bz_default_hidden">Available Columns</div></th> + <th></th> + <th>Selected Columns</th> + <th></th> + </tr> + <tr> + <td> + <select name="available_columns" id="available_columns" + size="15" multiple="multiple" onchange="updateView();" + class="bz_default_hidden"> + </select> + </td> + <td> + <input class="image_button bz_default_hidden" type="button" + id="select_button" name="select" onclick="move_select()"> + <br><br> + <input class="image_button bz_default_hidden" type="button" + id="deselect_button" name="deselect" onclick="move_deselect()"> + </td> + <td> + <select name="selected_columns" id="selected_columns" + size="15" multiple="multiple" onchange="updateView();"> + [% FOREACH column = collist %] + <option value="[% column FILTER html %]" selected="selected"> + [% (field_descs.${column} || column) FILTER html %] + </option> + [% END %] + [% FOREACH column = masterlist %] + [% IF lsearch(collist, column) == -1 %] + <option value="[% column FILTER html %]"> + [% (field_descs.${column} || column) FILTER html %] + </option> + [% END %] + [% END %] + </select> + </td> + <td> + <input class="image_button bz_default_hidden" type="button" + id="up_button" name="up" onclick="move_up()"> + <br><br> + <input class="image_button bz_default_hidden" type="button" + id="down_button" name="down" onclick="move_down()"> + </td> + </tr> + </table> + + <p> + <input id="nosplitheader" type="radio" name="splitheader" value="0" + [%+ "checked='checked'" IF NOT splitheader %]> + <label for="nosplitheader"> + Normal headers (prettier) + </label> + <br> + + <input id="splitheader" type="radio" name="splitheader" value="1" + [%+ "checked='checked'" IF splitheader %]> + <label for="splitheader"> + Stagger headers (often makes list more compact) + </label> + </p> + + [% IF saved_search %] + <p> + <input type="hidden" name="saved_search" + value="[% saved_search.id FILTER html%]" > + <input type="checkbox" id="save_columns_for_search" checked="checked" + name="save_columns_for_search" value="1"> + <label for="save_columns_for_search">Save this column list only + for search '[% saved_search.name FILTER html %]'</label> + </p> + [% END %] + + <p> + <input type="submit" id="change" value="Change Columns"> + </p> + + <input type="submit" id="resetit" name="resetit" + value="Reset to [% terms.Bugzilla %] default"> +</form> + +[% PROCESS global/footer.html.tmpl %] + diff --git a/template/en/default/list/edit-multiple.html.tmpl b/template/en/default/list/edit-multiple.html.tmpl new file mode 100644 index 0000000..75f2f83 --- /dev/null +++ b/template/en/default/list/edit-multiple.html.tmpl @@ -0,0 +1,424 @@ +[%# 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): Myk Melez <myk@mozilla.org> + # Max Kanat-Alexander <mkanat@bugzilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + # Guy Pyrzak <guy.pyrzak@gmail.com> + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% dontchange = "--do_not_change--" %] +<input type="hidden" name="dontchange" value="[% dontchange FILTER html %]"> +<input type="hidden" name="token" value="[% token FILTER html %]"> + +<script type="text/javascript"> + function SetCheckboxes(value) { + var elements = document.forms.changeform.getElementsByTagName('input'), + numelements = elements.length, + item, i; + for (i = 0; i < numelements; i++) { + item = elements[i]; + if (item.type === 'checkbox' && item.name.match(/^id_/)) { + item.checked = value; + } + } + } + document.write(' <input type="button" name="uncheck_all" value="Uncheck All" onclick="SetCheckboxes(false);">'); + document.write(' <input type="button" name="check_all" value="Check All" onclick="SetCheckboxes(true);">'); +</script> + +<hr> + +<p style="font-size:smaller"> + To change multiple [% terms.bugs %]:</p> +<ol style="font-size:smaller"> + <li>Check the [% terms.bugs %] you want to change above.</li> + <li>Make your changes in the form fields below. If the change + you are making requires an explanation, include it in + the comments box.</li> + <li>Click the <em>Commit</em> button.</li> +</ol> + +<table id="form"> + <tr> + + <th><label for="product">Product:</label></th> + <td> + [% PROCESS selectmenu menuname = "product" + menuitems = products + property = "name" %] + </td> + + <th><label for="version">Version:</label></th> + <td> + [% PROCESS selectmenu menuname = "version" + menuitems = versions + property = "" %] + </td> + + </tr> + <tr> + + <th><label for="component">Component:</label></th> + <td> + [% PROCESS selectmenu menuname = "component" + menuitems = components %] + </td> + + <th> + <label for="priority"> + <a href="page.cgi?id=fields.html#priority">Priority</a>: + </label> + </th> + <td> + [% PROCESS selectmenu menuname = "priority" + menuitems = priorities %] + </td> + + </tr> + <tr> + + <th> + <label for="rep_platform"> + <a href="page.cgi?id=fields.html#rep_platform">Platform</a>: + </label> + </th> + <td> + [% PROCESS selectmenu menuname = "rep_platform" + menuitems = platforms %] + </td> + + <th> + <label for="bug_severity"> + <a href="page.cgi?id=fields.html#bug_severity">Severity</a>: + </label> + </th> + <td> + [% PROCESS selectmenu menuname = "bug_severity" + menuitems = severities %] + </td> + + </tr> + + <tr> + <th> + <label for="op_sys"> + <a href="page.cgi?id=fields.html#op_sys">OS</a>: + </label> + </th> + <td [% " colspan=\"3\"" IF !Param("usetargetmilestone") %]> + [% PROCESS selectmenu menuname = "op_sys" + menuitems = op_sys %] + </td> + + [% IF Param("usetargetmilestone") %] + <th><label for="target_milestone">Target Milestone:</label></th> + <td> + [% PROCESS selectmenu menuname = "target_milestone" + menuitems = targetmilestones %] + </td> + [% END %] + </tr> + + <tr> + <th><label for="bug_status">Status:</label></th> + <td colspan="3">[% PROCESS status_section %]</td> + </tr> + [% IF user.is_timetracker %] + <tr> + <th><label for="estimated_time">Estimated Hours:</label></th> + <td> + <input id="estimated_time" + name="estimated_time" + value="[% dontchange FILTER html %]" + size="6"> + </td> + <th><label for="deadline">Deadline (YYYY-MM-DD):</label></th> + <td> + <input id="deadline" + name="deadline" + value="[% dontchange FILTER html %]" + size="10"> + </td> + </tr> + <tr> + <th><label for="remaining_time">Remaining Hours:</label></th> + <td> + <input id="remaining_time" + name="remaining_time" + value="[% dontchange FILTER html %]" + size="6"> + </td> + <th> </th> + <td> </td> + </tr> + [% END %] + + <tr> + <th><label for="assigned_to">Assignee:</label></th> + <td colspan="3"> + [% INCLUDE global/userselect.html.tmpl + id => "assigned_to" + name => "assigned_to" + value => dontchange + size => 32 + %] + <input type="checkbox" id="set_default_assignee" name="set_default_assignee" value="1"> + <label for="set_default_assignee">Reset Assignee to default</label> + </td> + </tr> + + [% IF Param("useqacontact") %] + <tr> + <th><label for="qa_contact">QA Contact:</label></th> + <td colspan="3"> + [% INCLUDE global/userselect.html.tmpl + id => "qa_contact" + name => "qa_contact" + value => dontchange + size => 32 + %] + <input type="checkbox" id="set_default_qa_contact" name="set_default_qa_contact" value="1"> + <label for="set_default_qa_contact">Reset QA Contact to default</label> + </td> + </tr> + [% END %] + + <tr> + + <th><label for="masscc">CC List:</label></th> + <td colspan="3"> + <input id="masscc" name="masscc" size="32"> + <select name="ccaction"> + <option value="add">Add these to the CC List</option> + <option value="remove">Remove these from the CC List</option> + </select> + </td> + + </tr> + + [% IF use_keywords %] + <tr> + + <th> + <label for="keywords"> + <a href="describekeywords.cgi">Keywords</a>: + </label> + </th> + <td colspan="3"> + <input id="keywords" name="keywords" size="32"> + <select name="keywordaction"> + <option value="add">Add these keywords</option> + <option value="delete">Delete these keywords</option> + <option value="makeexact">Make the keywords be exactly this list</option> + </select> + </td> + + </tr> + [% END %] + + <tr> + <th> + <label for="dependson"> + Depends On: + </label> + </th> + <td colspan="3"> + <input id="dependson" name="dependson" size="32"> + <select name="dependson_action"> + <option value="add">Add these IDs</option> + <option value="remove">Delete these IDs</option> + </select> + </td> + </tr> + + <tr> + <th> + <label for="blocked"> + Blocks: + </label> + </th> + <td colspan="3"> + <input id="blocked" name="blocked" size="32"> + <select name="blocked_action"> + <option value="add">Add these IDs</option> + <option value="remove">Delete these IDs</option> + </select> + </td> + </tr> + + [% IF Param('usestatuswhiteboard') %] + <tr> + <td align="right"> + <b>Status Whiteboard:</b> + </td> + <td colspan="7"> + <input name="status_whiteboard" + value="[% dontchange FILTER html %]" size="60"> + </td> + </tr> + [% END %] + + [% USE Bugzilla %] + [% FOREACH field = Bugzilla.active_custom_fields %] + <tr> + [% PROCESS bug/field.html.tmpl value = dontchange + editable = 1 + allow_dont_change = 1 %] + </tr> + [% END %] + + [% Hook.process("after_custom_fields") %] + +</table> + +<b><label for="comment">Additional Comments:</label></b> +[% IF user.is_insider %] + <input type="checkbox" name="commentprivacy" value="1" + id="newcommentprivacy" + onClick="updateCommentTagControl(this, form)"/> + <label for="newcommentprivacy"> + Make comment private (visible only to members of the + <strong>[% Param('insidergroup') FILTER html %]</strong> group) + </label> +[% END %] +<br> +[% INCLUDE global/textarea.html.tmpl + name = 'comment' + id = 'comment' + minrows = 5 + maxrows = 25 + cols = constants.COMMENT_COLS +%]<br> + +[% Hook.process('before_groups') %] + +[% IF groups.size > 0 %] + + <b>Groups:</b><br> + <table border="1"> + <tr> + <th>Don't<br>change<br>this group<br>restriction</th> + <th>Remove<br>[% terms.bugs %]<br>from this<br>group</th> + <th>Add<br>[% terms.bugs %]<br>to this<br>group</th> + <th>Group Name:</th> + </tr> + + [% FOREACH group = groups %] + <tr> + <td align="center"> + <input type="radio" name="bit-[% group.id %]" value="-1" checked="checked"> + </td> + <td align="center"> + <input type="radio" name="bit-[% group.id %]" value="0"> + </td> + [% IF group.is_active %] + <td align="center"> + <input type="radio" name="bit-[% group.id %]" value="1"> + </td> + [% ELSE %] + <td> </td> + [% foundinactive = 1 %] + [% END %] + + <td> + [% SET inactive = !group.is_active %] + [% group.description FILTER html_light FILTER inactive(inactive) %] + </td> + + </tr> + [% END %] + + </table> + + [% IF foundinactive %] + <p style="font-size:smaller">(Note: [% terms.Bugs %] may not be added to [% FILTER inactive %]inactive + groups[% END %], only removed.)</p> + [% END %] + +[% END %] +<input type="submit" id="commit" value="Commit"> + +[% IF Param('move-enabled') && user.is_mover %] + <input type="submit" name="action" id="action" value="[% Param('move-button-text') %]"> +[% END %] + +[%############################################################################%] +[%# Select Menu Block #%] +[%############################################################################%] + +[% BLOCK selectmenu %] + <select id="[% menuname %]" name="[% menuname %]"> + <option value="[% dontchange FILTER html %]" selected="selected"> + [% dontchange FILTER html %] + </option> + [% FOREACH menuitem = menuitems %] + [% IF property %][% menuitem = menuitem.$property %][% END %] + <option value="[% menuitem FILTER html %]">[% display_value(menuname, menuitem) FILTER html %]</option> + [% END %] + </select> +[% END %] + +[%############################################################################%] +[%# Status Block #%] +[%############################################################################%] + +[% BLOCK status_section %] + [% all_open_bugs = !current_bug_statuses.containsany(closedstates) %] + [% all_closed_bugs = !current_bug_statuses.containsany(openstates) %] + [% closed_status_array = [] %] + + <select name="bug_status" id="bug_status"> + <option value="[% dontchange FILTER html %]" selected="selected">[% dontchange FILTER html %]</option> + + [% FOREACH bug_status = new_bug_statuses %] + <option value="[% bug_status.name FILTER html %]"> + [% display_value("bug_status", bug_status.name) FILTER html %] + </option> + [% IF !bug_status.is_open %] + [% filtered_status = bug_status.name FILTER js %] + [% closed_status_array.push( filtered_status ) %] + [% END %] + [% END %] + + [%# If all the bugs being changed are closed, allow the user to change their resolution. %] + [% IF all_closed_bugs %] + [% filtered_status = dontchange FILTER js %] + [% closed_status_array.push( filtered_status ) %] + [% END %] + </select> + + <span id="resolution_settings"> + <select id="resolution" name="resolution"> + <option value="[% dontchange FILTER html %]" selected >[% dontchange FILTER html %]</option> + [% FOREACH r = resolutions %] + [% NEXT IF !r %] + [% NEXT IF r == "DUPLICATE" || r == "MOVED" %] + <option value="[% r FILTER html %]">[% display_value("resolution", r) FILTER html %]</option> + [% END %] + </select> + </span> + + <script type="text/javascript"> + var close_status_array = new Array("[% closed_status_array.join('", "') FILTER none %]"); + YAHOO.util.Event.addListener('bug_status', "change", showHideStatusItems, '[% "is_duplicate" IF bug.dup_id %]'); + YAHOO.util.Event.onDOMReady( showHideStatusItems ); + </script> + +[% END %] diff --git a/template/en/default/list/list-simple.html.tmpl b/template/en/default/list/list-simple.html.tmpl new file mode 100644 index 0000000..125a164 --- /dev/null +++ b/template/en/default/list/list-simple.html.tmpl @@ -0,0 +1,53 @@ +[%# 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): Myk Melez <myk@mozilla.org> + #%] + +[%# INTERFACE: + # title: string. The title for this page. (optional) + #%] + +[% PROCESS global/variables.none.tmpl %] + +[%############################################################################%] +[%# Initialization #%] +[%############################################################################%] + +[% DEFAULT title = "$terms.Bug List" %] + +[%############################################################################%] +[%# Bug Table #%] +[%############################################################################%] + +<html> + + <head> + <title>[% title FILTER html %]</title> + <base href="[% urlbase FILTER html %]"> + <link href="skins/standard/buglist.css" rel="stylesheet" type="text/css"> + </head> + + <body> + [% IF bugs.size == 0 %] + <h3>[% terms.zeroSearchResults %].</h3> + [% ELSE %] + [% PROCESS list/table.html.tmpl %] + [% END %] + </body> + +</html> diff --git a/template/en/default/list/list.atom.tmpl b/template/en/default/list/list.atom.tmpl new file mode 100644 index 0000000..ed0c660 --- /dev/null +++ b/template/en/default/list/list.atom.tmpl @@ -0,0 +1,101 @@ +[%# 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): Walter Hoehn <wassa@columbia.edu> + # John Belmonte <john@neggie.net> + # Jason Remillard <jremillardshop@letterboxes.org> + # Phil Ringnalda <bugzilla@philringnalda.com> + # + # This is a template for generating an Atom representation of a buglist. + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% DEFAULT title = "$terms.Bugzilla $terms.Bugs" %] + +<?xml version="1.0"[% IF Param('utf8') %] encoding="UTF-8"[% END %]?> +<feed xmlns="http://www.w3.org/2005/Atom"> + <title>[% title FILTER xml %]</title> + <link rel="alternate" type="text/html" + href="[% urlbase FILTER html %]buglist.cgi? + [%- urlquerypart.replace('ctype=atom[&]?','') FILTER xml %]"/> + <link rel="self" type="application/atom+xml" + href="[% urlbase FILTER html %]buglist.cgi? + [%- urlquerypart FILTER xml %]"/> + <updated>[% bugs.sort('changedtime').last.changedtime FILTER time("%Y-%m-%dT%H:%M:%SZ", "UTC") + FILTER xml %]</updated> + <id>[% urlbase FILTER html %]buglist.cgi?[% urlquerypart FILTER xml %]</id> + + [% FOREACH bug = bugs %] + <entry> + <title>[% "@" IF bug.secure_mode %][[% terms.Bug %] [%+ bug.bug_id FILTER xml %]] [% bug.short_desc FILTER xml %]</title> + <link rel="alternate" type="text/html" + href="[% urlbase FILTER html %]show_bug.cgi?id= + [%- bug.bug_id FILTER xml %]"/> + <id>[% urlbase FILTER xml %]show_bug.cgi?id=[% bug.bug_id FILTER xml %]</id> + <author> + <name>[% bug.reporter_realname ? bug.reporter_realname : bug.reporter FILTER xml %]</name> + </author> + <updated>[% bug.changedtime FILTER time("%Y-%m-%dT%H:%M:%SZ", "UTC") FILTER xml %]</updated> + <summary type="html"> + [%# Filter out the entire block, so that we don't need to escape the html code out %] + [% FILTER xml %] + <table> + <tr> + <th>Field</th><th>Value</th> + </tr><tr class="bz_feed_product"> + <td>[% columns.product.title FILTER html %]</td> + <td>[% bug.product FILTER html %]</td> + </tr><tr class="bz_feed_component"> + <td>[% columns.component.title FILTER html %]</td> + <td>[% bug.component FILTER html %]</td> + </tr><tr class="bz_feed_assignee"> + <td>[% columns.assigned_to_realname.title FILTER html %]</td> + <td>[% bug.assigned_to_realname ? bug.assigned_to_realname : bug.assigned_to FILTER html %]</td> + </tr><tr class="bz_feed_reporter"> + <td>[% columns.reporter_realname.title FILTER html %]</td> + <td>[% bug.reporter_realname ? bug.reporter_realname : bug.reporter FILTER html %]</td> + </tr><tr class="bz_feed_bug_status"> + <td>[% columns.bug_status.title FILTER html %]</td> + <td>[% display_value("bug_status", bug.bug_status) FILTER html %]</td> + </tr><tr class="bz_feed_resolution"> + <td>[% columns.resolution.title FILTER html %] </td> + <td>[% display_value("resolution", bug.resolution) FILTER html %]</td> + </tr><tr class="bz_feed_priority"> + <td>[% columns.priority.title FILTER html %]</td> + <td>[% display_value("priority", bug.priority) FILTER html %]</td> + </tr><tr class="bz_feed_severity"> + <td>[% columns.bug_severity.title FILTER html %] </td> + <td>[% display_value("bug_severity", bug.bug_severity) FILTER html %]</td> + [% IF Param("usetargetmilestone") %] + </tr><tr class="bz_feed_target_milestone"> + <td>[% columns.target_milestone.title FILTER html %]</td> + <td>[% bug.target_milestone FILTER html %]</td> + [% END %] + </tr><tr class="bz_feed_creation_date"> + <td>[% columns.opendate.title FILTER html %]</td> + <td>[% bug.opendate FILTER html %]</td> + </tr><tr class="bz_feed_changed_date"> + <td>[% columns.changeddate.title FILTER html %]</td> + <td>[% bug.changeddate FILTER html -%]</td> + </tr> + </table> + [% END %] + </summary> + </entry> + [% END %] +</feed> diff --git a/template/en/default/list/list.csv.tmpl b/template/en/default/list/list.csv.tmpl new file mode 100644 index 0000000..6114d6f --- /dev/null +++ b/template/en/default/list/list.csv.tmpl @@ -0,0 +1,46 @@ +[%# 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): Myk Melez <myk@mozilla.org> + # Gervase Markham <gerv@gerv.net> + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% colsepchar = user.settings.csv_colsepchar.value %] + +bug_id +[% FOREACH column = displaycolumns %] + [% colsepchar %][% column FILTER csv %] +[% END %] + +[% FOREACH bug = bugs %] + [% bug.bug_id %] + [% FOREACH column = displaycolumns %] + [% colsepchar %] + [% IF column == "opendate" OR column == "changeddate" %] + [% rawcolumn = column.replace("date", "time") %] + [% bug.$column = bug.$rawcolumn FILTER time("%Y-%m-%d %H:%M:%S") %] + [% ELSIF column == 'bug_status' %] + [% bug.$column = display_value("bug_status", bug.$column) %] + [% ELSIF column == 'resolution' %] + [%- bug.$column = display_value("resolution", bug.$column) %] + [% END %] + [% bug.$column FILTER csv %] + [% END %] + +[% END %] diff --git a/template/en/default/list/list.html.tmpl b/template/en/default/list/list.html.tmpl new file mode 100644 index 0000000..941b34a --- /dev/null +++ b/template/en/default/list/list.html.tmpl @@ -0,0 +1,291 @@ +[%# 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): Myk Melez <myk@mozilla.org> + #%] + +[%# INTERFACE: + # searchtype: string. Type of search - either "series", "saved" or undef. + # ... + # defaultsavename: string. The default name for saving the query. + #%] + +[%############################################################################%] +[%# Template Initialization #%] +[%############################################################################%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% title = "$terms.Bug List" %] +[% IF searchname || defaultsavename %] + [% title = title _ ": " _ (searchname OR defaultsavename) FILTER html %] +[% END %] + +[% qorder = order FILTER url_quote IF order %] + + +[%############################################################################%] +[%# Page Header #%] +[%############################################################################%] + +[% PROCESS global/header.html.tmpl + title = title + style = style + atomlink = "buglist.cgi?$urlquerypart&title=$title&ctype=atom" + javascript_urls = [ "js/util.js", "js/field.js", "js/yui/calendar.js" ] + style_urls = [ "skins/standard/buglist.css", "skins/standard/yui/calendar.css" ] + doc_section = "query.html#list" +%] + +<div class="bz_query_head" align="center"> + <span class="bz_query_timestamp"> + <b>[% currenttime FILTER time('%a %b %e %Y %T %Z') FILTER html %]</b><br> + </span> + + [% IF debug %] + <p class="bz_query">[% query FILTER html %]</p> + [% IF query_explain.defined %] + <pre class="bz_query_explain">[% query_explain FILTER html %]</pre> + [% END %] + [% END %] + + [% IF user.settings.display_quips.value == 'on' %] + [% DEFAULT quip = "$terms.Bugzilla would like to put a random quip here, but no one has entered any." %] + <span class="bz_quip"> + <a href="quips.cgi"><i>[% quip FILTER html %]</i></a> + </span> + [% END %] + +</div> + +[% IF toolong %] + <h2 class="bz_smallminded"> + This list is too long for [% terms.Bugzilla %]'s little mind; the + Next/Prev/First/Last buttons won't appear on individual [% terms.bugs %]. + </h2> +[% END %] + +[% SET shown_types = [ + 'notequals', 'regexp', 'notregexp', 'lessthan', 'lessthaneq', + 'greaterthan', 'greaterthaneq', 'changedbefore', 'changedafter', + 'changedfrom', 'changedto', 'changedby', 'notsubstring', 'nowords', + 'nowordssubstr', 'notmatches', +] %] +<ul class="search_description"> +[% FOREACH desc_item = search_description %] + <li> + <strong>[% field_descs.${desc_item.field} FILTER html %]:</strong> + [% IF shown_types.contains(desc_item.type) || debug %] + ([% search_descs.${desc_item.type} FILTER html %]) + [% END %] + [% FOREACH val IN desc_item.value.split(',') %] + [%+ display_value(desc_item.field, val) FILTER html %][% ',' UNLESS loop.last %] + [% END %] + [% IF debug %] + (<code>[% desc_item.term FILTER html %]</code>) + [% END %] + </li> +[% END %] +</ul> + +<hr> + +[%############################################################################%] +[%# Preceding Status Line #%] +[%############################################################################%] + +[% IF bugs.size > 9 %] + <span class="bz_result_count"> + [% bugs.size %] [%+ terms.bugs %] found. + </span> +[% END %] + +[%############################################################################%] +[%# Start of Change Form #%] +[%############################################################################%] + +[% IF dotweak %] + <form name="changeform" method="post" action="process_bug.cgi"> +[% END %] + +[%############################################################################%] +[%# Bug Table #%] +[%############################################################################%] + +[% FLUSH %] +[% PROCESS list/table.html.tmpl %] + +[%############################################################################%] +[%# Succeeding Status Line #%] +[%############################################################################%] + +<span class="bz_result_count"> + [% IF bugs.size == 0 %] + <span class="zero_results">[% terms.zeroSearchResults %].</span> + [% ELSIF bugs.size == 1 %] + One [% terms.bug %] found. + [% ELSE %] + [% bugs.size %] [%+ terms.bugs %] found. + [% END %] +</span> + +[% IF bugs.size == 0 %] + <ul class="zero_result_links"> + <li>[% PROCESS enter_bug_link %]</li> + [% IF one_product.defined %] + <li><a href="enter_bug.cgi">File a new [% terms.bug %] in a + different product</a></li> + [% END %] + <li><a href="[% PROCESS edit_search_url %]">Edit this search</a></li> + <li><a href="query.cgi">Start a new search</a></li> + </ul> +[% END %] + +<br> + +[%############################################################################%] +[%# Rest of Change Form #%] +[%############################################################################%] + +[% IF dotweak %] + [% PROCESS "list/edit-multiple.html.tmpl" %] + </form> + <hr> +[% END %] + +[%############################################################################%] +[%# Navigation Bar #%] +[%############################################################################%] + +<table> + <tr> + [% IF bugs.size > 0 %] + <td valign="middle" class="bz_query_buttons"> + <form method="post" action="show_bug.cgi"> + [% FOREACH id = buglist %] + <input type="hidden" name="id" value="[% id FILTER html %]"> + [% END %] + <input type="hidden" name="format" value="multiple"> + <input type="submit" id="long_format" value="Long Format"> + </form> + <form method="post" action="show_bug.cgi"> + <input type="hidden" name="ctype" value="xml"> + [% FOREACH id = buglist %] + <input type="hidden" name="id" value="[% id FILTER html %]"> + [% END %] + <input type="hidden" name="excludefield" value="attachmentdata"> + <input type="submit" value="XML" id="xml"> + </form> + + [% IF user.is_timetracker %] + <form method="post" action="summarize_time.cgi"> + <input type="hidden" name="id" value="[% buglist_joined FILTER html %]"> + <input type="submit" id="timesummary" value="Time Summary"> + </form> + [% END %] + </td> + + <td> </td> + + <td valign="middle" class="bz_query_links"> + <a href="buglist.cgi? + [% urlquerypart FILTER html %]&ctype=csv">CSV</a> | + <a href="buglist.cgi? + [% urlquerypart FILTER html %]&title= + [%- title FILTER html %]&ctype=atom">Feed</a> | + <a href="buglist.cgi? + [% urlquerypart FILTER html %]&ctype=ics">iCalendar</a> | + <a href="colchange.cgi? + [% urlquerypart FILTER html %]&query_based_on= + [% defaultsavename OR searchname FILTER url_quote %]">Change Columns</a> | + + [% IF bugs.size > 1 && caneditbugs && !dotweak %] + <a href="buglist.cgi?[% urlquerypart FILTER html %] + [%- "&order=$qorder" FILTER html IF order %]&tweak=1" + >Change Several [% terms.Bugs %] at Once</a> + | + [% END %] + + [% IF bugowners && user.id %] + <a href="mailto: + [% bugowners FILTER html %]">Send Mail to [% terms.Bug %] Assignees</a> | + [% END %] + + [%# Links to more things users can do with this bug list. %] + [% Hook.process("links") %] + </td> + [% END %] + + <td valign="middle" class="bz_query_edit"> + <a href="[% PROCESS edit_search_url %]">Edit Search</a> + </td> + + [% IF searchtype == "saved" %] + <td valign="middle" nowrap="nowrap" class="bz_query_forget"> + | + <a href="buglist.cgi?cmdtype=dorem&remaction=forget&namedcmd= + [% searchname FILTER url_quote %]&token= + [% issue_hash_token([search_id, searchname]) FILTER url_quote %]"> + Forget Search '[% searchname FILTER html %]'</a> + </td> + [% ELSE %] + <td> </td> + + <td valign="middle" class="bz_query_remember"> + <form method="get" action="buglist.cgi"> + <input type="submit" id="remember" value="Remember search"> as + <input type="hidden" name="newquery" + value="[% urlquerypart FILTER html %][% "&order=$qorder" FILTER html IF order %]"> + <input type="hidden" name="cmdtype" value="doit"> + <input type="hidden" name="remtype" value="asnamed"> + <input type="text" id="save_newqueryname" name="newqueryname" size="20" + value="[% defaultsavename FILTER html %]"> + </form> + </td> + [% END %] + </tr> +</table> + +[% IF one_product.defined && bugs.size %] + <p class="bz_query_single_product"> + [% PROCESS enter_bug_link %] + </p> +[% END %] + +[%############################################################################%] +[%# Page Footer #%] +[%############################################################################%] + +[% PROCESS global/footer.html.tmpl %] + +[% BLOCK edit_search_url %] + [% editqueryname = searchname OR defaultsavename OR '' %] + query.cgi?[% urlquerypart FILTER html %] + [%- IF editqueryname != '' %]&known_name= + [%- editqueryname FILTER url_quote %] + [% END %] +[% END %] + +[% BLOCK enter_bug_link %] + <a href="enter_bug.cgi + [%- IF one_product.defined %]?product= + [%- one_product.name FILTER url_quote %][% END %]">File + a new [% terms.bug %] + [% IF one_product.defined %] + in the "[% one_product.name FILTER html %]" product + [% END %]</a> +[% END %] diff --git a/template/en/default/list/list.ics.tmpl b/template/en/default/list/list.ics.tmpl new file mode 100644 index 0000000..3f9e2b8 --- /dev/null +++ b/template/en/default/list/list.ics.tmpl @@ -0,0 +1,103 @@ +[%# 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): William Jon McCann <mccann@jhu.edu> + #%] +[% PROCESS global/variables.none.tmpl %] +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +[%+ PROCESS ics_prodid +%] +VERSION:2.0 +[% FOREACH bug = bugs %] +BEGIN:VTODO +[%+ PROCESS ics_dtstart +%] +[%+ PROCESS ics_summary +%] +[%+ PROCESS ics_uid base_url=urlbase bug_id=bug.bug_id +%] +[%+ PROCESS ics_url base_url=urlbase bug_id=bug.bug_id +%] +[%+ PROCESS ics_status bug_status = bug.bug_status +%] +[%+ PROCESS ics_dtstamp +%] +[%+ ics_priorities.${bug.priority} FILTER ics('PRIORITY') +%] +[% IF bug.changeddate %] +[%+ bug.changedtime FILTER time("%Y%m%dT%H%M%SZ", "UTC") FILTER ics('LAST-MODIFIED') +%] +[% END %] +[% IF bug.percentage_complete %] +[%+ bug.percentage_complete FILTER format('%d') FILTER ics('PERCENT-COMPLETE') +%] +[% END %] +[% IF bug.product %] +[%+ bug.product FILTER ics('X-BUGZILLA-PRODUCT') +%] +[% END %] +[% IF bug.component %] +[%+ bug.component FILTER ics('X-BUGZILLA-COMPONENT') +%] +[% END %] +[% IF bug.version %] +[%+ bug.version FILTER ics('X-BUGZILLA-VERSION') +%] +[% END %] +[% IF bug.keywords %] +[%+ bug.keywords FILTER ics('X-BUGZILLA-KEYWORDS') +%] +[% END %] +END:VTODO +[% END %] +END:VCALENDAR + +[% BLOCK ics_prodid %] + [% "-//Mozilla/Bugzilla $constants.BUGZILLA_VERSION//EN" FILTER ics('PRODID') %] +[% END %] + +[% BLOCK ics_uid %] + [% "${bug_id}@${base_url}" FILTER url_quote FILTER ics('UID') %] +[% END %] + +[% BLOCK ics_url %] + [% "${base_url}show_bug.cgi?id=${bug_id}" FILTER url_quote FILTER ics('URL;VALUE=URI') %] +[% END %] + +[% BLOCK ics_dtstart %] + [% bug.opentime FILTER time("%Y%m%dT%H%M%SZ", "UTC") FILTER ics('DTSTART') %] +[% END %] + +[% BLOCK ics_dtstamp %] + [% currenttime FILTER time("%Y%m%dT%H%M%SZ", "UTC") FILTER ics('DTSTAMP') %] +[% END %] + +[% BLOCK ics_status %] + [% status = "" %] + [% FOREACH state = closedstates %] + [% IF bug_status == state %] + [% status = 'COMPLETED' %] + [% LAST %] + [% END %] + [% END %] + [% IF NOT status %] + [% IF bug_status == 'ASSIGNED' %] + [% status = 'IN-PROGRESS' %] + [% ELSE %] + [% status = 'NEEDS-ACTION' %] + [% END %] + [% END %] + [% status FILTER ics('STATUS') %] +[% END %] + +[% BLOCK ics_summary %] + [% IF bug.short_desc %] + [% summary = bug.short_desc %] + [% ELSIF bug.short_short_desc %] + [% summary = bug.short_short_desc %] + [% ELSE %] + [% summary = "$terms.Bug $bug.bug_id" %] + [% END %] + [% summary FILTER ics('SUMMARY') %] +[% END %] diff --git a/template/en/default/list/list.js.tmpl b/template/en/default/list/list.js.tmpl new file mode 100644 index 0000000..7e9664c --- /dev/null +++ b/template/en/default/list/list.js.tmpl @@ -0,0 +1,37 @@ +[%# 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> + #%] + +// Note: only publicly-accessible bugs (those not in any group) will be +// listed when using this JavaScript format. This is to prevent malicious +// sites stealing information about secure bugs. + +bugs = new Array; + +[% FOREACH bug = bugs %] + bugs[[% bug.bug_id %]] = [ + [% FOREACH column = displaycolumns %] + "[%- bug.$column FILTER js -%]"[% "," UNLESS loop.last %] + [% END %] + ]; +[% END %] + +if (window.buglistCallback) { + buglistCallback(bugs); +} diff --git a/template/en/default/list/list.rdf.tmpl b/template/en/default/list/list.rdf.tmpl new file mode 100644 index 0000000..99c06c1 --- /dev/null +++ b/template/en/default/list/list.rdf.tmpl @@ -0,0 +1,56 @@ +[%# 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): Myk Melez <myk@mozilla.org> + #%] + +<?xml version="1.0"[% IF Param('utf8') %] encoding="UTF-8"[% END %]?> +<!-- [% template_version %] --> +<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:bz="http://www.bugzilla.org/rdf#" + xmlns:nc="http://home.netscape.com/NC-rdf#"> + +<bz:result rdf:about="[% urlbase FILTER xml %]buglist.cgi?[% urlquerypart FILTER html %]"> + <bz:installation rdf:resource="[% urlbase FILTER xml %]" /> + <bz:query_timestamp>[% currenttime FILTER time('%Y-%m-%d %T %Z') FILTER html %]</bz:query_timestamp> + <bz:bugs> + <Seq> + [% FOREACH bug = bugs %] + <li> + + <bz:bug rdf:about="[% urlbase FILTER xml %]show_bug.cgi?id=[% bug.bug_id %]"> + + <bz:id nc:parseType="Integer">[% bug.bug_id %]</bz:id> + + [% FOREACH column = displaycolumns %] + <bz:[% column %][% ' nc:parseType="Integer"' IF column == "votes" %]>[% bug.$column FILTER html %]</bz:[% column %]> + [% END %] + + </bz:bug> + + </li> + + [% END %] + + </Seq> + + </bz:bugs> + +</bz:result> + +</RDF> diff --git a/template/en/default/list/quips.html.tmpl b/template/en/default/list/quips.html.tmpl new file mode 100644 index 0000000..1404b2e --- /dev/null +++ b/template/en/default/list/quips.html.tmpl @@ -0,0 +1,168 @@ +[%# 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: + # added_quip: string. Defined if the CGI added a quip data before + # displaying anything; if defined, its value is that quip. + # show_quips: boolean. True if we are showing the entire quip list. + # quips: list of strings. Defined if and only if show_quips is true. + # List of all quips. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl + title = "$terms.Bugzilla Quip System" + header = "Add your own clever headline" + %] + +[% IF added_quip %] + <p> + <font color="red"> + Your quip '<tt>[% added_quip FILTER html %]</tt>' has been added. + [% IF Param("quip_list_entry_control") == "moderated" AND !user.in_group('admin') %] + It will be used as soon as it gets approved. + [% END %] + </font> + </p> +[% END %] + +[% IF deleted_quip %] + <p> + <font color="red"> + The quip '<tt>[% deleted_quip FILTER html %]</tt>' has been deleted. + </font> + </p> +[% END %] + +[% IF approved or unapproved %] + <p>[% approved.size %] quips approved and [% unapproved.size %] quips unapproved</p> +[% END %] + + +<p> + [% terms.Bugzilla %] will pick a random quip for the headline on each + [% terms.bug %] list. +</p> + +[% IF Param("quip_list_entry_control") != "closed" %] + <p> + You can extend the quip list. Type in something clever or funny or boring + (but not obscene or offensive, please) and bonk on the button. + [% IF Param("quip_list_entry_control") == "moderated" AND !user.in_group('admin') %] + Note that your quip has to be approved before it is used. + [% END %] + </p> + + <form method="post" action="quips.cgi"> + <input type="hidden" name="action" value="add"> + <input size="80" name="quip"> + <p> + <input type="submit" id="add" value="Add This Quip"> + </p> + </form> +[% ELSE %] + <p>No new entries may be submitted at this time. + </p> +[% END %] + +[% IF show_quips %] + [% IF !user.in_group('admin') %] + <h2> + Existing quips: + </h2> + <ul> + [% FOREACH quipid = quipids %] + [% NEXT IF NOT quips.$quipid.approved %] + <li>[% quips.$quipid.quip FILTER html %]</li> + [% END %] + </ul> + [% ELSE %] + <h2>Edit existing quips:</h2> + <p> + <strong>Note:</strong> Only approved quips will be shown. + If the parameter 'quip_list_entry_control' is set to <q>open</q>, + entered quips are automatically approved. + </p> + <form name="editform" method="post" action="quips.cgi"> + <input type="hidden" name="action" value="approve"> + <table border="1"> + <thead><tr> + <th>Quip</th> + <th>Author</th> + <th>Action</th> + <th>Approved</th> + </tr></thead><tbody> + [% FOREACH quipid = quipids %] + <tr> + <td>[% quips.$quipid.quip FILTER html %]</td> + <td> + [% userid = quips.$quipid.userid %] + [% users.$userid FILTER html %] + [% "Unknown" IF NOT users.$userid %] + </td> + <td> + <a href="quips.cgi?action=delete&quipid=[% quipid FILTER url_quote %]"> + Delete + </a> + </td> + <td> + <input type="hidden" name="defined_quipid_[% quipid FILTER html %]" + id="defined_quipid_[% quipid FILTER html %]" + value="1"> + <input type="checkbox" name="quipid_[% quipid FILTER html %]" + id="quipid_[% quipid FILTER html %]" + [%- ' checked="checked"' IF quips.$quipid.approved %]> + </td> + </tr> + [% END %] + </tbody> + </table> + <script type="text/javascript"><!-- + var numelements = document.forms.editform.elements.length; + function SetCheckboxes(value) { + var item; + for (var i=0 ; i<numelements ; i++) { + item = document.forms.editform.elements[i]; + item.checked = value; + } + } + document.write(' <input type="button" name="uncheck_all" ' + +'value="Uncheck All" onclick="SetCheckboxes(false);">'); + document.write(' <input type="button" name="check_all" ' + +'value="Check All" onclick="SetCheckboxes(true);">'); + //--></script> + + <input type="submit" id="update" value="Save Changes"> + </form> + <br> + [% END %] +[% ELSE %] + <p> + Those who like their wisdom in large doses can + <a href="quips.cgi?action=show">view + [% IF user.in_group('admin') %] + and edit + [% END %] + the whole quip list</a>. + </p> +[% END %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/list/server-push.html.tmpl b/template/en/default/list/server-push.html.tmpl new file mode 100644 index 0000000..d1c157f --- /dev/null +++ b/template/en/default/list/server-push.html.tmpl @@ -0,0 +1,47 @@ +[%# 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): Myk Melez <myk@mozilla.org> + #%] + +[%# INTERFACE: + # debug: boolean. True if we want the search displayed while we wait. + # query: string. The SQL query which makes the buglist. + #%] + +[% PROCESS global/variables.none.tmpl %] + +<html> + <head> + <title>[% terms.Bugzilla %] is pondering your search</title> + </head> + <body> + <h1 style="margin-top: 20%; text-align: center;">Please stand by ...</h1> + + [% IF debug %] + <p> + [% FOREACH debugline = debugdata %] + <code>[% debugline FILTER html %]</code><br> + [% END %] + </p> + <p> + <code>[% query FILTER html %]</code> + </p> + [% END %] + + </body> +</html> diff --git a/template/en/default/list/table.html.tmpl b/template/en/default/list/table.html.tmpl new file mode 100644 index 0000000..282ea51 --- /dev/null +++ b/template/en/default/list/table.html.tmpl @@ -0,0 +1,260 @@ +[%# 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): Myk Melez <myk@mozilla.org> + # Jesse Clark <jjclark1982@gmail.com> + #%] + +[%############################################################################%] +[%# Initialization #%] +[%############################################################################%] + +[%# Don't display the table or do any processing if there are no bugs + # to display %] +[% RETURN IF !bugs.size %] + +[%# Columns whose titles or values should be abbreviated to make the list + # more compact. For columns whose titles should be abbreviated, + # the shortened title is included. For columns whose values should be + # abbreviated, a maximum length is provided along with the ellipsis that + # should be added to an abbreviated value, if any. + # wrap is set if a column's contents should be allowed to be word-wrapped + # by the browser. + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] +[% field_descs.short_short_desc = field_descs.short_desc %] +[% field_descs.assigned_to_realname = field_descs.assigned_to %] +[% field_descs.reporter_realname = field_descs.reporter %] +[% field_descs.qa_contact_realname = field_descs.qa_contact %] + +[% abbrev = + { + "bug_severity" => { maxlength => 3 , title => "Sev" } , + "priority" => { maxlength => 3 , title => "Pri" } , + "rep_platform" => { maxlength => 3 , title => "Plt" } , + "bug_status" => { maxlength => 4 } , + "assigned_to" => { maxlength => 30 , ellipsis => "..." } , + "assigned_to_realname" => { maxlength => 20 , ellipsis => "..." } , + "reporter" => { maxlength => 30 , ellipsis => "..." } , + "reporter_realname" => { maxlength => 20 , ellipsis => "..." } , + "qa_contact" => { maxlength => 30 , ellipsis => "..." , title => "QAContact" } , + "qa_contact_realname" => { maxlength => 20 , ellipsis => "..." , title => "QAContact" } , + "resolution" => { maxlength => 4 } , + "short_desc" => { wrap => 1 } , + "short_short_desc" => { maxlength => 60 , ellipsis => "..." , wrap => 1 } , + "status_whiteboard" => { title => "Whiteboard" , wrap => 1 } , + "keywords" => { wrap => 1 } , + "flagtypes.name" => { wrap => 1 } , + "component" => { maxlength => 8 , title => "Comp" } , + "product" => { maxlength => 8 } , + "version" => { maxlength => 5 , title => "Vers" } , + "op_sys" => { maxlength => 4 } , + "target_milestone" => { title => "TargetM" } , + "percentage_complete" => { format_value => "%d %%" } , + } +%] + +[% PROCESS bug/time.html.tmpl %] + +[%############################################################################%] +[%# Table Header #%] +[%############################################################################%] + +[% tableheader = BLOCK %] + <table class="bz_buglist" cellspacing="0" cellpadding="4" width="100%"> + <tr class="bz_buglist_header bz_first_buglist_header"> + [% IF dotweak %] + <th> </th> + [% END %] + <th colspan="[% splitheader ? 2 : 1 %]" class="first-child"> + <a href="buglist.cgi? + [% urlquerypart FILTER html %]&order= + [% PROCESS new_order id='bug_id' %] + [%-#%]&query_based_on= + [% defaultsavename OR searchname FILTER url_quote %]">ID + [% PROCESS order_arrow id='bug_id' ~%] + </a> + </th> + + [% IF splitheader %] + + [% FOREACH id = displaycolumns %] + [% NEXT UNLESS loop.count() % 2 == 0 %] + [% column = columns.$id %] + [% PROCESS columnheader %] + [% END %] + + </tr><tr class="bz_buglist_header"> + [% IF dotweak %] + <th> </th> + [% END %] + <th> </th> + + [% FOREACH id = displaycolumns %] + [% NEXT IF loop.count() % 2 == 0 %] + [% column = columns.$id %] + [% PROCESS columnheader %] + [% END %] + + [% ELSE %] + + [% FOREACH id = displaycolumns %] + [% column = columns.$id %] + [% PROCESS columnheader %] + [% END %] + + [% END %] + + </tr> +[% END %] + +[% BLOCK columnheader %] + <th colspan="[% splitheader ? 2 : 1 %]"> + <a href="buglist.cgi?[% urlquerypart FILTER html %]&order= + [% PROCESS new_order %] + [%-#%]&query_based_on= + [% defaultsavename OR searchname FILTER url_quote %]"> + [%- abbrev.$id.title || field_descs.$id || column.title -%] + [% PROCESS order_arrow ~%] + </a> + </th> +[% END %] + +[% BLOCK new_order %] + [% desc = '' %] + [% IF (om = order.match("\\b$id( DESC)?")) %] + [% desc = ' DESC' IF NOT om.0 %] + [% END %] + [% id _ desc FILTER url_quote %] + [% IF id != 'bug_id' AND order %] + [% ',' _ order.remove("\\b$id( DESC)?(,\\s*|\$)") FILTER url_quote %] + [% END %] +[% END %] + +[% BLOCK order_arrow %] + [% IF order.match("^$id DESC") %] + <span class="bz_sort_order_primary">▼</span> + [% ELSIF order.match("^$id(,\\s*|\$)") %] + <span class="bz_sort_order_primary">▲</span> + [% ELSIF order.match("\\b$id DESC") %] + <span class="bz_sort_order_secondary">▼</span> + [% ELSIF order.match("\\b$id(,\\s*|\$)") %] + <span class="bz_sort_order_secondary">▲</span> + [% END %] +[% END %] + +[%############################################################################%] +[%# Bug Table #%] +[%############################################################################%] + +[% Hook.process("before_table") %] + +[% tableheader %] + +[% FOREACH bug = bugs %] + [% count = loop.count() %] + + <tr class="bz_bugitem + bz_[% bug.bug_severity FILTER css_class_quote -%] + bz_[% bug.priority FILTER css_class_quote -%] + bz_[% bug.bug_status FILTER css_class_quote -%] + [%+ "bz_$bug.resolution" FILTER css_class_quote IF bug.resolution -%] + [%+ "bz_secure" IF bug.secure_mode -%] + [%+ "bz_secure_mode_$bug.secure_mode" FILTER css_class_quote IF bug.secure_mode -%] + [%+ count % 2 == 1 ? "bz_row_odd" : "bz_row_even" -%] + "> + + [% IF dotweak %] + <td class="bz_checkbox_column"> + <input type="checkbox" name="id_[% bug.bug_id %]"> + </td> + [% END %] + <td class="first-child bz_id_column"> + <a name="b[% bug.bug_id %]" + href="show_bug.cgi?id=[% bug.bug_id %]">[% bug.bug_id %]</a> + <span style="display: none">[%+ '[SEC]' IF bug.secure_mode %]</span> + </td> + + [% FOREACH column = displaycolumns %] + <td [% 'style="white-space: nowrap"' IF NOT abbrev.$column.wrap %] + class="bz_[% column FILTER css_class_quote %]_column"> + [% IF abbrev.$column.maxlength %] + <span title="[%- display_value(column, bug.$column) FILTER html %]"> + [% END %] + [% IF abbrev.$column.format_value %] + [%- bug.$column FILTER format(abbrev.$column.format_value) FILTER html -%] + [% ELSIF column == 'actual_time' || + column == 'remaining_time' || + column == 'estimated_time' %] + [% PROCESS formattimeunit time_unit=bug.$column %] + [%# Display the login name of the user if their real name is empty. %] + [% ELSIF column.match('_realname$') && bug.$column == '' %] + [% SET login_column = column.remove('_realname$') %] + [% bug.${login_column}.truncate(abbrev.$column.maxlength, + abbrev.$column.ellipsis) FILTER html %] + + [% ELSE %] + [%- display_value(column, bug.$column).truncate(abbrev.$column.maxlength, abbrev.$column.ellipsis) FILTER html -%] + [% END %] + [% IF abbrev.$column.maxlength %] + </span> + [% END %] + </td> + [% END %] + + </tr> + + [% IF loop.last() && time_info.time_present == 1 %] + [% PROCESS time_summary_line %] + [% END %] + +[% END %] + +</table> + +[% BLOCK time_summary_line %] + <tr class="bz_time_summary_line"> + [% columns_to_span = 1 %] [%# bugID %] + [% IF dotweak %] + [% columns_to_span = columns_to_span + 1 %] + [% END %] + [% FOREACH column = displaycolumns %] + [% IF column == 'actual_time' || + column == 'remaining_time' || + column == 'estimated_time' || + column == 'percentage_complete' %] + [% IF columns_to_span > 0 %] + <td class="bz_total bz_total_label" colspan=" + [%- columns_to_span FILTER html %]"><b>Totals</b></td> + [% columns_to_span = 0 %] + [% END %] + [% IF column == 'percentage_complete' %] + <td class="bz_total">[% time_info.percentage_complete + FILTER format(abbrev.$column.format_value) FILTER html %]</td> + [% ELSE %] + <td class="bz_total"> + [%- PROCESS formattimeunit time_unit=time_info.$column %]</td> + [% END %] + [% ELSIF columns_to_span == 0 %] [%# A column following the first total %] + <td class="bz_total"> </td> + [% ELSE %] [%# We haven't gotten to a time column yet, keep computing span %] + [% columns_to_span = columns_to_span + 1 %] + [% END %] + [% END %] + </tr> +[% END %] diff --git a/template/en/default/pages/bug-writing.html.tmpl b/template/en/default/pages/bug-writing.html.tmpl new file mode 100644 index 0000000..ec997be --- /dev/null +++ b/template/en/default/pages/bug-writing.html.tmpl @@ -0,0 +1,181 @@ +[%# 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): Eli Goldberg <eli@prometheus-music.com> + # Gervase Markham <gerv@gerv.net> + # Vera Horiuchi + # Claudius Gayle + # Peter Mock + # Chris Pratt + # Tom Schutter + # Chris Yeh + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% INCLUDE global/header.html.tmpl title = "$terms.Bug Writing Guidelines" %] + + <p>Effective [% terms.bug %] reports are the most likely to be fixed. + These guidelines explain how to write such reports. + +<h3>Principles</h3> + + <ul> + <li>Be precise</li> + <li>Be clear - explain it so others can reproduce the [% terms.bug %]</li> + <li>One [% terms.bug %] per report</li> + <li>No [% terms.bug %] is too trivial to report - + small [% terms.bugs %] may hide big [% terms.bugs %]</li> + <li>Clearly separate fact from speculation</li> + </ul> + +<h3>Preliminaries</h3> + +<ol> + <li>Reproduce your [% terms.bug %] using a recent build of the + software, to see whether it has already been fixed. + </li> + + <li><a href="query.cgi?format=specific">Search</a> + [% terms.Bugzilla %], to see whether your [% terms.bug %] has + already been reported.</li> +</ol> + +<h3>Reporting a New [% terms.Bug %]</h3> + +<p>If you have reproduced the [% terms.bug %] in a recent build and +no-one else appears to have reported it, then:</p> + +<ol> + <li>Choose + "<a href="enter_bug.cgi">Enter a new [% terms.bug %]</a>"</li> + <li>Select the product in which you've found the [% terms.bug %]</li> + <li>Fill out the form. Here is some help understanding it:</li> +</ol> + + <blockquote> + <p><b>Component:</b> In which sub-part of the software does it + exist?<br> + This field is required. + Click the word "Component" to see a description of each + component. If none seems appropriate, look for a "General" component.</p> + + <p><b>OS:</b> On which operating system (OS) did you find + it? + (e.g. Linux, Windows XP, Mac OS X.)<br> + If you know the [% terms.bug %] happens on more than one type of + operating system, choose <em>[% display_value("op_sys", "All") FILTER html %]</em>. + If your OS isn't listed, choose <em>[% display_value("op_sys", "Other") FILTER html %]</em>.</p> + + <p><b>Summary:</b> How would you describe the [% terms.bug %], in + approximately 60 or fewer characters?<br> + A good summary should <b>quickly and uniquely identify [% terms.abug %] + report</b>. It should explain the problem, not your suggested solution.<br> + <ul> + <li>Good: "<tt>Cancelling a File Copy dialog crashes + File Manager</tt>"</li> + <li>Bad: "<tt>Software crashes</tt>"</li> + <li>Bad: "<tt>Browser should work with my web site</tt>"</li> + </ul> + + <b>Description:</b> + The details of your problem report, including:</p> + + <blockquote> + <p><b>Overview:</b> More detailed restatement of + summary.</p> + + <blockquote> +<pre> +Drag-selecting any page crashes Mac builds in the NSGetFactory function. +</pre> + </blockquote> + + <p><b>Steps to Reproduce:</b> Minimized, easy-to-follow steps that + will trigger the [% terms.bug %]. Include any special setup steps.</p> + + <blockquote> +<pre> +1) View any web page. (I used the default sample page, +resource:/res/samples/test0.html) + +2) Drag-select the page. (Specifically, while holding down +the mouse button, drag the mouse pointer downwards from any +point in the browser's content region to the bottom of the +browser's content region.) +</pre> + </blockquote> + + <p><b>Actual Results:</b> What the application did after performing + the above steps.</p> + + <blockquote> +<pre> +The application crashed. +</pre> + </blockquote> + + <p><b>Expected Results:</b> What the application should have done, + were the [% terms.bug %] not present.</p> + + <blockquote> +<pre> +The window should scroll downwards. Scrolled content should be selected. +(Or, at least, the application should not crash.) +</pre> + </blockquote> + + <p><b>Build Date & Platform:</b> Date and platform of the build + in which you first encountered the [% terms.bug %].</p> + + <blockquote> +<pre> +Build 2006-08-10 on Mac OS 10.4.3 +</pre> + </blockquote> + + <p><b>Additional Builds and Platforms:</b> Whether or not + the [% terms.bug %] takes place on other platforms (or browsers, + if applicable).</p> + + <blockquote> +<pre> +Doesn't Occur On Build 2006-08-10 on Windows XP Home (Service Pack 2) +</pre> + </blockquote> + + <p><b>Additional Information:</b> Any other useful information. + <br><br>For crashing [% terms.bugs %]:</p> + + <ul> + <li><b>Windows:</b> Note the type of the crash, and the module that the + application crashed in (e.g. access violation in apprunner.exe).</li> + + <li><b>Mac OS X:</b> Attach the "Crash Reporter" log that appears + upon crash. + Only include the section directly below the crashing thread, usually + titled "Thread 0 Crashed". Please do not paste the entire log!</li> + </ul> + </blockquote> + + <p>Double-check your report for errors and omissions, then press "Commit". + Your [% terms.bug %] report will now be in + the [% terms.Bugzilla %] database.<br> + </p> +</blockquote> + +[% INCLUDE global/footer.html.tmpl %] diff --git a/template/en/default/pages/fields.html.tmpl b/template/en/default/pages/fields.html.tmpl new file mode 100644 index 0000000..282b7b6 --- /dev/null +++ b/template/en/default/pages/fields.html.tmpl @@ -0,0 +1,331 @@ +[%# 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> + # Gervase Markham <gerv@gerv.net> + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] +[% INCLUDE global/header.html.tmpl title = "A $terms.Bug's Life Cycle" %] + +<p> +The <b>status</b> and <b>resolution</b> fields define and track the life +cycle of [% terms.abug %]. +</p> + +<a name="status"></a> +<a name="resolution"></a> + +<table border="1" cellpadding="4"> + <tr align="center" valign="top"> + <td width="50%"> + <h1>STATUS</h1> + </td> + + <td> + <h1>RESOLUTION</h1> + </td> + </tr> + + <tr valign="top"> + <td>The <b>status</b> field indicates the general health of a + [% terms.bug %]. Only certain status transitions are allowed.</td> + + <td>The <b>resolution</b> field indicates what happened to this + [%+ terms.bug %].</td> + </tr> + + <tr valign="top"> + <td> + <dl> + <dt> + <b>[% display_value("bug_status", "UNCONFIRMED") FILTER html %]</b> + </dt> + <dd> + This [% terms.bug %] has recently been added to the database. + Nobody has validated that this [% terms.bug %] is true. Users + who have the "canconfirm" permission set may confirm + this [% terms.bug %], changing its state to [% display_value("bug_status", "NEW") FILTER html %]. Or, it may be + directly resolved and marked [% display_value("bug_status", "RESOLVED") FILTER html %]. + </dd> + + <dt> + <b>[% display_value("bug_status", "NEW") FILTER html %]</b> + </dt> + <dd> + This [% terms.bug %] has recently been added to the assignee's + list of [% terms.bugs %] and must be processed. [% terms.Bugs %] in + this state may be accepted, and become <b>[% display_value("bug_status", "ASSIGNED") FILTER html %]</b>, passed + on to someone else, and remain <b>[% display_value("bug_status", "NEW") FILTER html %]</b>, or resolved and marked + <b>[% display_value("bug_status", "RESOLVED") FILTER html %]</b>. + </dd> + + <dt> + <b>[% display_value("bug_status", "ASSIGNED") FILTER html %]</b> + </dt> + <dd> + This [% terms.bug %] is not yet resolved, but is assigned to the + proper person. From here [% terms.bugs %] can be given to another + person and become <b>[% display_value("bug_status", "NEW") FILTER html %]</b>, or + resolved and become <b>[% display_value("bug_status", "RESOLVED") FILTER html %]</b>. + </dd> + + <dt> + <b>[% display_value("bug_status", "REOPENED") FILTER html %]</b> + </dt> + <dd> + This [% terms.bug %] was once resolved, but the resolution was + deemed incorrect. For example, a <b>[% display_value("resolution", "WORKSFORME") FILTER html %]</b> [% terms.bug %] is + <b>[% display_value("bug_status", "REOPENED") FILTER html %]</b> when more information shows up and + the [% terms.bug %] is now reproducible. From here [% terms.bugs %] are + either marked <b>[% display_value("bug_status", "ASSIGNED") FILTER html %]</b> or + <b>[% display_value("bug_status", "RESOLVED") FILTER html %]</b>. + </dd> + </dl> + </td> + + <td> + <dl> + <dd> + No resolution yet. All [% terms.bugs %] which are in one of + these "open" states have the resolution set to blank. All + other [% terms.bugs %] will be marked with one of the following + resolutions. + </dd> + </dl> + </td> + </tr> + + <tr valign="top"> + <td> + <dl> + <dt> + <b>[% display_value("bug_status", "RESOLVED") FILTER html %]</b> + </dt> + <dd> + A resolution has been taken, and it is awaiting verification by + QA. From here [% terms.bugs %] are either re-opened and become + <b>[% display_value("bug_status", "REOPENED") FILTER html %]</b>, are marked + <b>[% display_value("bug_status", "VERIFIED") FILTER html %]</b>, or are closed for + good and marked <b>[% display_value("bug_status", "CLOSED") FILTER html %]</b>. + </dd> + + <dt> + <b>[% display_value("bug_status", "VERIFIED") FILTER html %]</b> + </dt> + <dd> + QA has looked at the [% terms.bug %] and the resolution and + agrees that the appropriate resolution has been taken. [% terms.Bugs %] remain + in this state until the product they were reported + against actually ships, at which point they become + <b>[% display_value("bug_status", "CLOSED") FILTER html %]</b>. + </dd> + + <dt> + <b>[% display_value("bug_status", "CLOSED") FILTER html %]</b> + </dt> + <dd> + The [% terms.bug %] is considered dead, the resolution is correct. + Any zombie [% terms.bugs %] who choose to walk the earth again must + do so by becoming <b>[% display_value("bug_status", "REOPENED") FILTER html %]</b>. + </dd> + </dl> + </td> + + <td> + <dl> + <dt> + <b>[% display_value("resolution", "FIXED") FILTER html %]</b> + </dt> + <dd> + A fix for this [% terms.bug %] is checked into the tree and + tested. + </dd> + + <dt> + <b>[% display_value("resolution", "INVALID") FILTER html %]</b> + </dt> + <dd> + The problem described is not [% terms.abug %]. + </dd> + + <dt> + <b>[% display_value("resolution", "WONTFIX") FILTER html %]</b> + </dt> + <dd> + The problem described is [% terms.abug %] which will never be + fixed. + </dd> + + <dt> + <b>[% display_value("resolution", "DUPLICATE") FILTER html %]</b> + </dt> + <dd> + The problem is a duplicate of an existing [% terms.bug %]. + Marking [% terms.abug %] duplicate requires the [% terms.bug %]# + of the duplicating [% terms.bug %] and will at least put + that [% terms.bug %] number in the description field. + </dd> + + <dt> + <b>[% display_value("resolution", "WORKSFORME") FILTER html %]</b> + </dt> + <dd> + All attempts at reproducing this [% terms.bug %] were futile, + and reading the code produces no clues as to why the described + behavior would occur. If more information appears later, + the [% terms.bug %] can be reopened. + </dd> + + <dt> + <b>[% display_value("resolution", "MOVED") FILTER html %]</b> + </dt> + <dd> + The problem was specific to a related product + whose [% terms.bugs %] are tracked in + another [% terms.bug %] database. + The [% terms.bug %] has been moved to that database. + </dd> + </dl> + </td> + </tr> +</table> + +<h2><a name="importance">Importance</a></h2> +The importance of [% terms.abug %] is described as the combination of +its <a href="#priority">priority</a> and <a href="#bug_severity">severity</a>, +as described below. + +<h2><a name="priority">Priority</a></h2> +This field describes the importance and order in which [% terms.abug %] +should be fixed compared to other [% terms.bugs %]. This field is utilized +by the programmers/engineers to prioritize their work to be done. + +<h2><a name="bug_severity">Severity</a></h2> +This field describes the impact of [% terms.abug %]. + +<table> + <tr> + <th>[% display_value("bug_severity", "blocker") FILTER html %]</th> + + <td>Blocks development and/or testing work</td> + </tr> + + <tr> + <th>[% display_value("bug_severity", "critical") FILTER html %]</th> + + <td>crashes, loss of data, severe memory leak</td> + </tr> + + <tr> + <th>[% display_value("bug_severity", "major") FILTER html %]</th> + + <td>major loss of function</td> + </tr> + + <tr> + <th>[% display_value("bug_severity", "normal") FILTER html %]</th> + + <td>regular issue, some loss of functionality under specific circumstances</td> + </tr> + + + <tr> + <th>[% display_value("bug_severity", "minor") FILTER html %]</th> + + <td>minor loss of function, or other problem where easy + workaround is present</td> + </tr> + + <tr> + <th>[% display_value("bug_severity", "trivial") FILTER html %]</th> + + <td>cosmetic problem like misspelled words or misaligned + text</td> + </tr> + + <tr> + <th>[% display_value("bug_severity", "enhancement") FILTER html %]</th> + + <td>Request for enhancement</td> +</table> + +<h2><a name="rep_platform">Platform</a></h2> +This is the hardware platform against which the [% terms.bug %] was +reported. Legal platforms include: + +<ul> + <li>[% display_value("rep_platform", "All") FILTER html %] (happens on all platforms; cross-platform [% terms.bug %])</li> + + <li>[% display_value("rep_platform", "Macintosh") FILTER html %]</li> + + <li>[% display_value("rep_platform", "PC") FILTER html %]</li> +</ul> +<b>Note:</b> When searching, selecting the option +<em>[% display_value("rep_platform", "All") FILTER html %]</em> does not +select [% terms.bugs %] +assigned against any platform. It merely selects [% terms.bugs %] that are +marked as occurring on all platforms, i.e. are designated +<em>[% display_value("rep_platform", "All") FILTER html %]</em>. + +<h2><a name="op_sys">Operating System</a></h2> +This is the operating system against which the [% terms.bug %] was +reported. Legal operating systems include: + +<ul> + <li>[% display_value("op_sys", "All") FILTER html %] (happens on all operating systems; cross-platform + [% terms.bug %])</li> + + <li>Windows</li> + + <li>Mac OS</li> + + <li>Linux</li> +</ul> +Sometimes the operating system implies the platform, but not +always. For example, Linux can run on PC and Macintosh and +others. + +<h2><a name="assigned_to">Assigned To</a></h2> + +<p> +This is the person in charge of resolving the [% terms.bug %]. Every time +this field changes, the status changes to <b>[% display_value("bug_status", "NEW") FILTER html %]</b> to make it +easy to see which new [% terms.bugs %] have appeared on a person's list.</p> + +<p> +The default status for queries is set to [% display_value("bug_status", "NEW") FILTER html %], +[%+ display_value("bug_status", "ASSIGNED") FILTER html %] and [% display_value("bug_status", "REOPENED") FILTER html %]. +When searching for [% terms.bugs %] that have been resolved or +verified, remember to set the status field appropriately. +</p> + +[% IF Param("use_see_also") %] + <h2><a name="see_also"></a>See Also</h2> + + <p>This allows you to refer to [% terms.bugs %] in other installations. + You can enter a URL to a [%+ terms.bug %] in the "Add [% terms.Bug %] URLs" + field to note that that [% terms.bug %] is related to this one. You can + enter multiple URLs at once by separating them with a comma.</p> + + <p>You should normally use this field to refer to [% terms.bugs %] in + <em>other</em> installations. For [% terms.bugs %] in this + installation, it is better to use the "Depends On" and "Blocks" + fields.</p> +[% END %] + +[% INCLUDE global/footer.html.tmpl %] diff --git a/template/en/default/pages/linked.html.tmpl b/template/en/default/pages/linked.html.tmpl new file mode 100644 index 0000000..52b1735 --- /dev/null +++ b/template/en/default/pages/linked.html.tmpl @@ -0,0 +1,55 @@ +[%# 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): Stefan Seifert <nine@detonation.org> + # Gervase Markham <gerv@gerv.net> + #%] + +[% INCLUDE global/header.html.tmpl title = "Your Linkified Text" %] +[% USE Bugzilla %] +[% cgi = Bugzilla.cgi %] + +<p> + Copy and paste the text below: +</p> + +<hr> + +<p> +<pre class="bz_comment_text"> +[%- cgi.param("text") FILTER wrap_comment FILTER quoteUrls FILTER html -%] +</pre> +</p> + +<hr> + +<p> + If you place it in <tt><pre></tt> tags, + the text will end up looking like this: +</p> + +<hr> + +<p> +<pre class="bz_comment_text"> +[%- cgi.param("text") FILTER wrap_comment FILTER quoteUrls -%] +</pre> +</p> + +<hr> + +[% INCLUDE global/footer.html.tmpl %] diff --git a/template/en/default/pages/linkify.html.tmpl b/template/en/default/pages/linkify.html.tmpl new file mode 100644 index 0000000..b936e86 --- /dev/null +++ b/template/en/default/pages/linkify.html.tmpl @@ -0,0 +1,42 @@ +[%# 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): Stefan Seifert <nine@detonation.org> + # Gervase Markham <gerv@gerv.net> + #%] + +[% PROCESS global/variables.none.tmpl %] +[% INCLUDE global/header.html.tmpl title = "Linkify Text" %] + +<p> + If you enter some text, this form will return it marked up like a + standard [% terms.Bugzilla %] comment. That is, valid [% terms.bug %] numbers, + URLs, email addresses and so on will be replaced with appropriate HTML links. +</p> + +<form action="page.cgi" method="post"> + [% INCLUDE global/textarea.html.tmpl + name = 'text' + minrows = 20 + cols = constants.COMMENT_COLS + %] + <br> + <input type="hidden" name="id" value="linked.html"> + <input type="submit" id="linkify" value="Linkify"> +</form> + +[% INCLUDE global/footer.html.tmpl %] diff --git a/template/en/default/pages/quicksearch.html.tmpl b/template/en/default/pages/quicksearch.html.tmpl new file mode 100644 index 0000000..1f2d21b --- /dev/null +++ b/template/en/default/pages/quicksearch.html.tmpl @@ -0,0 +1,274 @@ +[%# 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 Everything Solved, Inc. + # Portions created by the Initial Developer are Copyright (C) 2009 + # the Initial Developer. All Rights Reserved. + # + # Contributor(s): + # Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% INCLUDE global/header.html.tmpl + title = "$terms.Bugzilla QuickSearch", + style_urls = ['skins/standard/page.css'] + onload = 'document.forms[\'f\'].quicksearch.focus()' + %] + +[% USE Bugzilla %] + +<p>Type in one or more words (or pieces of words) to search for:</p> + +<form name="f" action="buglist.cgi" method="get" + onsubmit="if (this.quicksearch.value == '') + { alert('Please enter one or more search terms first.'); + return false; } return true;"> + <input type="text" size="40" name="quicksearch"> + <input type="submit" value="Search" id="find"> +</form> + +<h2>The Basics</h2> + +<ul class="qs_help"> + <li>If you just put a word or series of words in the search box, + [%+ terms.Bugzilla %] will search the + [%+ field_descs.product FILTER html %], + [%+ field_descs.component FILTER html %], + [%+ IF use_keywords %][%+ field_descs.keywords FILTER html %],[% END %] + [%+ IF Param('usebugaliases') %][% field_descs.alias FILTER html %],[% END %] + [%+ field_descs.short_desc FILTER html %], + [%+ IF Param('usestatuswhiteboard') %][% field_descs.status_whiteboard FILTER html %],[% END %] + and [% field_descs.longdesc FILTER html %] fields for your word or words.</li> + + <li>Typing just a <strong>number</strong> in the search box will take + you directly to the [% terms.bug %] with that ID. + [% IF Param('usebugaliases') %] + Also, just typing the <strong>alias</strong> of [% terms.abug %] + will take you to that [% terms.bug %]. + [% END %] + </li> + + <li>Adding more terms <strong>narrows down</strong> the search, it does not + expand it. (In other words, [% terms.Bugzilla %] searches for + [%+ terms.bugs %] that match <em>all</em> your criteria, not + [%+ terms.bugs %] that match <em>any</em> of your criteria.)</li> + + <li>Searching is <strong>case-insensitive</strong>. So <kbd>table</kbd>, + <kbd>Table</kbd>, and <kbd>TABLE</kbd> are all the same.</li> + + <li>[% terms.Bugzilla %] does not just search for the exact word you put in, + but also for any word that <strong>contains</strong> that word. + So, for example, searching for "cat" would also find [% terms.bugs %] + that contain it as part of other words—for example, [% terms.abug %] + mentioning "<strong>cat</strong>ch" or "certifi<strong>cat</strong>e". It + will not find partial words in the [% field_descs.longdesc FILTER html %] + or [% field_descs.keywords FILTER html %] fields, + though—only full words are matched, there.</li> + + <li>By default, only <strong>open</strong> [% terms.bugs %] are + searched. If you want to know how to also search closed [% terms.bugs %], + see the <a href="#shortcuts">Advanced Shortcuts</a> section.</li> + + <li>If you want to search <strong>specific fields</strong>, you do it like + <kbd>field:value</kbd>, where <kbd>field</kbd> is one of the + <a href="#fields">field names</a> lower down in this + document and <kbd>value</kbd> is the value you want to search for + in that field. If you put commas in the <kbd>value</kbd>, then it is + interpreted as a list of values, and [% terms.bugs %] that match + <em>any</em> of those values will be searched for.</li> +</ul> + +<p>You may also want to read up on the <a href="#advanced">Advanced + Features</a>.</p> + +<h2><a name="fields"></a>Fields You Can Search On</h2> + +<p>You can specify any of these fields like <kbd>field:value</kbd> + in the search box, to search on them. You can also abbreviate + the field name, as long as your abbreviation matches only one field name. + So, for example, searching on <kbd>stat:NEW</kbd> will find all + [%+ terms.bugs %] in the <kbd>NEW</kbd> status. Some fields have + multiple names, and you can use any of those names to search for them.</p> + +[% IF Bugzilla.active_custom_fields.size %] + [% SET first_field = Bugzilla.active_custom_fields.0 %] + <p>For custom fields, they can be used and abbreviated + based on the part of their name <em>after</em> the <kbd>cf_</kbd> + if you'd like, in addition to their standard name starting with + <kbd>cf_</kbd>. So for example, + <kbd>[% first_field.name FILTER html %]</kbd> can be + referred to as + <kbd>[% first_field.name.replace('^cf_') FILTER html %]</kbd>, + also. However, if this causes a conflict between the standard + [%+ terms.Bugzilla %] field names and the custom field names, the + standard field names always take precedence.</p> +[% END %] + +[% SET field_table = {} %] +[% FOREACH field = quicksearch_field_names.keys %] + [% description = field_descs.$field %] + [% field_table.$description = quicksearch_field_names.${field} %] +[% END %] + + +<table cellspacing="0" cellpadding="0" border="0" class="qs_fields"> + <thead> + <tr> + <th class="field_name">Field</th> + <th class="field_nickname">Field Name(s) For Search</th> + </tr> + </thead> + <tbody> + [% FOREACH desc = field_table.keys.sort %] + <tr> + <td class="field_name">[% desc FILTER html %]</td> + <td class="field_nickname"> + [% FOREACH nickname = field_table.$desc %] + <kbd>[% nickname FILTER html %]</kbd> + [% ", " UNLESS loop.last %] + [% END %] + </tr> + [% END %] + </tbody> +</table> + +<h2><a name="advanced"></a>Advanced Features</h2> + +<ul class="qs_help"> + <li>If you want to search for a <strong>phrase</strong> or something that + contains spaces, you can put it in quotes, like: + <kbd>"this is a phrase"</kbd>. You can also use quotes to search for + characters that would otherwise be interpreted specially by quicksearch. + For example, <kbd>"this|thing"</kbd> would search for the literal phrase + <em>this|thing</em>.</li> + + <li>You can use <strong>AND</strong>, <strong>NOT</strong>, + and <strong>OR</strong> in searches. + + You can also use <kbd>-</kbd> to mean "NOT", and <kbd>|</kbd> to mean "OR". + There is no special character for "AND", because by default any search + terms that are separated by a space are joined by an "AND". + Examples: + <ul> + <li> + <strong>NOT</strong>:<br> + Use <kbd><strong>-</strong><em>summary:foo</em></kbd> to exclude + [%+ terms.bugs %] with <kbd>foo</kbd> in the summary.<br> + <kbd><em>NOT summary:foo</em></kbd> would have the same effect. + </li> + <li> + <strong>AND</strong>:<br> + <kbd><em>foo bar</em></kbd> searches for [% terms.bugs %] that contains + both <kbd>foo</kbd> and <kbd>bar</kbd>.<br> + <kbd><em>foo AND bar</em></kbd> would have the same effect. + </li> + <li> + <strong>OR</strong>:<br> + <kbd><em>foo<strong>|</strong>bar</em></kbd> would search + for [% terms.bugs %] that contain <kbd>foo</kbd> OR <kbd>bar</kbd>.<br> + <kbd><em>foo OR bar</em></kbd> would have the same effect.<br> + </li> + </ul> + + <p>OR has higher precedence than AND; AND is the top level operation. + For example:</p> + <p>Searching for <em><kbd>url|location bar|field -focus</kbd></em> means + (<kbd>url</kbd> OR <kbd>location</kbd>) AND (<kbd>bar</kbd> OR + <kbd>field</kbd>) AND (NOT <kbd>focus</kbd>)</p> + </li> +</ul> + +<h2><a name="shortcuts"></a>Advanced Shortcuts</h2> + +<p>In addition to using <a href="#fields">field names</a> to search + specific fields, there are certain characters or words that you can + use as a "shortcut" for searching certain fields:</p> + +<table cellspacing="0" cellpadding="0" border="0" class="qs_fields"> + <thead> + <tr> + <th class="field_name">Field</th> + <th class="field_nickname">Shortcut(s)</th> + </tr> + </thead> + <tbody> + <tr> + <td class="field_name">[% field_descs.bug_status FILTER html %]</td> + <td class="field_nickname"> + Make the <strong>first word</strong> of your search the name of any + status, or even an abbreviation of any status, and [% terms.bugs %] + in that status will be searched. <strong><kbd>ALL</kbd></strong> + is a special shortcut that means "all statuses". + <strong><kbd>OPEN</kbd></strong> is a special shortcut that means + "all open statuses". + </td> + </tr> + <tr> + <td class="field_name">[% field_descs.resolution FILTER html %]</td> + <td class="field_nickname"> + Make the <strong>first word</strong> of your search the name of any + resolution, or even an abbreviation of any resolution, and + [%+ terms.bugs %] with that resolution will be searched. For example, + making <kbd>FIX</kbd> the first word of your search will find all + [%+ terms.bugs %] with a resolution of <kbd>FIXED</kbd> . + </tr> + <tr> + <td class="field_name">[% field_descs.priority FILTER html %]</td> + <td class="field_nickname">"<strong>P1</strong>" (as a word anywhere in + the search) means "find [% terms.bugs %] with the highest priority. + "P2" means the second-highest priority, and so on. + <p>Searching for "<strong>P1-P3</strong>" will find [% terms.bugs %] in + any of the three highest priorities, and so on.</p> + </td> + </tr> + <tr> + <td class="field_name">[% field_descs.assigned_to FILTER html %]</td> + <td class="field_nickname"><strong>@</strong><em>value</em></td> + </tr> + <tr> + <td class="field_name">[% field_descs.product FILTER html %] or + [%+ field_descs.component FILTER html %]</td> + <td class="field_nickname"><strong>:</strong><em>value</em></td> + </tr> + [% IF use_keywords %] + <tr> + <td class="field_name">[% field_descs.keywords FILTER html %]</td> + <td class="field_nickname"><strong>!</strong><em>value</em></td> + </tr> + [% END %] + <tr> + [% SET key = "flagtypes.name" %] + <td class="field_name">[% field_descs.$key FILTER html %]</td> + <td class="field_nickname"> + <em>flag</em><strong>?</strong><em>requestee</em> + </td> + </tr> + <tr> + <td class="field_name">[% field_descs.longdesc FILTER html %] + or [% field_descs.short_desc FILTER html %]</td> + <td class="field_nickname"> + <strong>#</strong><em>value</em> + </td> + </tr> + [% IF Param('usestatuswhiteboard') %] + <tr> + <td class="field_name">[% field_descs.short_desc FILTER html %] + or [% field_descs.status_whiteboard FILTER html %]</td> + <td class="field_nickname"><strong>[</strong><em>value</em></td> + </tr> + [% END %] + </tbody> +</table> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/pages/release-notes.html.tmpl b/template/en/default/pages/release-notes.html.tmpl new file mode 100644 index 0000000..92357df --- /dev/null +++ b/template/en/default/pages/release-notes.html.tmpl @@ -0,0 +1,3240 @@ +[%# 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 Everything Solved. + # Portions created by Everything Solved are Copyright (C) 2006 + # Everything Solved. All Rights Reserved. + # + # Contributor(s): Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[% PROCESS global/variables.none.tmpl %] +[% INCLUDE global/header.html.tmpl + title = "$terms.Bugzilla 3.6 Release Notes" + style_urls = ['skins/standard/page.css'] +%] + +<h2>Table of Contents</h2> + +<ul class="bz_toc"> + <li><a href="#v36_introduction">Introduction</a></li> + <li><a href="#v36_point">Updates in this 3.6.x Release</a></li> + <li><a href="#v36_req">Minimum Requirements</a></li> + <li><a href="#v36_feat">New Features and Improvements</a></li> + <li><a href="#v36_issues">Outstanding Issues</a></li> + <li><a href="#v36_upgrading">Notes On Upgrading From a Previous Version</a></li> + <li><a href="#v36_code_changes">Code Changes Which May Affect + Customizations</a></li> + <li><a href="#v36_previous">Release Notes for Previous Versions</a></li> +</ul> + +<h2 id="v36_introduction">Introduction</h2> + +<p>Welcome to [% terms.Bugzilla %] 3.6! The focus of the 3.6 release is + on improving usability and "polishing up" all our features (by adding + some pieces that were "missing" or always wanted), although we + also have a few great new features for you, as well!</p> + +<p>If you're upgrading, make sure to read <a href="#v36_upgrading">Notes + On Upgrading From a Previous Version</a>. If you are upgrading from a release + before 3.4, make sure to read the release notes for all the + <a href="#v36_previous">previous versions</a> in between your version + and this one, <strong>particularly the Upgrading section of each + version's release notes</strong>.</p> + +<p>We would like to thank <a href="http://www.canonical.com/">Canonical + Ltd.</a>, <a href="http://www.itasoftware.com/">ITA Software</a>, + the <a href="http://www.ibm.com/linux/ltc/">IBM Linux Technology Center</a>, + <a href="http://www.redhat.com/">Red Hat</a>, and + <a href="http://www.novell.com/">Novell</a> for funding the development + of various features and improvements in this release of + [%+ terms.Bugzilla %].</p> + +<h2 id="v36_point">Updates in this 3.6.x Release</h2> + +<h3>3.6.2</h3> + +<p>This release fixes various security issues. See the + <a href="http://www.bugzilla.org/security/3.2.7/">Security Advisory</a> + for details.</p> + +<p>In addition, the following important fixes/changes have been made in + this release:</p> + +<ul> + <li>[% terms.Bugzilla %] installations running on older versions of IIS + will no longer experience the "Undef to trick_taint" errors that would + sometimes occur. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=521416">[% terms.Bug %] 521416</a>) + </li> + <li>Email notifications where missing the dates that comments were made. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=578003">[% terms.Bug %] 578003</a>) + </li> + <li>Putting a phrase in quotes in the Quicksearch box now works properly, + again. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=578494">[% terms.Bug %] 578494</a> + and <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=553884">[% terms.Bug %] 553884</a>) + </li> + <li>Quicksearch was usually (incorrectly) being limited to 200 results. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=581622">[% terms.Bug %] 581622</a>) + </li> + <li>On Windows, <kbd>install-module.pl</kbd> can now properly install + DateTime and certain other Perl modules that didn't install properly + before. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=576105">[% terms.Bug %] 576105</a>) + </li> + <li>Searching "keywords" for "contains none of the words" or "does not + match regular expression" now works properly. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=562014">[% terms.Bug %] 562014</a>) + </li> + <li>Doing <kbd>collectstats.pl --regenerate</kbd> now works on installations + using PostgreSQL. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=577058">[% terms.Bug %] 577058</a>) + </li> + <li>The "Field Values" administrative control panel was sometimes denying + admins the ability to delete field values when there was no reason + to deny the deletion. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=577054">[% terms.Bug %] 577054</a>) + </li> + <li>Eliminate the "uninitialized value" warnings that would happen when + editing a product's components. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=576911">[% terms.Bug %] 576911</a>) + </li> + <li>The updating of bugs_fulltext that happens during + <kbd>checksetup.pl</kbd> for upgrades to 3.6 should now be MUCH faster. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=577754">[% terms.Bug %] 577754</a>) + </li> + <li><kbd>email_in.pl</kbd> was not allowing the setting of time-tracking + fields via inbound emails. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=583622">[% terms.Bug %] 583622</a>) + </li> +</ul> + +<h3>3.6.1</h3> + +<p>This release fixes two security issues. See the + <a href="http://www.bugzilla.org/security/3.2.6/">Security Advisory</a> + for details.</p> + +<p>In addition, the following important fixes/changes have been made in + this release:</p> + +<ul> + <li>Using the "Change Columns" page would sometimes result in a + plain-text page instead of HTML. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=376044">[% terms.Bug %] 376044</a>) + </li> + <li>Extensions that have only templates and no code are now working. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=562551">[% terms.Bug %] 562551</a>) + </li> + <li><kbd>install-module.pl</kbd> has been fixed so that it installs + modules properly on both new and old versions of Perl. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=560318">[% terms.Bug %] 560318</a> + and <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=560330">[% terms.Bug %] 560330</a>) + </li> + <li>It is now possible to upgrade from 3.4 to 3.6 when using Oracle. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=561379">[% terms.Bug %] 561379</a>) + </li> + <li>Editing a field value's name (using the Field Values admin control + panel) wasn't working if the value was set as the default for that + field. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=561296">[% terms.Bug %] 561296</a>) + </li> + <li>If you had the <kbd>noresolveonopenblockers</kbd> parameter set, + [%+ terms.bugs %] couldn't be edited at all if they were marked FIXED + and had any open blockers. (The parameter is only supposed to prevent + <em>changing</em> [% terms.bugs %] to FIXED, not modifying already-FIXED + [%+ terms.bugs %].) + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=565314">[% terms.Bug %] 565314</a>) + </li> + <li>Some minor issues with Perl 5.12 were fixed (mostly warnings that Perl + 5.12 was throwing). [% terms.Bugzilla %] now supports Perl 5.12.</li> +</ul> + +<h2 id="v36_req">Minimum Requirements</h2> + +<p>Any requirements that are new since 3.4.5 will look like + <span class="req_new">this</span>.</p> + +<ul> + <li><a href="#v36_req_perl">Perl</a></li> + <li><a href="#v36_req_mysql">For MySQL Users</a></li> + <li><a href="#v36_req_pg">For PostgreSQL Users</a></li> + <li><a href="#v36_req_oracle">For Oracle Users</a></li> + <li><a href="#v36_req_modules">Required Perl Modules</a></li> + <li><a href="#v36_req_optional_mod">Optional Perl Modules</a></li> +</ul> + + +<h3 id="v36_req_perl">Perl</h3> + +<p>Perl v5.8.1</p> + +[% INCLUDE db_req db='mysql' %] + +[% INCLUDE db_req db='pg' %] + +[% INCLUDE db_req db='oracle' %] + +<h3 id="v36_req_modules">Required Perl Modules</h3> + +[% INCLUDE req_table reqs = REQUIRED_MODULES + new = [] updated = [] %] + +<h3 id="v36_req_optional_mod">Optional Perl Modules</h3> + +<p>The following perl modules, if installed, enable various + features of [% terms.Bugzilla %]:</p> + +[% INCLUDE req_table reqs = OPTIONAL_MODULES + new = ['JSON-RPC', 'Test-Taint'] + updated = ['Chart'] + include_feature = 1 %] + +<h2 id="v36_feat">New Features and Improvements</h2> + +<ul> + <li><a href="#v36_feat_usability">General Usability Improvements</a></li> + <li><a href="#v36_feat_extensions">New Extensions System</a></li> + <li><a href="#v36_feat_qs">Improved Quicksearch</a></li> + <li><a href="#v36_feat_browse">Simple "Browse" Interface</a></li> + <li><a href="#v36_feat_suexec">SUExec Support</a></li> + <li><a href="#v36_feat_mpwindows">Experimental mod_perl Support on Windows</a></li> + <li><a href="#v36_email_attachments">Send Attachments by Email</a></li> + <li><a href="#v36_feat_jsonrpc">JSON-RPC Interface</a></li> + <li><a href="#v36_feat_migrate">Migration From Other [% terms.Bug %]-Trackers</a></li> + <li><a href="#v36_feat_other">Other Enhancements and Changes</a></li> +</ul> + +<h3 id="v36_feat_usability">General Usability Improvements</h3> + +<p>A <a href="https://wiki.mozilla.org/Bugzilla:CMU_HCI_Research_2008">scientific + usability study</a> was done on [% terms.Bugzilla %] by researchers + from Carnegie-Mellon University. As a result of this study, + <a href="https://bugzilla.mozilla.org/showdependencytree.cgi?id=490786&hide_resolved=0">several + usability issues</a> were prioritized to be fixed, based on specific data + from the study.</p> + +<p>As a result, you will see many small improvements in [% terms.Bugzilla %]'s + usability, such as using Javascript to validate certain forms before + they are submitted, standardizing the words that we use in the user interface, + being clearer about what [% terms.Bugzilla %] needs from the user, + and other changes, all of which are also listed individually in this New + Features section.</p> + +<p>Work continues on improving usability for the next release of + [%+ terms.Bugzilla %], but the results of the research have already + had an impact on this 3.6 release.</p> + +<h3 id="v36_feat_extensions">New Extensions System</h3> + +<p>[% terms.Bugzilla %] has a brand-new Extensions system. The system is + consistent, fast, and + <a href="[% docs_urlbase FILTER html %]api/Bugzilla/Extension.html">fully + documented</a>. It makes it possible to easily extend [% terms.Bugzilla %]'s + code and user interface to add new features or change existing features. + There's even + <a href="[% docs_urlbase FILTER html %]api/extensions/create.html">a + script</a> that will create the basic layout of an extension for you, to + help you get started. For more information about the new system, see the + <a href="[% docs_urlbase FILTER html %]api/Bugzilla/Extension.html">Extensions + documentation</a>.</p> + +<p>If you had written any extensions using [% terms.Bugzilla %]'s previous + extensions system, there is + <a href="[% docs_urlbase FILTER html %]api/contrib/extension-convert.html">a + script to help convert old extensions into the new format</a>.</p> + +<h3 id="v36_feat_qs">Improved Quicksearch</h3> + +<p>The "quicksearch" box that appears on the front page of + [%+ terms.Bugzilla %] and in the header/footer of every page + is now simplified and made more powerful. There is a + <kbd>[?]</kbd> link next to the box that will take you to + the simplified <a href="page.cgi?id=quicksearch.html">Quicksearch Help</a>, + which describes every single feature of the system in a simple layout, + including new features such as the ability to use partial field names + when searching.</p> + +<p>Quicksearch should also be much faster than it was before, particularly + on large installations.</p> + +<p>Note that in order to implement the new quicksearch, certain old + and rarely-used features had to be removed: + +<ul> + <li><b>+</b> as a prefix to mean "search additional resolutions", and + <b>+</b> as a prefix to mean "search just the summary". You can + instead use <kbd>summary:</kbd> to explicitly search summaries.</li> + <li>Searching the Severity field if you type something that matches + the first few characters of a severity. You can explicitly search + the Severity field if you want to find [% terms.bugs %] by severity.</li> + <li>Searching the Priority field if you typed something that exactly + matched the name of a priority. You can explicitly search the + Priority field if you want to find [% terms.bugs %] by priority.</li> + <li>Searching the Platform and OS fields if you typed in one of a + certain hard-coded list of strings (like "pc", "windows", etc.). + You can explicitly search these fields, instead, if you want to + find [% terms.bugs %] with a specific Platform or OS set.</li> +</ul> + +<h3 id="v36_feat_browse">Simple "Browse" Interface</h3> + +<p>There is now a "Browse" link in the header of each [% terms.Bugzilla %] + page that presents a very basic interface that allows users to simply + browse through all open [% terms.bugs %] in particular components.</p> + +<h3 id="v36_feat_suexec">SUExec Support</h3> + +<p>[% terms.Bugzilla %] can now be run in Apache's "SUExec" mode, + which is what control panel software like cPanel and Plesk use + (so [% terms.Bugzilla %] should now be much easier to install + on shared hosting). SUExec support shows up as an option + in the <kbd>localconfig</kbd> file during installation.</p> + +<h3 id="v36_feat_mpwindows">Experimental mod_perl Support on Windows</h3> + +<p>There is now experimental support for running [% terms.Bugzilla %] + under mod_perl on Windows, for a significant performance enhancement + (in exchange for using more memory).</p> + +<h3 id="v36_email_attachments">Send Attachments by Email</h3> + +<p>The <a href="[% docs_urlbase FILTER html %]api/email_in.html">email_in</a> + script now supports attaching multiple attachments to [% terms.abug %] + by email, both when filing and when updating [% terms.abug %].</p> + +<h3 id="v36_feat_jsonrpc">JSON-RPC Interface</h3> + +<p>[% terms.Bugzilla %] now has support for the + <a href="http://json-rpc.org/">JSON-RPC</a> WebServices protocol via + <a href="[% docs_urlbase FILTER html %]api/Bugzilla/WebService/Server/JSONRPC.html">jsonrpc.cgi</a>. + The JSON-RPC interface is experimental in this release--if you want any + fundamental changes in how it works, + <a href="http://www.bugzilla.org/developers/reporting_bugs.html">let us + know</a>, for the next release of [% terms.Bugzilla %].</p> + +<h3 id="v36_feat_migrate">Migration From Other [% terms.Bug %]-Trackers</h3> + +<p>[% terms.Bugzilla %] 3.6 comes with a new script, + <a href="[% docs_urlbase FILTER html %]api/migrate.html">migrate.pl</a>, + which allows migration from other [% terms.bug %]-tracking systems. + Among the various features of the migration system are:</p> + +<ul> + <li>It is non-destructive--you can migrate into an existing + [%+ terms.Bugzilla %] installation without destroying any data + in the installation.</li> + <li>It has a "dry-run" mode so you can test your migration + before actually running it.</li> + <li>It is relatively easy to write new migrators for new systems, + if you know Perl. The basic migration framework does most of the work + for you, you just have to provide it with the data from your + [%+ terms.bug %]-tracker. See the + <a href="[% docs_urlbase FILTER html %]api/Bugzilla/Migrate.html">Bugzilla::Migrate</a> + documentation and see our current migrator, + <kbd>Bugzilla/Migrate/GNATS.pm</kbd> for information on how to make your + own migrator.</li> +</ul> + +<p>The first migrator that has been implemented is for the GNATS + [%+ terms.bug %]-tracking system. We'd love to see migrators for + other systems! If you want to contribute a new migrator, see our + <a href="http://wiki.mozilla.org/Bugzilla:Developers">development + process</a> for details on how to get code into [% terms.Bugzilla %].</p> + +<p>Thanks to <a href="http://lambdares.com/">Lambda Research</a> for + funding the initial development of this feature.</p> + +<h3 id="v36_feat_other">Other Enhancements and Changes</h3> + +<h4>Enhancements for Users</h4> + +<ul> + <li><b>[% terms.Bug %] Filing:</b> When filing [% terms.abug %], + [%+ terms.Bugzilla %] now visually indicates which fields are + mandatory.</li> + <li><b>[% terms.Bug %] Filing:</b> "Bookmarkable templates" now + support the "alias" and "estimated hours" fields.</li> + + <li><b>[% terms.Bug %] Editing:</b> In previous versions of + [%+ terms.Bugzilla %], if you added a private comment to [% terms.abug %], + then <em>none</em> of the changes that you made at that time were + sent to users who couldn't see the private comment. Now, for users + who can't see private comments, public changes are sent, but the private + comment is excluded from their email notification.</li> + <li><b>[% terms.Bug %] Editing:</b> The controls for groups now + appear to the right of the attachment and time-tracking tables, + when editing [% terms.abug %].</li> + <li><b>[% terms.Bug %] Editing:</b> The "Collapse All Comments" + and "Expand All Comments" links now appear to the right of the + comment list instead of above it.</li> + <li><b>[% terms.Bug %] Editing:</b> The See Also field now supports + URLs for Google Code Issues and the Debian B[% %]ug-Tracking System.</li> + <li><b>[% terms.Bug %] Editing:</b> There have been significant performance + improvements in <kbd>show_bug.cgi</kbd> (the script that displays the + [% terms.bug %]-editing form), particularly for [% terms.bugs %] that + have lots of comments or attachments.</li> + + <li><b>Attachments:</b> The "Details" page of an attachment + now displays itself as uneditable if you can't edit the fields + there.</li> + <li><b>Attachments:</b> We now make sure that there is + a Description specified for an attachment, using JavaScript, before + the form is submitted.</li> + <li><b>Attachments:</b> There is now a link back to the [% terms.bug %] + at the bottom of the "Details" page for an attachment.</li> + <li><b>Attachments:</b> When you click on an "attachment 12345" link + in a comment, if the attachment is a patch, you will now see the + formatted "Diff" view instead of the raw patch.</li> + <li><b>Attachments</b>: For text attachments, we now let the browser + auto-detect the character encoding, instead of forcing the browser to + always assume the attachment is in UTF-8.</li> + + <li><b>Search:</b> You can now display [% terms.bug %] flags as a column + in search results.</li> + <li><b>Search:</b> When viewing search results, you can see which columns are + being sorted on, and which direction the sort is on, as indicated + by arrows next to the column headers.</li> + <li><b>Search:</b> You can now search the Deadline field using relative + dates (like "1d", "2w", etc.).</li> + <li><b>Search:</b> The iCalendar format of search results now includes + a PRIORITY field.</li> + <li><b>Search:</b> It is no longer an error to enter an invalid search + order in a search URL--[% terms.Bugzilla %] will simply warn you that + some of your order options are invalid.</li> + <li><b>Search:</b> When there are no search results, some helpful + links are displayed, offering actions you might want to take.</li> + <li><b>Search:</b> For those who like to make their own + <kbd>buglist.cgi</kbd> URLs (and for people working on customizations), + <kbd>buglist.cgi</kbd> now accepts nearly every valid field in + [%+ terms.Bugzilla %] as a direct URL parameter, like + <kbd>&field=value</kbd>.</li> + + <li><b>Requests:</b> When viewing the "My Requests" page, you can now + see the lists as a normal search result by clicking a link at the + bottom of each table.</li> + <li><b>Requests:</b> When viewing the "My Requests" page, if you are + using Classifications, the Product drop-down will be grouped by + Classification.</li> + + <li><b>Inbound Email:</b> When filing [% terms.abug %] by email, if the + product that you are filing the [% terms.bug %] into has some groups + set as Default for you, the [% terms.bug %] will now be placed into those + groups automatically.</li> + <li><b>Inbound Email:</b> The field names that can be used when creating + [%+ terms.bugs %] by email now exactly matches the set of valid parameters + to the + <a href="[% docs_urlbase FILTER html %]api/Bugzilla/WebService/Bug.html#create">B[% %]ug.create + WebService function</a>. You can still use most of the old field names + that 3.4 and earlier used for inbound emails, though, for + backwards-compatibility.</li> + + <li>If there are multiple languages available for your + [%+ terms.Bugzilla %], you can now select what language you want + [%+ terms.Bugzilla %] displayed in using links at the top of every + page.</li> + <li>When creating a new account, you will be automatically logged in + after setting your password.</li> + <li>There is no longer a maximum password length for accounts.</li> + <li>In the Dusk skin, it's now easier to see links.</li> + <li>In the Whining system, you can now choose to receive emails even + if there are no [% terms.bugs %] that match your searches.</li> + <li>The arrows in dependency graphs now point the other way, so that + [%+ terms.bugs %] point at their dependencies.</li> + + <li><b>New Charts:</b> You can now convert an existing Saved Search + into a data series for New Charts.</li> + <li><b>New Charts:</b> There is now an interface that allows you to + delete data series.</li> + <li><b>New Charts:</b> When deleting a product, you now have the option + to delete the data series that are associated with that product.</li> +</ul> + +<h4>Enhancements for Administrators and Developers</h4> + +<ul> + <li>Depending on how your workflow is set up, it is now possible to + have both UNCONFIRMED and REOPENED show up as status choices for + a closed [% terms.bug %]. If you only want one or the other to + show up, you should edit your status workflow appropriately + (possibly by removing or disabling the REOPENED status).</li> + <li>You can now "disable" field values so that they don't show + up as choices on [% terms.abug %] unless they are already set as + the value for that [% terms.bug %]. This doesn't work for the + per-product field values (component, target_milestone, and version) + yet, though.</li> + <li>Users are now locked out of their accounts for 30 minutes after + trying five bad passwords in a row during login. Every time a + user is locked out like this, the user in the "maintainer" parameter + will get an email.</li> + <li>The minimum length allowed for a password is now 6 characters.</li> + <li>The <kbd>UNCONFIRMED</kbd> status being enabled in a product + is now unrelated to the voting parameters. Instead, there is a checkbox + to enable the <kbd>UNCONFIRMED</kbd> status in a product.</li> + <li>Information about duplicates is now stored in the database instead + of being stored in the <kbd>data/</kbd> directory. On large installations + this could save several hundred megabytes of disk space.</li> + + <li><b>Installation:</b> When installing [% terms.Bugzilla %], the + "maintainer" parameter will be automatically set to the administrator + that was created by <kbd>checksetup.pl</kbd>.</li> + <li><b>Installation:</b> <kbd>checksetup.pl</kbd> now prints out + certain errors in a special color so that you know that something + needs to be done.</li> + <li><b>Installation:</b> <kbd>checksetup.pl</kbd> is now <em>much</em> + faster at upgrading installations, particularly older installations. + Also, it's been made faster to run for the case where it's not + doing an upgrade.</li> + <li><b>Installation:</b> If you install [% terms.Bugzilla %] using the + tarball, the <kbd>CGI.pm</kbd> module from CPAN is now included in + the <kbd>lib/</kbd> dir. If you would rather use the CGI.pm from your + global Perl installation, you can delete <kbd>CGI.pm</kbd> and the + <kbd>CGI</kbd> directory from the <kbd>lib/</kbd> directory.</li> + + <li>When editing a group, you can now specify that members of a group + are allowed to grant others membership in that group itself.</li> + <li>The ability to compress BMP attachments to PNGs is now an Extension. + To enable the feature, remove the file + <kbd>extensions/BmpConvert/disabled</kbd> and then run checksetup.pl.</li> + <li>The default list of values for the Priority field are now clear English + words instead of P1, P2, etc.</li> + <li>There is now a system in place so that all field values can be + localized. See the <kbd>value_descs</kbd> variable in + <kbd>template/en/default/global/field-descs.none.tmpl</kbd>.</li> + <li><kbd>config.cgi</kbd> now returns an ETag header and understands + the If-None-Match header in HTTP requests.</li> + <li>The XML format of <kbd>show_bug.cgi</kbd> now returns more information: + the numeric id of each comment, whether an attachment is a URL, + the modification time of an attachment, the numeric id of a flag, + and the numeric id of a flag's type.</li> + + <li><b>Parameters:</b> Parameters that aren't actually required are no longer + in the "Required" section of the Parameters page. Instead, some are in the + new "General" section, and some are in the new "Advanced" section.</li> + <li><b>Parameters:</b> The old <kbd>ssl</kbd> parameter has been + changed to <kbd>ssl_redirect</kbd>, and can only be turned "on" or "off". + If "on", then all users will be forcibly redirected to SSL whenever + they access [% terms.Bugzilla %]. When the parameter is off, + no SSL-related redirects will occur (even if the user directly + accesses [% terms.Bugzilla %] via SSL, they will <em>not</em> be + redirected to a non-SSL page).</li> + <li><b>Parameters:</b> In the Advanced parameters, there is a new parameter, + <kbd>inbound_proxies</kbd>. If your [% terms.Bugzilla %] is behind a + proxy, you should set this parameter to the IP address of that proxy. + Then, [% terms.Bugzilla %] will "believe" any "X-Forwarded-For" + header sent from that proxy, and correctly use the X-Forwarded-For + as the end user's IP, instead of believing that all traffic is coming + from the proxy.</li> + + <li><b>Removed Parameter:</b> The <kbd>loginnetmask</kbd> parameter has + been removed. Since [% terms.Bugzilla %] sends secure cookies, it's no + longer necessary to always restrict logins to a specific IP or block + of addresses.</li> + <li><b>Removed Parameter:</b> The <kbd>quicksearch_comment_cutoff</kbd> + parameter is gone. Quicksearch now always searches comments; however, it + uses a much faster algorithm to do it.</li> + <li><b>Removed Parameter:</b> The <kbd>usermatchmode</kbd> parameter has + been removed. User-matching is now <em>always</em> done.</li> + <li><b>Removed Parameter:</b> The <kbd>useentrygroupdefault</kbd> parameter + has been removed. [% terms.Bugzilla %] now always behaves as though + that parameter were off.</li> + <li>The <kbd>t/001compile.t</kbd> test should now always pass, no matter + what configuration of optional modules you do or don't have installed.</li> + <li>New script: <kbd>contrib/console.pl</kbd>, which allows you to have + a "command line" into [% terms.Bugzilla %] by inputting Perl code + or using a few custom commands.</li> +</ul> + +<h4>WebService Changes</h4> + +<ul> + <li>The WebService now returns all dates and times in the UTC timezone. + <kbd>B[% %]ugzilla.time</kbd> now acts as though the [% terms.Bugzilla %] + server were in the UTC timezone, always. If you want to write clients + that are compatible across all [% terms.Bugzilla %] versions, + check the timezone from <kbd>B[% %]ugzilla.timezone</kbd> or + <kbd>B[% %]ugzilla.time</kbd>, and always input times in that timezone + and expect times to be returned in that format.</li> + <li>You can now log in by passing <kbd>Bugzilla_login</kbd> and + <kbd>Bugzilla_password</kbd> as arguments to any WebService function. + See the + <a href="[% docs_urlbase FILTER html %]api/Bugzilla/WebService.html#LOGGING_IN">Bugzilla::WebService</a> + documentation for details.</li> + <li>New Method: + <a href="[% docs_urlbase FILTER html %]api/Bugzilla/WebService/Bug.html#attachments">B[% %]ug.attachments</a> + which allows getting information about attachments.</li> + <li>New Method: + <a href="[% docs_urlbase FILTER html %]api/Bugzilla/WebService/Bug.html#fields">B[% %]ug.fields</a>, + which gets information about all the fields that [% terms.abug %] can have + in [% terms.Bugzilla %], include custom fields and legal values for + all fields. The <kbd>B[% %]ug.legal_values</kbd> method is now deprecated.</li> + <li>In the <kbd>B[% %]ug.add_comment</kbd> method, the "private" parameter + has been renamed to "is_private" (for consistency with other methods). + You can still use "private", though, for backwards-compatibility.</li> + <li>The WebService now has Perl's "taint mode" turned on. This means that + it validates all data passed in before sending it to the database. + Also, all parameter names are validated, and if you pass in a parameter + whose name contains anything other than letters, numbers, or underscores, + that parameter will be ignored. Mostly this just affects + customizers--[% terms.Bugzilla %]'s WebService is not functionally + affected by these changes.</li> + <li>In previous versions of [% terms.Bugzilla %], error messages were + sent word-wrapped to the client, from the WebService. Error messages + are now sent as one unbroken line.</li> +</ul> + +<h2 id="v36_issues">Outstanding Issues</h2> + +<ul> + <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=423439"> + [%- terms.Bug %] 423439</a>: Tabs in comments will be converted + to four spaces, due to a b<!-- -->ug in Perl as of Perl 5.8.8.</li> + <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=69621"> + [%- terms.Bug %] 69621</a>: If you rename or remove a keyword that is + in use on [% terms.bugs %], you will need to rebuild the "keyword cache" + by running <a href="sanitycheck.cgi">sanitycheck.cgi</a> and choosing + the option to rebuild the cache when it asks. Otherwise keywords may + not show up properly in search results.</li> + <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=89822"> + [%- terms.Bug %] 89822</a>: When changing multiple [% terms.bugs %] at + the same time, there is no "mid-air collision" protection.</li> + <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=276230"> + [%- terms.Bug %] 276230</a>: The support for restricting access to + particular Categories of New Charts is not complete. You should treat + the 'chartgroup' Param as the only access mechanism available.<br> + However, charts migrated from Old Charts will be restricted to + the groups that are marked MANDATORY for the corresponding Product. + There is currently no way to change this restriction, and the + groupings will not be updated if the group configuration + for the Product changes.</li> +</ul> + +<h2 id="v36_upgrading">Notes On Upgrading From a Previous Version</h2> + +<p>When upgrading to 3.6, <kbd>checksetup.pl</kbd> will create foreign keys + for many columns in the database. Before doing this, it will check the + database for consistency. If there are an unresolvable consistency + problems, it will tell you what table and column in the database contain + the bad values, and which values are bad. If you don't know what else to do, + you can always delete the database records which contain the bad values by + logging in to your database and running the following command:</p> + +<p><code>DELETE FROM <var>table</var> WHERE <var>column</var> IN + (<var>1, 2, 3, 4</var>)</code></p> + +<p>Just replace "table" and "column" with the name of the table + and column that <kbd>checksetup.pl</kbd> mentions, and "1, 2, 3, 4" + with the invalid values that <kbd>checksetup.pl</kbd> prints out.</p> + +<p>Remember that you should always back up your database before doing + an upgrade.</p> + +<h2 id="v36_code_changes">Code Changes Which May Affect Customizations</h2> + +<ul> + <li>There is no longer a SendBugMail method in the templates, and bugmail + is no longer sent by processing a template. Instead, it is sent + by using <kbd>Bugzilla::BugMail::Send</kbd>.</li> + <li>Comments are now represented as a + <a href="[% docs_urlbase FILTER html %]api/Bugzilla/Comment.html">Bugzilla::Comment</a> + object instead of just being hashes.</li> + <li>In previous versions of [% terms.Bugzilla %], the template for displaying + [%+ terms.abug %] required a lot of extra variables that are now global + template variables instead.</li> + <li>You can now check if optional modules are installed by using + <kbd>Bugzilla->feature</kbd> in Perl code or + <kbd>feature_enabled</kbd> in template code.</li> + <li>All of the various template header information required to display + the [% terms.bug %] form is now in one template, + <kbd>template/en/default/bug/show-header.html.tmpl</kbd>.</li> + <li>You should now use <kbd>display_value</kbd> instead of + <kbd>get_status</kbd> or <kbd>get_resolution</kbd> in templates. + <kbd>display_value</kbd> should be used anywhere that a + <select>-type field has its values displayed.</li> +</ul> + + +<h1 id="v36_previous">[% terms.Bugzilla %] 3.4 Release Notes</h1> + +<ul class="bz_toc"> + <li><a href="#v34_introduction">Introduction</a></li> + <li><a href="#v34_point">Updates in this 3.4.x Release</a></li> + <li><a href="#v34_req">Minimum Requirements</a></li> + <li><a href="#v34_feat">New Features and Improvements</a></li> + <li><a href="#v34_issues">Outstanding Issues</a></li> + <li><a href="#v34_upgrading">Notes On Upgrading From a Previous Version</a></li> + <li><a href="#v34_code_changes">Code Changes Which May Affect + Customizations</a></li> + <li><a href="#v34_previous">Release Notes for Previous Versions</a></li> +</ul> + +<h2 id="v34_introduction">Introduction</h2> + +<p>This is [% terms.Bugzilla %] 3.4! [% terms.Bugzilla %] 3.4 brings a lot + of great enhancements for [% terms.Bugzilla %] over previous versions, + with various improvements to the user interface, lots of interesting new + features, and many long-standing requests finally being addressed.</p> + +<p>If you're upgrading, make sure to read <a href="#v34_upgrading">Notes + On Upgrading From a Previous Version</a>. If you are upgrading from a release + before 3.2, make sure to read the release notes for all the + <a href="#v34_previous">previous versions</a> in between your version + and this one, <strong>particularly the Upgrading section of each + version's release notes</strong>.</p> + +<p>We would like to thank <a href="http://www.canonical.com/">Canonical + Ltd.</a> for funding development of one new feature, and NASA for funding + development of several new features through the + <a href="http://www.sjsufoundation.org/">San Jose State University + Foundation</a>.</p> + +<h2 id="v34_point">Updates In This 3.4.x Release</h2> + +<h3>3.4.6</h3> + +<ul> + <li>When doing a search that involves "not equals" or "does not contain the + string" or similar "negative" search types, the search description that + appears at the top of the resulting [% terms.bug %] list will indicate + that the search was of that type. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=474738">[% terms.Bug %] 474738</a>) + </li> + <li>In Internet Explorer, users couldn't easily mark a RESOLVED DUPLICATE + [%+ terms.bug %] as REOPENED, due to a JavaScript error. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=546719">[% terms.Bug %] 546719</a>) + </li> + <li>If you use a "bookmarkable template" to pre-fill forms on + the [% terms.bug %]-filing page, and you have custom fields + that are only supposed to appear (or only supposed to have certain + values) based on the values of other fields, those custom fields will + now work properly. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=538211">[% terms.Bug %] 538211</a>) + </li> + <li>If you have a custom field that's only supposed to appear when + a [% terms.bug %]'s resolution is FIXED, it will now behave properly + on the [% terms.bug %]-editing form when a user sets the [% terms.bug %]'s + status to RESOLVED. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=520993">[% terms.Bug %] 520993</a>) + </li> + <li>If you are logged-out and using <kbd>request.cgi</kbd>, the Requester + and Requestee fields no longer respect the <kbd>usermatching</kbd> + parameter--they always require full usernames. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=533018">[% terms.Bug %] 533018</a>) + </li> + <li>If you tried to do a search with too many terms (resulting in a URL + that was longer than about 7000 characters), Apache would return a + 500 error instead of your search results. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=513989">[% terms.Bug %] 513989</a>) + </li> + <li>[% terms.Bugzilla %] would sometimes lose fields from your sort order + when you added new fields to your sort order. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=470214">[% terms.Bug %] 470214</a>) + </li> + <li>The Atom format of search results would sometimes be missing the + Reporter or Assignee field for some [% terms.bugs %]. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=537834">[% terms.Bug %] 537834</a>) + </li> +</ul> + +<h3>3.4.5</h3> + +<p>This release contains fixes for multiple security issues. See the + <a href="http://www.bugzilla.org/security/3.0.10/">Security Advisory</a> + for details.</p> + +<p>In addition, the following important fixes/changes have been made in + this release:</p> + +<ul> + <li>Whining was failing if jobqueue.pl was enabled. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=530270">[% terms.Bug %] 530270</a>) + </li> + <li>The Assignee field was empty in Whine mails. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=511216">[% terms.Bug %] 511216</a>) + </li> + <li>Administrators can now successfully create user accounts using + editusers.cgi when using the "Env" authentication method. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=483987">[% terms.Bug %] 483987</a>) + </li> + <li>[% terms.Bug %]mail now uses the timezone of the recipient of the email, + when displaying the time a comment was made, instead of the timezone of the + person who made the change. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=534587">[% terms.Bug %] 534587</a>) + </li> + <li>"[% terms.bug %] 1234" in comments sometimes would not become a link if + word-wrapping happened between "[% terms.bug %]" and the number. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=514703">[% terms.Bug %] 514703</a>) + </li> + <li>Running checksetup.pl on Windows will no longer pop up an error box + about OCI.dll. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=480968">[% terms.Bug %] 480968</a>) + </li> +</ul> + +<h3>3.4.4</h3> + +<p>This release contains a fix for a security issue. See the + <a href="http://www.bugzilla.org/security/3.4.3/">Security Advisory</a> + for details.</p> + +<p>Additionally, this release fixes a few minor [% terms.bugs %].</p> + +<h3>3.4.3</h3> + +<ul> + <li>[% terms.Bugzilla %] installations running under mod_perl were leaking + about 512K of RAM per page load. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=517793">[% terms.Bug %] 517793</a>) + </li> + <li>Attachments with Unicode characters in their names were being downloaded + with mangled names. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=328628">[% terms.Bug %] 328628</a>) + </li> + <li>Creating custom fields with Unicode in their database column name + is now no longer allowed, as it would break [% terms.Bugzilla %]. If you + created such a custom field, you should delete it by first marking it + obsolete and then clicking "Delete" in the custom field list, using + <a href="editfields.cgi">editfields.cgi</a>. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=525025">[% terms.Bug %] 525025</a>) + </li> + <li>Clicking "submit only my comment" on the "mid-air collisions" page + was leading to a "Suspicious Action" warning. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=514378">[% terms.Bug %] 514378</a>) + </li> + <li>The XML format of [% terms.abug %] accidentally contained the + word-wrapped content of comments instead of the unwrapped content. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=509152">[% terms.Bug %] 509152</a>) + </li> + <li>You can now do <kbd>./install-module.pl --shell</kbd> to get a CPAN + shell using the configuration of + <a href="[% docs_urlbase FILTER html %]api/install-module.html">install-module.pl</a>, + which allows you to do more advanced Perl module installation tasks. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=445875">[% terms.Bug %] 445875</a>) + </li> +</ul> + +<h3>3.4.2</h3> + +<p>This release contains fixes for multiple security issues, one of which + is highly critical. See the + <a href="http://www.bugzilla.org/security/3.0.8/">Security Advisory</a> + for details.</p> + +<p>In addition, the following important fixes/changes have been made in + this release:</p> + +<ul> + <li>Upgrades from older releases were sometimes failing during UTF-8 + conversion with a foreign key error. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=508181">[% terms.Bug %] 508181</a>) + </li> + <li>Sorting [% terms.bug %] lists on certain fields would result in an error. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=510944">[% terms.Bug %] 510944</a>) + </li> + <li>[% terms.Bug %] update emails had two or three blank lines at the top + and between the various sections of the email. There is now only one + blank line in each of those places, making these emails more compact. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=73330">[% terms.Bug %] 73330</a>) + </li> + <li>[% terms.Bug %] email notifications for new [% terms.bugs %] incorrectly + had a line saying that the description was "Comment 0". + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=510798">[% terms.Bug %] 510798</a>) + </li> + <li>Running <kbd>./collectstats.pl --regenerate</kbd> is now much faster, + on the order of 20x or 100x faster. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=286625">[% terms.Bug %] 286625</a>) + </li> + <li>For users of RHEL, CentOS, Fedora, etc. jobqueue.pl can now automatically + be installed as a daemon by running <kbd>./jobqueue.pl install</kbd> + as root. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=475403">[% terms.Bug %] 475403</a>) + </li> + <li>XML-RPC interface responses had an incorrect Content-Length header + and would sometimes be truncated, if they contained certain UTF-8 + characters. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=486306">[% terms.Bug %] 486306</a>) + </li> + <li>Users who didn't have access to the time-tracking fields would get an + empty [% terms.bug %] update email when the time-tracking fields were + changed. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=509035">[% terms.Bug %] 509035</a>) + </li> + <li>In the New Charts, non-public series now no longer show up as selectable + if you cannot access them. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=389396">[% terms.Bug %] 389396</a>) + </li> +</ul> + +<h3>3.4.1</h3> + +<p>This release contains an important security fix. See the + <a href="http://www.bugzilla.org/security/3.4/">Security Advisory</a> + for details.</p> + +<h2 id="v34_req">Minimum Requirements</h2> + +<p>Any requirements that are new since 3.2.3 will look like + <span class="req_new">this</span>.</p> + +<ul> + <li><a href="#v34_req_perl">Perl</a></li> + <li><a href="#v34_req_mysql">For MySQL Users</a></li> + <li><a href="#v34_req_pg">For PostgreSQL Users</a></li> + <li><a href="#v34_req_oracle">For Oracle Users</a></li> + <li><a href="#v34_req_modules">Required Perl Modules</a></li> + <li><a href="#v34_req_optional_mod">Optional Perl Modules</a></li> +</ul> + +<h3 id="v34_req_perl">Perl</h3> + +<p>Perl v5.8.1</p> + +<h3 id="v34_req_mysql">For MySQL Users</h3> + +<ul> + <li>MySQL v4.1.2</li> + <li><strong>perl module:</strong> DBD::mysql v4.00</li> +</ul> + +<h3 id="v34_req_pg">For PostgreSQL Users</h3> + +<ul> + <li>PostgreSQL v8.00.0000</li> + <li><strong>perl module:</strong> DBD::Pg v1.45</li> +</ul> + +<h3 id="v34_req_oracle">For Oracle Users</h3> + +<ul> + <li>Oracle v10.02.0</li> + <li><strong>perl module:</strong> DBD::Oracle v1.19</li> +</ul> + +<h3 id="v34_req_modules">Required Perl Modules</h3> + +<table class="req_table" border="0" cellspacing="0" cellpadding="0"> + <tr> + <th>Module</th> <th>Version</th> + </tr> + <tr> + <td>CGI</td> + <td>3.21</td> + </tr> + <tr> + <td class="req_new">Digest::SHA</td> + <td class="req_new"> (Any)</td> + </tr> + <tr> + <td>Date::Format</td> + <td>2.21</td> + </tr> + <tr> + <td class="req_new">DateTime</td> + <td class="req_new">0.28</td> + </tr> + <tr> + <td class="req_new">DateTime::TimeZone</td> + <td class="req_new">0.71</td> + </tr> + <tr> + <td>DBI</td> + <td>1.41</td> + </tr> + <tr> + <td>Template</td> + <td class="req_new">2.22</td> + </tr> + <tr> + <td>Email::Send</td> + <td>2.00</td> + </tr> + <tr> + <td>Email::MIME</td> + <td>1.861</td> + </tr> + <tr> + <td>Email::MIME::Encodings</td> + <td>1.313</td> + </tr> + <tr> + <td>Email::MIME::Modifier</td> + <td>1.442</td> + </tr> + <tr> + <td class="req_new">URI</td> + <td class="req_new">(Any)</td> + </tr> +</table> + +<h3 id="v34_req_optional_mod">Optional Perl Modules</h3> + +<p>The following perl modules, if installed, enable various + features of [% terms.Bugzilla %]:</p> + +<table class="req_table" border="0" cellspacing="0" cellpadding="0"> + <tr> + <th>Module</th> + <th>Version</th> + <th>Enables Feature</th> + </tr> + <tr> + <td>LWP::UserAgent</td> + <td>(Any)</td> + <td>Automatic Update Notifications</td> + </tr> + <tr> + <td>Template::Plugin::GD::Image</td> + <td>(Any)</td> + <td>Graphical Reports</td> + </tr> + <tr> + <td>GD::Text</td> + <td>(Any)</td> + <td>Graphical Reports</td> + </tr> + <tr> + <td>GD::Graph</td> + <td>(Any)</td> + <td>Graphical Reports</td> + </tr> + <tr> + <td>GD</td> + <td>1.20</td> + <td>Graphical Reports, New Charts, Old Charts</td> + </tr> + <tr> + <td>Email::MIME::Attachment::Stripper</td> + <td>(Any)</td> + <td>Inbound Email</td> + </tr> + <tr> + <td>Email::Reply</td> + <td>(Any)</td> + <td>Inbound Email</td> + </tr> + <tr> + <td>Net::LDAP</td> + <td>(Any)</td> + <td>LDAP Authentication</td> + </tr> + <tr> + <td class="req_new">TheSchwartz</td> + <td class="req_new">(Any)</td> + <td>Mail Queueing</td> + </tr> + <tr> + <td class="req_new">Daemon::Generic</td> + <td class="req_new">(Any)</td> + <td>Mail Queueing</td> + </tr> + <tr> + <td>HTML::Parser</td> + <td>3.40</td> + <td>More HTML in Product/Group Descriptions</td> + </tr> + <tr> + <td>HTML::Scrubber</td> + <td>(Any)</td> + <td>More HTML in Product/Group Descriptions</td> + </tr> + <tr> + <td>XML::Twig</td> + <td>(Any)</td> + <td>Move [% terms.Bugs %] Between Installations</td> + </tr> + <tr> + <td>MIME::Parser</td> + <td>5.406</td> + <td>Move [% terms.Bugs %] Between Installations</td> + </tr> + <tr> + <td>Chart::Base</td> + <td>1.0</td> + <td>New Charts, Old Charts</td> + </tr> + <tr> + <td>Image::Magick</td> + <td>(Any)</td> + <td>Optionally Convert BMP Attachments to PNGs</td> + </tr> + <tr> + <td>PatchReader</td> + <td>0.9.4</td> + <td>Patch Viewer</td> + </tr> + <tr> + <td>Authen::Radius</td> + <td>(Any)</td> + <td>RADIUS Authentication</td> + </tr> + <tr> + <td>Authen::SASL</td> + <td>(Any)</td> + <td>SMTP Authentication</td> + </tr> + <tr> + <td>SOAP::Lite</td> + <td>0.710.06</td> + <td>XML-RPC Interface</td> + </tr> + <tr> + <td>mod_perl2</td> + <td>1.999022</td> + <td>mod_perl</td> + </tr> +</table> + +<h2 id="v34_feat">New Features and Improvements</h2> + +<ul> + <li><a href="#v34_feat_enter">Simple [% terms.Bug %] Filing</a></li> + <li><a href="#v34_feat_index">New Home Page</a></li> + <li><a href="#v34_feat_spam">Email Addresses Hidden From Logged-Out + Users</a></li> + <li><a href="#v34_feat_urls">Shorter Search URLs</a></li> + <li><a href="#v34_feat_async">Asynchronous Email Sending</a></li> + <li><a href="#v34_feat_tz">Dates and Times Displayed In User's Time + Zone</a></li> + <li><a href="#v34_feat_vis">Custom Fields That Only Appear When + Another Field Has a Particular Value</a></li> + <li><a href="#v34_feat_vals">Custom Fields Whose List of Values + Change Depending on the Value of Another Field</a></li> + <li><a href="#v34_feat_bugid">New Custom Field Type: + [%+ terms.Bug %] ID</a></li> + <li><a href="#v34_feat_see">"See Also" Field</a></li> + <li><a href="#v34_feat_cols">Re-order Columns in Search Results</a></li> + <li><a href="#v34_feat_desc">Search Descriptions</a></li> + <li><a href="#v34_feat_other">Other Enhancements and Changes</a></li> +</ul> + +<h3 id="v34_feat_enter">Simple [% terms.Bug %] Filing</h3> + +<p>When entering a new [% terms.bug %], the vast majority of fields are + now hidden by default, which enormously simplifies the bug-filing form. + You can click "Show Advanced Fields" to show all the fields, if you want + them. [%+ terms.Bugzilla %] remembers whether you last used the "Advanced" + or "Simple" version of the [% terms.bug %]-entry form, and will display the + same version to you again next time you file [% terms.abug %].</p> + +<h3 id="v34_feat_index">New Home Page</h3> + +<p>[% terms.Bugzilla %]'s front page has been redesigned to be better at + guiding new users into the activities that they most commonly want to + do. Further enhancements to the home page are coming in future versions + of [% terms.Bugzilla %].</p> + +<h3 id="v34_feat_spam">Email Addresses Hidden From Logged-Out Users</h3> + +<p>To help prevent spam to [% terms.Bugzilla %] users, all email addresses + stored in [% terms.Bugzilla %] are now displayed only if you are logged in. + If you are logged out, only the part before the "@" of the email address is + displayed. This includes [% terms.bug %] lists, viewing [% terms.bugs %], the + XML format of [% terms.abug %], and any other place in the web interface that + an email address could appear.</p> + +<p>Email addresses are not filtered out of [% terms.bug %] comments. + The WebService still returns full email addresses, even if you are logged + out.</p> + +<h3 id="v34_feat_urls">Shorter Search URLs</h3> + +<p>When submitting a search, all the unused fields are now stripped from + the URL, so search URLs are much more meaningful, and much shorter.</p> + +<h3 id="v34_feat_async">Asynchronous Email Sending</h3> + +<p>The largest performance problem in former versions of [% terms.Bugzilla %] + was that when updating [% terms.bugs %], email would be sent immediately + to every user who needed to be notified, and <kbd>process_bug.cgi</kbd> + would wait for the emails to be sent before continuing.</p> + +<p>Now [% terms.Bugzilla %] is capable of queueing emails to be sent + while [% terms.abug %] is being updated, and sending them in the + background. This requires the administrator to run a daemon + that comes with [% terms.Bugzilla %], named + <a href="[% docs_urlbase FILTER html %]api/jobqueue.html">jobqueue.pl</a>, + and to enable the <a href="editparams.cgi?section=mta#use_mailer_queue"> + use_mailer_queue</a> parameter.</p> + +<p>Using the background email-sending daemon instead of sending mail directly + should result in a very large speed-up for updating [% terms.bugs %], + particularly on larger installations.</p> + +<h3 id="v34_feat_tz">Dates and Times Displayed In User's Time Zone</h3> + +<p>Users can now select what time zone they are in and [% terms.Bugzilla %] + will adjust displayed times to be correct for their time zone. However, + times the user inputs are unfortunately still in [% terms.Bugzilla %]'s + time zone.</p> + +<h3 id="v34_feat_vis">Custom Fields That Only Appear When Another Field + Has a Particular Value</h3> + +<p>When creating a new custom field (or updating the definition of + an existing custom field), you can now say that "this field only + appears when field X has value Y". (In the future, you will be able + to select multiple values for "Y", so a field will appear when any + one of those values is selected.)</p> + +<p>This feature only hides fields--it doesn't make their values go away. + So [% terms.bugs %] will still show up in searches for that field's + value, but the field won't appear in the user interface.</p> + +<p>This is a good way of making Product-specific fields.</p> + +<h3 id="v34_feat_vals">Custom Fields Whose List of Values Change + Depending on the Value of Another Field</h3> + +<p>When creating a drop-down or multiple-selection custom field, you can + now specify that another field "controls the values" of this field. + Then, when adding values to this field, you can say that a particular + value only appears when the other field is set to a particular + value.</p> + +<p>Here's an example: Let's say that we create a field called "Colors", + and we make the Product field "control the values" for Colors. Then we + add Blue, Red, Black, and Yellow as legal values for the "Colors" field. + Now we can say that "Blue" and "Red" only appear as valid choices in + Product A, "Yellow" only appears in Product B, but "Black" <em>always</em> + appears.</p> + +<p>One thing to note is that this feature only controls what values appear in + the <em>user interface</em>. [% terms.Bugzilla %] itself will still accept + any combination of values as valid, in the backend.</p> + +<h3 id="v34_feat_bugid">New Custom Field Type: [% terms.Bug %] ID</h3> + +<p>You can now create a custom field that holds a reference to a single + valid [% terms.bug %] ID. In the future this will be enhanced to allow + [%+ terms.bugs %] to refer to each other via this field.</p> + +<h3 id="v34_feat_see">"See Also" Field</h3> + +<p>We have added a new standard field called "See Also" to + [%+ terms.Bugzilla %]. In this field, you can put URLs to multiple + [%+ terms.bugs %] in any [% terms.Bugzilla %] installation, to indicate + that those [% terms.bugs %] are related to this one. It also supports + adding URLs to [% terms.bugs %] in + <a href="http://launchpad.net/">Launchpad</a>.</p> + +<p>Right now, the field just validates the URLs and then displays them, but + in the future, it will grab information from the other installation about + the [% terms.bug %] and display it here, and possibly even update the + other installation.</p> + +<p>If your installation does not need this field, you can hide it by disabling + the <a href="editparams.cgi?section=bugfields#use_see_also">use_see_also + parameter</a>.</p> + +<h3 id="v34_feat_cols">Re-order Columns in Search Results</h3> + +<p>There is a new interface for choosing what columns appear in search + results, which allows you to change the order in which columns appear + from left to right when viewing the [% terms.bug %] list.</p> + +<h3 id="v34_feat_desc">Search Descriptions</h3> + +<p>When displaying search results, [% terms.Bugzilla %] will now show + a brief description of what you searched for, at the top of the + [%+ terms.bug %] list.</p> + +<h3 id="v34_feat_other">Other Enhancements and Changes</h3> + +<h4>Enhancements for Users</h4> + +<ul> + <li>You can now log in from every page, using the login form that appears + in the header or footer when you click "Log In".</li> + <li>When viewing [% terms.abug %], obsolete attachments are now + hidden from the attachment list by default. You can show them + by clicking "Show Obsolete" at the bottom of the attachment list.</li> + <li>In the Email Preferences, you can now choose to get email when + a new [% terms.bug %] report is filed and you have a particular + role on it.</li> + <li>When resolving a mid-air collision, you can now choose to submit + only your comment.</li> + <li>You can now set the Blocks and Depends On field on the "Change + Several [% terms.Bugs %] At Once" page.</li> + <li>If your installation uses the "insidergroup" feature, you can now add + private comments on the "Change Several [% terms.Bugs %] At Once" + page.</li> + <li>When viewing a search result, you can now hover over any abbreviated + field to see its full value.</li> + <li>When logging out, users are now redirected to the main page of + [%+ terms.Bugzilla %] instead of an empty page.</li> + <li>When editing [% terms.abug %], text fields (except the comment box) now + grow longer when you widen your browser window.</li> + <li>When viewing [% terms.abug %], the Depends On and Blocks list will + display [% terms.abug %]'s alias if it has one, instead of its id. + Also, closed [% terms.bugs %] will be sorted to the end of the list.</li> + + <li>If you use the time-tracking features of [% terms.Bugzilla %], and + you enable the time-tracking related columns in a search result, + then you will see a summary of the time-tracking data at the + bottom of the search result.</li> + <li>For users of time-tracking, the <kbd>summarize_time.cgi</kbd> page + now contains more data.</li> + + <li>When viewing an attachment's details page while you are logged-out, + flags are no longer shown as editable.</li> + <li>Cloning [% terms.abug %] will now retain the "Blocks" and "Depends On" + fields from the [% terms.bug %] being cloned.</li> + <li>[% terms.Bug %]mail for new [% terms.bugs %] will now indicate + what security groups the [% terms.bug %] has been restricted to.</li> + <li>You can now use any custom drop-down field as an axis for a tabular + or graphical report.</li> + <li>The <kbd>X-Bugzilla-Type</kbd> header in emails sent by + [%+ terms.Bugzilla %] is now "new" for [% terms.bug %]mail sent for + newly-filed [% terms.bugs %], and "changed" for emails having to do + with updated [% terms.bugs %].</li> + <li>Mails sent by the "Whining" system now contain the header + <kbd>X-Bugzilla-Type: whine</kbd>.</li> + <li>[% terms.bug %]mail now contains a X-Bugzilla-URL header to uniquely + identify which [% terms.Bugzilla %] installation the email came from.</li> + <li>If you input an invalid regular expression anywhere in + [%+ terms.Bugzilla %], it will now tell you explicitly instead of failing + cryptically.</li> + <li>The <kbd>duplicates.xul</kbd> page (which wasn't used by very many + people) is now gone.</li> +</ul> + +<h4>Enhancements for Administrators and Developers</h4> + +<ul> + <li>[% terms.Bugzilla %] now uses the SHA-256 algorithm (a variant of + SHA-2) to encrypt passwords in the database, instead of using Unix's + "crypt" function. This allows passwords longer than eight characters + to actually be effective. Each user's password will be converted to + SHA-256 the first time they log in after you upgrade to + [%+ terms.Bugzilla %] 3.4 or later.</li> + <li>If you are using database replication with [% terms.Bugzilla %], + many more scripts now take advantage of the read-only slave (the + "shadowdb"). It may be safe to open up <kbd>show_bug.cgi</kbd> + to search-engine indexing by editing your <kbd>robots.txt</kbd> file, + now, if your [% terms.Bugzilla %] is on fast-enough hardware.</li> + <li>The database now uses foreign keys to enforce the validity of + relationships between tables. Not every single table has all its + foreign keys yet, but most do.</li> + <li>Various parameters have been removed, in an effort to de-clutter + the parameter interface and simplify [% terms.Bugzilla %]'s code. + The parameters that were removed were: timezone, supportwatchers, + maxpatchsize, commentonclearresolution, commentonreassignbycomponent, + showallproducts. They have all been replaced with sensible default + behaviors. (For example, user watching is now always enabled.)</li> + <li>When adding <code>&debug=1</code> to the end of a + <kbd>buglist.cgi</kbd> URL, [% terms.Bugzilla %] will now also do an + EXPLAIN on the query, to help debug performance issues.</li> + <li>When editing flag types in the administrative interface, you can now + see how many flags of each type have been set.</li> +</ul> + +<h4>WebService Changes</h4> + +<ul> + <li>Various functions have been added to the WebService: + <a href="[% docs_urlbase FILTER html %]api/Bugzilla/WebService/Bug.html#history">B[% %]ug.history</a>, + <a href="[% docs_urlbase FILTER html %]api/Bugzilla/WebService/Bug.html#search">B[% %]ug.search</a>, + <a href="[% docs_urlbase FILTER html %]api/Bugzilla/WebService/Bug.html#comments">B[% %]ug.comments</a>, + <a href="[% docs_urlbase FILTER html %]api/Bugzilla/WebService/Bug.html#update_see_also">B[% %]ug.update_see_also</a>, + <a href="[% docs_urlbase FILTER html %]api/Bugzilla/WebService/User.html#get">User.get</a>, + and <a href="[% docs_urlbase FILTER html %]api/Bugzilla/WebService/Bugzilla.html#time">B[% %]ugzilla.time</a> + (<kbd>B[% %]ugzilla.timezone</kbd> is now deprecated). + </li> + <li>For network efficiency, you can now limit which fields are returned + from certain WebService functions, like <kbd>User.get</kbd>.</li> + <li>There is now a "permissive" argument for the <kbd>B[% %]ug.get</kbd> + WebService function, which causes it not to throw an error when you + ask for [% terms.bugs %] you can't see.</li> + + <li>The <kbd>B[% %]ug.get</kbd> method now returns many more fields.</li> + <li>The <kbd>B[% %]ug.add_comment</kbd> method now returns the ID of the comment + that was just added.</li> + <li>The <kbd>B[% %]ug.add_comment</kbd> method will now throw an error if you + try to add a private comment but do not have the correct permissions. + (In previous versions, it would just silently ignore the <kbd>private</kbd> + argument if you didn't have the correct permissions.)</li> + <li>Many WebService function parameters now take individual values in + addition to arrays.</li> + <li>The WebService now validates input types--it makes sure that dates + are in the right format, that ints are actually ints, etc. It will throw + an error if you send it invalid data. It also accepts empty ints, doubles, + and dateTimes, and translates them to <kbd>undef</kbd>.</li> +</ul> + +<h2 id="v34_issues">Outstanding Issues</h2> + +<ul> + <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=423439"> + [%- terms.Bug %] 423439</a>: Tabs in comments will be converted + to four spaces, due to a b<!-- -->ug in Perl as of Perl 5.8.8.</li> + <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=69621"> + [%- terms.Bug %] 69621</a>: If you rename or remove a keyword that is + in use on [% terms.bugs %], you will need to rebuild the "keyword cache" + by running <a href="sanitycheck.cgi">sanitycheck.cgi</a> and choosing + the option to rebuild the cache when it asks. Otherwise keywords may + not show up properly in search results.</li> + <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=89822"> + [%- terms.Bug %] 89822</a>: When changing multiple [% terms.bugs %] at + the same time, there is no "mid-air collision" protection.</li> + <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=276230"> + [%- terms.Bug %] 276230</a>: The support for restricting access to + particular Categories of New Charts is not complete. You should treat + the 'chartgroup' Param as the only access mechanism available.<br> + However, charts migrated from Old Charts will be restricted to + the groups that are marked MANDATORY for the corresponding Product. + There is currently no way to change this restriction, and the + groupings will not be updated if the group configuration + for the Product changes.</li> + <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=370370"> + [%- terms.Bug %] 370370</a>: mod_perl support is currently not + working on Windows machines.</li> +</ul> + +<h2 id="v34_upgrading">Notes On Upgrading From a Previous Version</h2> + +<p>When upgrading to 3.4, <kbd>checksetup.pl</kbd> will create foreign keys + for many columns in the database. Before doing this, it will check the + database for consistency. If there are an unresolvable consistency + problems, it will tell you what table and column in the database contain + the bad values, and which values are bad. If you don't know what else to do, + you can always delete the database records which contain the bad values by + logging in to your database and running the following command:</p> + +<p><code>DELETE FROM <var>table</var> WHERE <var>column</var> IN + (<var>1, 2, 3, 4</var>)</code></p> + +<p>Just replace "table" and "column" with the name of the table + and column that <kbd>checksetup.pl</kbd> mentions, and "1, 2, 3, 4" + with the invalid values that <kbd>checksetup.pl</kbd> prints out.</p> + +<p>Remember that you should always back up your database before doing + an upgrade.</p> + +<h2 id="v34_code_changes">Code Changes Which May Affect Customizations</h2> + +<ul> + <li><kbd>checksetup.pl</kbd> now re-writes the <kbd>localconfig</kbd> + file every time it runs, keeping the current values set (if there + are any), but moving any unexpected variables into a file called + <kbd>localconfig.old</kbd>. If you want to continue having custom + varibles in <kbd>localconfig</kbd>, you will have to add them to + the <code>LOCALCONFIG_VARS</code> constant in + <kbd>Bugzilla::Install::Localconfig</kbd>.</li> + <li><kbd>Bugzilla::Object->update()</kbd> now returns something different + in list context than it does in scalar context.</li> + <li><kbd>Bugzilla::Object->check()</kbd> now can take object + ids in addition to names. Just pass in <code>{ id => $some_value + }</code>.</li> + <li>Instead of being defined in <kbd>buglist.cgi</kbd>, columns for + search results are now defined in a subroutine called <code>COLUMNS</code> + in <kbd>Bugzilla::Search</kbd>. The data now mostly comes from the + <kbd>fielddefs</kbd> table in the database. Search.pm now takes a list + of column names from fielddefs for its <kbd>fields</kbd> argument instead + of literal SQL columns.</li> + <li><kbd>Bugzilla::Field->legal_values</kbd> now returns an array of + <a href="[% docs_urlbase FILTER html %]api/Bugzilla/Field/Choice.html">Bugzilla::Field::Choice</a> + objects instead of an array of strings. Bugzilla::Field::Choice will be used + in more places, in the future.</li> + <li>We now use <kbd>Bugzilla::Bug->check()</kbd> instead of + <kbd>ValidateBugId</kbd>.</li> + <li>The <kbd>groups</kbd> and <kbd>bless_groups</kbd> methods in + <kbd>Bugzilla::User</kbd> now return an arrayref of + <kbd>Bugzilla::Group</kbd> objects instead of a hashref with + group ids and group names.</li> + <li>Standard [% terms.Bugzilla %] drop-down fields now have their type + set to <kbd>FIELD_TYPE_SINGLE_SELECT</kbd> in the fielddefs table.</li> + <li><kbd>Bugzilla->usage_mode</kbd> now defaults to + <kbd>USAGE_MODE_CMDLINE</kbd> if we are not running inside a web + server.</li> + <li>We no longer delete environment variables like <kbd>$ENV{PATH}</kbd> + automatically unless we're actually running in taint mode.</li> + <li>We are now using YUI 2.6.0.</li> + <li>In <a href="config.cgi?ctype=rdf">the RDF format of config.cgi</a>, + the "resource" attribute for flags now contains "flag.cgi" instead + of "flags.cgi".</li> +</ul> + + + + + + + +<h1 id="v34_previous">[% terms.Bugzilla %] 3.2 Release Notes</h1> + +<h2>Table of Contents</h2> + +<ul class="bz_toc"> + <li><a href="#v32_introduction">Introduction</a></li> + <li><a href="#v32_point">Updates In This 3.2.x Release</a></li> + <li><a href="#v32_security">Security Fixes In This 3.2.x Release</a></li> + <li><a href="#v32_req">Minimum Requirements</a></li> + <li><a href="#v32_feat">New Features and Improvements</a></li> + <li><a href="#v32_issues">Outstanding Issues</a></li> + <li><a href="#v32_upgrading">How to Upgrade From An Older Version</a></li> + <li><a href="#v32_code_changes">Code Changes Which May Affect + Customizations</a></li> + <li><a href="#v32_previous">Release Notes for Previous Versions</a></li> +</ul> + +<h2 id="v32_introduction">Introduction</h2> + +<p>Welcome to [% terms.Bugzilla %] 3.2! This is our first major feature + release since [% terms.Bugzilla %] 3.0, and it brings a lot of great + improvements and polish to the [% terms.Bugzilla %] experience.</p> + +<p>If you're upgrading, make sure to read <a href="#v32_upgrading">How to + Upgrade From An Older Version</a>. If you are upgrading from a release + before 3.0, make sure to read the release notes for all the + <a href="#v32_previous">previous versions</a> in between your version + and this one, <strong>particularly the "Notes For Upgraders" section of each + version's release notes</strong>.</p> + +<h2 id="v32_point">Updates in this 3.2.x Release</h2> + +<p>This section describes what's changed in the most recent b<!-- -->ug-fix + releases of [% terms.Bugzilla %] after 3.2. We only list the + most important fixes in each release. If you want a detailed list of + <em>everything</em> that's changed in each version, you should use our + <a href="http://www.bugzilla.org/status/changes.html">Change Log + Page</a>.</p> + +<h3>3.2.3</h3> + +<ul> + <li>[% terms.Bugzilla %] is now compatible with MySQL 5.1.x versions 5.1.31 + and greater. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=480001">[% terms.Bug %] 480001</a>)</li> + <li>On Windows, [% terms.Bugzilla %] sometimes would send mangled emails + (that would often fail to send). + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=467920">[% terms.Bug %] 467920</a>)</li> + <li><code>recode.pl</code> would sometimes crash when trying to convert + databases from older versions of [% terms.Bugzilla %]. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=431201">[% terms.Bug %] 431201</a>)</li> + <li>Running a saved search with Unicode characters in its name would + cause [% terms.Bugzilla %] to crash. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=477513">[% terms.Bug %] 477513</a>)</li> + <li>[% terms.Bugzilla %] clients like Mylyn can now update [% terms.bugs %] + again (the [% terms.bug %] XML format now contains a "token" element that + can be used when updating [% terms.abug %]). + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=476678">[% terms.Bug %] 476678</a>)</li> + <li>For installations using the <code>shadowdb</code> parameter, + [%+ terms.Bugzilla %] was accidentally writing to the "tokens" table + in the shadow database (instead of the master database) when using the + "Change Several [% terms.Bugs %] at Once" page. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=476943">[% terms.Bug %] 476943</a>)</li> +</ul> + +<p>This release also contains a security fix. See the + <a href="#v32_security">Security Fixes Section</a> for details.</p> + +<h3>3.2.2</h3> + +<p>This release fixes one security issue that is critical for installations + running 3.2.1 under mod_perl. See the + <a href="http://www.bugzilla.org/security/3.0.7/">Security Advisory</a> + for details.</p> + +<h3>3.2.1</h3> + +<ul> + <li>Attachments, charts, and graphs would sometimes be garbled on Windows. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=464992">[% terms.Bug %] 464992</a>)</li> + + <li>Saving changes to parameters would sometimes fail silently (particularly + on Windows when the web server didn't have the right permissions to + update the <code>params</code> file). [% terms.Bugzilla %] will now + throw an error in this case, telling you what is wrong. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=347707">[% terms.Bug %] 347707</a>)</li> + + <li>If you were using the <code>usemenuforusers</code> parameter, + and [% terms.abug %] was assigned to (or had a QA Contact of) a disabled + user, that field would be reset to the first user in the list when + updating [% terms.abug %]. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=465589">[% terms.Bug %] 465589</a>)</li> + + <li>If you were using the <code>PROJECT</code> environment variable + to have multiple [% terms.Bugzilla %] installations using one codebase, + project-specific templates were being ignored. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=467324">[% terms.Bug %] 467324</a>)</li> + + <li>Some versions of the SOAP::Lite Perl module had a b[% %]ug that caused + [%+ terms.Bugzilla %]'s XML-RPC service to break. + <code>checksetup.pl</code> now checks for these bad versions and + will reject them. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=468009">[% terms.Bug %] 468009</a>)</li> + + <li>The font sizes in various places were too small, when using the + Classic skin. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=469136">[% terms.Bug %] 469136</a>)</li> +</ul> + +<h2 id="v32_security">Security Fixes In This 3.2.x Release</h2> + +<h3>3.2.3</h3> + +<p>This release fixes one security issue related to attachments. See the + <a href="http://www.bugzilla.org/security/3.2.2/">Security Advisory</a> + for details.</p> + +<h3>3.2.2</h3> + +<p>This release fixes one security issue that is critical for installations + running 3.2.1 under mod_perl. See the + <a href="http://www.bugzilla.org/security/3.0.7/">Security Advisory</a> + for details.</p> + +<h3>3.2.1</h3> + +<p>This release contains several security fixes. One fix may break any + automated scripts you have that are loading <kbd>process_bug.cgi</kbd> + directly. We recommend that you read the entire + <a href="http://www.bugzilla.org/security/2.22.6/">Security Advisory</a> + for this release.</p> + +<h2 id="v32_req">Minimum Requirements</h2> + +<p>Any requirements that are new since 3.0.5 will look like + <span class="req_new">this</span>.</p> + +<ul> + <li><a href="#v32_req_perl">Perl</a></li> + <li><a href="#v32_req_mysql">For MySQL Users</a></li> + <li><a href="#v32_req_pg">For PostgreSQL Users</a></li> + <li><a href="#v32_req_oracle">For Oracle Users</a></li> + <li><a href="#v32_req_modules">Required Perl Modules</a></li> + <li><a href="#v32_req_optional_mod">Optional Perl + Modules</a></li> +</ul> + +<h3 id="v32_req_perl">Perl</h3> + +<p>Perl <span class="req_new">v<strong>5.8.1</strong></span></p> + +<h3 id="v32_req_mysql">For MySQL Users</h3> + +<ul> + <li>MySQL v4.1.2</li> + <li><strong>perl module:</strong> + DBD::mysql <span class="req_new">v4.00</span></li> +</ul> + +<h3 id="v32_req_pg">For PostgreSQL Users</h3> + +<ul> + <li>PostgreSQL v8.00.0000</li> + <li><strong>perl module:</strong> DBD::Pg v1.45</li> +</ul> + +<h3 id="v32_req_oracle">Email Addresses Hidden From Logged-Out Users + For Oracle Users</h3> + +<ul> + <li>Oracle v10.02.0</li> + <li><strong>perl module:</strong> DBD::Oracle v1.19</li> +</ul> + +<h3 id="v32_req_modules">Required Perl Modules</h3> + +<table class="req_table" border="0" cellpadding="0" cellspacing="0"> +<tr> <th>Module</th> <th>Version</th> </tr> +<tr> <td>CGI</td> <td class="req_new">3.21 (on Perl 5.8.x) + or 3.33 (on Perl 5.10.x)</td> </tr> +<tr> <td>Date::Format</td> <td>2.21</td> </tr> +<tr> <td>File::Spec</td> <td>0.84</td> </tr> +<tr> <td>DBI</td> <td>1.41</td> </tr> +<tr> <td>Template</td> <td class="req_new">2.15</td> </tr> +<tr> <td>Email::Send</td> <td>2.00</td> </tr> +<tr> <td>Email::MIME</td> <td class="req_new">1.861</td> </tr> +<tr> + <td class="req_new">Email::MIME::Encodings</td> + <td class="req_new">1.313</td> +</tr> +<tr> + <td>Email::MIME::Modifier</td> + <td class="req_new">1.442</td> +</tr> +</table> + +<h3 id="v32_req_optional_mod">Optional Perl Modules</h3> + +<p>The following perl modules, if installed, enable various + features of [% terms.Bugzilla %]:</p> + +<table class="req_table" border="0" cellpadding="0" cellspacing="0"> +<tr> + <th>Module</th> + <th>Version</th> + <th>Enables Feature</th> +</tr> +<tr> + <td>LWP::UserAgent</td> + <td>(Any)</td> + <td>Automatic Update Notifications</td> +</tr> +<tr> + <td>Template::Plugin::GD::Image</td> + <td>(Any)</td> + <td>Graphical Reports</td> +</tr> +<tr> + <td>GD::Text</td> + <td>(Any)</td> + <td>Graphical Reports</td> +</tr> +<tr> + <td>GD::Graph</td> + <td>(Any)</td> + <td>Graphical Reports</td> +</tr> +<tr> + <td>GD</td> + <td>1.20</td> + <td>Graphical Reports, New Charts, Old Charts</td> +</tr> +<tr> + <td>Email::MIME::Attachment::Stripper</td> + <td>(Any)</td> + <td>Inbound Email</td> +</tr> +<tr> + <td>Email::Reply</td> + <td>(Any)</td> + <td>Inbound Email</td> +</tr> +<tr> + <td>Net::LDAP</td> + <td>(Any)</td> + <td>LDAP Authentication</td> +</tr> +<tr> + <td>HTML::Parser</td> + <td>3.40</td> + <td>More HTML in Product/Group Descriptions</td> +</tr> +<tr> + <td>HTML::Scrubber</td> + <td>(Any)</td> + <td>More HTML in Product/Group Descriptions</td> +</tr> +<tr> + <td>XML::Twig</td> + <td>(Any)</td> + <td>Move [% terms.Bugs %] Between Installations</td> +</tr> +<tr> + <td>MIME::Parser</td> + <td>5.406</td> + <td>Move [% terms.Bugs %] Between Installations</td> +</tr> +<tr> + <td>Chart::Base</td> + <td>1.0</td> + <td>New Charts, Old Charts</td> +</tr> +<tr> + <td>Image::Magick</td> + <td>(Any)</td> + <td>Optionally Convert BMP Attachments to PNGs</td> +</tr> +<tr> + <td>PatchReader</td> + <td>0.9.4</td> + <td>Patch Viewer</td> +</tr> +<tr> + <td class="req_new">Authen::Radius</td> + <td class="req_new">(Any)</td> + <td>RADIUS Authentication</td> +</tr> +<tr> + <td class="req_new">Authen::SASL</td> + <td class="req_new">(Any)</td> + <td>SMTP Authentication</td> +</tr> +<tr> + <td>SOAP::Lite</td> + <td>(Any)</td> + <td>XML-RPC Interface</td> +</tr> +<tr> + <td>mod_perl2</td> + <td>1.999022</td> + <td>mod_perl</td> +</tr> +</table> + +<h2 id="v32_feat">New Features and Improvements</h2> + +<ul> + <li><a href="#v32_feat_ui">Major UI Improvements</a></li> + <li><a href="#v32_feat_skin">New Default Skin: Dusk</a></li> + <li><a href="#v32_feat_status">Custom Status Workflow</a></li> + <li><a href="#v32_feat_fields">New Custom Field Types</a></li> + <li><a href="#v32_feat_install">Easier Installation</a></li> + <li><a href="#v32_feat_oracle">Experimental Oracle Support</a></li> + <li><a href="#v32_feat_utf8">Improved UTF-8 Support</a></li> + <li><a href="#v32_feat_grcons">Group Icons</a></li> + <li><a href="#v32_feat_other">Other Enhancements and Changes</a></li> +</ul> + +<h3 id="v32_feat_ui">Major UI Improvements</h3> + +<p>[% terms.Bugzilla %] 3.2 has had some UI assistance from the NASA + Human-Computer Interaction department and the new + <a href="http://wiki.mozilla.org/Bugzilla:UE">[% terms.Bugzilla %] + User Interface Team</a>.</p> + +<p>In particular, you will notice a massively redesigned [% terms.bug %] + editing form, in addition to our <a href="#v32_feat_skin">new skin</a>.</p> + +<h3 id="v32_feat_skin">New Default Skin: Dusk</h3> + +<p>[% terms.Bugzilla %] 3.2 now ships with a skin called "Dusk" that is + a bit more colorful than old default "Classic" skin.</p> + +<p>Upgrading installations will still default to the "Classic" + skin--administrators can change the default in the Default Preferences + control panel. Users can also choose to use the old skin in their + Preferences (or using the View :: Page Style menu in Firefox).</p> + +<p>The changes that [% terms.Bugzilla %] required for Dusk made + [%+ terms.Bugzilla %] much easier to skin. See the + <a href="http://wiki.mozilla.org/Bugzilla:Addons#Skins">Addons page</a> + for additional skins, or try making your own!</p> + +<h3 id="v32_feat_status">Custom Status Workflow</h3> + +<p>You can now customize the list of statuses in [% terms.Bugzilla %], + and transitions between them.</p> + +<p>You can also specify that a comment must be made on certain transitions.</p> + +<h3 id="v32_feat_fields">New Custom Field Types</h3> + +<p>[% terms.Bugzilla %] 3.2 has support for three new types of + custom fields:</p> + +<ul> + <li>Large Text: Adds a multi-line textbox to your [% terms.bugs %].</li> + <li>Multiple Selection Box: Adds a box that allows you to choose + multiple items from a list.</li> + <li>Date/Time: Displays a date and time, along with a JavaScript + calendar popup to make picking a date easier.</li> +</ul> + +<h3 id="v32_feat_install">Easier Installation</h3> + +<p>[% terms.Bugzilla %] now comes with a script called + <kbd>install-module.pl</kbd> that can automatically download + and install all of the required Perl modules for [% terms.Bugzilla %]. + It stores them in a directory inside your [% terms.Bugzilla %] + installation, so you can use it even if you don't have administrator-level + access to your machine, and without modifying your main Perl install.</p> + +<p><kbd>checksetup.pl</kbd> will print out instructions for using + <kbd>install-module.pl</kbd>, or you can read its + <a href="[% docs_urlbase FILTER html %]api/install-module.html">documentation</a>.</p> + +<h3 id="v32_feat_oracle">Experimental Oracle Support</h3> + +<p>[% terms.Bugzilla %] 3.2 contains experimental support for using + Oracle as its database. Some features of [% terms.Bugzilla %] are known + to be broken on Oracle, but hopefully will be working by our next major + release.</p> + +<p>The [% terms.Bugzilla %] Project, as an open-source project, of course + does not recommend the use of proprietary database solutions. However, + if your organization requires that you use Oracle, this will allow + you to use [% terms.Bugzilla %]!</p> + +<p>The [% terms.Bugzilla %] Project thanks Oracle Corp. for their extensive + development contributions to [% terms.Bugzilla %] which allowed this to + happen!</p> + +<h3 id="v32_feat_utf8">Improved UTF-8 Support</h3> + +<p>[% terms.Bugzilla %] 3.2 now has advanced UTF-8 support in its code, + including correct handling for truncating and wrapping multi-byte + languages. Major issues with multi-byte or unusual languages + are now resolved, and [% terms.Bugzilla %] should now be usable + by users in every country with little (or at least much less) + customization.</p> + +<h3 id="v32_feat_grcons">Group Icons</h3> + +<p>Administrators can now specify that users who are in certain groups + should have an icon appear next to their name whenever they comment. + This is particularly useful for distinguishing developers from + [%+ terms.bug %] reporters.</p> + +<h3 id="v32_feat_other">Other Enhancements and Changes</h3> + +<p>These are either minor enhancements, or enhancements that have + very short descriptions. Some of these are very useful, though!</p> + +<h4>Enhancements For Users</h4> + +<ul> + <li><strong>[% terms.Bugs %]</strong>: You can now reassign + [%+ terms.abug %] at the same time as you are changing its status.</li> + <li><strong>[% terms.Bugs %]</strong>: When entering [% terms.abug %], + you will now see the description of a component when you select it.</li> + <li><strong>[% terms.Bugs %]</strong>: The [% terms.bug %] view now + contains some <a href="http://microformats.org/about/">Microformats</a>, + most notably for users' names and email addresses.</li> + <li><strong>[% terms.Bugs %]</strong>: You can now remove a QA Contact + from [% terms.abug %] simply by clearing the QA Contact field.</li> + <li><strong>[% terms.Bugs %]</strong>: There is now a user preference + that will allow you to exclude the quoted text when replying + to comments.</li> + <li><strong>[% terms.Bugs %]</strong>: You can now expand or collapse + individual comments in the [% terms.bug %] view.</li> + + <li><strong>Attachments</strong>: There is now "mid-air collision" + protection when editing attachments.</li> + <li><strong>Attachments</strong>: Patches in the Diff Viewer now show + line numbers (<a href="https://bugzilla.mozilla.org/attachment.cgi?id=327546">Example</a>).</li> + <li><strong>Attachments</strong>: After creating or updating an attachment, + you will be immediately shown the [% terms.bug %] that the attachment + is on.</li> + + <li><strong>Search</strong>: You can now reverse the sort of + [%+ terms.abug %] list by clicking on a column header again.</li> + <li><strong>Search</strong>: Atom feeds of [% terms.bug %] lists now + contain more fields.</li> + <li><strong>Search</strong>: QuickSearch now supports searching flags + and groups. It also now includes the OS field in the list of fields + it searches by default.</li> + <li><strong>Search</strong>: "Help" text can now appear on query.cgi + for Internet Explorer and other non-Firefox browsers. (It always + could appear for Firefox.)</li> + + <li>[% terms.Bugzilla %] now ships with an icon that will show + up next to the URL in most browsers. If you want to replace it, + it's in <kbd>images/favicon.ico</kbd>.</li> + + <li>You can now set the Deadline when using "Change Several + [%+ terms.Bugs %] At Once"</li> + <li><strong>Saved Searches</strong> now save their column list, so if + you customize the list of columns and save your search, it will + always contain those columns.</li> + <li><strong>Saved Searches</strong>: When you share a search, you can + now see how many users have subscribed to it, on + <kbd>userprefs.cgi</kbd>.</li> + <li><strong>Saved Searches</strong>: You can now see what group a + shared search was shared to, on the list of available shared searches + in <kbd>userprefs.cgi</kbd>.</li> + <li><strong>Flags</strong>: If your installation uses drop-down user + lists, the flag requestee box will now contain only users who are + actually allowed to take requests.</li> + <li><strong>Flags</strong>: If somebody makes a request to you, and you + change the requestee to somebody else, the requester is no longer set + to you. In other words, you can "redirect" requests and maintain the + original requester.</li> + <li><strong>Flags</strong>: Emails about flags now will thread properly + in email clients to be a part of [% terms.abug %]'s thread.</li> + <li>When using <kbd>email_in.pl</kbd>, you can now add users to the CC + list by just using <kbd>@cc</kbd> as the field name.</li> + <li>Many pages (particularly administrative pages) now contain links to + the relevant section of the [% terms.Bugzilla %] Guide, so you can read + the documentation for that page.</li> + <li>Dependency Graphs should render more quickly, as they now (by default) + only include the same [% terms.bugs %] that you'd see in the dependency + tree.</li> +</ul> + +<h4>Enhancements For Administrators</h4> + +<ul> + <li><strong>Admin UI</strong>: Instead of having the Administration + Control Panel links in the footer, there is now just one link called + "Administration" that takes you to a page that links to all the + administrative controls for [% terms.Bugzilla %].</li> + <li><strong>Admin UI</strong>: Administrative pages no longer display + confirmation pages, instead they redirect you to some useful page + and display a message about what changed.</li> + <li><strong>Admin UI</strong>: The interface for editing group + inheritance in <kbd>editgroups.cgi</kbd> is much clearer now.</li> + <li><strong>Admin UI</strong>: When editing a user, you can now see + all the components where that user is the Default Assignee or Default + QA Contact.</li> + + <li><strong>Email</strong>: For installations that use SMTP to send + mail (as opposed to Sendmail), [%+ terms.Bugzilla %] now supports + SMTP Authentication, so that it can log in to your mail server + before sending messages.</li> + <li><strong>Email</strong>: Using the "Test" mail delivery method now + creates a valid mbox file to make testing easier.</li> + + <li><strong>Authentication</strong>: [% terms.Bugzilla %] now correctly + handles LDAP records which contain multiple email addresses. (The first + email address in the list that is a valid [% terms.Bugzilla %] account + will be used, or if this is a new user, the first email address in + the list will be used.)</li> + <li><strong>Authentication</strong>: [% terms.Bugzilla %] can now take + a list of LDAP servers to try in order until it gets a successful + connection.</li> + <li><strong>Authentication</strong>: [% terms.Bugzilla %] now supports + RADIUS authentication.</li> + + <li><strong>Security</strong>: The login cookie is now created as + "HTTPOnly" so that it can't be read by possibly malicious scripts. + Also, if SSL is enabled on your installation, the login cookie is + now only sent over SSL connections.</li> + <li><strong>Security</strong>: The <code>ssl</code> parameter now protects + every page a logged-in user accesses, when set to "authenticated sessions." + Also, SSL is now enforced appropriately in the WebServices interface when + the parameter is set.</li> + + <li><strong>Database</strong>: [% terms.Bugzilla %] now uses transactions in + the database instead of table locks. This should generally improve + performance with many concurrent users. It also means if there is + an unexpected error in the middle of a page, all database changes made + during that page will be rolled back.</li> + <li><strong>Database</strong>: You no longer have to set + <code>max_packet_size</code> in MySQL to add large attachments. However, + you may need to set it manually if you restore a mysqldump into your + database.</li> + + <li>New WebService functions: + <a href="[% docs_urlbase FILTER html %]api/Bugzilla/WebService/Bug.html">B<!-- -->ug.add_comment</a> + and <a href="[% docs_urlbase FILTER html %]api/Bugzilla/WebService/Bugzilla.html">Bugzilla.extensions</a>.</li> + + <li>You can now delete custom fields, but only if they have never been + set on any [% terms.bug %].</li> + <li>There is now a <kbd>--reset-password</kbd> argument to + <kbd>checksetup.pl</kbd> that allows you to reset a user's password + from the command line.</li> + <li>There is now a script called <kbd>sanitycheck.pl</kbd> that you can + run from the command line. It works just like <kbd>sanitycheck.cgi</kbd>. + By default, it only outputs anything if there's an error, so it's + ideal for administrators who want to run it nightly in a cron job.</li> + <li>The <kbd>strict_isolation</kbd> parameter now prevents you from setting + users who cannot see [% terms.abug %] as a CC, Assignee, or QA + Contact. Previously it only prevented you from adding users who + could not <em>edit</em> the [% terms.bug %].</li> + <li>Extensions can now add their own headers to the HTML <head> + for things like custom CSS and so on.</li> + <li><kbd>sanitycheck.cgi</kbd> has been templatized, meaning that the + entire [% terms.Bugzilla %] UI is now contained in templates.</li> + <li>When setting the <kbd>sslbase</kbd> parameter, you can now specify + a port number in the URL.</li> + <li>When importing [% terms.bugs %] using <kbd>importxml.pl</kbd>, + attachments will have their actual creator set as their creator, + instead of the person who exported the [% terms.bug %] from the other + system.</li> + <li>The voting system is off by default in new installs. This is to + prepare for the fact that it will be moved into an extension at + some point in the future.</li> + <li>The <code>shutdownhtml</code> parameter now works even when + [%+ terms.Bugzilla %]'s database server is down.</li> +</ul> + +<h3>Enhancements for Localizers (or Localized Installations)</h3> + +<ul> + <li>The documentation can now be localized--in other words, you can have + documentation installed for multiple languages at once and + [%+ terms.Bugzilla %] will link to the correct language in its internal + documentation links.</li> + <li>[% terms.Bugzilla %] no longer uses the <kbd>languages</kbd> parameter. + Instead it reads the <kbd>template/</kbd> directory to see which + languages are available.</li> + <li>Some of the messages printed by <kbd>checksetup.pl</kbd> can now + be localized. See <kbd>template/en/default/setup/strings.txt.pl</kbd>. +</ul> + +<h2 id="v32_issues">Outstanding Issues</h2> + +<ul> + <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=423439"> + [%- terms.Bug %] 423439</a>: Tabs in comments will be converted + to four spaces, due to a b<!-- -->ug in Perl as of Perl 5.8.8.</li> + <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=69621"> + [%- terms.Bug %] 69621</a>: If you rename or remove a keyword that is + in use on [% terms.bugs %], you will need to rebuild the "keyword cache" + by running <a href="sanitycheck.cgi">sanitycheck.cgi</a> and choosing + the option to rebuild the cache when it asks. Otherwise keywords may + not show up properly in search results.</li> + <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=89822"> + [%- terms.Bug %] 89822</a>: When changing multiple [% terms.bugs %] at + the same time, there is no "mid-air collision" protection.</li> + <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=276230"> + [%- terms.Bug %] 276230</a>: The support for restricting access to + particular Categories of New Charts is not complete. You should treat + the 'chartgroup' Param as the only access mechanism available.<br> + However, charts migrated from Old Charts will be restricted to + the groups that are marked MANDATORY for the corresponding Product. + There is currently no way to change this restriction, and the + groupings will not be updated if the group configuration + for the Product changes.</li> + <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=370370"> + [%- terms.Bug %] 370370</a>: mod_perl support is currently not + working on Windows machines.</li> +</ul> + +<h2 id="v32_upgrading">How to Upgrade From An Older Version</h2> + +<h3 id="v32_upgrading_notes">Notes For Upgraders</h3> + +<ul> + <li>If you upgrade by CVS, the <kbd>extensions</kbd> and + <kbd>skins/contrib</kbd> directories are now in CVS instead of + being created by <kbd>checksetup.pl</kbd> If you do a <kbd>cvs update</kbd> + from 3.0, you will be told that your directories are "in the way" and + you should delete (or move) them and then do <kbd>cvs update</kbd> + again. Also, the <kbd>docs</kbd> directory has been restructured + and after you <kbd>cvs update</kbd> you can delete the <kbd>docs/html</kbd>, + <kbd>docs/pdf</kbd>, <kbd>docs/txt</kbd>, and <kbd>docs/xml</kbd> + directories.</li> + <li>If you are using MySQL, you should know that [% terms.Bugzilla %] + now uses InnoDB for all tables. <kbd>checksetup.pl</kbd> will convert + your tables automatically, but if you have InnoDB disabled, + the upgrade will not be able to complete (and <kbd>checksetup.pl</kbd> + will tell you so).</li> + + <li><strong>You should also read the + <a href="#v30_upgrading_notes">[% terms.Bugzilla %] 3.0 Notes For Upgraders + section</a> of the + <a href="#v32_previous">previous release notes</a> if you are upgrading + from a version before 3.0.</strong></li> +</ul> + +<h3>Steps For Upgrading</h3> + +<p>Once you have read the notes above, see the + <a href="[% docs_urlbase FILTER html %]upgrade.html">Upgrading + documentation</a> for instructions on how to upgrade.</p> + +<h2 id="v32_code_changes">Code Changes Which May Affect Customizations</h2> + +<ul> + <li><a href="#v32_code_hooks">More Hooks!</a></li> + <li><a href="#v32_code_search">Search.pm Rearchitecture</a></li> + <li><a href="#v32_code_lib">lib Directory</a></li> + <li><a href="#v32_code_other">Other Changes</a></li> +</ul> + +<h3 id="v32_code_hooks">More Hooks!</h3> + +<p>There are more code hooks in 3.2 than there were in 3.0. See the + documentation of <a href="[% docs_urlbase FILTER html %]api/Bugzilla/Hook.html">Bugzilla::Hook</a> + for more details.</p> + +<h3 id="v32_code_search">Search.pm Rearchitecture</h3> + +<p><kbd>Bugzilla/Search.pm</kbd> has been heavily modified, to be much + easier to read and use. It contains mostly the same code as it did in + 3.0, but it has been moved around and reorganized significantly.</p> + +<h3 id="v32_code_lib">lib Directory</h3> + +<p>As part of implementing <a href="#v32_feat_install">install-module.pl</a>, + [%+ terms.Bugzilla %] was given a local <kbd>lib</kbd> directory which + it searches for modules, in addition to the standard system path.</p> + +<p>This means that all [% terms.Bugzilla %] scripts now start with + <code>use lib qw(. lib);</code> as one of the first lines.</p> + +<h3 id="v32_code_other">Other Changes</h3> + +<ul> + <li>You should now be using <code>get_status('NEW')</code> instead of + <code>status_descs.NEW</code> in templates.</li> + <li>The <code>[%# version = 1.0 %]</code> comment at the top of every + template file has been removed.</li> +</ul> + +<h1 id="v32_previous">[% terms.Bugzilla %] 3.0.x Release Notes</h1> + +<h2>Table of Contents</h2> + +<ul class="bz_toc"> + <li><a href="#v30_introduction">Introduction</a></li> + <li><a href="#v30_point">Updates In This 3.0.x Release</a></li> + <li><a href="#v30_req">Minimum Requirements</a></li> + <li><a href="#v30_feat">New Features and Improvements</a></li> + <li><a href="#v30_issues">Outstanding Issues</a></li> + <li><a href="#v30_security">Security Fixes In This Release</a></li> + <li><a href="#v30_upgrading">How to Upgrade From An Older Version</a></li> + <li><a href="#v30_code_changes">Code Changes Which May Affect + Customizations</a></li> + <li><a href="#v30_previous">Release Notes for Previous Versions</a></li> +</ul> + +<h2 id="v30_introduction">Introduction</h2> + +<p>Welcome to [% terms.Bugzilla %] 3.0! It's been over eight years since + we released [% terms.Bugzilla %] 2.0, and everything has changed since + then. Even just since our previous release, [% terms.Bugzilla %] 2.22, + we've added a <em>lot</em> of new features. So enjoy the release, we're + happy to bring it to you.</p> + +<p>If you're upgrading, make sure to read <a href="#v30_upgrading">How to + Upgrade From An Older Version</a>. If you are upgrading from a release + before 2.22, make sure to read the release notes for all the + <a href="#v30_previous">previous versions</a> in between your version + and this one.</p> + +<h2 id="v30_point">Updates in this 3.0.x Release</h2> + +<p>This section describes what's changed in the most recent b<!-- -->ug-fix + releases of [% terms.Bugzilla %] after 3.0. We only list the + most important fixes in each release. If you want a detailed list of + <em>everything</em> that's changed in each version, you should use our + <a href="http://www.bugzilla.org/status/changes.html">Change Log Page</a>.</p> + +<h3>3.0.6</h3> + +<ul> + <li>Before 3.0.6, unexpected fatal WebService errors would result in + a <code>faultCode</code> that was a string instead of a number. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=446327">[% terms.Bug %] 446327</a>)</li> + <li>If you created a product or component with the same name as one you + previously deleted, it would fail with an error about the series table. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=247936">[% terms.Bug %] 247936</a>)</li> +</ul> + +<p>See also the <a href="#v30_security">Security Advisory</a> section for + information about a security issue fixed in this release.</p> + +<h3>3.0.5</h3> + +<ul> + <li>If you don't have permission to set a flag, it will now appear + unchangeable in the UI. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=433851">[% terms.Bug %] 433851</a>)</li> + <li>If you were running mod_perl, [% terms.Bugzilla %] was not correctly + closing its connections to the database since 3.0.3, and so sometimes + the DB would run out of connections. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=441592">[% terms.Bug %] 441592</a>)</li> + <li>The installation script is now clear about exactly which + <code>Email::</code> modules are required in Perl, thus avoiding the + problem where emails show up with a body like + <samp>SCALAR(0xBF126795)</samp>. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=441541">[% terms.Bug %] 441541</a>)</li> + <li><a href="[% docs_urlbase FILTER html %]api/email_in.html">email_in.pl</a> + is no longer case-sensitive for values of <kbd>@product</kbd>. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=365697">[% terms.Bug %] 365697</a>)</li> +</ul> + +<p>See also the <a href="#v30_security">Security Advisory</a> section for + information about security issues fixed in this release.</p> + +<h3>3.0.4</h3> + +<ul> + <li>[% terms.Bugzilla %] administrators were not being correctly notified + about new releases. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=414726">[% terms.Bug %] 414726</a>)</li> + + <li>There could be extra whitespace in email subject lines. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=411544">[% terms.Bug %] 411544</a>)</li> + + <li>The priority, severity, OS, and platform fields were always required by + the <kbd>B<!-- -->ug.create</kbd> WebService function, even if they had + defaults specified. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=384009">[% terms.Bug %] 384009</a>)</li> + + <li>Better threading of [% terms.bug %]mail in some email clients. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=376453">[% terms.Bug %] 376453</a>)</li> + + <li>There were many fixes to the Inbound Email Interface + (<kbd>email_in.pl</kbd>). + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=92274">[% terms.Bug %] 92274</a>, + <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=377025">[% terms.Bug %] 377025</a>, + <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=412943">[% terms.Bug %] 412943</a>, + <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=413672">[% terms.Bug %] 413672</a>, and + <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=431721">[% terms.Bug %] 431721</a>)</li> + + <li>checksetup.pl now handles UTF-8 conversion more reliably during upgrades. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=374951">[% terms.Bug %] 374951</a>)</li> + + <li>Comments written in CJK languages are now correctly word-wrapped. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=388723">[% terms.Bug %] 388723</a>)</li> + + <li>All emails will now be sent in the correct language, when the user + has chosen a language for emails. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=405946">[% terms.Bug %] 405946</a>) + + <li>On Windows, temporary files created when uploading attachments are now + correctly deleted when the upload is complete. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=414002">[% terms.Bug %] 414002</a>)</li> + + <li><kbd>checksetup.pl</kbd> now prints correct installation instructions + for Windows users using Perl 5.10. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=414430">[% terms.Bug %] 414430</a>) +</ul> + +<p>See also the <a href="#v30_security">Security Advisory</a> section for + information about security issues fixed in this release.</p> + +<h3>3.0.3</h3> + +<ul> + <li>mod_perl no longer compiles [% terms.Bugzilla %]'s code for each Apache + process individually. It now compiles code only once and shares it among + each Apache process. This greatly improves performance and highly + decreases the memory footprint. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=398241">[% terms.Bug %] 398241</a>)</li> + + <li>You can now search for '---' (without quotes) in versions and milestones. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=362436">[% terms.Bug %] 362436</a>)</li> + + <li>[% terms.Bugzilla %] should no longer break lines unnecessarily in + email subjects. This was causing trouble with some email clients. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=374424">[% terms.Bug %] 374424</a>)</li> + + <li>If you had selected "I'm added to or removed from this capacity" option + for the "CC" role in your email preferences, you wouldn't get mail when + more than one person was added to the CC list at once. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=394796">[% terms.Bug %] 394796</a>)</li> + + <li>Deleting a user account no longer deletes whines from another user who + has the deleted account as addressee. The schedule is simply removed, + but the whine itself is left intact. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=395924">[% terms.Bug %] 395924</a>)</li> + + <li><kbd>contrib/merge-users.pl</kbd> now correctly merges all required + fields when merging two user accounts. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=400160">[% terms.Bug %] 400160</a>)</li> + + <li>[% terms.Bugzilla %] no longer requires Apache::DBI to run under + mod_perl. It caused troubles such as lost connections with the DB and + didn't give any important performance gain. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=408766">[% terms.Bug %] 408766</a>)</li> +</ul> + +<h3>3.0.2</h3> + +<ul> + <li>[% terms.Bugzilla %] should now work on Perl 5.9.5 (and thus the + upcoming Perl 5.10.0). + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=390442">[% terms.Bug %] 390442</a>)</li> +</ul> + +<p>See also the <a href="#v30_security">Security Advisory</a> section for + information about an important security issue fixed in this release.</p> + +<h3>3.0.1</h3> + +<ul> + <li>For users of Firefox 2, the <code>show_bug.cgi</code> user interface + should no longer "collapse" after you modify [% terms.abug %]. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=370739">[% terms.Bug %] 370739</a>)</li> + <li>If you can bless a group, and you share a saved search with that + group, it will no longer automatically appear in all of that group's + footers unless you specifically request that it automatically appear + in their footers. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=365890">[% terms.Bug %] 365890</a>)</li> + <li>There is now a parameter to allow users to perform searches without + any search terms. (In other words, to search for just a Product + and Status on the Simple Search page.) The parameter is called + <code>specific_search_allow_empty_words</code>. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=385910">[% terms.Bug %] 385910</a>)</li> + <li>If you attach a file that has a MIME-type of <code>text/x-patch</code> + or <code>text/x-diff</code>, it will automatically be treated as a + patch by [% terms.Bugzilla %]. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=365756">[% terms.Bug %] 365756</a>)</li> + <li>Dependency Graphs now work correctly on all mod_perl installations. + There should now be no remaining signficant problems with running + [%+ terms.Bugzilla %] under mod_perl. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=370398">[% terms.Bug %] 370398</a>)</li> + <li>If moving [% terms.abug %] between products would remove groups + from the [% terms.bug %], you are now warned. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=303183">[% terms.Bug %] 303183</a>)</li> + <li>On IIS, whenever [% terms.Bugzilla %] threw a warning, it would + actually appear on the web page. Now warnings are suppressed, + unless you have a file in the <code>data</code> directory called + <code>errorlog</code>, in which case warnings will be printed there. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=390148">[% terms.Bug %] 390148</a>)</li> + <li>If you used <kbd>email_in.pl</kbd> to edit [% terms.abug %] that was + protected by groups, all of the groups would be cleared. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=385453">[% terms.Bug %] 385453</a>)</li> + <li>PostgreSQL users: New Charts were failing to collect data over time. + They will now start collecting data correctly. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=257351">[% terms.Bug %] 257351</a>)</li> + <li>Some flag mails didn't specify who the requestee was. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=379787">[% terms.Bug %] 379787</a>)</li> + <li>Instead of throwing real errors, <kbd>collectstats.pl</kbd> would + just say that it couldn't find <code>ThrowUserError</code>. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=380709">[% terms.Bug %] 380709</a>)</li> + <li>Logging into [% terms.Bugzilla %] from the home page works again + with IIS5. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=364008">[% terms.Bug %] 364008</a>)</li> + <li>If you were using SMTP for sending email, sometimes emails would + be missing the <code>Date</code> header. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=304999">[% terms.Bug %] 304999</a>).</li> + <li>In the XML-RPC WebService, <code>B<!-- -->ug.legal_values</code> now + correctly returns values for custom fields if you request values + for custom fields. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=381737">[% terms.Bug %] 381737</a>)</li> + <li>The "[% terms.Bug %]-Writing Guidelines" page has been shortened + and re-written. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=378590">[% terms.Bug %] 378590</a>)</li> + <li>If your <code>urlbase</code> parameter included a port number, + like <code>www.domain.com:8080</code>, SMTP might have failed. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=384501">[% terms.Bug %] 384501</a>)</li> + <li>For SMTP users, there is a new parameter, <code>smtp_debug</code>. + Turning on this parameter will log the full information about + every SMTP session to your web server's error log, to help with + debugging issues with SMTP. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=384497">[% terms.Bug %] 384497</a>)</li> + <li>If you are a "global watcher" (you get all mails from every + [%+ terms.bug %]), you can now see that in your Email Preferences. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=365302">[% terms.Bug %] 365302</a>)</li> + <li>The Status and Resolution of [% terms.bugs %] are now correctly + localized in CSV search results. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=389517">[% terms.Bug %] 389517</a>)</li> + <li>The "Subject" line of an email was being mangled if it contained + non-Latin characters. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=387860">[% terms.Bug %] 387860</a>)</li> + <li>Editing the "languages" parameter using <kbd>editparams.cgi</kbd> would + sometimes fail, causing [% terms.Bugzilla %] to throw an error. + (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=335354">[% terms.Bug %] 335354</a>)</li> +</ul> + +<h2 id="v30_req">Minimum Requirements</h2> + +<p>Any requirements that are new since 2.22 will look like + <span class="req_new">this</span>.</p> + +<ul> + <li><a href="#v30_req_perl">Perl</a></li> + <li><a href="#v30_req_mysql">For MySQL Users</a></li> + <li><a href="#v30_req_pg">For PostgreSQL Users</a></li> + <li><a href="#v30_req_modules">Required Perl Modules</a></li> + <li><a href="#v30_req_optional_mod">Optional Perl + Modules</a></li> +</ul> + + +<h3 id="v30_req_perl">Perl</h3> + +<ul> + <li>Perl <span class="req_new">v<strong>5.8.0</strong></span> (non-Windows + platforms)</li> + <li>Perl v<strong>5.8.1</strong> (Windows platforms)</li> +</ul> + +<h3 id="v30_req_mysql">For MySQL Users</h3> + +<ul> + <li>MySQL <span class="req_new">v4.1.2</span></li> + <li><strong>perl module:</strong> DBD::mysql v2.9003</li> +</ul> + +<h3 id="v30_req_pg">For PostgreSQL Users</h3> + +<ul> + <li>PostgreSQL v8.00.0000</li> + <li><strong>perl module:</strong> DBD::Pg v1.45</li> +</ul> + +<h3 id="v30_req_modules">Required Perl Modules</h3> + +<table class="req_table" border="0" cellspacing="0" cellpadding="0"> + <tr> + <th>Module</th> <th>Version</th> + </tr> + <tr><td>CGI</td> <td>2.93</td> + </tr> + <tr> + <td>Date::Format</td> <td>2.21</td> + </tr> + <tr> + <td>DBI</td> + <td class="req_new">1.41</td> + </tr> + <tr> + <td>File::Spec</td> <td>0.84</td> + </tr> + <tr> + <td>Template</td> <td>2.12</td> + </tr> + <tr> + <td class="req_new">Email::Send</td> + <td class="req_new">2.00</td> + </tr> + <tr> + <td>Email::MIME</td> + <td>1.861</td> + </tr> + <tr> + <td class="req_new">Email::MIME::Modifier</td> + <td class="req_new">1.442</td> + </tr> +</table> + +<h3 id="v30_req_optional_mod">Optional Perl Modules</h3> + +<p>The following perl modules, if installed, enable various + features of [% terms.Bugzilla %]:</p> + +<table class="req_table" border="0" cellspacing="0" cellpadding="0"> + <tr> + <th>Module</th> <th>Version</th> + <th>Enables Feature</th> + </tr> + <tr> + <td class="req_new">LWP::UserAgent</td> + <td class="req_new">(Any)</td> + <td>Automatic Update Notifications</td> + </tr> + <tr> + <td>Template::Plugin::GD::Image</td> + <td>(Any)</td> + <td>Graphical Reports</td> + </tr> + <tr> + <td>GD::Graph</td> + <td>(Any)</td> + <td>Graphical Reports</td> + </tr> + <tr> + <td>GD::Text</td> + <td>(Any)</td> + <td>Graphical Reports</td> + </tr> + <tr> + <td>GD</td> + <td>1.20</td> + <td>Graphical Reports, New Charts, Old Charts</td> + </tr> + <tr> + <td class="req_new">Email::MIME::Attachment::Stripper</td> + <td class="req_new">(Any)</td> + <td>Inbound Email</td> + </tr> + <tr> + <td class="req_new">Email::Reply</td> + <td class="req_new">(Any)</td> + <td>Inbound Email</td> + </tr> + <tr> + <td>Net::LDAP</td> + <td>(Any)</td> + <td>LDAP Authentication</td> + </tr> + <tr> + <td>HTML::Parser</td> + <td>3.40</td> + <td>More HTML in Product/Group Descriptions</td> + </tr> + <tr> + <td>HTML::Scrubber</td> + <td>(Any)</td> + <td>More HTML in Product/Group Descriptions</td> + </tr> + <tr> + <td>XML::Twig</td> + <td>(Any)</td> + <td>Move [% terms.Bugs %] Between Installations</td> + </tr> + <tr> + <td>MIME::Parser</td> + <td>5.406</td> + <td>Move [% terms.Bugs %] Between Installations</td> + </tr> + <tr> + <td>Chart::Base</td> + <td>1.0</td> + <td>New Charts, Old Charts</td> + </tr> + <tr> + <td>Image::Magick</td> + <td>(Any)</td> + <td>Optionally Convert BMP Attachments to PNGs</td> + </tr> + <tr> + <td>PatchReader</td> + <td>0.9.4</td> + <td>Patch Viewer</td> + </tr> + <tr> + <td class="req_new">SOAP::Lite</td> + <td class="req_new">(Any)</td> + <td>XML-RPC Interface</td> + </tr> + <tr> + <td class="req_new">mod_perl2</td> + <td class="req_new">1.999022</td> + <td>mod_perl</td> + </tr> + <tr> + <td> CGI</td> + <td>3.11</td> + <td>mod_perl</td> + </tr> +</table> + +<h2 id="v30_feat">New Features and Improvements</h2> + +<ul> + <li><a href="#v30_feat_cf">Custom Fields</a></li> + <li><a href="#v30_feat_mp">mod_perl Support</a></li> + <li><a href="#v30_feat_sq">Shared Saved Searches</a></li> + <li> + <a href="#v30_feat_afn">Attachments and Flags on New [% terms.Bugs %]</a> + </li> + <li><a href="#v30_feat_cr">Custom Resolutions</a></li> + <li><a href="#v30_feat_ppp">Per-Product Permissions</a></li> + <li><a href="#v30_feat_ui">User Interface Improvements</a></li> + <li><a href="#v30_feat_xml">XML-RPC Interface</a></li> + <li><a href="#v30_feat_skin">Skins</a></li> + <li><a href="#v30_feat_sbu">Unchangeable Fields Appear + Unchangeable</a></li> + <li><a href="#v30_feat_et">All Emails in Templates</a></li> + <li><a href="#v30_feat_df">No More Double-Filed [% terms.Bugs %]</a></li> + <li><a href="#v30_feat_cc">Default CC List for Components</a></li> + <li><a href="#v30_feat_emi">File/Modify [% terms.Bugs %] By Email</a></li> + <li><a href="#v30_feat_gw">Users Who Get All [% terms.Bug %] + Notifications</a></li> + <li><a href="#v30_feat_utf8">Improved UTF-8 Support</a></li> + <li><a href="#v30_feat_upda">Automatic Update Notification</a></li> + <li><a href="#v30_feat_welc">Welcome Page for New Installs</a></li> + <li><a href="#v30_feat_other">Other Enhancements and Changes</a></li> +</ul> + +<h3 id="v30_feat_cf">Custom Fields</h3> + +<p>[% terms.Bugzilla %] now includes very basic support for custom fields.</p> + +<p>Users in the <kbd>admin</kbd> group can add plain-text or drop-down + custom fields. You can edit the values available for drop-down fields + using the "Field Values" control panel.</p> + +<p>Don't add too many custom fields! It can make [% terms.Bugzilla %] + very difficult to use. Try your best to get along with the default + fields, and then if you find that you can't live without custom fields + after a few weeks of using [% terms.Bugzilla %], only then should you + start your custom fields.</p> + +<h3 id="v30_feat_mp">mod_perl Support</h3> + +<p>[% terms.Bugzilla %] 3.0 supports mod_perl, which allows for extremely + enhanced page-load performance. mod_perl trades memory usage for performance, + allowing near-instantaneous page loads, but using much more memory.</p> + +<p>If you want to enable mod_perl for your [% terms.Bugzilla %], we recommend + a minimum of 1.5GB of RAM, and for a site with heavy traffic, 4GB to 8GB.</p> + +<p>If performance isn't that critical on your installation, you don't + have the memory, or you are running some other web server than + Apache, [% terms.Bugzilla %] still runs perfectly as a normal CGI + application, as well.</p> + +<h3 id="v30_feat_sq">Shared Saved Searches</h3> + +<p>Users can now choose to "share" their saved searches + with a certain group. That group will then be able to + "subscribe" to those searches, and have them appear + in their footer.</p> + +<p>If the sharer can "bless" the group he's sharing to, + (that is, if he can add users to that group), it's considered + that he's a manager of that group, and his queries show up + automatically in that group's footer (although they can + unsubscribe from any particular search, if they want.)</p> + +<p>In order to allow a user to share their queries, they also + have to be a member of the group specified in the + <code>querysharegroup</code> parameter.</p> + +<p>Users can control their shared and subscribed queries from + the "Preferences" screen.</p> + +<h3 id="v30_feat_afn">Attachments and Flags on New [% terms.Bugs %]</h3> + +<p>You can now add an attachment while you are filing a new + [%+ terms.bug %].</p> + +<p>You can also set flags on the [% terms.bug %] and on attachments, while + filing a new [% terms.bug %].</p> + +<h3 id="v30_feat_cr">Custom Resolutions</h3> + +<p>You can now customize the list of resolutions available + in [% terms.Bugzilla %], including renaming the default resolutions.</p> + +<p>The resolutions <code>FIXED</code>, <code>DUPLICATE</code> + and <code>MOVED</code> have a special meaning to [% terms.Bugzilla %], + though, and cannot be renamed or deleted.</p> + +<h3 id="v30_feat_ppp">Per-Product Permissions</h3> + +<p>You can now grant users <kbd>editbugs</kbd> and <kbd>canconfirm</kbd> + for only certain products. You can also grant users <kbd>editcomponents</kbd> + on a product, which means they will be able to edit that product + including adding/removing components and other product-specific + controls.</p> + +<h3 id="v30_feat_ui">User Interface Improvements</h3> + +<p>There has been some work on the user interface for [% terms.Bugzilla %] 3.0, + including:</p> + +<ul> + <li>There is now navigation and a search box a the <em>top</em> of + each page, in addition to the bar at the bottom of the page.</li> + <li>A re-designed "Format for Printing" page for + [%+ terms.bugs %].</li> + <li>The layout of <kbd>show_bug.cgi</kbd> (the [% terms.bug %] editing + page) has been changed, and the attachment table has been redesigned.</li> +</ul> + +<h3 id="v30_feat_xml">XML-RPC Interface</h3> + +<p>[% terms.Bugzilla %] now has a Web Services interface using the XML-RPC + protocol. It can be accessed by external applications by going + to the <kbd>xmlrpc.cgi</kbd> on your installation.</p> + +<p>Documentation can be found in the + <a href="[% docs_urlbase FILTER html %]api/">[% terms.Bugzilla %] + API Docs</a>, in the various <kbd>Bugzilla::WebService</kbd> modules.</p> + +<h3 id="v30_feat_skin">Skins</h3> + +<p>[% terms.Bugzilla %] can have multiple "skins" installed, + and users can pick between them. To write a skin, you just have to + write several CSS files. See the <a href="[% docs_urlbase FILTER html %]cust-skins.html">Custom + Skins Documentation</a> for more details.</p> + +<p>We currently don't have any alternate skins shipping with + [%+ terms.Bugzilla %]. If you write an alternate skin, please + let us know!</p> + +<h3 id="v30_feat_sbu">Unchangeable Fields Appear Unchangeable</h3> + +<p>As long as you are logged in, when viewing [% terms.abug %], if you + cannot change a field, it will not look like you can change it. That + is, the value will just appear as plain text.</p> + +<h3 id="v30_feat_et">All Emails in Templates</h3> + +<p>All outbound emails are now controlled by the templating system. + What used to be the <code>passwordmail</code>, <code>whinemail</code>, + <code>newchangedmail</code> and <code>voteremovedmail</code> + parameters are now all templates in the <kbd>template/</kbd> directory.</p> + +<p>This means that it's now much easier to customize your outbound + emails, and it's also possible for localizers to have more + localized emails as part of their language packs, if they want.</p> + +<p>We also added a <code>mailfrom</code> parameter to let you set + who shows up in the <code>From</code> field on all emails that + [%+ terms.Bugzilla %] sends.</p> + +<h3 id="v30_feat_df">No More Double-Filed [% terms.Bugs %]</h3> + +<p>Users of [% terms.Bugzilla %] will sometimes accidentally submit + [%+ terms.abug %] twice, either by going back in their web browser, + or just by refreshing a page. In the past, this could file the same + [%+ terms.bug %] twice (or even three times) in a row, irritating + developers and confusing users.</p> + +<p>Now, if you try to submit [% terms.abug %] twice from the same screen + (by going back or by refreshing the page), [% terms.Bugzilla %] will warn + you about what you're doing, before it actually submits the duplicate + [%+ terms.bug %].</p> + +<h3 id="v30_feat_cc">Default CC List for Components</h3> + +<p>You can specify a list of users who will <em>always</em> be added to + the CC list of new [% terms.bugs %] in a component.</p> + +<h3 id="v30_feat_emi">File/Modify [% terms.Bugs %] By Email</h3> + +<p>You can now file or modify [% terms.bugs %] via email. Previous versions + of [% terms.Bugzilla %] included this feature only as an + unsupported add-on, but it is now an official interface to + [%+ terms.Bugzilla %].</p> + +<p>For more details see the <a href="[% docs_urlbase FILTER html %]api/email_in.html">documentation + for email_in.pl</a>.</p> + +<h3 id="v30_feat_gw">Users Who Get All [% terms.Bug %] Notifications</h3> + +<p>There is now a parameter called <kbd>globalwatchers</kbd>. This + is a comma-separated list of [% terms.Bugzilla %] users who will + get all [% terms.bug %] notifications generated by [% terms.Bugzilla %].</p> + +<p>Group controls still apply, though, so users who can't see [% terms.abug %] + still won't get notifications about that [% terms.bug %].</p> + +<h3 id="v30_feat_utf8">Improved UTF-8 Support</h3> + +<p>[% terms.Bugzilla %] users running MySQL should now have excellent + UTF-8 support if they turn on the <kbd>utf8</kbd> parameter. (New + installs have this parameter on by default.) [% terms.Bugzilla %] + now correctly supports searching and sorting in non-English languages, + including multi-bytes languages such as Chinese.</p> + +<h3 id="v30_feat_upda">Automatic Update Notification</h3> + +<p>If you belong to the <kbd>admin</kbd> group, you will be notified + when you log in if there is a new release of [% terms.Bugzilla %] + available to download.</p> + +<p>You can control these notifications by changing the + <kbd>upgrade_notification</kbd> parameter.</p> + +<p>If your [% terms.Bugzilla %] installation is on a machine that needs to go + through a proxy to access the web, you may also have to set the + <kbd>proxy_url</kbd> parameter.</p> + +<h3 id="v30_feat_welc">Welcome Page for New Installs</h3> + +<p>When you log in for the first time on a brand-new [% terms.Bugzilla %] + installation, you will be presented with a page that describes + where you should go from here, and what parameters you should set.</p> + +<h3 id="v30_feat_qs">QuickSearch Plugin for IE7 and Firefox 2</h3> + +<p>Firefox 2 users and Internet Explorer 7 users will be presented + with the option to add [% terms.Bugzilla %] to their search bar. + This uses the + <a href="page.cgi?id=quicksearch.html">QuickSearch syntax</a>.</p> + +<h3 id="v30_feat_other">Other Enhancements and Changes</h3> + +<p>These are either minor enhancements, or enhancements that have + very short descriptions. Some of these are very useful, though!</p> + +<h4>Enhancements That Affect [% terms.Bugzilla %] Users</h4> + +<ul> + <li>In comments, quoted text (lines that start with <kbd>></kbd>) + will be a different color from normal text.</li> + <li>There is now a user preference that will add you to the CC list + of any [% terms.bug %] you modify. Note that it's <strong>on</strong> + by default.</li> + <li>[% terms.Bugs %] can now be filed with an initial state of + <kbd>ASSIGNED</kbd>, if you are in the <kbd>editbugs</kbd> group.</li> + <li>By default, comment fields will zoom large when you are typing in them, + and become small when you move out of them. You can disable this + in your user preferences.</li> + <li>You can hide obsolete attachments on [% terms.abug %] by clicking + "Hide Obsolete" at the bottom of the attachment table.</li> + <li>If [% terms.abug %] has flags set, and you move it to a different + product that has flags with the same name, the flags will be + preserved.</li> + <li>You now can't request a flag to be set by somebody who can't set it + ([% terms.Bugzilla %] will throw an error if you try).</li> + <li>Many new headers have been added to outbound [% terms.Bugzilla %] + [%+ terms.bug %] emails: <code>X-Bugzilla-Status</code>, + <code>X-Bugzilla-Priority</code>, <code>X-Bugzilla-Assigned-To</code>, + <code>X-Bugzilla-Target-Milestone</code>, and + <code>X-Bugzilla-Changed-Fields</code>, <code>X-Bugzilla-Who</code>. + You can look at an email to get an idea of what they contain.</li> + <li>In addition to the old <code>X-Bugzilla-Reason</code> email header + which tells you why you got an email, if you got an email because + you were watching somebody, there is now an + <code>X-Bugzilla-Watch-Reason</code> header that tells you who you + were watching and what role they had.</li> + <li>If you hover your mouse over a full URL (like + <code>http://bugs.mycompany.com/show_bug.cgi?id=1212</code>) that + links to [% terms.abug %], you will see the title of the + [%+ terms.bug %]. Of course, this only works for [% terms.bugs %] in your + [%+ terms.Bugzilla %] installation.</li> + <li>If your installation has user watching enabled, you will now see + the users that you can remove from your watch-list as a multi-select + box, much like the current CC list. (Previously it was just a text + box.)</li> + <li>When a user creates their own account in [% terms.Bugzilla %], the + account is now not actually created until they verify their email + address by clicking on a link that is emailed to them.</li> + <li>You can change [% terms.abug %]'s resolution without reopening it.</li> + <li>When you view the dependency tree on [% terms.abug %], resolved + [%+ terms.bugs %] will be hidden by default. (In previous versions, + resolved [% terms.bugs %] were shown by default.)</li> + <li>When viewing [% terms.bug %] activity, fields that hold [% terms.bug %] + numbers (such as "Blocks") will have the [% terms.bug %] numbers + displayed as links to those [% terms.bugs %].</li> + <li>When viewing the "Keywords" field in [% terms.abug %] list, + it will be sorted alphabetically, so you can sanely sort a list on + that field.</li> + <li>In most places, the Version field is now sorted using a version-sort + (so 1.10 is greater than 1.2) instead of an alphabetical sort.</li> + <li>Options for flags will only appear if you can set them. So, for + example, if you can't grant <kbd>+</kbd> on a flag, that option + won't appear for you.</li> + <li>You can limit the product-related output of <kbd>config.cgi</kbd> + by specifying a <kbd>product=</kbd> URL argument, containing the name + of a product. You can specify the argument more than once for multiple + products.</li> + <li>You can now search the boolean charts on whether or not a comment + is private.</li> +</ul> + +<h4>Enhancements For Administrators</h4> + +<ul> + <li>Administrators can now delete attachments, making them disappear + entirely from [% terms.Bugzilla %].</li> + <li><kbd>sanitycheck.cgi</kbd> can now only be accessed by users + in the <kbd>editcomponents</kbd> group.</li> + <li>The "Field Values" control panel can now only be accessed + by users in the <kbd>admin</kbd> group. (Previously it was accessible + to anybody in the <kbd>editcomponents</kbd> group.)</li> + <li>There is a new parameter <kbd>announcehtml</kbd>, that will allow + you to enter some HTML that will be displayed at the top of every + page, as an announcement.</li> + <li>The <kbd>loginnetmask</kbd> parameter now defaults to 0 for new + installations, meaning that as long as somebody has the right + login cookie, they can log in from any IP address. This makes + life a lot easier for dial-up users or other users whose IP + changes a lot. This could be done because the login cookie is now + very random, and thus secure.</li> + <li>Classifications now have sortkeys, so they can be sorted in an + order that isn't alphabetical.</li> + <li>Authentication now supports LDAP over SSL (LDAPS) or TLS (using + the STARTLS command) in addition to plain LDAP.</li> + <li>LDAP users can have their LDAP username be their email address, + instead of having the LDAP <kbd>mail</kbd> attribute be their + email address. You may wish to set the <kbd>emailsuffix</kbd> + parameter if you do this.</li> + <li>Administrators can now see what has changed in a user account, + when using the "Users" control panel.</li> + <li><code>REMIND</code> and <code>LATER</code> are no longer part + of the default list of resolutions. Upgrading installations will + not be affected--they will still have these resolutions.</li> + <li><kbd>editbugs</kbd> is now the default for the <kbd>timetrackinggroup</kbd> + parameter, meaning that time-tracking will be on by default in a new + installation.</li> +</ul> + +<h2 id="v30_issues">Outstanding Issues</h2> + +<ul> + <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=69621"> + [%- terms.Bug %] 69621</a>: If you rename or remove a keyword that is + in use on [% terms.bugs %], you will need to rebuild the "keyword cache" + by running <a href="sanitycheck.cgi">sanitycheck.cgi</a> and choosing + the option to rebuild the cache when it asks. Otherwise keywords may + not show up properly in search results.</li> + <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=99215"> + [%- terms.Bug %] 99215</a>: Flags are not protected by "mid-air + collision" detection. Nor are any attachment changes.</li> + <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=89822"> + [%- terms.Bug %] 89822</a>: When changing multiple [% terms.bugs %] at + the same time, there is no "mid-air collision" protection.</li> + <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=276230"> + [%- terms.Bug %] 276230</a>: The support for restricting access to + particular Categories of New Charts is not complete. You should treat + the 'chartgroup' Param as the only access mechanism available.<br> + However, charts migrated from Old Charts will be restricted to + the groups that are marked MANDATORY for the corresponding Product. + There is currently no way to change this restriction, and the + groupings will not be updated if the group configuration + for the Product changes.</li> + <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=370370"> + [%- terms.Bug %] 370370</a>: mod_perl support is currently not + working on Windows machines.</li> + <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=361149"> + [%- terms.Bug %] 361149</a>: If you are using Perl 5.8.0, you may + get a lot of warnings in your Apache error_log about "deprecated + pseudo-hashes." These are harmless--they are a b[%# fool test %]ug in + Perl 5.8.0. Perl 5.8.1 and later do not have this problem.</li> + <li>[% terms.Bugzilla %] 3.0rc1 allowed custom field column names in + the database to be mixed-case. [% terms.Bugzilla %] 3.0 only allows + lowercase column names. It will fix any column names that you have + made mixed-case, but if you have custom fields that previously were + mixed-case in any Saved Search, you will have to re-create that Saved + Search yourself.</li> +</ul> + +<h2 id="v30_security">Security Updates in This Release</h2> + +<h3>3.0.6</h3> + +<p>[% terms.Bugzilla %] contains a minor security fix. For details, see the + <a href="http://www.bugzilla.org/security/2.20.6/">Security Advisory</a>.</p> + +<h3>3.0.5</h3> + +<p>[% terms.Bugzilla %] contains one security fix for + <a href="[% docs_urlbase FILTER html %]api/importxml.html">importxml.pl</a>. + For details, see the + <a href="http://www.bugzilla.org/security/2.22.4/">Security Advisory</a>.</p> + +<h3>3.0.4</h3> + +<p>[% terms.Bugzilla %] 3.0.4 contains three security fixes. + For details, see the + <a href="http://www.bugzilla.org/security/2.20.5/">Security Advisory</a>.</p> + +<h3>3.0.3</h3> + +<p>No security fixes in this release.</p> + +<h3>3.0.2</h3> + +<p>[% terms.Bugzilla %] 3.0.1 had an important security fix that is + critical for public installations with "requirelogin" turned on. + For details, see the + <a href="http://www.bugzilla.org/security/3.0.1/">Security Advisory</a></p> + +<h3>3.0.1</h3> + +<p>[% terms.Bugzilla %] 3.0 had three security issues that have been + fixed in this release: one minor information leak, one hole only + exploitable by an admin or using <code>email_in.pl</code>, and one in an + uncommonly-used template. For details, see the + <a href="http://www.bugzilla.org/security/2.20.4/">Security Advisory</a>.</p> + +<h2 id="v30_upgrading">How to Upgrade From An Older Version</h2> + +<h3 id="v30_upgrading_notes">Notes For Upgraders</h3> + +<ul> + <li>If you upgrade by CVS, there are several .cvsignore files + that are now in CVS instead of being locally created by + <kbd>checksetup.pl</kbd>. This means that you will have to + delete those files when CVS tells you there's a conflict, and + then run <kbd>cvs update</kbd> again.</li> + <li>In this version of [% terms.Bugzilla %], the Summary field + is now limited to 255 characters. When you upgrade, any Summary + longer than that will be truncated, and the old summary will be + preserved in a comment.</li> + <li>If you have the <kbd>utf8</kbd> parameter turned on, at some + point you will have to convert your database. <kbd>checksetup.pl</kbd> + will tell you when this is, and it will give you certain instructions + at that time, that you have to follow before you can complete + the upgrade. Don't do the conversion yourself manually--follow + the instructions of checksetup.pl.</li> + <li>If you ever ran 2.23.3, 2.23.4, or 3.0rc1, you will have to run + <kbd>./collectstats.pl --regenerate</kbd> at the command line, because + the data for your Old Charts is corrupted. This can take several days, + so you may only want to run it if you use Old Charts.</li> + <li>You should also read the Outstanding Issues sections of + <a href="#v30_previous">older release notes</a> if you are upgrading + from a version lower than 2.22.</li> +</ul> + +<h3>Steps For Upgrading</h3> + +<p>Once you have read the notes above, see the + <a href="[% docs_urlbase FILTER html %]upgrade.html">Upgrading + documentation</a> for instructions on how to upgrade.</p> + +<h2 id="v30_code_changes">Code Changes Which May Affect Customizations</h2> + +<ul> + <li><a href="#v30_code_loc"><strong>Packagers:</strong> Location + Variables Have Moved</a></li> + <li><a href="#v30_code_hooks">Hooks!</a></li> + <li><a href="#v30_code_api">API Documentation</a></li> + <li><a href="#v30_code_globals">Elimination of globals.pl</a></li> + <li><a href="#v30_code_scope">Cleaned Up Variable Scoping Issues</a></li> + <li><a href="#v30_code_sql">No More SendSQL</a></li> + <li><a href="#v30_code_auth">Auth Re-write</a></li> + <li><a href="#v30_code_obj">Bugzilla::Object</a></li> + <li><a href="#v30_code_req">Bugzilla->request_cache</a></li> + <li><a href="#v30_code_other">Other Changes</a></li> +</ul> + +<h3 id="v30_code_loc"><strong>Packagers:</strong> Location Variables + Have Moved</h3> + +<p>In previous versions of [% terms.Bugzilla %], <kbd>Bugzilla::Config</kbd> + held all the paths for different things, such as the path to localconfig + and the path to the <kbd>data/</kbd> directory.</p> + +<p>Now, all of this data is stored in a subroutine, + <kbd>Bugzilla::Constants::bz_locations</kbd>.</p> + +<p>Also, note that for mod_perl, <kbd>bz_locations</kbd> must return + <em>absolute</em> (not relative) paths. There is already code in that + subroutine to help you with this.</p> + +<h3 id="v30_code_hooks">Hooks!</h3> + +<p>[% terms.Bugzilla %] now supports a code hook mechanism. See the + documentation for + <a href="[% docs_urlbase FILTER html %]api/Bugzilla/Hook.html">Bugzilla::Hook</a> + for more details.</p> + +<p>This gives [% terms.Bugzilla %] very advanced plugin support. You can + hook templates, hook code, add new parameters, and use the XML-RPC + interface. So we'd like to see some [% terms.Bugzilla %] plugins + written! Let us know on the <a href="http://bugzilla.org/cgi-bin/mj_wwwusr?func=lists-long-full&extra=developers">developers@bugzilla.org</a> + mailing list if you write a plugin.</p> + +<p>If you need more hooks, please + <a href="http://www.bugzilla.org/developers/reporting_bugs.html">File a b<!-- -->ug</a>!</p> + +<h3 id="v30_code_api">API Documentation</h3> + +<p>[% terms.Bugzilla %] now ships with all of its perldoc built + as HTML. Go ahead and read the + <a href="[% docs_urlbase FILTER html %]api/">API Documentation</a> + for all of the [% terms.Bugzilla %] modules now! Even scripts like + <kbd>checksetup.pl</kbd> have HTML documentation.</p> + +<h3 id="v30_code_globals">Elimination of globals.pl</h3> + +<p>The old file <kbd>globals.pl</kbd> has been eliminated. + Its code is now in various modules. Each function went to the module + that was appropriate for it.</p> + +<p>Usually we filed [% terms.abug %] in + <a href="https://bugzilla.mozilla.org">bugzilla.mozilla.org</a> for + each function we moved. You can search there for the old name of + the function, and that should get you the information about what + it's called now and where it lives.</p> + +<h3 id="v30_code_scope">Cleaned Up Variable Scoping Issues</h3> + +<p>In normal perl, you can have code like this:</p> +<pre>my $var = 0; +sub y { $var++ }</pre> + +<p>However, under mod_perl that doesn't work. So variables are no + longer "shared" with subroutines--instead all variables + that a subroutine needs must be declared inside the subroutine itself.</p> + +<h3 id="v30_code_sql">No More SendSQL</h3> + +<p>The old <kbd>SendSQL</kbd> function and all of its companions are + <strong>gone</strong>. Instead, we now use DBI for all database + interaction.</p> + +<p>For more information about how to use + <a href="http://search.cpan.org/perldoc?DBI">DBI</a> with + [%+ terms.Bugzilla %], see the + <a href="http://www.bugzilla.org/docs/developer.html#sql-sendreceive">Developer's + Guide Section About DBI</a></p> + +<h3 id="v30_code_auth">Auth Re-write</h3> + +<p>The <kbd>Bugzilla::Auth</kbd> family of modules have been completely + re-written. For details on how the new structure of authentication, + read the + <a href="[% docs_urlbase FILTER html %]api/Bugzilla/Auth.html">Bugzilla::Auth + API docs</a>.</p> + +<p>It should be very easy to write new authentication plugins, now.</p> + +<h3 id="v30_code_obj">Bugzilla::Object</h3> + +<p>There is a new base class for most of our objects, + <a href="[% docs_urlbase FILTER html %]api/Bugzilla/Object.html">Bugzilla::Object</a>. + It makes it really easy to create new objects based on things that are + in the database.</p> + +<h3 id="v30_code_req">Bugzilla->request-cache</h3> + +<p><kbd>Bugzilla.pm</kbd> used to cache things like the database + connection in package-global variables (like <kbd>$_dbh</kbd>). + That doesn't work in mod_perl, so instead now there's a hash + that can be accessed through <code>Bugzilla->request_cache</code> + to store things for the rest of the current page request.</p> + +<p>You shouldn't access <code>Bugzilla->request_cache</code> directly, + but you should use it inside of <kbd>Bugzilla.pm</kbd> if you modify + that. The only time you should be accessing it directly is if you need + to reset one of the caches. Hash keys are always named after the function + that they cache, so to reset the template object, you'd do: + <code>delete Bugzilla->request_cache->{template};</code>.</p> + +<h3 id="v30_code_other">Other Changes</h3> + +<ul> + <li><code>checksetup.pl</code> has been completely re-written, and most + of its code moved into modules in the <kbd>Bugzilla::Install</kbd> + namespace. See the + <a href="[% docs_urlbase FILTER html %]api/checksetup.html">checksetup + documentation</a> and <a href="https://bugzilla.mozilla.org/showdependencytree.cgi?id=277502&hide_resolved=0">[% terms.Bugzilla %] + [%+ terms.bug %] 277502</a> for details.</li> + <li>Instead of <kbd>UserInGroup()</kbd>, all of [% terms.Bugzilla %] now + uses <kbd>Bugzilla->user->in_group</kbd></li> + <li>mod_perl doesn't like dependency loops in modules, so we now have + a test for that detects dependency loops in modules when you run + <kbd>runtests.pl</kbd>.</li> + <li><kbd>globals.pl</kbd> used to modify the environment variables, + like <kbd>PATH</kbd>. That now happens in <kbd>Bugzilla.pm</kbd>.</li> + <li>Templates can now link to the documentation more easily. + See the <kbd>global/code-error.html.tmpl</kbd> and + <kbd>global/user-error.html.tmpl</kbd> templates for examples. + (Search for "docslinks.")</li> + <li>Parameters are accessed through <kbd>Bugzilla->params</kbd> + instead of using the <kbd>Param()</kbd> function, now.</li> + <li>The variables from the <kbd>localconfig</kbd> file are accessed + through the <code>Bugzilla->localconfig</code> hash instead of through + <kbd>Bugzilla::Config</kbd>.</li> + <li><kbd>Bugzilla::BugMail::MessageToMTA()</kbd> has moved into its + own module, along with other mail-handling code, called + <kbd>Bugzilla::Mailer</kbd></li> + <li>The <kbd>CheckCanChangeField()</kbd> subroutine in + <kbd>process_bug.cgi</kbd> has been moved to <kbd>Bugzilla::Bug</kbd>, + and is now a method of [% terms.abug %] object.</li> + <li>The code that used to be in the <kbd>global/banner.html.tmpl</kbd> + template is now in <kbd>global/header.html.tmpl</kbd>. The banner + still exists, but the file is empty.</li> +</ul> + +<h2 id="v30_previous">Release Notes For Previous Versions</h2> + +<p>Release notes for versions of [% terms.Bugzilla %] for versions + prior to 3.0 are only available in text format: + <a href="[% docs_urlbase FILTER remove('html/$') FILTER html %]rel_notes.txt">Release Notes for [% terms.Bugzilla %] 2.22 + and Earlier</a>.</p> + +[% INCLUDE global/footer.html.tmpl %] + +[% BLOCK db_req %] + [% SET m = DB_MODULE.$db %] + <h3 id="v36_req_[% db FILTER html %]">For [% m.name FILTER html %] Users</h3> + + <ul> + <li>[% m.name FILTER html %] + [%+ '<span class="req_new">' IF db_new %]v[% m.db_version FILTER html %] + [% '</span>' IF db_new %] + </li> + <li><strong>perl module:</strong> + [%+ m.dbd.module FILTER html %] + [% '<span class="req_new">' IF dbd_new %]v[% m.dbd.version FILTER html %] + [% '</span>' IF dbd_new %]</li> + </ul> +[% END %] + + +[% BLOCK req_table %] + <table class="req_table" border="0" cellspacing="0" cellpadding="0"> + <tr> + <th>Module</th> <th>Version</th> + [% IF include_feature %] + <th>Enables Feature</th> + [% END %] + </tr> + [% FOREACH req = reqs %] + <tr> + <td [% ' class="req_new"' IF new.contains(req.package) %]> + [%- req.module FILTER html %]</td> + <td [% ' class="req_new"' IF updated.contains(req.package) + OR new.contains(req.package) %]> + [%- IF req.version == 0 %] + (Any) + [% ELSE %] + [%- req.version FILTER html %] + [% END %] + </td> + [% IF include_feature %] + <td>[% req.feature.join(', ') FILTER html %]</td> + [% END %] + </tr> + [% END %] +</table> +[% END %] diff --git a/template/en/default/pages/sudo.html.tmpl b/template/en/default/pages/sudo.html.tmpl new file mode 100644 index 0000000..c790ff1 --- /dev/null +++ b/template/en/default/pages/sudo.html.tmpl @@ -0,0 +1,68 @@ +[%# 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) 2005 Netscape Communications Corporation. All + # Rights Reserved. + # + # Contributor(s): A. Karl Kornel <karl@kornel.name> + #%] + +[% PROCESS global/variables.none.tmpl %] +[% INCLUDE global/header.html.tmpl title = "sudo: User Impersonation" %] + +<p> + [%+ terms.Bugzilla %] includes the ability to have one user impersonate +another, in something called a <i>sudo session</i>, so long as the person +doing the impersonating has the appropriate privileges. +</p> + +<p> + While a session is in progress, [% terms.Bugzilla %] will act as if the + impersonated user is doing everything. This is especially useful for testing, + and for doing critical work when the impersonated user is unavailable. The + impersonated user will receive an email from [% terms.Bugzilla %] when the + session begins; they will not be told anything else. +</p> + +<p> + To use this feature, you must be a member of the appropriate group. The group + includes all administrators by default. Other users, and members of other + groups, can be given access to this feature on a case-by-case basis. To + request access, contact the maintainer of this installation: + <a href="mailto:[% Param("maintainer") %]"> + [%- Param("maintainer") %]</a>. +</p> + +<p> + If you would like to be protected from impersonation, you should contact the + maintainer of this installation to see if that is possible. People with + access to this feature are protected automatically. +</p> + +<p id="message"> + [% IF user.in_group('bz_sudoers') %] + You are a member of the <b>bz_sudoers</b> group. You may use this + feature to impersonate others. + [% ELSE %] + You are not a member of an appropriate group. You may not use this + feature. + [% END %] + [% IF user.in_group('bz_sudo_protect') %] + <br> + You are a member of the <b>bz_sudo_protect</b> group. Other people will + not be able to use this feature to impersonate you. + [% END %] +</p> + +[% INCLUDE global/footer.html.tmpl %] diff --git a/template/en/default/pages/voting.html.tmpl b/template/en/default/pages/voting.html.tmpl new file mode 100644 index 0000000..4e6fb47 --- /dev/null +++ b/template/en/default/pages/voting.html.tmpl @@ -0,0 +1,69 @@ +[%# 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> + # Gervase Markham <gerv@gerv.net> + #%] + +[% PROCESS global/variables.none.tmpl %] +[% INCLUDE global/header.html.tmpl title = "Voting" %] + +<p>[% terms.Bugzilla %] has a "voting" feature. Each product allows users to +have a certain number of votes. (Some products may not allow any, which means +you can't vote on things in those products at all.) With your vote, you +indicate which [% terms.bugs %] you think are the most important and +would like to see fixed. Note that voting is nowhere near as effective +as providing a fix yourself.</p> + +<p>Depending on how the administrator has configured the relevant product, +you may be able to vote for the same [% terms.bug %] more than once. +Remember that you have a limited number of votes. When weighted voting +is allowed and a limited number of votes are available to you, you will +have to decide whether you want to distribute your votes among a large +number of [% terms.bugs %] indicating your minimal interest or focus on +a few [% terms.bugs %] indicating your strong support for them. +</p> + +<p>To look at votes:</p> + +<ul> + <li>Go to the query page. Do a normal query, but enter 1 in the "At least + ___ votes" field. This will show you items that match your query that + have at least one vote.</li> +</ul> + +<p>To vote for [% terms.abug %]:</p> + +<ul> + <li>Bring up the [% terms.bug %] in question.</li> + + <li>Click on the "(vote)" link that appears on the right of the "Importance" + fields. (If no such link appears, then voting may not be allowed in + this [% terms.bug %]'s product.)</li> + + <li>Indicate how many votes you want to give this [% terms.bug %]. This page + also displays how many votes you've given to other [% terms.bugs %], so you + may rebalance your votes as necessary.</li> +</ul> + +<p>You will automatically get email notifying you of any changes that occur +on [% terms.bugs %] you vote for.</p> + +<p>You may review your votes at any time by clicking on the "<a href= +"votes.cgi?action=show_user">My Votes</a>" link in the page footer.</p> + +[% INCLUDE global/footer.html.tmpl %] diff --git a/template/en/default/reports/chart.csv.tmpl b/template/en/default/reports/chart.csv.tmpl new file mode 100644 index 0000000..f9e2f2b --- /dev/null +++ b/template/en/default/reports/chart.csv.tmpl @@ -0,0 +1,44 @@ +[%# 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> + #%] + +[% colsepchar = user.settings.csv_colsepchar.value %] + +[% data = chart.data %] +Date\Series +[% FOREACH label = chart.labels %] + [% colsepchar %][% label FILTER csv %] +[% END %] +[%# The data, which is in the correct format for GD, is conceptually the wrong + # way round for CSV output. So, we need to invert it here, which is why + # these loops aren't just plain FOREACH. + #%] +[% i = 0 %] +[% WHILE i < data.0.size %] + [% j = 0 %] + [% WHILE j < data.size %] + [% IF j > 0 %] + [% colsepchar %] + [% END %] + [% data.$j.$i %] + [% j = j + 1 %] + [% END %] + [% i = i + 1 %] + +[% END %] diff --git a/template/en/default/reports/chart.html.tmpl b/template/en/default/reports/chart.html.tmpl new file mode 100644 index 0000000..e14744d --- /dev/null +++ b/template/en/default/reports/chart.html.tmpl @@ -0,0 +1,67 @@ +[%# 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: + #%] + +[% DEFAULT width = 600 + height = 350 +%] + +[% time = time FILTER time('%Y-%m-%d %H:%M:%S') FILTER html %] + +[% PROCESS global/header.html.tmpl + title = "Chart" + header_addl_info = time +%] + +<div align="center"> + + [% imageurl = BLOCK %]chart.cgi? + [% imagebase FILTER html %]&ctype=png&action=plot&width= + [% width %]&height=[% height -%] + [% END %] + + <img alt="Graphical report results" src="[% imageurl %]" + width="[% width %]" height="[% height %]"> + <p> + [% sizeurl = BLOCK %]chart.cgi? + [% imagebase FILTER html %]&action=wrap + [% END %] + <a href="[% sizeurl %]&width=[% width %]&height= + [% height + 100 %]">Taller</a><br> + <a href="[% sizeurl %]&width=[% width - 100 %]&height= + [% height %]">Thinner</a> * + <a href="[% sizeurl %]&width=[% width + 100 %]&height= + [% height %]">Fatter</a> <br> + <a href="[% sizeurl %]&width=[% width %]&height= + [% height - 100 %]">Shorter</a><br> + </p> + + <p> + <a href="chart.cgi? + [% imagebase FILTER html %]&ctype=csv&action=plot">CSV</a> | + <a href="chart.cgi?[% imagebase FILTER html %]&action=assemble">Edit + this chart</a> + </p> + +</div> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/reports/chart.png.tmpl b/template/en/default/reports/chart.png.tmpl new file mode 100644 index 0000000..c4fa04f --- /dev/null +++ b/template/en/default/reports/chart.png.tmpl @@ -0,0 +1,60 @@ +[%# 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> + #%] + +[% y_label = "$terms.Bugs" %] +[% x_label = "Time" %] + +[% IF chart.cumulate %] + [% USE graph = GD.Graph.area(width, height) %] + [% graph.set(cumulate => "true") %] +[% ELSE %] + [% USE graph = GD.Graph.lines(width, height) %] +[% END %] + +[% FILTER null; + x_label_skip = (30 * chart.data.0.size / width); + + graph.set(x_label => x_label, + y_label => y_label, + y_tick_number => 8, + y_max_value => chart.y_max_value, + x_label_position => 0.5, + x_labels_vertical => 1, + x_label_skip => x_label_skip, + legend_placement => "RT", + line_width => 2, + dclrs => ["lred", "lgreen", "lblue", "lyellow", + "lpurple", "lorange", "black", "green", + "blue", "dpink", "lbrown", "gray", + "red", "dpurple", "gold", "marine"]); + + # Workaround for the fact that set_legend won't take chart.labels directly, + # because chart.labels is an array reference rather than an array. + graph.set_legend(chart.labels.0, chart.labels.1, chart.labels.2, + chart.labels.3, chart.labels.4, chart.labels.5, + chart.labels.6, chart.labels.7, chart.labels.8, + chart.labels.9, chart.labels.10, chart.labels.11, + chart.labels.12, chart.labels.13, chart.labels.14, + chart.labels.15); + + graph.plot(chart.data).png | stdout(1); + END; +-%] + diff --git a/template/en/default/reports/components.html.tmpl b/template/en/default/reports/components.html.tmpl new file mode 100644 index 0000000..35f656a --- /dev/null +++ b/template/en/default/reports/components.html.tmpl @@ -0,0 +1,105 @@ +[%# 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): Bradley Baetz <bbaetz@student.usyd.edu.au> + # Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[%# INTERFACE: + # product: object. The product for which we want to display component + # descriptions. + #%] + +[% title = BLOCK %] + Components for [% product.name FILTER html %] +[% END %] + +[% PROCESS global/header.html.tmpl + style_urls = [ "skins/standard/reports.css" ] + title = title +%] + +[% IF Param("useqacontact") %] + [% numcols = 3 %] +[% ELSE %] + [% numcols = 2 %] +[% END %] + +<table cellpadding="0" cellspacing="0" id="components_header_table"> + <tr> + <td class="instructions"> + Select a component to see open [% terms.bugs %] in that component: + </td> + <td class="product_container"> + <h2 class="product_name">[% product.name FILTER html %]</h2> + <div class="product_desc"> + [% product.description FILTER html_light %] + </div> + </td> + </tr> +</table> + +<h3 class="components_header">Components</h3> + +<table class="component_table" cellspacing="0" cellpadding="0"> + <thead> + <tr> + <th> </th> + <th>Default Assignee</th> + [% IF Param("useqacontact") %] + <th>Default QA Contact</th> + [% END %] + </tr> + </thead> + + <tbody> + [% FOREACH comp = product.components %] + [% INCLUDE describe_comp %] + [% END %] + </tbody> +</table> + +[% PROCESS global/footer.html.tmpl %] + +[%############################################################################%] +[%# BLOCK for components %] +[%############################################################################%] + +[% BLOCK describe_comp %] + <tr> + <td rowspan="2" class="component_name"> + <a name="[% comp.name FILTER html %]" + href="buglist.cgi?product= + [%- product.name FILTER url_quote %]&component= + [%- comp.name FILTER url_quote %]&resolution=---"> + [% comp.name FILTER html %]</a> + </td> + <td class="component_assignee"> + [% INCLUDE global/user.html.tmpl who = comp.default_assignee %] + </td> + [% IF Param("useqacontact") %] + <td class="component_qa_contact"> + [% INCLUDE global/user.html.tmpl who = comp.default_qa_contact %] + </td> + [% END %] + </tr> + <tr> + <td colspan="[% numcols - 1 %]" class="component_description"> + [% comp.description FILTER html_light %] + </td> + </tr> +[% END %] diff --git a/template/en/default/reports/create-chart.html.tmpl b/template/en/default/reports/create-chart.html.tmpl new file mode 100644 index 0000000..e2b6090 --- /dev/null +++ b/template/en/default/reports/create-chart.html.tmpl @@ -0,0 +1,271 @@ +[%# 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: + # chart: Chart object representing the currently assembled chart. + # category: hash (keyed by category) of hashes (keyed by subcategory) of + # hashes (keyed by name), with value being the series_id of the + # series. Contains details of all series the user can see. + #%] + +[% PROCESS global/header.html.tmpl + title = "Create Chart" +%] + +[% PROCESS "reports/series-common.html.tmpl" + donames = 1 +%] + +<script type="text/javascript"> +[%# This function takes necessary action on selection of a subcategory %] +function subcatSelected() { + var cat = document.chartform.category.value; + var subcat = document.chartform.subcategory.value; + var names = series[cat][subcat]; + + var namewidget = document.chartform.name; + + namewidget.options.length = 0; + var i = 0; + + for (x in names) { + namewidget.options[i] = new Option(x, names[x]); + i++; + } + + namewidget.disabled = false; + namewidget.options[0].selected = true; + + checkNewState(); +} +</script> + +[% gttext = "Grand Total" %] + +<form method="get" action="chart.cgi" name="chartform"> + + <table cellpadding="2" cellspacing="2" border="0"> + [% IF NOT category OR category.size == 0 %] + <tr> + <td> + <i>No data sets exist, or none are visible to you.</i> + </td> + </tr> + [% ELSE %] + <tr> + <th><label for="category">Category</label>:</th> + <th></th> + <th><label for="subcategory">Sub-category</label>:</th> + <th></th> + <th><label for="name" accesskey="N">Name</label>:</th> + <th><br> + </th> + </tr> + <tr> + + [% PROCESS series_select sel = { name => 'category', + size => 5, + onchange = "catSelected(); + subcatSelected();" } %] + + <td> + <noscript> + <input type="submit" name="action-assemble" value="Update -->" + id="action-assemble"> + </noscript> + </td> + + [% PROCESS series_select sel = { name => 'subcategory', + size => 5, + onchange = "subcatSelected()" } %] + + <td> + <noscript> + <input type="submit" name="action-assemble" value="Update -->" + id="action-assemble2"> + </noscript> + </td> + + [% PROCESS series_select sel = { name => 'name', + size => 5, + multiple => 1, + # We want to use the series ID as value, + # not its name. + value_in_hash => 1 } %] + + <td align="center" valign="middle"> + <input type="submit" name="action-add" value="Add To List" + id="action-add"><br> + </td> + </tr> + [% END %] + </table> + + <h3>List Of Data Sets To Plot</h3> + + [% IF chart.lines.size %] + <table cellspacing="2" cellpadding="2"> + <tr> + <th style="width: 5em;">Select</th> + <th>Label</th> + <th></th> + <th>Data Set</th> + <th></th> + </tr> + + [%# The external loop has two counters; one which keeps track of where we + # are in the old labels array, and one which keeps track of the new + # indexes for the form elements. They are different if chart.lines has + # empty slots in it. + #%] + [% labelidx = 0 %] + [% newidx = 0 %] + + [% FOREACH line = chart.lines %] + [% IF NOT line %] + [%# chart.lines has an empty slot, so chart.labels will too. We + # increment labelidx only to keep the labels in sync with the data. + #%] + [% labelidx = labelidx + 1 %] + [% NEXT %] + [% END %] + + [% FOREACH series = line %] + <tr> + [% IF loop.first %] + <td align="center" rowspan="[% line.size %]"> + <input type="checkbox" value="1" name="select[% newidx %]"> + </td> + <td rowspan="[% line.size %]"> + <input type="text" size="20" name="label[% newidx %]" + value="[% (chart.labels.$labelidx OR series.name) + FILTER html %]"> + </td> + [% END %] + + <td> + [% "{" IF line.size > 1 %] + </td> + + <td> + [% series.category FILTER html %] / + [%+ series.subcategory FILTER html %] / + [%+ series.name FILTER html %] + <input type="hidden" name="line[% newidx %]" + value="[% series.series_id %]"> + </td> + + <td align="center"> + [% IF user.id == series.creator_id OR user.in_group("admin") %] + <a href="chart.cgi?action=edit&series_id= + [% series.series_id %]">Edit</a> | + <a href="chart.cgi?action=confirm-delete&series_id= + [%- series.series_id %]">Delete</a> | + [% END %] + <a href="buglist.cgi?cmdtype=dorem&namedcmd= + [% series.category FILTER url_quote %]%20/%20 + [% series.subcategory FILTER url_quote %]%20/%20 + [% series.name FILTER url_quote -%]&series_id= + [% series.series_id %]&remaction=runseries">Run Search</a> + </td> + </tr> + [% END %] + [% labelidx = labelidx + 1 %] + [% newidx = newidx + 1 %] + [% END %] + + [% IF chart.gt %] + <tr> + <td align="center"> + <input type="checkbox" value="1" name="select65536"> + <input type="hidden" value="1" name="gt"> + </td> + <td> + <input type="text" size="20" name="labelgt" + value="[% (chart.labelgt OR gttext) FILTER html %]"> + </td> + <td></td> + <td> + <i>[% gttext FILTER html %]</i> + </td> + <td></td> + </tr> + [% END %] + <tr> + <td colspan="6"> </td> + </tr> + + <tr> + <td valign="bottom" style="text-align: center;"> + <input type="submit" name="action-sum" value="Sum" + style="width: 5em;" id="action-sum"><br> + <input type="submit" name="action-remove" value="Remove" + style="width: 5em;" id="action-remove"> + </td> + + <td style="text-align: right; vertical-align: bottom;"> + <label for="cumulate"><b>Cumulate</b></label>: + <input type="checkbox" name="cumulate" id="cumulate" value="1" + [% " checked" IF chart.cumulate %]> + </td> + + <td></td> + <td valign="bottom"> + <label for="datefrom"><b>Date Range</b></label>: + <input type="text" size="12" name="datefrom" id="datefrom" + value="[% time2str("%Y-%m-%d", chart.datefrom) IF chart.datefrom%]"> + <label for="dateto"><b>to</b></label> + <input type="text" size="12" name="dateto" id="dateto" + value="[% time2str("%Y-%m-%d", chart.dateto) IF chart.dateto %]"> + </td> + + <td style="text-align: right" valign="bottom"> + <input type="submit" name="action-wrap" value="Chart This List" + id="action-wrap"> + </td> + </tr> + </table> + [% ELSE %] + <p><i>None</i></p> + [% END %] +</form> + +[% IF user.in_group('editbugs') %] + <h3>Create New Data Set</h3> + <p> + You can either create a new data set based on one of your saved searches + or start with a clean slate. + </p> + + <form action="chart.cgi" id="create_series" name="create_series" method="GET"> + <input type="hidden" name="action" value="convert_search"> + <label for="series_from_search">Based on:</label> + <select id="series_from_search" name="series_from_search"> + <option value="">(Clean slate)</option> + [% FOREACH q = user.queries %] + <option value="[% q.name FILTER html %]">[% q.name FILTER html %]</option> + [% END %] + </select> + <input id="submit_create" type="submit" value="Create a new data set"> + </form> +[% END %] + +[% PROCESS global/footer.html.tmpl %] + diff --git a/template/en/default/reports/delete-series.html.tmpl b/template/en/default/reports/delete-series.html.tmpl new file mode 100644 index 0000000..5003551 --- /dev/null +++ b/template/en/default/reports/delete-series.html.tmpl @@ -0,0 +1,59 @@ +[%# 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 Frédéric Buclin. + # Portions created by the Initial Developer are Copyright (C) 2009 + # the Initial Developer. All Rights Reserved. + # + # Contributor(s): + # Frédéric Buclin <LpSolit@gmail.com> + #%] + +[% series_name = BLOCK %] + [% series.category FILTER html %] / + [%+ series.subcategory FILTER html %] / + [%+ series.name FILTER html %] +[% END %] + +[% PROCESS global/header.html.tmpl title = "Delete Series" + style_urls = ['skins/standard/admin.css'] %] + +<p> + You are going to completely remove the <b>[% series_name FILTER none %]</b> series + from the database. All data related to this series will be permanently deleted. +</p> +<p> + [% IF series.creator %] + This series has been created by <a href="mailto:[% series.creator.email FILTER html %]"> + [% series.creator.email FILTER html %]</a> + [% ELSE %] + This series has been automatically created by [% terms.Bugzilla %] + [% END %] + + [% IF series.public %] + and is public. + [% ELSIF series.creator %] + and is only visible by this user. + [% ELSE %] + and cannot be displayed by anybody. + [% END %] +</p> + +<p class="areyoureallyreallysure">Are you sure you want to delete this series?</p> + +<p> + <a href="chart.cgi?action=delete&series_id=[% series.series_id FILTER html %]&token= + [%- issue_hash_token([series.id, series.name]) FILTER url_quote %]">Yes, delete</a> | + <a href="chart.cgi">No, go back to the charts page</a> +</p> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/reports/duplicates-simple.html.tmpl b/template/en/default/reports/duplicates-simple.html.tmpl new file mode 100644 index 0000000..62795af --- /dev/null +++ b/template/en/default/reports/duplicates-simple.html.tmpl @@ -0,0 +1,47 @@ +[%# 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> + # Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[%# INTERFACE: + # You need to fulfill the interface to duplicates-table.html.tmpl. + #%] + +[% PROCESS global/variables.none.tmpl %] + +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" + "http://www.w3.org/TR/html4/loose.dtd"> +<html> + [% IF product.size %] + [% title = BLOCK %] + Most Frequently Reported [% terms.Bugs %] for [% product.join(', ') FILTER html %] + [% END %] + [% ELSE %] + [% title = "Most Frequently Reported $terms.Bugs" %] + [% END%] + + <head> + <title>[% title FILTER html %]</title> + </head> + + <body> + [% PROCESS "reports/duplicates-table.html.tmpl" %] + </body> +</html> diff --git a/template/en/default/reports/duplicates-table.html.tmpl b/template/en/default/reports/duplicates-table.html.tmpl new file mode 100644 index 0000000..38ab2d5 --- /dev/null +++ b/template/en/default/reports/duplicates-table.html.tmpl @@ -0,0 +1,125 @@ +[%# 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> + # Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[%# INTERFACE: + # bugs: list of hashes. May be empty. Each hash has three members: + # bug: A Bugzilla::Bug object + # count: integer. The number of dupes + # delta: integer. The change in count in the last $changedsince days + # + # bug_ids: list of integers. May be empty. The IDs of the bugs in $bugs. + # + # sortby: string. the column on which we are sorting the buglist. + # reverse: boolean. True if we are reversing the current sort. + # maxrows: integer. Max number of rows to display. + # changedsince: integer. The number of days ago for the changedsince column. + # openonly: boolean. True if we are only showing open bugs. + # product: array of strings. Restrict to these products only. + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[%# *** Column Headers *** %] + +[% SET columns = [ + { name => "id", description => "$terms.Bug #" }, + { name => "count", description => "Dupe<br>Count" }, + { name => "delta", + description => "Change in last<br>$changedsince day(s)" }, + { name => "component", description => field_descs.component }, + { name => "bug_severity", description => field_descs.bug_severity }, + { name => "op_sys", description => field_descs.op_sys }, + { name => "target_milestone", description => field_descs.target_milestone }, + { name => "short_desc", description => field_descs.short_desc }, +] %] + +[% SET base_args = [] %] +[% FOREACH param = ['maxrows', 'openonly', 'format', 'sortvisible', + 'changedsince', 'product'] +%] + [% NEXT IF NOT ${param}.defined %] + [% FOREACH value = ${param} %] + [% filtered_value = value FILTER url_quote %] + [% base_args.push("$param=$filtered_value") %] + [% END %] +[% END %] +[% IF sortvisible %] + [% bug_ids_string = bug_ids.nsort.join(',') FILTER url_quote %] + [% base_args.push("bug_id=$bug_ids_string") %] +[% END %] +[% base_args_string = base_args.join('&') %] + +[% IF bugs.size %] + <table id="duplicates_table" cellpadding="0" cellspacing="0"> + <thead> + <tr> + [% FOREACH column = columns %] + [% IF column.name == sortby %] + [%# We add this to the column object so it doesn't affect future + # iterations of the loop. + #%] + [% column.reverse_sort = reverse ? 0 : 1 %] + [% END %] + <th class="[% column.name FILTER html %]"> + <a href="duplicates.cgi?sortby=[% column.name FILTER url_quote %] + [% IF column.reverse_sort.defined %] + [%- %]&reverse=[% column.reverse_sort FILTER url_quote %] + [% END %] + [% IF base_args_string %] + [% "&$base_args_string" FILTER none %] + [% END %]" + >[% column.description FILTER none %]</a> + </th> + [% END %] + </tr> + </thead> + + [%# *** Buglist *** %] + + <tbody> + [% FOREACH item = bugs %] + [% SET bug = item.bug %] + <tr [% " class='resolved'" IF NOT bug.isopened %]> + <td class="id"> + [% bug.id FILTER bug_link(bug) FILTER none %] + </td> + <td class="count">[% item.count FILTER html %]</td> + <td class="delta">[% item.delta FILTER html %]</td> + <td class="component">[% bug.component FILTER html %]</td> + <td class="bug_severity"> + [%- display_value('bug_severity', bug.bug_severity) FILTER html %] + </td> + <td class="op_sys"> + [%- display_value('op_sys', bug.op_sys) FILTER html %] + </td> + <td class="target_milestone"> + [% display_value('target_milestone', + bug.target_milestone) FILTER html %] + </td> + <td class="short_desc">[% bug.short_desc FILTER html %]</td> + </tr> + [% END %] + </tbody> + </table> +[% ELSE %] + <h3>No duplicate [% terms.bugs %] found.</h3> +[% END %] diff --git a/template/en/default/reports/duplicates.html.tmpl b/template/en/default/reports/duplicates.html.tmpl new file mode 100644 index 0000000..6b49a23 --- /dev/null +++ b/template/en/default/reports/duplicates.html.tmpl @@ -0,0 +1,179 @@ +[%# 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: + # sortby: string. the column on which we are sorting the buglist. + # reverse: boolean. True if we are reversing the current sort. + # maxrows: integer. Max number of rows to display. + # changedsince: integer. The number of days ago for the changedsince column. + # openonly: boolean. True if we are only showing open bugs. + # product: array of strings. The set of products we check for dups. + # + # Additionally, you need to fulfill the interface to + # duplicates-table.html.tmpl. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% IF product.size %] + [% title = BLOCK %] + Most Frequently Reported [% terms.Bugs %] for + [%+ product.join(', ') FILTER html %] + [% END %] +[% ELSE %] + [% title = "Most Frequently Reported $terms.Bugs" %] +[% END%] + +[% PROCESS global/header.html.tmpl + title = title + style_urls = ['skins/standard/duplicates.css'] +%] + +<p> + <a href="#explanation">What is this data?</a> + <br> + <a href="#params">Change parameters</a> +</p> + +[% PROCESS "reports/duplicates-table.html.tmpl" %] + +[%# *** Parameters *** %] + +[% bug_ids_string = bug_ids.join(',') %] + +<h3><a name="params">Change Parameters</a></h3> + +<form method="get" action="duplicates.cgi"> + <input type="hidden" name="sortby" value="[% sortby FILTER html %]"> + <input type="hidden" name="reverse" value="[% reverse FILTER html %]"> + <input type="hidden" name="bug_id" value="[% bug_ids_string FILTER html %]"> + <table> + <tr> + <td>When sorting or restricting, work with:</td> + <td> + <input type="radio" name="sortvisible" id="entirelist" value="0" + [% ' checked="checked"' IF NOT sortvisible %]> + <label for="entirelist"> + entire list + </label> + <br> + <input type="radio" name="sortvisible" id="visiblelist" value="1" + [% ' checked="checked"' IF sortvisible %]> + <label for="visiblelist"> + currently visible list + </label> + </td> + <td rowspan="4" valign="top">Restrict to products:</td> + <td rowspan="4" valign="top"> + <select name="product" size="5" multiple="multiple"> + [% FOREACH p = user.get_selectable_products %] + <option name="[% p.name FILTER html %]" + [% ' selected="selected"' IF product.contains(p.name) %] + >[% p.name FILTER html %]</option> + [% END %] + </select> + </td> + </tr> + + <tr> + <td><label for="maxrows">Max rows:</label></td> + <td> + <input size="4" name="maxrows" id="maxrows" + value="[% maxrows FILTER html %]"> + </td> + </tr> + + <tr> + <td> + <label for="changedsince">Change column is change in the last:</label> + </td> + <td> + <input size="4" name="changedsince" id="changedsince" + value="[% changedsince FILTER html %]"> days + </td> + </tr> + + <tr> + <td> + <label for="openonly"> + Open [% terms.bugs %] only: + </label> + </td> + <td> + <input type="checkbox" name="openonly" id="openonly" value="1" + [% ' checked="checked"' IF openonly %]> + </td> + </tr> + + </table> + + <input type="submit" id="change" value="Change"> +</form> + +<form method="post" action="buglist.cgi"> + <input type="hidden" name="bug_id" value="[% bug_ids_string FILTER html %]"> + Or just give this to me as a <input type="submit" id="list" + value="[% terms.bug %] list">. + (Note: the order may not be the same.) +</form> + +<hr> + +<b> + <a name="explanation">What are "Most Frequently Reported [% terms.Bugs %]"?</a> +</b> + +<p> + The Most Frequent [% terms.Bugs %] page lists the known open + [%+ terms.bugs %] which are reported most frequently, + counting the number of direct and indirect duplicates of [% terms.bugs %]. + This information is provided in order to assist in minimizing + the amount of duplicate [% terms.bugs %] entered into [% terms.Bugzilla %], + which saves time for Quality Assurance engineers who have to triage + the [% terms.bugs %]. +</p> + +<b>How do I use this list?</b> + +<ul> + <li>Review the most frequent [% terms.bugs %] list.</li> + <li>If your problem is listed:</li> + + <ul> + <li>Click on the [% terms.bug %] number to confirm that you have found the + same [% terms.bug %], and comment if you have additional information + or move on with your testing of the product. + </li> + </ul> + + <li>If your problem not listed:</li> + + <ul> + <li><a href="query.cgi">Try and locate a similar [% terms.bug %]</a> + that has already been filed.</li> + <li>If you find your [% terms.bug %] in [% terms.Bugzilla %], + feel free to comment with any new or additional data you may have.</li> + <li>If you cannot find your problem already documented in + [%+ terms.Bugzilla %], + <a href="enter_bug.cgi">file a new [% terms.bug %]</a>.</li> + </ul> +</ul> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/reports/edit-series.html.tmpl b/template/en/default/reports/edit-series.html.tmpl new file mode 100644 index 0000000..214bbcd --- /dev/null +++ b/template/en/default/reports/edit-series.html.tmpl @@ -0,0 +1,73 @@ +[%# 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> + #%] + +[% title = "Edit Series" %] +[% subheader = BLOCK %] + [% default.category FILTER html %] / + [%+ default.subcategory FILTER html %] / + [%+ default.name FILTER html %] +[% END %] + +[% PROCESS global/header.html.tmpl %] + +[% IF changes_saved %] + <p> + <font color="red"> + Series updated. + </font> + </p> +[% END %] + +<form method="get" action="chart.cgi" name="chartform"> + + [% PROCESS reports/series.html.tmpl + button_name = "Change Data Set" %] + <input type="hidden" name="action" value="alter"> + + [% IF default.series_id %] + <input type="hidden" name="series_id" value="[% default.series_id %]"> + [% END %] +</form> + +<p> + <b>Creator</b>: + [% IF default.creator %] + <a href="mailto:[% default.creator.email FILTER html %]"> + [% default.creator.email FILTER html %]</a> + [% ELSE %] + (automatically created by [% terms.Bugzilla %]) + [% END %] +</p> + +<p>Note: it is not yet possible to edit the search associated with this data +set. +</p> + +<p> + <a href="query.cgi?[% default.query FILTER html %]">View + series search parameters</a> | + <a href="buglist.cgi?cmdtype=dorem&namedcmd= + [% default.category FILTER url_quote %]- + [% default.subcategory FILTER url_quote %]- + [% default.name FILTER url_quote %]&remaction=runseries&series_id= + [% default.series_id %]">Run series search</a> +</p> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/reports/keywords.html.tmpl b/template/en/default/reports/keywords.html.tmpl new file mode 100644 index 0000000..10e6573 --- /dev/null +++ b/template/en/default/reports/keywords.html.tmpl @@ -0,0 +1,87 @@ +[%# 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> + # Contributor(s): David D. Kilzer <ddkilzer@kilzer.net> + #%] + +[%# INTERFACE: + # keywords: array keyword objects. May be empty. Each has has four members: + # id: id of the keyword + # name: the name of the keyword + # description: keyword description. Can contain some limited HTML code. + # bug_count: number of bugs with that keyword + # caneditkeywords: boolean. True if this user can edit keywords + %] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl + title = "$terms.Bugzilla Keyword Descriptions" +%] + +[% FOREACH keyword = keywords %] + [% IF loop.index % 50 == 0 %] + [% IF loop.index != 0 %] + </table> + [% END %] + + <table border="1" cellpadding="4" cellspacing="0"> + <tr bgcolor="#6666FF"> + <th align="left">Name</th> + <th align="left">Description</th> + <th align="left">Open [% terms.Bugs %]</th> + <th align="left">Total [% terms.Bugs %]</th> + </tr> + [% END %] + + <tr> + <th> + <a name="[% keyword.name FILTER html %]"> + [% keyword.name FILTER html %]</a> + </th> + <td>[% keyword.description FILTER html_light %]</td> + <td align="center"> + [% IF keyword.bug_count > 0 %] + <a href="buglist.cgi?keywords=[% keyword.name FILTER url_quote %]&resolution=---"> + Search</a> + [% ELSE %] + none + [% END %] + </td> + <td align="right"> + [% IF keyword.bug_count > 0 %] + <a href="buglist.cgi?keywords=[% keyword.name FILTER url_quote %]"> + [% keyword.bug_count %]</a> + [% ELSE %] + none + [% END %] + </td> + </tr> +[% END %] + +[% IF keywords.size > 0 %] + </table> +[% END %] + +[% IF caneditkeywords %] + <p> + <a href="editkeywords.cgi">Edit keywords</a>. + </p> +[% END %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/reports/menu.html.tmpl b/template/en/default/reports/menu.html.tmpl new file mode 100644 index 0000000..5f26ac3 --- /dev/null +++ b/template/en/default/reports/menu.html.tmpl @@ -0,0 +1,85 @@ +[%# 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: + # This template has no interface. It's a list of the available report + # types in Bugzilla. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl + title = "Reporting and Charting Kitchen" + doc_section = "reporting.html" + style_urls = ['skins/standard/reports.css'] +%] + +<p> + [% terms.Bugzilla %] allows you to view and track the state of the [% terms.bug %] database in + all manner of exciting ways. +</p> + +<h2>Current State</h2> + +<ul> + <li id="report_search"> + <strong><a href="query.cgi">Search</a></strong> - + list sets of [% terms.bugs %]. + </li> + <li id="report_tabular"> + <strong> + <a href="query.cgi?format=report-table">Tabular reports</a> + </strong> - + tables of [% terms.bug %] counts in 1, 2 or 3 dimensions, as HTML or CSV. + </li> + [% IF feature_enabled('graphical_reports') %] + <li id="report_graphical"> + <strong> + <a href="query.cgi?format=report-graph">Graphical reports</a> + </strong> - + line graphs, bar and pie charts. + </li> + [% END %] + [% Hook.process('current_state') %] +</ul> + +[% IF feature_enabled('new_charts') OR feature_enabled('old_charts') %] + <h2>Change Over Time</h2> + + <ul> + [% IF feature_enabled('old_charts') %] + <li id="old_charts"> + <strong><a href="reports.cgi">Old Charts</a></strong> - + plot the status and/or resolution of [% terms.bugs %] against + time, for each product in your database. + </li> + [% END %] + [% IF feature_enabled('new_charts') AND user.in_group(Param("chartgroup")) %] + <li id="new_charts"> + <strong><a href="chart.cgi">New Charts</a></strong> - + plot any arbitrary search against time. Far more powerful. + </li> + [% END %] + </ul> +[% END %] + +[% Hook.process('end') %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/reports/old-charts.html.tmpl b/template/en/default/reports/old-charts.html.tmpl new file mode 100644 index 0000000..ca3ba6c --- /dev/null +++ b/template/en/default/reports/old-charts.html.tmpl @@ -0,0 +1,71 @@ +[%# 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): Frédéric Buclin <LpSolit@gmail.com> + #%] + +[%# INTERFACE: + # products: an array of product names the user is allowed to view. + # datasets: an array of hashes with available statuses and resolutions. + # url_image: URL of the generated graph. + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% PROCESS global/header.html.tmpl + title = "$terms.Bug Charts" + h1 = "Welcome to the $terms.Bugzilla Charting Kitchen" + doc_section = "reporting.html#charts" +%] + +<div align="center"> + [% IF url_image %] + <img src="[% url_image FILTER html %]"> + <br clear="both"> + [% ELSE %] + <form id="choose_product" method="get" action="reports.cgi"> + <table border="1" cellpadding="5" cellspacing="2"> + <tr> + <th>Product:</th> + <td align="center"> + <select id="product" name="product"> + [% FOREACH product = products %] + <option value="[% product FILTER html %]">[% product FILTER html %]</option> + [% END %] + </select> + </td> + </tr> + <tr> + <th>Chart datasets:</th> + <td align="center"> + <select id="datasets" name="datasets" multiple="multiple" size="5"> + [%# We cannot use translated statuses and resolutions from field-descs.none.html + # because old charts do not distinguish statuses from resolutions. %] + [% FOREACH dataset = datasets %] + <option value="[% dataset.value FILTER html %]:" + [% " selected=\"selected\"" IF dataset.selected %]> + [% dataset.value FILTER html %]</option> + [% END %] + </select> + </td> + </tr> + <tr> + <th colspan="2"> + <input type="submit" id="submit" value="Continue"> + </th> + </tr> + </table> + </form> + [% END %] +</div> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/reports/report-bar.png.tmpl b/template/en/default/reports/report-bar.png.tmpl new file mode 100644 index 0000000..649fba4 --- /dev/null +++ b/template/en/default/reports/report-bar.png.tmpl @@ -0,0 +1,64 @@ +[%# 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> + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% y_label = "$terms.Bugs" %] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% col_field_disp = field_descs.$col_field || col_field %] + +[% FOR i IN [ 0 .. data.0.0.max ] %] + [% data.0.0.$i = display_value(col_field, data.0.0.$i) %] +[% END %] + +[% FOR i IN [ 0 .. row_names.max ] %] + [% row_names.$i = display_value(row_field, row_names.$i) %] +[% END %] + +[% FILTER null; + USE graph = GD.Graph.bars(width, height); + + graph.set(x_label => col_field_disp, + y_label => y_label, + y_tick_number => 8, + y_number_format => "%d", + x_label_position => 0.5, + x_labels_vertical => x_labels_vertical, + bar_spacing => 8, + shadow_depth => 4, + shadowclr => 'dred', + show_values => 1, + legend_placement => "RT"); + + graph.set(cumulate => "true", + show_values => 0) IF cumulate; + + # Workaround for the fact that set_legend won't take row_names directly, + # because row_names is an array reference rather than an array. + graph.set_legend(row_names.0, row_names.1, row_names.2, row_names.3, + row_names.4, row_names.5, row_names.6, row_names.7, + row_names.8, row_names.9, row_names.10, row_names.11, + row_names.12, row_names.13, row_names.14, row_names.15); + + graph.plot(data.0).png | stdout(1); + END; +-%] diff --git a/template/en/default/reports/report-line.png.tmpl b/template/en/default/reports/report-line.png.tmpl new file mode 100644 index 0000000..0edc0fe --- /dev/null +++ b/template/en/default/reports/report-line.png.tmpl @@ -0,0 +1,67 @@ +[%# 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> + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% y_label = "$terms.Bugs" %] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% col_field_disp = field_descs.$col_field || col_field %] + +[% FOR i IN [ 0 .. data.0.0.max ] %] + [% data.0.0.$i = display_value(col_field, data.0.0.$i) %] +[% END %] + +[% FOR i IN [ 0 .. row_names.max ] %] + [% row_names.$i = display_value(row_field, row_names.$i) %] +[% END %] + +[% IF cumulate %] + [% USE graph = GD.Graph.area(width, height) %] + [% graph.set(cumulate => "true") %] +[% ELSE %] + [% USE graph = GD.Graph.lines(width, height) %] +[% END %] + +[% FILTER null; + graph.set(x_label => col_field_disp, + y_label => y_label, + y_tick_number => 8, + x_label_position => 0.5, + x_labels_vertical => x_labels_vertical, + legend_placement => "RT", + line_width => 2, + dclrs => ["lred", "lgreen", "lblue", "lyellow", + "lpurple", "lorange", "black", "green", + "blue", "dpink", "lbrown", "gray", + "red", "dpurple", "gold", "marine"]); + + # Workaround for the fact that set_legend won't take row_names directly, + # because row_names is an array reference rather than an array. + graph.set_legend(row_names.0, row_names.1, row_names.2, row_names.3, + row_names.4, row_names.5, row_names.6, row_names.7, + row_names.8, row_names.9, row_names.10, row_names.11, + row_names.12, row_names.13, row_names.14, row_names.15); + + graph.plot(data.0).png | stdout(1); + END; +-%] + diff --git a/template/en/default/reports/report-pie.png.tmpl b/template/en/default/reports/report-pie.png.tmpl new file mode 100644 index 0000000..27f5525 --- /dev/null +++ b/template/en/default/reports/report-pie.png.tmpl @@ -0,0 +1,39 @@ +[%# 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> + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% col_field_disp = field_descs.$col_field || col_field %] + +[% FOR i IN [ 0 .. data.0.0.max ] %] + [% data.0.0.$i = display_value(col_field, data.0.0.$i) %] +[% END %] + +[% FILTER null; + USE graph = GD.Graph.pie(width, height); + + graph.set(title => col_field_disp, + pie_height => 20, + suppress_angle => 2, + start_angle => 180); + + graph.plot(data.0).png | stdout(1); + END; +-%] diff --git a/template/en/default/reports/report-simple.html.tmpl b/template/en/default/reports/report-simple.html.tmpl new file mode 100644 index 0000000..d358109 --- /dev/null +++ b/template/en/default/reports/report-simple.html.tmpl @@ -0,0 +1,35 @@ +[%# 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): Alan Starr (alanjstr) + #%] + +[%# INTERFACE: + # You need to fulfill the interface to report-table.html.tmpl. + #%] + +[% PROCESS global/variables.none.tmpl %] + +<html> + + [% title = "$terms.Bug List" %] + + <head> + <title>[% title FILTER html %]</title> + </head> + + <body> + [% PROCESS "reports/report-table.html.tmpl" %] + </body> + +</html> + diff --git a/template/en/default/reports/report-table.csv.tmpl b/template/en/default/reports/report-table.csv.tmpl new file mode 100644 index 0000000..4d8b50a --- /dev/null +++ b/template/en/default/reports/report-table.csv.tmpl @@ -0,0 +1,77 @@ +[%# 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: + # See report-table.html.tmpl. + #%] +[% PROCESS global/variables.none.tmpl %] + +[% colsepchar = user.settings.csv_colsepchar.value %] + +[% num_bugs = BLOCK %]Number of [% terms.bugs %][% END %] +[% tbl_field_disp = field_descs.$tbl_field || tbl_field %] +[% col_field_disp = field_descs.$col_field || col_field %] +[% row_field_disp = field_descs.$row_field || row_field %] + +[% IF tbl_field %] + [% IF tbl_field == 'assigned_to' OR tbl_field == 'reporter' + OR tbl_field == 'qa_contact' + %] + [% tbl_disp = tbl FILTER email %] + [% ELSE %] + [% tbl_disp = tbl %] + [% END %] + [% tbl_field_disp FILTER csv %]: [% tbl_disp FILTER csv %] +[% END %] +[% IF row_field %] + [% row_field_disp FILTER csv %] +[% END %] +[% " / " IF col_field AND row_field %] +[% col_field_disp FILTER csv %] +[% IF col_field -%] + [% FOREACH col = col_names -%] + [% colsepchar %] + [% PROCESS value_display value = col field = col_field %] + [% END -%] +[% ELSE -%] + [% colsepchar %][% num_bugs FILTER csv %] +[% END %] + +[% FOREACH row = row_names %] + [% PROCESS value_display value = row field = row_field %] + [% FOREACH col = col_names %] + [% colsepchar %] + [% IF data.$tbl AND data.$tbl.$col AND data.$tbl.$col.$row %] + [% data.$tbl.$col.$row -%] + [% ELSE %] + [% -%]0 + [% END %] + [% END %] + +[% END %] + +[% BLOCK value_display %] + [% SET disp_value = display_value(field, value) %] + [% IF field == 'assigned_to' OR field == 'reporter' + OR field == 'qa_contact' + %] + [% disp_value = value FILTER email %] + [% END %] + [% disp_value FILTER csv %] +[% END %] diff --git a/template/en/default/reports/report-table.html.tmpl b/template/en/default/reports/report-table.html.tmpl new file mode 100644 index 0000000..76b80f8 --- /dev/null +++ b/template/en/default/reports/report-table.html.tmpl @@ -0,0 +1,164 @@ +[%# 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> + # <rdean@cambianetworks.com> + #%] + +[%# INTERFACE: + # buglistbase: The base query for this table, in URL form + # col_field: string. Name of the field being plotted as columns. + # row_field: string. Name of the field being plotted as rows. + # tbl_field: string. Name of the field being plotted as tables. + # col_names: array. List of values for the field being plotted as columns. + # row_names: array. List of values for the field being plotted as rows. + # data: <depends on format>. Data to plot. Only data.$tbl is accessed. + # tbl: Name of a hash in data which is the table to be plotted. + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% col_field_disp = field_descs.$col_field || col_field %] +[% row_field_disp = field_descs.$row_field || row_field %] + +[% IF tbl == "-total-" %] + [% urlbase = BLOCK %]buglist.cgi?[% buglistbase FILTER html %] + [% "&$tbl_vals" IF tbl_vals %][% END %] +[% ELSE %] + [% urlbase = BLOCK %]buglist.cgi?[% buglistbase FILTER html %]& + [% tbl_field FILTER url_quote %]=[% tbl FILTER url_quote %][% END %] +[% END %] + +[% IF tbl_field %] + <h2>[% tbl_disp FILTER email FILTER html %]</h2> +[% END %] + +<table> + <tr> + <td> + </td> + <td align="center"> + <strong>[% col_field_disp FILTER html %]</strong> + </td> + </tr> + + <tr> + <td valign="middle"> + <strong>[% row_field_disp FILTER html %]</strong> + </td> + <td> + + +[% classes = [ [ "t1", "t2" ] , [ "t3", "t4" ] ] %] +[% col_idx = 0 %] +[% row_idx = 0 %] +[% grand_total = 0 %] + +<table border="1"> + [% IF col_field %] + <tr> + <td class="[% classes.$row_idx.$col_idx %]"> + </td> + [% FOREACH col = col_names %] + [% col_totals.$col = 0 %] + [% NEXT IF col == "" %] + + [% col_idx = 1 - col_idx %] + <td class="[% classes.$row_idx.$col_idx %]"> + [% PROCESS value_display value = col field = col_field %] + </td> + [% END %] + <td class="ttotal"> + Total + </td> + </tr> + [% END %] + + [% FOREACH row = row_names %] + [% row_total = 0 %] + + [% row_idx = 1 - row_idx %] + <tr> + <td class="[% classes.$row_idx.$col_idx %]" align="right"> + [% PROCESS value_display value = row field = row_field %] + </td> + [% FOREACH col = col_names %] + [% row_total = row_total + data.$tbl.$col.$row %] + [% NEXT IF col == "" %] + [% col_totals.$col = col_totals.$col + data.$tbl.$col.$row %] + + [% col_idx = 1 - col_idx %] + <td class="[% classes.$row_idx.$col_idx %]" align="center"> + [% IF data.$tbl.$col.$row AND data.$tbl.$col.$row > 0 %] + <a href="[% urlbase %]& + [% row_field FILTER url_quote %]=[% row FILTER url_quote %]& + [% col_field FILTER url_quote %]=[% col FILTER url_quote %]"> + [% data.$tbl.$col.$row %]</a> + [% ELSE %] + . + [% END %] + </td> + [% END %] + <td class="ttotal" align="right"> + <a href="[% urlbase %]& + [% row_field FILTER url_quote %]=[% row FILTER url_quote %] + [% "&$col_vals" IF col_vals %]"> + [% row_total %]</a> + [% grand_total = grand_total + row_total %] + </td> + </tr> + [% END %] + + <tr> + [% row_idx = 1 - row_idx %] + <td class="ttotal"> + Total + </td> + [% FOREACH col = col_names %] + [% NEXT IF col == "" %] + + <td class="ttotal" align="center"> + <a href="[% urlbase %]& + [% col_field FILTER url_quote %]=[% col FILTER url_quote %] + [% "&$row_vals" IF row_vals %]"> + [% col_totals.$col %]</a> + </td> + [% END %] + <td class="ttotal" align="right"> + <strong> + <a href="[% urlbase %] + [% "&$row_vals" IF row_vals %] + [% "&$col_vals" IF col_vals %]">[% grand_total %]</a> + </strong> + </td> + </tr> +</table> + + + </td> + </tr> +</table> + +[% BLOCK value_display %] + [% SET disp_value = display_value(field, value) %] + [% IF field == 'assigned_to' OR field == 'reporter' + OR field == 'qa_contact' + %] + [% disp_value = value FILTER email %] + [% END %] + [% disp_value FILTER html FILTER replace('^ $',' ') %] +[% END %] diff --git a/template/en/default/reports/report.csv.tmpl b/template/en/default/reports/report.csv.tmpl new file mode 100644 index 0000000..f26bc1f --- /dev/null +++ b/template/en/default/reports/report.csv.tmpl @@ -0,0 +1,25 @@ +[%# 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> + #%] +[% PROCESS "global/field-descs.none.tmpl" %] +[% FOREACH tbl = tbl_names %] + [% PROCESS "reports/report-table.csv.tmpl" %] + + +[% END %] diff --git a/template/en/default/reports/report.html.tmpl b/template/en/default/reports/report.html.tmpl new file mode 100644 index 0000000..4f7ee49 --- /dev/null +++ b/template/en/default/reports/report.html.tmpl @@ -0,0 +1,180 @@ +[%# 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: + # col_field: string. Name of the field being plotted as columns. + # row_field: string. Name of the field being plotted as rows. + # tbl_field: string. Name of the field being plotted as tables. + # tbl_names: array. List of values for the field being plotted as tables. + # time: integer. Seconds since the epoch. + # data: <depends on format>. Data to plot. + # format: string. Format of the individual reports. + # width: integer. For image charts, height of the image. + # height: integer. For image charts, width of the image. + # imagebase: string. Base URL for chart image. + # switchbase: string. Base URL for format switching. + # cumulate: boolean. For bar/line charts, whether to cumulate data sets. + #%] + +[% DEFAULT width = 600 + height = 350 +%] + +[% IF min_width AND width < min_width %] + [% width = min_width %] +[% END %] + +[%# We ignore row_field for pie charts %] +[% IF format == "pie" %] + [% row_field = "" %] +[% END %] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% tbl_field_disp = field_descs.$tbl_field || tbl_field %] +[% col_field_disp = field_descs.$col_field || col_field %] +[% row_field_disp = field_descs.$row_field || row_field %] +[% switchbase = switchbase FILTER html %] + +[% title = BLOCK %] + Report: + [% IF tbl_field %] + [% tbl_field_disp FILTER html %] + [% END %] + [% " / " IF tbl_field AND (col_field OR row_field) %] + [% IF row_field %] + [% row_field_disp FILTER html %] + [% END %] + [% " / " IF col_field AND row_field %] + [% col_field_disp FILTER html %] +[% END %] + +[% time = time FILTER time('%Y-%m-%d %H:%M:%S') FILTER html %] + +[% PROCESS global/header.html.tmpl + style = " + .t1 { background-color: #ffffff } /* white */ + .t2 { background-color: #dfefff } /* light blue */ + .t3 { background-color: #dddddd } /* grey */ + .t4 { background-color: #c3d3ed } /* darker blue */ + .ttotal { background-color: #cfffdf } /* light green */ + " + header_addl_info = time +%] + +[% IF debug %] + <p>[% query FILTER html %]</p> +[% END %] + +<div align="center"> + + [% FOREACH tbl = tbl_names %] + [% IF tbl == "-total-" %] + [% tbl_disp = "Total" %] + [% ELSE %] + [% tbl_disp = tbl %] + [% END %] + + [% IF format == "table" %] + [% PROCESS "reports/report-table.html.tmpl" %] + [% ELSE %] + [% IF tbl %] + <h2>[% tbl_disp FILTER email FILTER html %]</h2> + [% END %] + + [% imageurl = BLOCK %]report.cgi?[% imagebase FILTER html %]&format= + [% format FILTER url_quote %]&ctype=png&action=plot& + [% IF tbl_field %] + [% IF tbl != "-total-" %] + [% tbl_field FILTER url_quote %]=[% tbl FILTER url_quote %]& + [% ELSE %] + [% FOREACH tblname = tbl_names %] + [% IF tblname != "-total-" %] + [% tbl_field FILTER url_quote %]=[% tblname FILTER url_quote %]& + [% END %] + [% END %] + [% END %] + [% END %]width=[% width %]&height=[% height %] + [% END %] + + <img alt="Graphical report results" src="[% imageurl %]" + width="[% width %]" height="[% height %]"> + [% END %] + <br> + [% END %] + + <table> + <tr> + <td> + [% formats = [ { name => "pie", description => "Pie" }, + { name => "bar", description => "Bar" }, + { name => "line", description => "Line" }, + { name => "table", description => "Table" } ] %] + + [% formaturl = "report.cgi?$switchbase&width=$width" _ + "&height=$height&action=wrap" %] + [% FOREACH other_format = formats %] + [% NEXT IF other_format.name == "pie" AND row_field AND col_field %] + [% UNLESS other_format.name == format %] + <a href="[% formaturl %]&format=[% other_format.name %]"> + [% END %] + [% other_format.description FILTER html %] + [% "</a>" UNLESS other_format.name == format %] | + [% END %] + <a href="[% formaturl %]&ctype=csv&format=table">CSV</a> + </td> + + [% IF format != "table" %] + <td> + + </td> + + [% sizeurl = BLOCK %]report.cgi? + [% switchbase %]&action=wrap&format= + [% format FILTER html %][% END %] + <td align="center"> + <a href="[% sizeurl %]&width=[% width %]&height= + [% height + 100 %]">Taller</a><br> + <a href="[% sizeurl %]&width=[% width - 100 %]&height= + [% height %]">Thinner</a> * + <a href="[% sizeurl %]&width=[% width + 100 %]&height= + [% height %]">Fatter</a> <br> + <a href="[% sizeurl %]&width=[% width %]&height= + [% height - 100 %]">Shorter</a><br> + </td> + [% END %] + </tr> + </table> + + <p> + [% IF format == "table" %] + <a href="query.cgi?[% switchbase %]&format=report-table">Edit + this report</a> + [% ELSE %] + <a href="query.cgi?[% switchbase %]&chart_format= + [% format %]&format=report-graph&cumulate=[% cumulate %]"> + Edit this report + </a> + [% END %] + </p> + +</div> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/reports/series-common.html.tmpl b/template/en/default/reports/series-common.html.tmpl new file mode 100644 index 0000000..cecf288 --- /dev/null +++ b/template/en/default/reports/series-common.html.tmpl @@ -0,0 +1,119 @@ +[%# 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: + # donames: boolean. True if we have a multi-select for names as well as + # categories and subcategories. + # category: hash (keyed by category) of hashes (keyed by subcategory) of + # hashes (keyed by name), with value being the series_id of the + # series. Contains details of all series the user can see. + #%] + +[% subcategory = category.${default.category} %] +[% name = subcategory.${default.subcategory} %] + +<script type="text/javascript"> +[%# This structure holds details of the series the user can select from. %] +var series = { +[% FOREACH c = category.keys.sort %] + "[%+ c FILTER js %]" : { + [% FOREACH s = category.$c.keys.sort %] + "[%+ s FILTER js %]" : { + [% IF donames %] + [% FOREACH n = category.$c.$s.keys.sort %] + "[% n FILTER js %]": + [% category.$c.$s.$n FILTER js %][% ", " UNLESS loop.last %] + [% END %] + [% END %] + }[% ", " UNLESS loop.last %] + [% END %] + }[% ", " UNLESS loop.last %] +[% END %] +}; + +[%# This function takes necessary action on selection of a category %] +function catSelected() { + var cat = document.chartform.category.value; + var subcats = series[cat]; + + var subcatwidget = document.chartform.subcategory; + + subcatwidget.options.length = 0; + var i = 0; + + for (x in subcats) { + subcatwidget.options[i] = new Option(x, x); + i++; + } + + [% IF newtext %] + subcatwidget.options[i] = new Option("[% newtext FILTER js %]", ""); + [% END %] + + subcatwidget.disabled = false; + subcatwidget.options[0].selected = true; + + if (document.chartform.action[1]) { + [%# On the query form, select the right radio button. %] + document.chartform.action[1].checked = true; + } + + checkNewState(); +} + +[%# This function updates the disabled state of the two "new" textboxes %] +function checkNewState() { + var fm = document.chartform; + if (fm.newcategory) { + fm.newcategory.disabled = + (fm.category.value != "" || + fm.action[1] && fm.action[1].checked == false); + fm.newsubcategory.disabled = + (fm.subcategory.value != "" || + fm.action[1] && fm.action[1].checked == false); + } +} +</script> + +[%###########################################################################%] +[%# Block for SELECT fields - pinched from search/form.html.tmpl #%] +[%###########################################################################%] + +[% BLOCK series_select %] + <td align="left"> + <select name="[% sel.name %]" id="[% sel.name %]" + size="[% sel.size %]" style="width: 15em" + [%+ 'multiple="multiple"' IF sel.multiple %] + [%+ "disabled=\"disabled\"" UNLESS ${sel.name}.keys.size || newtext %] + [%+ "onchange=\"$sel.onchange\"" IF sel.onchange %]> + [% FOREACH x = ${sel.name}.keys.sort %] + [% value = sel.value_in_hash ? ${sel.name}.$x : x %] + <option value="[% value FILTER html %]" + [% " selected" IF default.${sel.name} == value %]> + [% x FILTER html %]</option> + [% END %] + [% IF newtext %] + <option value="">[% newtext FILTER html %]</option> + [% ELSIF NOT ${sel.name}.keys.size %] + <option value="" disabled="disabled"></option> + [% END %] + </select> + </td> +[% END %] diff --git a/template/en/default/reports/series.html.tmpl b/template/en/default/reports/series.html.tmpl new file mode 100644 index 0000000..3cf9390 --- /dev/null +++ b/template/en/default/reports/series.html.tmpl @@ -0,0 +1,97 @@ +[%# 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: + # default: hash. Defaults for category, subcategory, name etc. + # button_name: string. What the button will say. + # category: hash (keyed by category) of hashes (keyed by subcategory) of + # hashes (keyed by name), with value being the series_id of the + # series. Contains details of all series the user can see. + #%] + +[% PROCESS "reports/series-common.html.tmpl" + newtext = "New (name below)" + %] + +<table cellpadding="2" cellspacing="2" border="0" + style="text-align: left; margin-left: 20px"> + <tbody> + <tr> + <th>Category:</th> + <th></th> + <th>Sub-category:</th> + <th>Name:</th> + <td></td> + </tr> + <tr> + [% PROCESS series_select sel = { name => 'category', + size => 5, + onchange => "catSelected()" } %] + <td> + <noscript> + <input type="submit" name="action-edit" value="Update -->" + id="action-edit"> + </noscript> + </td> + + [% PROCESS series_select sel = { name => 'subcategory', + size => 5, + onchange => "checkNewState()" } %] + + <td valign="top" name="name"> + <input type="text" name="name" maxlength="64" + value="[% default.name.0 FILTER html %]" size="25"> + </td> + + <td valign="top"> + <span style="font-weight: bold;">Run every</span> + <input type="text" size="2" name="frequency" + value="[% (default.frequency.0 OR 7) FILTER html %]"> + <span style="font-weight: bold;"> day(s)</span><br> + [%# Change 'admin' here and in Series.pm, or remove the check + completely, if you want to change who can make series public. %] + [% IF user.in_group('admin') %] + <input type="checkbox" name="public" + [%+ "checked='checked'" IF default.public.0 %]> + <span style="font-weight: bold;">Visible to all<br> + (within group restrictions)</span> + [% END %] + </td> + </tr> + + <tr> + <td> + <input type="text" style="width: 100%" name="newcategory" + maxlength="64" value="[% default.newcategory.0 FILTER html %]"> + </td> + <td></td> + <td> + <input type="text" style="width: 100%" name="newsubcategory" + maxlength="64" + value="[% default.newsubcategory.0 FILTER html %]"> + </td> + <td></td> + <td> + <input type="submit" name="submit-button" id="submit-button" + value="[% button_name FILTER html %]"> + </td> + </tr> + </tbody> +</table> diff --git a/template/en/default/request/email.txt.tmpl b/template/en/default/request/email.txt.tmpl new file mode 100644 index 0000000..e48b2fc --- /dev/null +++ b/template/en/default/request/email.txt.tmpl @@ -0,0 +1,86 @@ +[%# 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): Myk Melez <myk@mozilla.org> + # Jeff Hedlund <jeff.hedlund@matrixsi.com> + # Frédéric Buclin <LpSolit@gmail.com> + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% bugidsummary = bug.bug_id _ ': ' _ bug.short_desc %] +[% attidsummary = attachment.id _ ': ' _ attachment.description %] +[% flagtype_name = flag ? flag.type.name : old_flag.type.name %] +[% statuses = { '+' => "granted" , '-' => 'denied' , 'X' => "canceled" , + '?' => "asked" } %] + +[% to_identity = "" %] +[% on_behalf_of = 0 %] +[% action = flag.status || 'X' %] + +[% IF flag && flag.status == '?' %] + [% subject_status = "requested" %] + [% IF flag.setter_id == user.id %] + [% to_identity = flag.requestee.identity _ " for" %] + [% ELSE %] + [% on_behalf_of = 1 %] + [% IF flag.requestee %][% to_identity = " to " _ flag.requestee.identity %][% END %] + [% END %] +[% ELSE %] + [% IF old_flag && old_flag.status == '?' %] + [% to_identity = old_flag.setter.identity _ "'s request for" %] + [% END %] + [% subject_status = statuses.$action %] +[% END %] +From: [% Param('mailfrom') %] +To: [% to %] +Subject: [% flagtype_name %] [%+ subject_status %]: [[% terms.Bug %] [%+ bug.bug_id %]] [% bug.short_desc %] +[%- IF attachment %] : + [Attachment [% attachment.id %]] [% attachment.description %][% END %] +X-Bugzilla-Type: request +[%+ threadingmarker %] + +[%+ USE wrap -%] +[%- FILTER bullet = wrap(80) -%] + +[% IF on_behalf_of %] +[% user.identity %] has reassigned [% flag.setter.identity %]'s request for [% flagtype_name %] +[% to_identity %]: +[% ELSE %] +[% user.identity %] has [% statuses.$action %] [%+ to_identity %] [%+ flagtype_name %]: +[% END %] + +[% terms.Bug %] [%+ bugidsummary %] +[% END %] +[%+ urlbase %]show_bug.cgi?id=[% bug.bug_id %] +[% IF attachment %] + +[% FILTER bullet = wrap(80) %] +Attachment [% attidsummary %] +[%- END %] +[%+ urlbase %]attachment.cgi?id=[% attachment.id %]&action=edit +[%- END %] +[%- FILTER bullet = wrap(80) %] + +[% USE Bugzilla %] +[%-# .defined is necessary to avoid a taint issue in Perl < 5.10.1, see bug 509794. %] +[% IF Bugzilla.cgi.param("comment").defined && Bugzilla.cgi.param("comment").length > 0 %] +------- Additional Comments from [% user.identity %] +[%+ Bugzilla.cgi.param("comment") %] +[% END %] + +[%- END %] diff --git a/template/en/default/request/queue.html.tmpl b/template/en/default/request/queue.html.tmpl new file mode 100644 index 0000000..471f9b9 --- /dev/null +++ b/template/en/default/request/queue.html.tmpl @@ -0,0 +1,248 @@ +[%# 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): Myk Melez <myk@mozilla.org> + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% USE Bugzilla %] +[% cgi = Bugzilla.cgi %] + +[% PROCESS global/header.html.tmpl + title="Request Queue" + style = " + table.requests th { text-align: left; } + table#filtering th { text-align: right; } + " + onload="var f = document.request_form; selectProduct(f.product, f.component, null, null, 'Any');" + javascript_urls=["js/productform.js"] +%] + +<script type="text/javascript"> + var useclassification = false; // No classification level in use + var first_load = true; // Is this the first time we load the page? + var last_sel = []; // Caches last selection + var cpts = new Array(); + [% n = 1 %] + [% IF Param('useclassification') %] + [% FOREACH clas = user.get_selectable_classifications %] + [% FOREACH prod = user.get_selectable_products(clas.id) %] + [%+ PROCESS js_comp %] + [% END %] + [% END %] + [% ELSE %] + [% FOREACH prod = user.get_selectable_products %] + [%+ PROCESS js_comp %] + [% END %] + [% END %] +</script> + +[% BLOCK js_comp %] + cpts['[% n %]'] = [ + [%- FOREACH comp = prod.components %]'[% comp.name FILTER js %]'[% ", " UNLESS loop.last %] [%- END -%]]; + [% n = n+1 %] +[% END %] + +<p> +When you are logged in, only requests made by you or addressed to you +are shown by default. You can change the criteria using the form below. +When you are logged out, all pending requests that are not restricted +to some group are shown by default. +</p> + +<form id="request_form" name="request_form" action="request.cgi" method="get"> + <input type="hidden" name="action" value="queue"> + + <table id="filtering"> + <tr> + <th>Requester:</th> + <td><input type="text" name="requester" value="[% cgi.param('requester') FILTER html %]" size="20" + title="Requester's email address"></td> + <th>Product:</th> + <td> + <select name="product" onchange="selectProduct(this, this.form.component, null, null, 'Any');"> + <option value="">Any</option> + [% IF Param('useclassification') %] + [% FOREACH c = user.get_selectable_classifications %] + <optgroup label="[% c.name FILTER html %]"> + [% FOREACH p = user.get_selectable_products(c.id) %] + <option value="[% p.name FILTER html %]" + [% " selected" IF cgi.param('product') == p.name %]> + [% p.name FILTER html %] + </option> + [% END %] + </optgroup> + [% END %] + [% ELSE %] + [% FOREACH p = user.get_selectable_products %] + <option value="[% p.name FILTER html %]" + [% " selected" IF cgi.param('product') == p.name %]> + [% p.name FILTER html %] + </option> + [% END %] + [% END %] + </select> + </td> + <th>Flag:</th> + <td> + [% PROCESS "global/select-menu.html.tmpl" + name="type" + options=types + default=cgi.param('type') %] + </td> + + [%# We could let people see a "queue" of non-pending requests. %] + <!-- + <th>Status:</th> + <td> + [%# PROCESS "global/select-menu.html.tmpl" + name="status" + options=["all", "?", "+-", "+", "-"] + default=cgi.param('status') %] + </td> + --> + + </tr> + <tr> + <th>Requestee:</th> + <td><input type="text" name="requestee" value="[% cgi.param('requestee') FILTER html %]" size="20" + title="Requestee's email address or "-" (hyphen) for requests with no requestee"></td> + <th>Component:</th> + <td> + <select name="component"> + <option value="">Any</option> + [% FOREACH comp = components %] + <option value="[% comp FILTER html %]" [% "selected" IF cgi.param('component') == comp %]> + [% comp FILTER html %]</option> + [% END %] + </select> + </td> + <th>Group By:</th> + <td> + [% groups = { + "Requester" => 'requester' , + "Requestee" => 'requestee', + "Flag" => 'type' , + "Product/Component" => 'category' + } %] + [% PROCESS "global/select-menu.html.tmpl" name="group" options=groups default=cgi.param('group') %] + </td> + <td><input type="submit" id="filter" value="Filter"></td> + </tr> + </table> + +</form> + +[% column_headers = { + "type" => "Flag" , + "status" => "Status" , + "bug" => "$terms.Bug" , + "attachment" => "Attachment" , + "requester" => "Requester" , + "requestee" => "Requestee" , + "created" => "Created" , + "category" => "Product/Component" } %] + +[% DEFAULT display_columns = ["requester", "requestee", "type", "bug", "attachment", "created"] + group_field = "Requestee" + group_value = "" +%] + +[% IF debug %] + <p>[% query FILTER html %]</p> +[% END %] + +[% IF requests.size == 0 %] + <p> + No requests. + </p> +[% ELSE %] + [% FOREACH request = requests %] + [% IF request.$group_field != group_value || loop.first %] + [% group_value = request.$group_field %] + [% PROCESS display_buglist UNLESS loop.first %] + [% PROCESS start_new_table %] + [% END %] + [% buglist.${request.bug_id} = 1 %] + <tr> + [% FOREACH column = display_columns %] + [% NEXT IF column == group_field || excluded_columns.contains(column) %] + <td>[% PROCESS "display_$column" %]</td> + [% END %] + </tr> + [% END %] + [% PROCESS display_buglist %] +[% END %] + +[% PROCESS global/footer.html.tmpl %] + +[% BLOCK start_new_table %] + [% buglist = {} %] + + <h3>[% column_headers.$group_field %]: + [%+ (request.$group_field || "None") FILTER email FILTER html %]</h3> + <table class="requests" cellspacing="0" cellpadding="4" border="1"> + <tr> + [% FOREACH column = display_columns %] + [% NEXT IF column == group_field || excluded_columns.contains(column) %] + <th>[% column_headers.$column %]</th> + [% END %] + </tr> +[% END %] + +[% BLOCK display_type %] + [% request.type FILTER html %] +[% END %] + +[% BLOCK display_status %] + [% request.status %] +[% END %] + +[% BLOCK display_bug %] + <a href="show_bug.cgi?id=[% request.bug_id %]"> + [% request.bug_id %]: [%+ request.bug_summary FILTER html %]</a> +[% END %] + +[% BLOCK display_attachment %] + [% IF request.attach_id %] + <a href="attachment.cgi?id=[% request.attach_id %]&action=edit"> + [% request.attach_id %]: [%+ request.attach_summary FILTER html %]</a> + [% ELSE %] + N/A + [% END %] +[% END %] + +[% BLOCK display_requestee %] + [% request.requestee FILTER email FILTER html %] +[% END %] + +[% BLOCK display_requester %] + [% request.requester FILTER email FILTER html %] +[% END %] + +[% BLOCK display_created %] + [% request.created FILTER time %] +[% END %] + +[% BLOCK display_buglist %] + </table> + [% NEXT UNLESS buglist.keys.size %] + <a href="buglist.cgi?bug_id= + [%- buglist.keys.nsort.join(",") FILTER html %]">(view as + [%+ terms.bug %] list)</a> +[% END %] diff --git a/template/en/default/search/boolean-charts.html.tmpl b/template/en/default/search/boolean-charts.html.tmpl new file mode 100644 index 0000000..1b79a45 --- /dev/null +++ b/template/en/default/search/boolean-charts.html.tmpl @@ -0,0 +1,136 @@ +[%# 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> + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% types = [ + "noop", + "equals", + "notequals", + "anyexact", + "substring", + "casesubstring", + "notsubstring", + "anywordssubstr", + "allwordssubstr", + "nowordssubstr", + "regexp", + "notregexp", + "lessthan", + "greaterthan", + "anywords", + "allwords", + "nowords", + "changedbefore", + "changedafter", + "changedfrom", + "changedto", + "changedby", + "matches", + "notmatches", +] %] + + <p> + <strong> + <a name="chart">Advanced Searching Using Boolean Charts</a>: + </strong> + </p> + +[%# Whoever wrote the original version of boolean charts had a seriously twisted mind %] + +[% jsmagic = "onclick=\"this.form.action='query.cgi#chart'; this.form.method='POST'; return 1;\"" %] + +[% FOREACH chart = default.charts %] + [% chartnum = loop.count - 1 %] + <table> + <tr> + <td> + <input type="checkbox" id="negate[% chartnum FILTER html %]" + name="negate[% chartnum FILTER html %]" value="1" + [%+ "checked" IF chart.negate %]> + <label for="negate[% chartnum FILTER html %]"> + Not (negate this whole chart) + </label> + </td> + </tr> + [% FOREACH row = chart.rows %] + [% rownum = loop.count - 1 %] + <tr> + [% FOREACH col = row %] + [% colnum = loop.count - 1 %] + <td> + <select name="[% "field${chartnum}-${rownum}-${colnum}" %]"> + [% FOREACH field = fields %] + <option value="[% field.name %]" [% "selected" IF field.name == col.field %]> + [% field_descs.${field.name} || field.description FILTER html %] + </option> + [% END %] + </select> + + [% INCLUDE "search/type-select.html.tmpl" + name = "type${chartnum}-${rownum}-${colnum}", + types = types, selected = col.type %] + + <input name="[% "value${chartnum}-${rownum}-${colnum}" %]" + value="[% col.value FILTER html %]"> + </td> + + [% UNLESS loop.last %] + <td align="center"> + Or + </td> + </tr> + <tr> + [% ELSE %] + <td> + [% newor = colnum + 1 %] + <input type="submit" value="Or" [% jsmagic %] + name="cmd-add[% "${chartnum}-${rownum}-${newor}" %]" + id="cmd-add[% "${chartnum}-${rownum}-${newor}" %]"> + </td> + [% END %] + + [% END %] + </tr> + + [% UNLESS loop.last %] + <tr> + <td>And</td> + </tr> + [% ELSE %] + <tr> + <td> + [% newand = rownum + 1; newchart = chartnum + 1 %] + <input type="submit" value="And" [% jsmagic %] + name="cmd-add[% "${chartnum}-${newand}-0" %]" + id="cmd-add[% "${chartnum}-${newand}-0" %]"> + + <input type="submit" value="Add another boolean chart" [% jsmagic %] + name="cmd-add[% newchart %]-0-0" + id="cmd-add[% newchart %]-0-0"> + + </td> + </tr> + [% END %] + + [% END %] + </table> + <hr> +[% END %] diff --git a/template/en/default/search/form.html.tmpl b/template/en/default/search/form.html.tmpl new file mode 100644 index 0000000..2e2ae73 --- /dev/null +++ b/template/en/default/search/form.html.tmpl @@ -0,0 +1,643 @@ +[%# 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): Chris Lahey <clahey@ximian.com> [javascript fixes] + # Christian Reis <kiko@async.com.br> [javascript rewrite] + # Gervase Markham <gerv@gerv.net> + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +<script type="text/javascript"> + +var first_load = true; [%# is this the first time we load the page? %] +var last_sel = new Array(); [%# caches last selection %] + +[% IF Param('useclassification') %] +var useclassification = true; +var prods = new Array(); +[% ELSE %] +var useclassification = false; +[% END %] +var cpts = new Array(); +var vers = new Array(); +[% IF Param('usetargetmilestone') %] +var tms = new Array(); +[% END %] + +[%# Create an array of products, indexed by the classification #%] + +[% nclass = 0 %] +[% FOREACH c = classification %] + prods[[% nclass FILTER js %]] = [ + [% sep = '' %] + [%- FOREACH item = user.get_selectable_products(c.id) -%] + [%- IF item.components.size -%] + [%- sep FILTER js %]'[% item.name FILTER js %]' + [%- sep = ',' -%] + [%- END -%] + [%- END -%] ]; + [% nclass = nclass+1 %] +[% END %] + +[%# Create three arrays of components, versions and target milestones, indexed + # numerically according to the product they refer to. #%] + +[% n = 0 %] +[% FOREACH p = product %] + [% NEXT IF NOT p.components.size %] + [% IF Param('useclassification') %] + prods['[% p.name FILTER js %]'] = [% n %] + [% END %] + cpts[[% n %]] = [ + [%- FOREACH item = p.components %]'[% item.name FILTER js %]'[% ", " UNLESS loop.last %] [%- END -%] ]; + vers[[% n %]] = [ + [%- FOREACH item = p.versions -%]'[% item.name FILTER js %]'[% ", " UNLESS loop.last %] [%- END -%] ]; + [% IF Param('usetargetmilestone') %] + tms[[% n %]] = [ + [%- FOREACH item = p.milestones %]'[% item.name FILTER js %]'[% ", " UNLESS loop.last %] [%- END -%] ]; + [% END %] + [% n = n+1 %] +[% END %] + +/* + * doOnSelectProduct determines which selection should get updated + * + * - selectmode = 0 - init + * selectmode = 1 - classification selected + * selectmode = 2 - product selected + * + * globals: + * queryform - string holding the name of the selection form + */ +function doOnSelectProduct(selectmode) { + var f = document.forms[queryform]; + var milestone = (typeof(f.target_milestone) == "undefined" ? + null : f.target_milestone); + if (selectmode == 0) { + // If there is no classification selected, give us a chance to fill + // the select fields with values from the possibly selected product. + if (useclassification && f.classification.selectedIndex > -1) { + selectClassification(f.classification, f.product, f.component, f.version, milestone); + } else { + selectProduct(f.product, f.component, f.version, milestone, null); + } + } else if (selectmode == 1) { + selectClassification(f.classification, f.product, f.component, f.version, milestone); + } else { + selectProduct(f.product, f.component, f.version, milestone, null); + } +} + +</script> + +[% query_types = [ + "allwordssubstr", + "anywordssubstr", + "substring", + "casesubstring", + "allwords", + "anywords", + "regexp", + "notregexp", +] %] + +[%# If we resubmit to ourselves, we need to know if we are using a format. %] +[% thisformat = query_format != '' ? query_format : format %] +<input type="hidden" name="query_format" value="[% thisformat FILTER html %]"> + +[%# *** Summary *** %] + +<table> + <tr> + <th align="right"> + <label for="short_desc" accesskey="s"><u>S</u>ummary</label>: + </th> + <td> + [% INCLUDE "search/type-select.html.tmpl" + name = "short_desc_type", + types = query_types, selected = default.short_desc_type.0 %] + </td> + <td> + <input name="short_desc" id="short_desc" size="40" + value="[% default.short_desc.0 FILTER html %]"> + <script type="text/javascript"> <!-- + document.forms[queryform].short_desc.focus(); + // --> + </script> + </td> + <td> + [% IF button_name %] + <input type="submit" id="[% button_name FILTER css_class_quote %]_top" + value="[% button_name FILTER html %]"> + [% END %] + </td> + </tr> + +[%# *** Classification Product Component Version Target *** %] + <tr> + <td colspan="4"> + <table> + <tr> + [% Hook.process('before_selects_top') %] + [% IF Param('useclassification') %] + <td valign="top"> + <table> + <tr valign="bottom"> + <th align="left"> + <label for="classification">Classification</label>: + </th> + </tr> + <tr valign="top"> + <td align="left"> + <select name="classification" multiple="multiple" size="5" id="classification" + onchange="doOnSelectProduct(1);"> + [% FOREACH cat = classification %] + <option value="[% cat.name FILTER html %]" + [% " selected" IF lsearch(default.classification, cat.name) != -1 %]> + [% cat.name FILTER html %] + </option> + [% END %] + </select> + </td> + </tr> + </table> + </td> + [% END %] + <td valign="top"> + <table> + <tr valign="bottom"> + <th align="left"> + <label for="product" accesskey="p"><u>P</u>roduct</label>: + </th> + </tr> + <tr valign="top"> + [%# Can't use the select block here because of the onChange %] + <td align="left"> + <select name="product" multiple="multiple" size="5" id="product" + onchange="doOnSelectProduct(2);"> + [% FOREACH p = product %] + [% IF p.components.size %] + <option value="[% p.name FILTER html %]" + [% " selected" IF lsearch(default.product, p.name) != -1 %]> + [% p.name FILTER html %]</option> + [% END %] + [% END %] + </select> + </td> + </tr> + </table> + </td> + <td valign="top"> + <table> + <tr valign="bottom"> + <th align="left"> + <label for="component" accesskey="m"><a href="describecomponents.cgi">Co<u>m</u>ponent</a></label>: + </th> + </tr> + <tr valign="top"> + [%# Can't use the select block here because 'component' is a toolkit + reserved word - we use 'component_' instead. %] + <td align="left"> + <select name="component" id="component" + multiple="multiple" size="5"> + [% FOREACH c = component_ %] + <option value="[% c FILTER html %]" + [% " selected" IF lsearch(default.component, c) != -1 %]> + [% c FILTER html %]</option> + [% END %] + </select> + </td> + </tr> + </table> + </td> + <td valign="top"> + <table> + <tr valign="bottom"> + <th align="left"> + <label for="version">Version</label>: + </th> + </tr> + <tr valign="top"> + [% PROCESS select sel = { name => 'version', + size => 5 } %] + </tr> + </table> + </td> + [% IF Param('usetargetmilestone') %] + <td valign="top"> + <table> + <tr valign="bottom"> + <th align="left"> + <label for="target_milestone">Target</label>: + </th> + </tr> + <tr valign="top"> + [% PROCESS select sel = { name => 'target_milestone', + size => 5 } %] + </tr> + </table> + </td> + [% END %] + [% Hook.process('after_selects_top') %] + </tr> + </table> + </td> + </tr> + +[%# *** Comment URL Whiteboard Keywords *** %] + + [% SET freetext_fields = [ + { name => "longdesc", description => "A <u>C</u>omment", + accesskey => 'c' }, + { name => "bug_file_loc", description => "The <u>U</u>RL", + accesskey => 'u' }, + { name => "status_whiteboard", description => "<u>W</u>hiteboard", + accesskey => 'w' } + ] %] + + [% Hook.process('before_freetext_fields') %] + [% FOREACH field = freetext_fields %] + [% NEXT IF field.name == 'status_whiteboard' + AND NOT Param('usestatuswhiteboard') + %] + <tr> + <th align="right"> + <label for="[% field.name %]" + accesskey="[% field.accesskey %]">[% field.description %]</label>: + </th> + <td> + [% type = field.name _ "_type" %] + [% INCLUDE "search/type-select.html.tmpl" + name = type, + types = query_types, selected = default.$type.0 %] + </td> + <td><input name="[% field.name %]" id="[% field.name %]" size="40" + value="[% default.${field.name}.0 FILTER html %]"> + </td> + <td></td> + </tr> + [% END %] + + [% IF use_keywords %] + <tr> + <th align="right"> + <label for="keywords" accesskey="k"><a href="describekeywords.cgi"><u>K</u>eywords</a></label>: + </th> + <td> + [% INCLUDE "search/type-select.html.tmpl" + name = "keywords_type", + types = ['allwords', 'anywords', 'nowords', 'regexp', 'notregexp'], + selected = default.keywords_type.0 %] + </td> + <td> + <input name="keywords" id="keywords" size="40" + value="[% default.keywords.0 FILTER html %]"> + </td> + </tr> + [% END %] + + [%# Deadline %] + [% IF user.is_timetracker %] + <tr> + <th align="right"> + <label for="deadlinefrom" accesskey="l">Dead<u>l</u>ine</label>: + </th> + <td> + from <input name="deadlinefrom" id="deadlinefrom" size="10" maxlength="10" + value="[% default.deadlinefrom.0 FILTER html %]"> + to <input name="deadlineto" size="10" maxlength="10" + value="[% default.deadlineto.0 FILTER html %]"> + </td> + <td> + <small>(YYYY-MM-DD or relative dates)</small> + </td> + </tr> + [% END %] + + [% Hook.process('after_freetext_fields') %] + +</table> + +<hr> + +[%# *** Status Resolution Severity Priority Hardware OS *** %] + +<table> + <tr> + [% Hook.process('before_selects_bottom') %] + <td> + <table> + <tr> + <th align="left"> + <label for="bug_status" accesskey="a">St<u>a</u>tus</label>: + </th> + </tr> + <tr valign="top"> + [% PROCESS select sel = { name => 'bug_status', + size => 7 } %] + </tr> + </table> + </td> + <td> + <table> + <tr> + <th align="left"> + <label for="resolution" accesskey="r"><u>R</u>esolution</label>: + </th> + </tr> + <tr valign="top"> + [% PROCESS select sel = { name => 'resolution', + size => 7 } %] + </tr> + </table> + </td> + <td> + <table> + <tr> + <th align="left"> + <label for="bug_severity">Severity</label>: + </th> + </tr> + <tr valign="top"> + [% PROCESS select sel = { name => 'bug_severity', + size => 7 }%] + </tr> + </table> + </td> + <td> + <table> + <tr> + <th align="left"> + <label for="priority" accesskey="i">Pr<u>i</u>ority</label>: + </th> + </tr> + <tr valign="top"> + [% PROCESS select sel = { name => 'priority', + size => 7 } %] + </tr> + </table> + </td> + <td> + <table> + <tr> + <th align="left"> + <label for="rep_platform" accesskey="h"><u>H</u>ardware</label>: + </th> + </tr> + <tr valign="top"> + [% PROCESS select sel = { name => 'rep_platform', + size => 7 } %] + </tr> + </table> + </td> + <td> + <table> + <tr> + <th align="left"> + <label for="op_sys" accesskey="o"><u>O</u>S</label>: + </th> + </tr> + <tr valign="top"> + [% PROCESS select sel = { name => 'op_sys', + size => 7 } %] + </tr> + </table> + </td> + [% Hook.process('after_selects_bottom') %] + </tr> +</table> + +[%# *** Email Numbering Votes *** %] + +<table> + <tr> + <td> + <fieldset> + <legend> + <strong> + [% IF Param('usevotes') %] + Email Addresses, [% terms.Bug %] Numbers, and Votes + [% ELSE %] + Email Addresses and [% terms.Bug %] Numbers + [% END %] + </strong> + </legend> + + +<table> + <tr> + [% FOREACH n = [1, 2] %] + <td> + + +<table cellspacing="0" cellpadding="0"> + <tr> + <td> + Any of: + </td> + </tr> + <tr> + <td> + <input type="checkbox" name="emailassigned_to[% n %]" + id="emailassigned_to[% n %]" value="1" + [% " checked" IF default.emailassigned_to.$n %]> + <label for="emailassigned_to[% n %]"> + the [% terms.bug %] assignee + </label> + </td> + </tr> + <tr> + <td> + <input type="checkbox" name="emailreporter[% n %]" + id="emailreporter[% n %]" value="1" + [% " checked" IF default.emailreporter.$n %]> + <label for="emailreporter[% n %]"> + the reporter + </label> + </td> + </tr> + [% IF Param('useqacontact') %] + <tr> + <td> + <input type="checkbox" name="emailqa_contact[% n %]" + id="emailqa_contact[% n %]" value="1" + [% " checked" IF default.emailqa_contact.$n %]> + <label for="emailqa_contact[% n %]"> + the QA contact + </label> + </td> + </tr> + [% END %] + <tr> + <td> + <input type="checkbox" name="emailcc[% n %]" + id="emailcc[% n %]" value="1" + [% " checked" IF default.emailcc.$n %]> + <label for="emailcc[% n %]"> + a CC list member + </label> + </td> + </tr> + <tr> + <td> + <input type="checkbox" name="emaillongdesc[% n %]" + id="emaillongdesc[% n %]" value="1" + [% " checked" IF default.emaillongdesc.$n %]> + <label for="emaillongdesc[% n %]"> + a commenter + </label> + </td> + </tr> + <tr> + <td> + <select name="emailtype[% n %]"> + [% FOREACH qv = [ + { name => "substring", description => "contains" }, + { name => "exact", description => "is" }, + { name => "notequals", description => "is not" }, + { name => "regexp", description => "matches regexp" }, + { name => "notregexp", description => "doesn't match regexp" } ] %] + + <option value="[% qv.name %]" + [% " selected" IF default.emailtype.$n == qv.name %]>[% qv.description %]</option> + [% END %] + </select> + </td> + </tr> + <tr> + <td> + <input name="email[% n %]" size="25" value="[% default.email.$n FILTER html %]"> + </td> + </tr> +</table> + + + </td> + [% END %] + </tr> +</table> +<hr> +<table> + <tr> + <td> + <select name="bug_id_type"> + <option value="anyexact"[% " selected" IF default.bug_id_type.0 == "anyexact" %]>Only include</option> + <option value="nowords"[% " selected" IF default.bug_id_type.0 == "nowords" %]>Exclude</option> + </select> + <label for="bug_id">[% terms.bugs %] numbered</label>: + </td> + <td> + <input type="text" name="bug_id" id="bug_id" + value="[% default.bug_id.0 FILTER html %]" size="20"> + </td> + </tr> + <tr> + <td></td> + <td>(comma-separated list)</td> + </tr> + [% IF Param('usevotes') %] + <tr> + <td align="right"> + <label for="votes">Only [% terms.bugs %] with at least</label>: + </td> + <td> + <input name="votes" id="votes" size="3" + value="[% default.votes.0 FILTER html %]"> + votes + </td> + </tr> + [% END %] +</table> + + + </fieldset> + </td> + +[%# *** Bug Changes *** %] + + <td valign="top"> + <fieldset> + <legend><strong>[% terms.Bug %] Changes</strong></legend> + + +<dl class="bug_changes"> + <dt> + <label for="chfieldfrom">Only [% terms.bugs %] changed between</label>: + </dt> + <dd> + <input name="chfieldfrom" id="chfieldfrom" + size="10" value="[% default.chfieldfrom.0 FILTER html %]"> + and <input name="chfieldto" size="10" value="[% default.chfieldto.0 FILTER html %]"> + <br>(YYYY-MM-DD or relative dates) + </dd> + <dt> + <label for="chfield">where one or more of the following changed</label>: + </dt> + <dd> + [%# Create array, so we can sort it by description #%] + [% chfields = [] %] + [% FOREACH field = chfield %] + [% chfields.push({value => field, desc => (field_descs.$field || field) }) %] + [% END %] + + <select name="chfield" id="chfield" multiple="multiple" size="4"> + [% FOREACH field = chfields.sort('desc') %] + <option value="[% field.value FILTER html %]" + [% " selected" IF lsearch(default.chfield, field.value) != -1 %]> + [% field.desc FILTER html %]</option> + [% END %] + </select> + </dd> + <dt>and <label for="chfieldvalue">the new value was</label>:</dt> + <dd> + <input name="chfieldvalue" id="chfieldvalue" + size="20" value="[% default.chfieldvalue.0 FILTER html %]"> + </dd> +</dl> + + </fieldset> + </td> + </tr> +</table> + +[%############################################################################%] +[%# Block for SELECT fields #%] +[%############################################################################%] + +[% BLOCK select %] + <td align="left"> + <select name="[% sel.name %]" id="[% sel.name %]" + multiple="multiple" size="[% sel.size %]"> + [% FOREACH value = ${sel.name} %] + [% IF value.id %] + [%# This only applies for Resolution really %] + [% v = value.name OR '---' -%] + <option value="[% v FILTER html %]" + [% " selected" IF lsearch(default.${sel.name}, v) != -1 %]> + [% display_value(sel.name, value.name) FILTER html %] + </option> + [% ELSE %] + <option value="[% value OR '---' FILTER html %]" + [% " selected" IF lsearch(default.${sel.name}, value) != -1 %]> + [% display_value(sel.name, value) FILTER html %] + </option> + [% END %] + [% END %] + </select> + </td> +[% END %] diff --git a/template/en/default/search/knob.html.tmpl b/template/en/default/search/knob.html.tmpl new file mode 100644 index 0000000..17ff63a --- /dev/null +++ b/template/en/default/search/knob.html.tmpl @@ -0,0 +1,85 @@ +[%# 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> + # Tobias Burnus <burnus@net-b.de> + # Jouni Heikniemi <jouni@heikniemi.net> + #%] + +[%# INTERFACE: + # (incomplete!) + # ... + # known_name: string. Possibly known stored name for the query being + # edited. This value is just passed through in a + # hidden field. + #%] + + +[% PROCESS global/variables.none.tmpl %] + +[%# This is not necessary for English templates, but useful for localizers. %] +[% ordersdesc = { + "Reuse same sort as last time" => "Reuse same sort as last time", + "Bug Number" => "$terms.Bug Number", + "Importance" => "Importance", + "Assignee" => "Assignee", + "Last Changed" => "Last Changed" } %] + +<input type="hidden" name="cmdtype" value="doit"> + +<p> + <label for="order">Sort results by</label>: + <select name="order" id="order"> + [% FOREACH order = orders %] + <option value="[% order FILTER html %]" + [% " selected" IF default.order.0 == order %]> + [% ordersdesc.$order FILTER html %]</option> + [% END %] + </select> +</p> + +<p> + <input type="submit" id="[% button_name FILTER html %]" + value="[% button_name FILTER html %]"> + [% IF known_name %] + [%# We store known_name in case the user add a boolean chart. %] + <input type="hidden" name="known_name" value="[% known_name FILTER html %]"> + + [%# The name of the existing query will be passed to buglist.cgi. %] + <input type="hidden" name="query_based_on" value="[% known_name FILTER html %]"> + [% END %] + [%# Preserve any custom column list that might be set. %] + [% IF columnlist %] + <input type="hidden" name="columnlist" value="[% columnlist FILTER html %]"> + [% END %] +</p> + +<p> + + <input type="checkbox" id="remasdefault" + name="remtype" value="asdefault"> + <label for="remasdefault"> + and remember these as my default search options + </label> +</p> + +[% IF userdefaultquery %] + <p> + <a href="query.cgi?nukedefaultquery=1"> + Set my default search back to the system default</a>. + </p> +[% END %] diff --git a/template/en/default/search/search-advanced.html.tmpl b/template/en/default/search/search-advanced.html.tmpl new file mode 100644 index 0000000..cb0519a --- /dev/null +++ b/template/en/default/search/search-advanced.html.tmpl @@ -0,0 +1,82 @@ +[%# 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: + # This template has no interface. However, to use it, you need to fulfill + # the interfaces of search/form.html.tmpl, search/knob.html.tmpl and + # search/boolean-charts.html.tmpl. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% USE Bugzilla %] +[% cgi = Bugzilla.cgi %] + + +[% js_data = BLOCK %] +var queryform = "queryform" +[% END %] + +[% PROCESS global/header.html.tmpl + title = "Search for $terms.bugs" + onload = "doOnSelectProduct(0); enableHelp();" + javascript = js_data + javascript_urls = [ "js/productform.js" "js/util.js" "js/help.js" ] + style_urls = [ "skins/standard/help.css" ] + doc_section = "query.html" + style = "dl.bug_changes dt { + margin-top: 15px; + }" +%] + +[% WRAPPER search/tabs.html.tmpl %] + +[% button_name = "Search" %] + +[%# The decent help requires Javascript %] +<script type="text/javascript"> <!-- +[% IF NOT cgi.param("help") %] + document.write("<p><a href='query.cgi?help=1&format=advanced'>Give me some help<\/a> (reloads page).<\/p>"); +[% ELSE %] + [% PROCESS "search/search-help.html.tmpl" %] + if (generateHelp()) + document.write("<p>For help, mouse over the page elements.<\/p>"); + else + document.write("<p>Help initialization failed, no help available.<\/p>"); +[% END %] +// --> +</script> + +<form method="post" action="buglist.cgi" name="queryform"> + +[% PROCESS search/form.html.tmpl %] + +[% PROCESS search/knob.html.tmpl %] + +<hr> + +[% PROCESS "search/boolean-charts.html.tmpl" %] + +</form> + + +[% END %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/search/search-create-series.html.tmpl b/template/en/default/search/search-create-series.html.tmpl new file mode 100644 index 0000000..da1011e --- /dev/null +++ b/template/en/default/search/search-create-series.html.tmpl @@ -0,0 +1,68 @@ +[%# 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: + # This template has no interface. However, to use it, you need to fulfill + # the interfaces of search/form.html.tmpl, reports/series.html.tmpl and + # search/boolean-charts.html.tmpl. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% js_data = BLOCK %] + var queryform = "chartform"; +[% END %] + +[% PROCESS global/header.html.tmpl + title = "Create New Data Set" + onload = "doOnSelectProduct(0);" + javascript = js_data + javascript_urls = [ "js/productform.js" ] + doc_section = "reporting.html#charts-new-series" +%] + +<form method="get" action="chart.cgi" name="chartform"> + +[% PROCESS search/form.html.tmpl %] + +<p> + <input type="submit" name="action-search" value="Run Search"> + to see which [% terms.bugs %] would be included in this data set. +</p> + +<h3>Data Set Parameters</h3> + +[% PROCESS reports/series.html.tmpl + button_name = "Create Data Set" %] + <input type="hidden" name="action" value="create"> + +<script type="text/javascript"> + document.chartform.category[0].selected = true; + catSelected(); + checkNewState(); +</script> + +<hr> + +[% PROCESS "search/boolean-charts.html.tmpl" %] + +</form> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/search/search-help.html.tmpl b/template/en/default/search/search-help.html.tmpl new file mode 100644 index 0000000..12e82ba --- /dev/null +++ b/template/en/default/search/search-help.html.tmpl @@ -0,0 +1,107 @@ +[%# 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> + #%] + +[% help_html = [ +{ id => "short_desc_type", + html => "The type of summary search you would like" }, +{ id => "short_desc", + html => "The $terms.bug summary is a short sentence which succinctly + describes <br> what the $terms.bug is about." }, +{ id => "classification", + html => "$terms.Bugs are categorised into Classifications, Products and Components. classifications is the<br> + top-level categorisation." }, +{ id => "product", + html => Param('useclassification') ? + "$terms.Bugs are categorised into Products and Components. Select a Classification to narrow down this list" : + "$terms.Bugs are categorised into Products and Components. Product is + the<br>top-level categorisation." }, +{ id => "component", + html => "Components are second-level categories; each belongs to a<br> + particular Product. Select a Product to narrow down this list." }, +{ id => "version", + html => "The version field defines the version of the software the + $terms.bug<br>was found in." }, +{ id => "target_milestone", + html => "The target_milestone field is used to define when the engineer<br> + the $terms.bug is assigned to expects to fix it." }, +{ id => "longdesc", + html => "$terms.Bugs have comments added to them by $terms.Bugzilla users. + You can<br>search for some text in those comments." }, +{ id => "longdesc_type", + html => "The type of comment search you would like" }, +{ id => "bug_file_loc", + html => "$terms.Bugs can have a URL associated with them - for example, a + pointer<br>to a web site where the problem is seen." }, +{ id => "bug_file_loc_type", + html => "The type of URL search you would like" }, +{ id => "status_whiteboard", + html => "Each $terms.bug has a free-form single line text entry box for + adding<br>tags and status information." }, +{ id => "status_whiteboard_type", + html => "The type of whiteboard search you would like" }, +{ id => "keywords", + html => "You can add keywords from a defined list to $terms.bugs, in order + to<br>tag and group them." }, +{ id => "keywords_type", + html => "The type of keyword search you would like" }, +{ id => "bug_status", + html => "$terms.Abug may be in any of a number of states." }, +{ id => "resolution", + html => "If $terms.abug is in a resolved state, then one of these reasons + will<br>be given for its resolution." }, +{ id => "bug_severity", + html => "How severe the $terms.bug is, or whether it's an enhancement." }, +{ id => "priority", + html => "Engineers prioritize their $terms.bugs using this field." }, +{ id => "rep_platform", + html => "The hardware platform the $terms.bug was observed on." }, +{ id => "op_sys", + html => "The operating system the $terms.bug was observed on." }, +{ id => "email1", + html => "Every $terms.bug has people associated with it in different + roles.<br>Here, you can search on what people are in what role." }, +{ id => "email2", + html => "Every $terms.bug has people associated with it in different + roles.<br>Here, you can search on what people are in what role." }, +{ id => "bug_id", + html => "You can limit your search to a specific set of $terms.bugs ." }, +{ id => "votes", + html => "Some $terms.bugs can be voted for, and you can limit your search to + $terms.bugs<br>with more than a certain number of votes." }, +{ id => "chfield", + html => "You can search for specific types of change - this field define <br> + which field you are interested in changes for." }, +{ id => "chfieldfrom", + html => "Specify the start and end dates either in YYYY-MM-DD format<br> + (optionally followed by HH:mm, in 24 hour clock), or in relative<br> + dates such as 1h, 2d, 3w, 4m, 5y, which respectively mean one hour,<br> + two days, three weeks, four months, or five years ago. 0d is last<br> + midnight, and 0h, 0w, 0m, 0y is the beginning of this hour, week,<br> + month, or year." }, +{ id => "chfieldto", + html => "Specify the start and end dates either in YYYY-MM-DD format<br> + (optionally followed by HH:mm, in 24 hour clock), or in relative<br> + dates such as 1h, 2d, 3w, 4m, 5y, which respectively mean one hour,<br> + two days, three weeks, four months, or five years ago. 0d is last<br> + midnight, and 0h, 0w, 0m, 0y is the beginning of this hour, week,<br> + month, or year." }, +{ id => "chfieldvalue", + html => "The value the field defined above changed to during that time." }, +] %] diff --git a/template/en/default/search/search-plugin.xml.tmpl b/template/en/default/search/search-plugin.xml.tmpl new file mode 100644 index 0000000..8564dca --- /dev/null +++ b/template/en/default/search/search-plugin.xml.tmpl @@ -0,0 +1,28 @@ +[%# 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): Frédéric Buclin <LpSolit@gmail.com> + # + #%] +[% PROCESS global/variables.none.tmpl %] +<?xml version="1.0" encoding="UTF-8"?> +<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"> +<ShortName>[% terms.Bugzilla %]</ShortName> +<Description>[% terms.Bugzilla %] Quick Search</Description> +<InputEncoding>UTF-8</InputEncoding> +[% IF favicon %] + <Image width="16" height="16">data:image/x-icon;base64,[% favicon FILTER base64 %]</Image> +[% ELSE %] + <Image width="16" height="16">data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABGdBTUEAAK%2FINwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAALBSURBVHjaYnxckcEAA3%2F%2B%2FT%2F17LUcH%2Fevf%2F8U%2BHmYGBkZMABAALEgc%2B68%2F3T227cf2tJKKhJLt59n%2FfmbnYnZV1KEhYkJrgYggBghNrz78fPIi3d8uvKBIdb%2FOaWPnzitLc97%2Bc5rFXnhnVO3%2BslLwjUABBDIhnsfPl%2Fj53VO91FX4Gfgkjxw%2Fd%2F6Q49%2FWStqyAj%2B%2B88gZqn%2B9u5rYU52iAaAAGL69%2F%2F%2F2d9%2FYiMclGT4fv76%2BZ9DbO%2FeA39%2BfJHVcvj5l%2Bnh03e%2FWThOvnwLtwEgAAAxAM7%2FBPj8%2FRYkHQYHAf3%2F%2Fv%2F%2B%2Fv8BAVNTUPX18yorLNHE2S8mB%2FT2%2Bq7a4dvu8iUSDgAAAAKICRgUv3%2F8ZGKGeIvpz6eXBvq61lZWLMwMv%2F5zMP7%2FqSAjVFyZ%2FNvZftuT10DnAAQAMQDO%2FwQIBAPz5Or6%2Ff0CBQEAAgT99ubq38z2%2BwT18%2FAM%2F%2BkNDAv6%2FQMCAA1GVVrhMze5h4kCCORpkd9%2F3n74KiHO%2B%2BffX8b%2Ff7m%2BXWP985%2Bf5R%2BPLNdfoK%2F%2F%2Ffv39%2BePj2%2FkZYR0fe0BAgikQZGX%2B9b9FzLS%2FH%2F%2B%2FGVgYGRlZWNlA7nv7z9QuDP8%2B8nw%2FRXjn68Mv4Gu%2FAwQQCCni3FxPLn7nIGZGegfNhYmNjYWZnBMASOakZER6Eumf9%2FYGT4y%2FHx%2F%2BfBFgAAC2cDGzPT99WeGvwzvv%2Fx89vrr%2F39%2FJER4pcT5Gf4z%2FP37D2jtj9%2B%2FL918fmzrKSsWNoAAgiaN%2Fz9%2Fff%2F6S4CP8%2BWbz9vWHfv54aukpAAz0Og%2Ff%2F7%2F%2Bs36668cO3ugED9QJUAAQTUArf7%2F8x87D9vRjcejhPiZhAUYcACAAGI5%2FOHH9ddvXzAxmjz%2B8P8lw4fXn5l4eRlwA4AAYmaTkBFg%2FKvJwfbkwZuXN57y%2Fv%2F34stXGR4uRmxpGwgAAgwA4%2FkfrfCWvLQAAAAASUVORK5CYII%3D</Image> +[% END %] +<Url type="text/html" method="GET" template="[% urlbase FILTER xml %]buglist.cgi?quicksearch={searchTerms}"/> +</OpenSearchDescription> diff --git a/template/en/default/search/search-report-graph.html.tmpl b/template/en/default/search/search-report-graph.html.tmpl new file mode 100644 index 0000000..61dd3b5 --- /dev/null +++ b/template/en/default/search/search-report-graph.html.tmpl @@ -0,0 +1,141 @@ +[%# 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: + # This template has no interface. However, to use it, you need to fulfill + # the interfaces of the templates it contains. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% js_data = BLOCK %] +var queryform = "reportform" +[% END %] + +[% PROCESS global/header.html.tmpl + title = "Generate Graphical Report" + onload = "doOnSelectProduct(0); chartTypeChanged()" + javascript = js_data + javascript_urls = [ "js/productform.js" ] + doc_section = "reporting.html#reports" +%] + +[% PROCESS "search/search-report-select.html.tmpl" %] + +<p> + Choose one or more fields as your axes, and then refine your set of + [% terms.bugs %] using the rest of the form. +</p> + +<script type="text/javascript"><!-- + [%# The Y-axis fields are not used for pie charts %] + function chartTypeChanged() { + // format[2] is the pie chart radio button + if (document.reportform.format[2].checked == true) { + document.reportform.y_axis_field.disabled = true; + document.reportform.cumulate[0].disabled = true; + document.reportform.cumulate[1].disabled = true; + } else { + document.reportform.y_axis_field.disabled = false; + document.reportform.cumulate[0].disabled = false; + document.reportform.cumulate[1].disabled = false; + } + } +// --> +</script> + +[% button_name = "Generate Report" %] + +<form method="get" action="report.cgi" name="reportform"> + +<table align="center"> + <tr> + <td valign="middle"> + <b>Vertical Axis:</b><br> + <noscript><small>(not for pie charts)</small><br></noscript> + [% PROCESS select name = 'y_axis_field' %]<br> + <br> + <b>Plot Data Sets:</b><br> + <input type="radio" name="cumulate" value="0" + [% " checked" IF default.cumulate.0 != "1" %]> + Individually<br> + <input type="radio" name="cumulate" value="1" + [% " checked" IF default.cumulate.0 == "1" %]> + Stacked + </td> + <td width="150" height="150"> + <table border="1" width="100%" height="100%"> + <tr> + <td align="center" valign="middle"> + <b>Multiple Images:</b><br> + [% PROCESS select name = 'z_axis_field' %] + </td> + </tr> + </table> + </td> + <td rowspan="2"> + <b>Format:</b><br> + [% chart_formats = [ + { name => "line", description => "Line Graph" }, + { name => "bar", description => "Bar Chart" }, + { name => "pie", description => "Pie Chart" } ] %] + [% default.chart_format.0 = default.chart_format.0 || "bar" %] + + [% FOREACH chart_format = chart_formats %] + <input type="radio" name="format" + value="[% chart_format.name FILTER html %]" + onchange="chartTypeChanged()" + [% " checked" IF default.chart_format.0 == chart_format.name %]> + [% chart_format.description FILTER html %]<br> + [% END %] + </td> + </tr> + + <tr> + <td> + </td> + <td align="left"> + <b>Horizontal Axis:</b> + [% PROCESS select name = 'x_axis_field' %]<br> + <label for="x_labels_vertical"><b>Vertical labels:</b></label> + <input type="checkbox" name="x_labels_vertical" id="x_labels_vertical" + value="1" + [% " checked" IF default.x_labels_vertical.0 == "1" %]> + </td> + <td> + </td> + </tr> +</table> + +<hr> + +[% PROCESS search/form.html.tmpl %] + +<br> +<input type="submit" id="[% button_name FILTER css_class_quote %]" + value="[% button_name FILTER html %]"> +<input type="hidden" name="action" value="wrap"> +<hr> + +[% PROCESS "search/boolean-charts.html.tmpl" %] + +</form> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/search/search-report-select.html.tmpl b/template/en/default/search/search-report-select.html.tmpl new file mode 100644 index 0000000..de64787 --- /dev/null +++ b/template/en/default/search/search-report-select.html.tmpl @@ -0,0 +1,54 @@ +[%# 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: + # name: string. The name of the select block to output. + # default.$name.0: string. The default value for the block, if any. + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% BLOCK select %] + [% rep_fields = ["classification", "product", "component", "version", "rep_platform", + "op_sys", "bug_status", "resolution", "bug_severity", + "priority", "target_milestone", "assigned_to", + "reporter", "qa_contact", "votes" ] %] + + <select name="[% name FILTER html %]"> + <option value=""><none></option> + + [% FOREACH field = rep_fields %] + [% NEXT IF field == "classification" AND !Param('useclassification') %] + [% NEXT IF field == "target_milestone" AND !Param('usetargetmilestone') %] + [% NEXT IF field == "qa_contact" AND !Param('useqacontact') %] + [% NEXT IF field == "votes" AND !Param('usevotes') %] + <option value="[% field FILTER html %]" + [% " selected" IF default.$name.0 == field %]> + [% field_descs.$field || field FILTER html %]</option> + [% END %] + + [%# Single-select fields are also valid column names. %] + [% FOREACH field = custom_fields %] + <option value="[% field.name FILTER html %]" + [% " selected" IF default.$name.0 == field.name %]> + [% field.description FILTER html %]</option> + [% END %] + </select> +[% END %] diff --git a/template/en/default/search/search-report-table.html.tmpl b/template/en/default/search/search-report-table.html.tmpl new file mode 100644 index 0000000..55d62a1 --- /dev/null +++ b/template/en/default/search/search-report-table.html.tmpl @@ -0,0 +1,94 @@ +[%# 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: + # This template has no interface. However, to use it, you need to fulfill + # the interfaces of the templates it contains. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% js_data = BLOCK %] +var queryform = "reportform" +[% END %] + +[% PROCESS global/header.html.tmpl + title = "Generate Tabular Report" + onload = "doOnSelectProduct(0)" + javascript = js_data + javascript_urls = [ "js/productform.js" ] + doc_section = "reporting.html#reports" +%] + +[% PROCESS "search/search-report-select.html.tmpl" %] + +<p> + Choose one or more fields as your axes, and then refine your set of + [% terms.bugs %] using the rest of the form. +</p> + +[% button_name = "Generate Report" %] + +<form method="get" action="report.cgi" name="reportform"> + +<table align="center"> + <tr> + <td> + </td> + <td align="center"> + <b>Horizontal Axis:</b> + [% PROCESS select name = 'x_axis_field' %] + </td> + </tr> + + <tr> + <td valign="middle" align="center"> + <b>Vertical Axis:</b><br> + [% PROCESS select name = 'y_axis_field' %] + </td> + <td width="150" height="150"> + <table border="1" width="100%"> + <tr> + <td align="center" valign="middle" height="150"> + <b>Multiple Tables:</b><br> + [% PROCESS select name = 'z_axis_field' %] + </td> + </tr> + </table> + </td> + </tr> +</table> + +<hr> + +[% PROCESS search/form.html.tmpl %] + +<br> +<input type="submit" id="[% button_name FILTER css_class_quote %]" + value="[% button_name FILTER html %]"> +<input type="hidden" name="format" value="table"> +<input type="hidden" name="action" value="wrap"> +<hr> + +[% PROCESS "search/boolean-charts.html.tmpl" %] + +</form> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/search/search-specific.html.tmpl b/template/en/default/search/search-specific.html.tmpl new file mode 100644 index 0000000..78e5506 --- /dev/null +++ b/template/en/default/search/search-specific.html.tmpl @@ -0,0 +1,129 @@ +[%# 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): Myk Melez <myk@mozilla.org> + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl + title = "Simple Search" +%] + +[% WRAPPER search/tabs.html.tmpl %] + +<p> +Find a specific [% terms.bug %] by entering words that describe it. +[% terms.Bugzilla %] will search [% terms.bug %] descriptions and comments +for those words and return a list of matching [% terms.bugs %] sorted +by relevance. +</p> + +<p> +For example, if the [% terms.bug %] you are looking for is a browser crash when you go to a secure web site with an embedded Flash animation, you might search +for "crash secure SSL flash". +</p> + +<form name="queryform" method="get" action="buglist.cgi"> +<input type="hidden" name="query_format" value="specific"> +<input type="hidden" name="order" value="relevance desc"> + +<table> + <tr> + <td align="right" valign="baseline"> + <b><label for="bug_status">Status:</label></b> + </td> + <td> + <select name="bug_status" id="bug_status"> + [% statuses = [ { name = 'open', label = "Open" }, + { name = 'closed', label = "Closed" }, + { name = 'all', label = "All" } ] %] + [% FOREACH status = statuses %] + <option value="__[% status.name %]__" + [% " selected" IF default.bug_status.0 == "__${status.name}__" %]> + [% status.label FILTER html %] + </option> + [% END %] + </select> + </td> + </tr> + <tr> + <td align="right" valign="baseline"> + <b><label for="product">Product:</label></b> + </td> + <td> + <select name="product" id="product"> + <option value="">All</option> + [% IF Param('useclassification') %] + [% FOREACH c = classification %] + <optgroup label="[% c.name FILTER html %]"> + [% FOREACH p = user.get_selectable_products(c.id) %] + [% IF p.components.size %] + <option value="[% p.name FILTER html %]" + [% " selected" IF lsearch(default.product, p.name) != -1 %]> + [% p.name FILTER html %] + </option> + [% END %] + [% END %] + </optgroup> + [% END %] + [% ELSE %] + [% FOREACH p = product %] + <option value="[% p.name FILTER html %]" + [% " selected" IF lsearch(default.product, p.name) != -1 %]> + [% p.name FILTER html %] + </option> + [% END %] + [% END %] + </select> + </td> + </tr> + <tr> + <td align="right" valign="baseline"> + <b><label for="content">Words:</label></b> + </td> + <td> + <input name="content" size="40" id="content" + value="[% default.content.0 FILTER html %]"> + <script type="text/javascript"> <!-- + document.forms['queryform'].content.focus(); + // --> + </script> + </td> + </tr> + <tr> + <td></td> + <td> + + [% IF Param('specific_search_allow_empty_words') %] + <input type="submit" id="search" value="Search"> + [% ELSE %] + <input type="submit" id="search" value="Search" + onclick="if (this.form.content.value == '') + {alert('The Words field cannot be empty. You have to ' + + 'enter at least one word in your search criteria.'); + return false;} return true;"> + [% END %] + </td> + </tr> +</table> +</form> + +[% END %] + +[% PROCESS global/footer.html.tmpl %] + diff --git a/template/en/default/search/tabs.html.tmpl b/template/en/default/search/tabs.html.tmpl new file mode 100644 index 0000000..119b30f --- /dev/null +++ b/template/en/default/search/tabs.html.tmpl @@ -0,0 +1,36 @@ +[%# 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> + # Myk Melez <myk@mozilla.org> + #%] + +[%# INTERFACE: + # This template has no interface. + #%] + +[% WRAPPER global/tabs.html.tmpl + tabs = [ { name => 'specific', label => "Simple Search", + link => "query.cgi?format=specific" }, + { name => 'advanced', label => "Advanced Search", + link => "query.cgi?format=advanced" } ] + current_tab_name = query_format || format || "advanced" +%] + +[% content %] + +[% END %] diff --git a/template/en/default/search/type-select.html.tmpl b/template/en/default/search/type-select.html.tmpl new file mode 100644 index 0000000..043c419 --- /dev/null +++ b/template/en/default/search/type-select.html.tmpl @@ -0,0 +1,29 @@ +[%# 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 the San Jose State + # University Foundation. Portions created by the Initial Developer are + # Copyright (C) 2008 the Initial Developer. All Rights Reserved. + # + # Contributor(s): + # Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[% PROCESS "global/field-descs.none.tmpl" %] + +<select name="[% name FILTER html %]"> + [% FOREACH type = types %] + <option value="[% type FILTER html %]" + [%- ' selected="selected"' IF type == selected %]> + [%- search_descs.$type FILTER html %]</option> + [% END %] +</select> diff --git a/template/en/default/setup/strings.txt.pl b/template/en/default/setup/strings.txt.pl new file mode 100644 index 0000000..eec0bd9 --- /dev/null +++ b/template/en/default/setup/strings.txt.pl @@ -0,0 +1,160 @@ +# 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 Initial Developer of the Original Code is Everything Solved. +# Portions created by Everything Solved are Copyright (C) 2007 +# Everything Solved. All Rights Reserved. +# +# The Original Code is the Bugzilla Bug Tracking System. +# +# Contributor(s): Max Kanat-Alexander <mkanat@bugzilla.org> + +# This file contains a single hash named %strings, which is used by the +# installation code to display strings before Template-Toolkit can safely +# be loaded. +# +# Each string supports a very simple substitution system, where you can +# have variables named like ##this## and they'll be replaced by the string +# variable with that name. +# +# Please keep the strings in alphabetical order by their name. + +%strings = ( + any => 'any', + blacklisted => '(blacklisted)', + checking_for => 'Checking for', + checking_dbd => 'Checking available perl DBD modules...', + checking_optional => 'The following Perl modules are optional:', + checking_modules => 'Checking perl modules...', + chmod_failed => '##path##: Failed to change permissions: ##error##', + chown_failed => '##path##: Failed to change ownership: ##error##', + commands_dbd => <<EOT, +YOU MUST RUN ONE OF THE FOLLOWING COMMANDS (depending on which database +you use): +EOT + commands_optional => 'COMMANDS TO INSTALL OPTIONAL MODULES:', + commands_required => <<EOT, +COMMANDS TO INSTALL REQUIRED MODULES (You *must* run all these commands +and then re-run this script): +EOT + done => 'done.', + extension_must_return_name => <<END, +##file## returned ##returned##, which is not a valid name for an extension. +Extensions must return their name, not <code>1</code> or a number. See +the documentation of Bugzilla::Extension for details. +END + feature_auth_ldap => 'LDAP Authentication', + feature_auth_radius => 'RADIUS Authentication', + feature_graphical_reports => 'Graphical Reports', + feature_html_desc => 'More HTML in Product/Group Descriptions', + feature_inbound_email => 'Inbound Email', + feature_jobqueue => 'Mail Queueing', + feature_jsonrpc => 'JSON-RPC Interface', + feature_new_charts => 'New Charts', + feature_old_charts => 'Old Charts', + feature_mod_perl => 'mod_perl', + feature_moving => 'Move Bugs Between Installations', + feature_patch_viewer => 'Patch Viewer', + feature_smtp_auth => 'SMTP Authentication', + feature_updates => 'Automatic Update Notifications', + feature_xmlrpc => 'XML-RPC Interface', + + header => "* This is Bugzilla ##bz_ver## on perl ##perl_ver##\n" + . "* Running on ##os_name## ##os_ver##", + install_all => <<EOT, + +To attempt an automatic install of every required and optional module +with one command, do: + + ##perl## install-module.pl --all + +EOT + install_data_too_long => <<EOT, +WARNING: Some of the data in the ##table##.##column## column is longer than +its new length limit of ##max_length## characters. The data that needs to be +fixed is printed below with the value of the ##id_column## column first and +then the value of the ##column## column that needs to be fixed: + +EOT + install_module => 'Installing ##module## version ##version##...', + installation_failed => '*** Installation aborted. Read the messages above. ***', + max_allowed_packet => <<EOT, +WARNING: You need to set the max_allowed_packet parameter in your MySQL +configuration to at least ##needed##. Currently it is set to ##current##. +You can set this parameter in the [mysqld] section of your MySQL +configuration file. +EOT + min_version_required => "Minimum version required: ", + +# Note: When translating these "modules" messages, don't change the formatting +# if possible, because there is hardcoded formatting in +# Bugzilla::Install::Requirements to match the box formatting. + modules_message_db => <<EOT, +*********************************************************************** +* DATABASE ACCESS * +*********************************************************************** +* In order to access your database, Bugzilla requires that the * +* correct "DBD" module be installed for the database that you are * +* running. See below for the correct command to run to install the * +* appropriate module for your database. * +EOT + modules_message_optional => <<EOT, +*********************************************************************** +* OPTIONAL MODULES * +*********************************************************************** +* Certain Perl modules are not required by Bugzilla, but by * +* installing the latest version you gain access to additional * +* features. * +* * +* The optional modules you do not have installed are listed below, * +* with the name of the feature they enable. Below that table are the * +* commands to install each module. * +EOT + modules_message_required => <<EOT, +*********************************************************************** +* REQUIRED MODULES * +*********************************************************************** +* Bugzilla requires you to install some Perl modules which are either * +* missing from your system, or the version on your system is too old. * +* See below for commands to install these modules. * +EOT + + module_found => "found v##ver##", + module_not_found => "not found", + module_ok => 'ok', + module_unknown_version => "found unknown version", + ppm_repo_add => <<EOT, +*********************************************************************** +* Note For Windows Users * +*********************************************************************** +* In order to install the modules listed below, you first have to run * +* the following command as an Administrator: * +* * +* ppm repo add theory58S ##theory_url## +EOT + ppm_repo_up => <<EOT, +* * +* Then you have to do (also as an Administrator): * +* * +* ppm repo up theory58S * +* * +* Do that last command over and over until you see "theory58S" at the * +* top of the displayed list. * +EOT + template_precompile => "Precompiling templates...", + template_removal_failed => <<END, +WARNING: The directory '##datadir##/template' could not be removed. + It has been moved into '##datadir##/deleteme', which should be + deleted manually to conserve disk space. +END + template_removing_dir => "Removing existing compiled templates...", +); + +1; diff --git a/template/en/default/sidebar.xul.tmpl b/template/en/default/sidebar.xul.tmpl new file mode 100644 index 0000000..3df943e --- /dev/null +++ b/template/en/default/sidebar.xul.tmpl @@ -0,0 +1,131 @@ +[%# -*- 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@bugzilla.org> + # Scott Collins <scc@mozilla.org> + # Christopher A. Aillon <christopher@aillon.com> + #%] + +[% PROCESS global/variables.none.tmpl %] + +<?xml version="1.0"?> +<?xml-stylesheet href="chrome://communicator/skin/" type="text/css"?> +<?xml-stylesheet href="[% urlbase FILTER xml %]skins/standard/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)"> + +<script type="application/x-javascript"><![CDATA[ + +function load_absolute_url( aAbsoluteURL ) { + content.location = aAbsoluteURL; +} + +function load_relative_url( aRelativeURL ) { + aRelativeURL = '[% urlbase FILTER xml %]' + 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 ) + load_relative_url('buglist.cgi?quicksearch=' + this.value); +} + +]]></script> + + <textbox id="query-field" class="descriptive-content" value="enter search" 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 search"/> + <text class="text-link" onclick="load_relative_url('report.cgi')" value="reports"/> + <text class="text-link" onclick="load_relative_url('enter_bug.cgi')" value="new [% terms.bug %]"/> + <separator class="thin"/> + +[% IF user.id %] + <text class="text-link" onclick="load_relative_url('userprefs.cgi')" value="edit prefs"/> + [%- IF user.in_group('tweakparams') %] + <text class="text-link" onclick="load_relative_url('editparams.cgi')" value="edit params"/> + <text class="text-link" onclick="load_relative_url('editsettings.cgi')" value="edit default preferences"/> + [%- END %] + [%- IF user.in_group('editusers') || user.can_bless %] + <text class="text-link" onclick="load_relative_url('editusers.cgi')" value="edit users"/> + [%- END %] + [%- IF Param('useclassification') && user.in_group('editclassifications') %] + <text class="text-link" onclick="load_relative_url('editclassifications.cgi')" value="edit classifications"/> + [%- END %] + [%- IF user.in_group('editcomponents') %] + <text class="text-link" onclick="load_relative_url('editcomponents.cgi')" value="edit components"/> + <text class="text-link" onclick="load_relative_url('editflagtypes.cgi')" value="edit flags"/> + <text class="text-link" onclick="load_relative_url('editvalues.cgi')" value="edit field values"/> + [%- END %] + [%- IF user.in_group('creategroups') %] + <text class="text-link" onclick="load_relative_url('editgroups.cgi')" value="edit groups"/> + [%- END %] + [%- IF user.in_group('editkeywords') %] + <text class="text-link" onclick="load_relative_url('editkeywords.cgi')" value="edit keywords"/> + [%- END %] + [%- IF user.in_group('bz_canusewhines') %] + <text class="text-link" onclick="load_relative_url('editwhines.cgi')" value="edit whining"/> + [%- END %] + [%- IF user.in_group('editcomponents') %] + <text class="text-link" onclick="load_relative_url('sanitycheck.cgi')" value="sanity check"/> + [%- END %] + [%- IF user.authorizer.can_logout %] + <text class="text-link" onclick="load_relative_url('index.cgi?logout=1')" + value="log out [% user.login FILTER html %]"/> + [%- END %] + <separator class="thin"/> + [%- IF user.showmybugslink %] + [% filtered_username = user.login FILTER url_quote %] + <text class="text-link" onclick="load_relative_url('[% Param('mybugstemplate').replace('%userid%', filtered_username) FILTER js FILTER html %]')" value="my [% terms.bugs %]"/> + [%- END %] + [%- IF Param('usevotes') %] + <text class="text-link" onclick="load_relative_url('votes.cgi?action=show_user')" value="my votes"/> + [%- END %] + + [%- FOREACH q = user.queries %] + <text class="text-link" onclick="load_relative_url('buglist.cgi?cmdtype=runnamed&namedcmd=[% q.name FILTER url_quote %]')" value="[% q.name FILTER html %]"/> + [% END %] + +[% ELSE %] + <text class="text-link" onclick="load_relative_url('createaccount.cgi')" value="new user"/> + <text class="text-link" onclick="load_relative_url('index.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="[% urlbase FILTER xml %]sidebar.cgi">reload</html:a> + </html> + </box> +</window> diff --git a/template/en/default/welcome-admin.html.tmpl b/template/en/default/welcome-admin.html.tmpl new file mode 100644 index 0000000..3c03fb2 --- /dev/null +++ b/template/en/default/welcome-admin.html.tmpl @@ -0,0 +1,86 @@ +[%# 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): Frédéric Buclin <LpSolit@gmail.com> + #%] + +[%# INTERFACE: + # none + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% title = BLOCK %]Welcome to [% terms.Bugzilla %][% END %] + +[% PROCESS global/header.html.tmpl + title = title + header_addl_info = "version $constants.BUGZILLA_VERSION" + style_urls = [ 'skins/standard/index.css' ] +%] + +<div id="welcome-admin"> + <p>Welcome, [% user.identity FILTER html %].</p> + + <p>You are seeing this page because some of the core parameters have not been set up yet. + The goal of this page is to inform you about the last steps required to set up + your installation correctly.</p> + + <p>As an administrator, you have access to all administrative pages, accessible from + the <a href="admin.cgi">Administration</a> link visible at the bottom of this page. + This link will always be visible, on all pages. From there, you must visit at least + the <a href="editparams.cgi">Parameters</a> page, from where you can set all important + parameters for this installation; among others:</p> + + <ul> + <li><a href="editparams.cgi?section=core#urlbase">urlbase</a>, which is the URL + pointing to this installation and which will be used in emails (which is also the + reason you see this page: as long as this parameter is not set, you will see this + page again and again).</li> + + <li><a href="editparams.cgi?section=core#cookiepath">cookiepath</a> is important + for your browser to manage your cookies correctly.</li> + + <li><a href="editparams.cgi?section=general#maintainer">maintainer</a>, + the person responsible for this installation if something is + running wrongly.</li> + </ul> + + <p>Also important are the following parameters:</p> + + <ul> + <li><a href="editparams.cgi?section=auth#requirelogin">requirelogin</a>, if turned + on, will protect your installation from users having no account on this installation. + In other words, users who are not explicitly authenticated with a valid account + cannot see any data. This is what you want if you want to keep your data private.</li> + + <li><a href="editparams.cgi?section=auth#createemailregexp">createemailregexp</a> + defines which users are allowed to create an account on this installation. If set + to ".*" (the default), everybody is free to create his own account. If set to + "@mycompany.com$", only users having an account @mycompany.com will be allowed to + create an account. If left blank, users will not be able to create accounts themselves; + only an administrator will be able to create one for them. If you want a private + installation, you must absolutely set this parameter to something different from + the default.</li> + + <li><a href="editparams.cgi?section=mta#mail_delivery_method">mail_delivery_method</a> + defines the method used to send emails, such as sendmail or SMTP. You have to set + it correctly to send emails.</li> + </ul> + + <p> + After having set up all this, we recommend looking at [% terms.Bugzilla %]'s other + parameters as well at some time so that you understand what they do and whether you + want to modify their settings for your installation. + </p> +</div> + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/whine/mail.html.tmpl b/template/en/default/whine/mail.html.tmpl new file mode 100644 index 0000000..a4f0ede --- /dev/null +++ b/template/en/default/whine/mail.html.tmpl @@ -0,0 +1,92 @@ +[%# 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): Erik Stambaugh <erik@dasbistro.com> + #%] + +[%# INTERFACE: + # subject: subject line of message + # body: message body, shown before the query tables + # queries: array of hashes containing: + # bugs: array containing hashes of fieldnames->values for each bug + # title: the title given in the whine scheduling mechanism + # author: user object for the person who scheduled this whine + # recipient: user object for the intended recipient of the message + #%] + +[% PROCESS global/variables.none.tmpl %] +[% PROCESS 'global/field-descs.none.tmpl' %] + +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title> + [[% terms.Bugzilla %]] [% subject FILTER html %] + </title> + </head> + <body bgcolor="#FFFFFF"> + + <p align="left"> + [% body FILTER html %] + </p> + + <p align="left"> + [% IF author.login == recipient.login %] + <a href="[%+ urlbase FILTER html %]editwhines.cgi">Click + here to edit your whine schedule</a> + [% ELSE %] + This search was scheduled by [% author.login FILTER html %]. + [% END %] + </p> + + +[% FOREACH query=queries %] + + <h2>[%+ query.title FILTER html %]</h2> + + <table width="100%"> + <tr> + <th align="left">ID</th> + <th align="left">Sev</th> + <th align="left">Pri</th> + <th align="left">Plt</th> + <th align="left">Assignee</th> + <th align="left">Status</th> + <th align="left">Resolution</th> + <th align="left">Summary</th> + </tr> + + [% FOREACH bug=query.bugs %] + <tr> + <td align="left"><a href="[%+ urlbase FILTER html %]show_bug.cgi?id= + [%- bug.bug_id %]">[% bug.bug_id %]</a></td> + <td align="left">[% display_value("bug_severity", bug.bug_severity) FILTER html %]</td> + <td align="left">[% display_value("priority", bug.priority) FILTER html %]</td> + <td align="left">[% display_value("rep_platform", bug.rep_platform) FILTER html %]</td> + <td align="left">[% bug.assigned_to FILTER html %]</td> + <td align="left">[% display_value("bug_status", bug.bug_status) FILTER html %]</td> + <td align="left">[% display_value("resolution", bug.resolution) FILTER html %]</td> + <td align="left">[% bug.short_desc FILTER html %]</td> + </tr> + [% END %] + </table> +[% END %] + + </body> +</html> + + diff --git a/template/en/default/whine/mail.txt.tmpl b/template/en/default/whine/mail.txt.tmpl new file mode 100644 index 0000000..862ae26 --- /dev/null +++ b/template/en/default/whine/mail.txt.tmpl @@ -0,0 +1,65 @@ +[%# 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): Erik Stambaugh <erik@dasbistro.com> + #%] + +[%# INTERFACE: + # subject: subject line of message + # body: message body, shown before the query tables + # queries: array of hashes containing: + # bugs: array containing hashes of fieldnames->values for each bug + # title: the title given in the whine scheduling mechanism + # author: user object for the person who scheduled this whine + # recipient: user object for the intended recipient of the message + #%] + +[% PROCESS global/variables.none.tmpl %] +[% PROCESS 'global/field-descs.none.tmpl' %] + +[% body %] + +[% IF author.login == recipient.login %] + To edit your whine schedule, visit the following URL: + [%+ urlbase %]editwhines.cgi +[% ELSE %] + This search was scheduled by [% author.login %]. +[% END %] + + +[% FOREACH query=queries %] + +[%+ query.title +%] +[%+ "-" FILTER repeat(query.title.length) %] + + [% FOREACH bug=query.bugs %] + [% terms.Bug +%] [%+ bug.bug_id %]: + [%+ urlbase %]show_bug.cgi?id=[% bug.bug_id +%] + Priority: [%+ display_value("priority", bug.priority) -%] + Severity: [%+ display_value("bug_severity", bug.bug_severity) -%] + Platform: [%+ display_value("rep_platform", bug.rep_platform) %] + Assignee: [%+ bug.assigned_to %] + Status: [%+ display_value("bug_status", bug.bug_status) %] + [%- IF bug.resolution -%] Resolution: [% display_value("resolution", bug.resolution) -%] + [%- END %] + Summary: [% bug.short_desc %] + + [% END %] + +[% END %] + + diff --git a/template/en/default/whine/multipart-mime.txt.tmpl b/template/en/default/whine/multipart-mime.txt.tmpl new file mode 100644 index 0000000..7fdfdb0 --- /dev/null +++ b/template/en/default/whine/multipart-mime.txt.tmpl @@ -0,0 +1,53 @@ +[%# 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): Erik Stambaugh <erik@dasbistro.com> + #%] + +[%# INTERFACE: + # subject: subject line of message + # alternatives: array of hashes containing: + # type: MIME type + # content: verbatim content + # boundary: a string that has been generated to be a unique boundary + # recipient: user object for the intended recipient of the message + # from: Bugzilla system email address + #%] + +[% PROCESS global/variables.none.tmpl %] + +From: [% from %] +To: [% recipient.email %] +Subject: [[% terms.Bugzilla %]] [% subject %] +MIME-Version: 1.0 +Content-Type: multipart/alternative; boundary="[% boundary %]" +X-Bugzilla-Type: whine + + +This is a MIME multipart message. It is possible that your mail program +doesn't quite handle these properly. Some or all of the information in this +message may be unreadable. + + +[% FOREACH part=alternatives %] + +--[% boundary %] +Content-type: [% part.type +%] + +[%+ part.content %] +[%+ END %] +--[% boundary %]-- diff --git a/template/en/default/whine/schedule.html.tmpl b/template/en/default/whine/schedule.html.tmpl new file mode 100644 index 0000000..245a3e4 --- /dev/null +++ b/template/en/default/whine/schedule.html.tmpl @@ -0,0 +1,448 @@ +[%# -*- 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): Erik Stambaugh <erik@dasbistro.com> + #%] + +[%# INTERFACE: + # events: hash, keyed by event_id number. Values are anonymous hashes of: + # schedule: array of hashes containing schedule info: + # day: value in day column + # time: value selected in time column + # mailto_type: 0=user 1=group + # mailto: recipient's id (profile or group) + # queries: as with schedule, an anonymous array containing hashes of: + # name: the named query's name + # title: title to be displayed on the results + # sort: integer that sets execution order on named queries + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% title = "Set up whining" %] +[% PROCESS global/header.html.tmpl + title = title + style_urls = ['skins/standard/admin.css'] + doc_section = "whining.html" +%] + +<p> + "Whining" is when [% terms.Bugzilla %] executes a saved query at a regular interval + and sends the resulting list of [% terms.bugs %] via email. +</p> + +<p> + To set up a new whine event, click "Add a new event." Enter a subject line + for the message that will be sent, along with a block of text that will + accompany the [% terms.bug %] list in the body of the message. +</p> + +<p> + Schedules are added to an event by clicking on "Add a new schedule." A schedule + consists of a day, a time of day or interval of times + (e.g., every 15 minutes), and a target email address that may or may not be + alterable, depending on your privileges. Events may have more than one schedule + in order to run at multiple times or for different users. +</p> + +<p> + Searches come from saved searches, which are created by executing a <a + href="query.cgi">search</a>, then telling [% terms.Bugzilla %] to remember + the search under a particular name. Add a query by clicking "Add a new + query", and select the desired saved search name under "Search" and add a + title for the [% terms.bug %] table. The optional number entered under + "Sort" will determine the execution order (lowest to highest) if multiple + queries are listed. If you check "One message per [% terms.bug %]," each [% + terms.bug %] that matches the search will be sent in its own email message. +</p> + +<p> + All times are server local time ([% local_timezone FILTER html %]). +</p> + +<form method="post" action="editwhines.cgi"> +[%# This hidden submit button must be here to set default behavior when + the user presses return on a form input field #%] +<input type="submit" value="Update / Commit" name="commit" + style="display: none;" id="commit"> +<input type="hidden" name="update" value="1"> +<input type="hidden" name="token" value="[% token FILTER html %]"> + +[% FOREACH event = events %] + +<table cellspacing="2" cellpadding="2" style="border: 1px solid;"> + <tr> + <th align="left"> + Event: + </th> + <td align="right" colspan="2"> + <input type="submit" value="Remove Event" + name="remove_event_[% event.key %]" + id="remove_event_[% event.key %]"> + </td> + </tr> + + <tr> + <td valign="top" align="right"> + Email subject line: + </td> + <td colspan="2"> + <input type="text" name="event_[% event.key %]_subject" + size="60" maxlength="128" value=" + [%- event.value.subject FILTER html %]"> + </td> + </tr> + + <tr> + <td valign="top" align="right"> + Descriptive text sent within whine message: + </td> + <td colspan="2"> + [% INCLUDE global/textarea.html.tmpl + name = "event_${event.key}_body" + minrows = 3 + maxrows = 10 + defaultrows = 5 + cols = 80 + defaultcontent = event.value.body + %] + </td> + </tr> + + <tr> + <td valign="top" align="right"> + Send a message even if there are no [% terms.bugs %] in the search result: + </td> + <td colspan="2"> + <input type="checkbox" name="event_[% event.key %]_mailifnobugs" + [%- IF event.value.mailifnobugs == 1 %] checked [% END %]> + </td> + </tr> + + [% IF event.value.schedule.size == 0 %] + + <tr> + <td valign="top" align="right"> + Schedule: + </td> + <td class="unset" colspan="2"> + Not scheduled to run<br> + <input type="submit" value="Add a new schedule" + name="add_schedule_[% event.key %]" + id="add_schedule_[% event.key %]"> + </td> + </tr> + + [% ELSE %] + + <tr> + <td valign="top" align="right"> + Schedule: + </td> + <td class="set" colspan="2"> + + <table> + <tr> + <th> + Interval + </th> + <th> + [% IF mail_others %] + Mail to + [% END %] + </th> + <th> + </th> + </tr> + [% FOREACH schedule = event.value.schedule %] + <tr> + <td align="left"> + + [%# these hidden fields allow us to compare old values instead + of reading the database to tell if a field has changed %] + + <input type="hidden" value="[% schedule.day FILTER html %]" + name="orig_day_[% schedule.id %]"> + <input type="hidden" value="[% schedule.time FILTER html %]" + name="orig_time_[% schedule.id %]"> + [% PROCESS day_field val=schedule.day %] + [% PROCESS time_field val=schedule.time %] + </td> + <td align="left"> + [% IF mail_others %] + <input type="hidden" name="orig_mailto_type_[% schedule.id %]" + value="[% schedule.mailto_type FILTER html %]"> + <select name="mailto_type_[% schedule.id %]"> + <option value="0" [% IF schedule.mailto_type == 0 %] + selected + [% END %]>User</option> + <option value="1" [% IF schedule.mailto_type == 1 %] + selected + [% END %]>Group</option> + </select> + <input type="hidden" name="orig_mailto_[% schedule.id %]" + value="[% schedule.mailto FILTER html %]"> + <input type="text" name="mailto_[% schedule.id %]" + value="[% schedule.mailto FILTER html %]" size="30"> + [% END %] + </td> + <td align="left"> + <input type="submit" value="Remove" + name="remove_schedule_[% schedule.id %]" + id="remove_schedule_[% schedule.id %]"> + </td> + </tr> + [% END %] + + <tr> + <td colspan="3"> + <input type="submit" value="Add a new schedule" + name="add_schedule_[% event.key %]" + id="add_schedule_[% event.key %]"> + </td> + </tr> + </table> + + </td> + </tr> + + [% END %] + + [% IF event.value.queries.size == 0 %] + + <tr> + <td valign="top" align="right"> + Searches: + </td> + <td align="left"> + No searches <br> + <input type="submit" value="Add a new query" + name="add_query_[% event.key %]" + id="add_query_[% event.key %]"> + </td> + <td align="right" valign="bottom"> + <input type="submit" value="Update / Commit" name="commit" id="update"> + </td> + </tr> + + [% ELSE %] + + <tr> + <td valign="top" align="right"> + Searches: + </td> + <td align="left" colspan="2"> + + <table> + <tr> + <th>Sort</th> + <th>Search</th> + <th>Title</th> + <th></th> + <th></th> + </tr> + + [% FOREACH query = event.value.queries %] + + <tr> + <td align="left"> + <input type="text" name="query_sort_[% query.id %]" + size="3" value="[% query.sort %]"> + <input type="hidden" value="[% query.sort %]" + name="orig_query_sort_[% query.id %]"> + </td> + <td align="left"> + <input type="hidden" value="[% query.name FILTER html %]" + name="orig_query_name_[% query.id %]"> + [% PROCESS query_field thisquery=query.name %] + </td> + <td align="left"> + <input type="hidden" value="[% query.title FILTER html %]" + name="orig_query_title_[% query.id %]"> + <input type="text" name="query_title_[% query.id %]" + size="50" value="[% query.title FILTER html %]" + maxlength="64"> + </td> + <td align="left"> + <input type="hidden" value="[% query.onemailperbug FILTER html %]" + name="orig_query_onemailperbug_[% query.id %]"> + <input type="checkbox" [% IF query.onemailperbug == 1 %] checked [% END %] + id="query_onemailperbug_[% query.id %]" + name="query_onemailperbug_[% query.id %]"> + <label for="query_onemailperbug_[% query.id %]">One message per [% terms.bug %]</label> + </td> + <td align="right"> + <input type="submit" value="Remove" + name="remove_query_[% query.id %]" + id="remove_query_[% query.id %]"> + </td> + </tr> + + [% END %] + + <tr> + <td colspan="3"> + <input type="submit" value="Add a new query" + name="add_query_[% event.key %]" + id="add_query_[% event.key %]"> + </td> + <td align="right" colspan="2"> + <input type="submit" value="Update / Commit" name="commit" id="update"> + </td> + </tr> + </table> + + </td> + </tr> + + [% END %] + +</table> + +[% END %] + +<p align="left"> + <input type="submit" value="Add a new event" name="add_event" id="add_event"> +</p> + +</form> + +[% PROCESS global/footer.html.tmpl %] + +[% BLOCK query_field +%] + + [% IF available_queries.size > 0 %] + + <select name="query_name_[% query.id %]"> + [% FOREACH q = available_queries %] + <option [% "selected" IF q == thisquery %] value="[% q FILTER html %]"> + [% q FILTER html %] + </option> + [% END %] + </select> + + [% ELSE %] + Please visit the <a href="query.cgi">Search</a> page and save a query + [% END %] + +[%+ END %] + +[% BLOCK day_field +%] + <select name="day_[% schedule.id %]"> + [% + options = [ + ['All', 'Each day', ], + ['MF', 'Monday through Friday', ], + ['Sun', 'Sunday', ], + ['Mon', 'Monday', ], + ['Tue', 'Tuesday', ], + ['Wed', 'Wednesday', ], + ['Thu', 'Thursday', ], + ['Fri', 'Friday', ], + ['Sat', 'Saturday', ], + ['1', 'On the 1st of the month', ], + ['2', 'On the 2nd of the month', ], + ['3', 'On the 3rd of the month', ], + ['4', 'On the 4th of the month', ], + ['5', 'On the 5th of the month', ], + ['6', 'On the 6th of the month', ], + ['7', 'On the 7th of the month', ], + ['8', 'On the 8th of the month', ], + ['9', 'On the 9th of the month', ], + ['10', 'On the 10th of the month', ], + ['11', 'On the 11th of the month', ], + ['12', 'On the 12th of the month', ], + ['13', 'On the 13th of the month', ], + ['14', 'On the 14th of the month', ], + ['15', 'On the 15th of the month', ], + ['16', 'On the 16th of the month', ], + ['17', 'On the 17th of the month', ], + ['18', 'On the 18th of the month', ], + ['19', 'On the 19th of the month', ], + ['20', 'On the 20th of the month', ], + ['21', 'On the 21st of the month', ], + ['22', 'On the 22nd of the month', ], + ['23', 'On the 23rd of the month', ], + ['24', 'On the 24th of the month', ], + ['25', 'On the 25th of the month', ], + ['26', 'On the 26th of the month', ], + ['27', 'On the 27th of the month', ], + ['28', 'On the 28th of the month', ], + ['29', 'On the 29th of the month', ], + ['30', 'On the 30th of the month', ], + ['31', 'On the 31st of the month', ], + ['last', 'Last day of the month', ], + ] + %] + + [% FOREACH option = options %] + <option value="[% option.0 %]" + [%- IF val == option.0 +%] selected[% END %]> + [%- option.1 -%] + </option> + [% END %] + + </select> +[%+ END %] + +[% BLOCK time_field +%] +<select name="time_[% schedule.id %]"> + + [% + options = [ + [ '0', 'at midnight', ], + [ '1', 'at 01:00', ], + [ '2', 'at 02:00', ], + [ '3', 'at 03:00', ], + [ '4', 'at 04:00', ], + [ '5', 'at 05:00', ], + [ '6', 'at 06:00', ], + [ '7', 'at 07:00', ], + [ '8', 'at 08:00', ], + [ '9', 'at 09:00', ], + [ '10', 'at 10:00', ], + [ '11', 'at 11:00', ], + [ '12', 'at 12:00', ], + [ '13', 'at 13:00', ], + [ '14', 'at 14:00', ], + [ '15', 'at 15:00', ], + [ '16', 'at 16:00', ], + [ '17', 'at 17:00', ], + [ '18', 'at 18:00', ], + [ '19', 'at 19:00', ], + [ '20', 'at 20:00', ], + [ '21', 'at 21:00', ], + [ '22', 'at 22:00', ], + [ '23', 'at 23:00', ], + [ '60min', 'every hour', ], + [ '30min', 'every 30 minutes', ], + [ '15min', 'every 15 minutes', ], + ] + %] + + [% FOREACH option = options %] + <option value="[% option.0 %]" + [%- IF val == option.0 +%] selected[% END %]> + [%- option.1 -%] + </option> + [% END %] + +</select> + +[%+ END %] + |