diff options
author | Fathi Boudra <fathi.boudra@linaro.org> | 2014-06-02 17:14:02 +0300 |
---|---|---|
committer | Fathi Boudra <fathi.boudra@linaro.org> | 2014-06-02 17:14:02 +0300 |
commit | 46f29f243b1e7642e860b40214d5f893aad678e1 (patch) | |
tree | 7ac82cee0957299e51c36f22ce1b172670513348 /template/en/default/admin |
Initial commit - Bugzilla 4.4.4
Signed-off-by: Fathi Boudra <fathi.boudra@linaro.org>
Diffstat (limited to 'template/en/default/admin')
97 files changed, 8684 insertions, 0 deletions
diff --git a/template/en/default/admin/admin.html.tmpl b/template/en/default/admin/admin.html.tmpl new file mode 100644 index 0000000..38194e9 --- /dev/null +++ b/template/en/default/admin/admin.html.tmpl @@ -0,0 +1,127 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% 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') + || user.get_products_by_permission('editcomponents').size) ? "" : "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..d818d31 --- /dev/null +++ b/template/en/default/admin/classifications/add.html.tmpl @@ -0,0 +1,27 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% PROCESS global/header.html.tmpl + title = "Add new classification" +%] + +<form method=post action="editclassifications.cgi"> + <table border=0 cellpadding=4 cellspacing=0> + + [% PROCESS "admin/classifications/edit-common.html.tmpl" %] + + </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..215db84 --- /dev/null +++ b/template/en/default/admin/classifications/del.html.tmpl @@ -0,0 +1,51 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% 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-common.html.tmpl b/template/en/default/admin/classifications/edit-common.html.tmpl new file mode 100644 index 0000000..6f038fc --- /dev/null +++ b/template/en/default/admin/classifications/edit-common.html.tmpl @@ -0,0 +1,35 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# INTERFACE: + # classification: Bugzilla::Classifiation object. + #%] + +<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> + +[% Hook.process('rows') %] 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..429eefc --- /dev/null +++ b/template/en/default/admin/classifications/edit.html.tmpl @@ -0,0 +1,55 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% PROCESS global/header.html.tmpl + title = "Edit classification" +%] + +<form method=post action="editclassifications.cgi"> + <table border=0 cellpadding=4 cellspacing=0> + + [% PROCESS "admin/classifications/edit-common.html.tmpl" %] + + <tr valign=top> + <th align="right"> + <a href="editproducts.cgi?classification=[% classification.name FILTER uri %]"> + 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..39adb5c --- /dev/null +++ b/template/en/default/admin/classifications/footer.html.tmpl @@ -0,0 +1,10 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +<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..13fb3a3 --- /dev/null +++ b/template/en/default/admin/classifications/reclassify.html.tmpl @@ -0,0 +1,77 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% PROCESS global/header.html.tmpl + title = "Reclassify products" +%] + +<form method=post action="editclassifications.cgi"> + <table border=0 cellpadding=4 cellspacing=0> + <tr> + <th align="right">Classification:</th> + <td valign="top" colspan=3>[% classification.name FILTER html %]</td> + + </tr><tr> + <th align="right">Description:</th> + <td valign="top" colspan=3> + [% IF classification.description %] + [% classification.description FILTER html_light %] + [% ELSE %] + <font color="red">description missing</font> + [% END %] + </td> + + </tr><tr> + <th align="right">Sortkey:</th> + <td valign="top" colspan=3>[% classification.sortkey FILTER html %]</td> + + </tr><tr> + <th align="right">Products:</th> + <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..541ded9 --- /dev/null +++ b/template/en/default/admin/classifications/select.html.tmpl @@ -0,0 +1,54 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% 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 uri %]"><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 uri %]">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 uri %]">delete</a></td> + [% END %] + </tr> + [% END %] + +</table> + +<p> + <a href="editclassifications.cgi?action=add">Add a new classification</a>. +</p> + +[% 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..82bf018 --- /dev/null +++ b/template/en/default/admin/components/confirm-delete.html.tmpl @@ -0,0 +1,149 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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 + 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">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 && comp.isactive %]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 uri %]&product= + [%- product.name FILTER uri %]">[% comp.bug_count %]</a> +[% ELSE %] + None +[% END %] + </td> +</tr> +</table> + +<h2>Confirmation</h2> + +[% IF comp.bug_count %] + + [% IF !Param("allowbugdeletion") %] + <p class="confirmation"> + 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>ALL</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..f281160 --- /dev/null +++ b/template/en/default/admin/components/create.html.tmpl @@ -0,0 +1,36 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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 + yui = [ 'autocomplete' ] + javascript_urls = [ "js/field.js" ] + title = title +%] + +<form method="post" action="editcomponents.cgi"> + <table border="0" cellpadding="4" cellspacing="0"> + + [% PROCESS "admin/components/edit-common.html.tmpl" %] + + </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-common.html.tmpl b/template/en/default/admin/components/edit-common.html.tmpl new file mode 100644 index 0000000..6ff4e07 --- /dev/null +++ b/template/en/default/admin/components/edit-common.html.tmpl @@ -0,0 +1,77 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# INTERFACE: + # comp: object; Bugzilla::Component object. + #%] + +[%# When called from the "New Product" page, the component description field + # must have a name different from the product description field. %] +[% DEFAULT desc_name = "description" %] + +<tr> + <th class="field_label"><label for="component">Component:</label></th> + <td><input size="64" maxlength="64" name="component" id="component" + value="[%- comp.name FILTER html %]"></td> +</tr> +<tr> + <th class="field_label"><label for="[% desc_name FILTER html %]">Component Description:</label></th> + <td> + [% INCLUDE global/textarea.html.tmpl + name = desc_name + id = desc_name + minrows = 4 + cols = 64 + wrap = 'virtual' + defaultcontent = comp.description + %] + </td> +</tr> +<tr> + <th class="field_label"><label for="initialowner">Default Assignee:</label></th> + <td> + [% INCLUDE global/userselect.html.tmpl + name => "initialowner" + id => "initialowner" + value => comp.default_assignee.login + size => 64 + %] + </td> +</tr> +[% IF Param('useqacontact') %] + <tr> + <th class="field_label"><label for="initialqacontact">Default QA contact:</label></th> + <td> + [% INCLUDE global/userselect.html.tmpl + name => "initialqacontact" + id => "initialqacontact" + value => comp.default_qa_contact.login + size => 64 + emptyok => 1 + %] + </td> + </tr> +[% END %] +<tr> + <th class="field_label"><label for="initialcc">Default CC List:</label></th> + <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> + +[% Hook.process('rows') %] 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..748175b --- /dev/null +++ b/template/en/default/admin/components/edit.html.tmpl @@ -0,0 +1,66 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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. + #%] + +[% title = BLOCK %] + Edit component '[% comp.name FILTER html %]' of product '[% product.name FILTER html %]' +[% END %] +[% PROCESS global/header.html.tmpl + title = title + yui = [ 'autocomplete' ] + javascript_urls = [ "js/field.js" ] +%] + +<form method="post" action="editcomponents.cgi"> + <table border="0" cellpadding="4" cellspacing="0"> + + [% PROCESS "admin/components/edit-common.html.tmpl" %] + + <tr> + <th class="field_label"><label for="isactive">Enabled For [% terms.Bugs %]:</label></th> + <td><input id="isactive" name="isactive" type="checkbox" value="1" + [% 'checked="checked"' IF comp.isactive %]></td> + </tr> + <tr> + <th class="field_label">[% terms.Bugs %]:</th> + <td> +[% IF comp.bug_count > 0 %] + <a title="[% terms.Bugs %] in component '[% comp.name FILTER html %]'" + href="buglist.cgi?component= + [%- comp.name FILTER uri %]&product= + [%- product.name FILTER uri %]">[% 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 uri %]&component= + [%- comp.name FILTER uri %]">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..86d0afb --- /dev/null +++ b/template/en/default/admin/components/footer.html.tmpl @@ -0,0 +1,42 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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 uri %]&component=[% comp.name FILTER uri %]"> + '[% 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 uri %]">'[% 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 uri %]">'[% 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..fc36bcd --- /dev/null +++ b/template/en/default/admin/components/list.html.tmpl @@ -0,0 +1,133 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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. + #%] + +[% 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 uri %]&component=%%name%%[% END %] +[% delete_contentlink = BLOCK %]editcomponents.cgi?action=del&product= + [%- product.name FILTER uri %]&component=%%name%%[% END %] +[% bug_count_contentlink = BLOCK %]buglist.cgi?component=%%name%%&product= + [%- product.name FILTER uri %][% 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 => 'Default QA Contact' + }) %] + +[% END %] + +[% columns.push({ + name => "initial_cc_names" + heading => "Default CC list" + }, + { + name => "isactive" + heading => "Active" + yesno_field => 1 + }) %] + +[% 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, the initialqacontact, and the initial_cc_names with right values %] +[% overrides.initialowner = {} %] +[% overrides.initialqacontact = {} %] +[% overrides.initial_cc_names = {} %] + +[%# "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 + } + %] + [% SET initial_cc_list = [] %] + [% FOREACH cc_user = my_component.initial_cc %] + [% initial_cc_list.push(cc_user.login) %] + [% END %] + [% overrides.initial_cc_names.name.${my_component.name} = { + override_content => 1 + content => initial_cc_list.join(', ') + } + %] +[% 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 uri %]">Add</a> + a new component to product '[% product.name FILTER html %]'</p> + +[% IF ! showbugcounts %] + + <p><a href="editcomponents.cgi?product=[% product.name FILTER uri %]&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..55600d9 --- /dev/null +++ b/template/en/default/admin/components/select-product.html.tmpl @@ -0,0 +1,54 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# INTERFACE: + # products: array of product objects + # showbugcounts: if defined, then bug counts should be included in the table + #%] + +[% 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..e3b9ef5 --- /dev/null +++ b/template/en/default/admin/confirm-action.html.tmpl @@ -0,0 +1,87 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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/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..bfdacb8 --- /dev/null +++ b/template/en/default/admin/custom_fields/cf-js.js.tmpl @@ -0,0 +1,66 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +// 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.fields({ is_select => 1 }) %] + select_values[[% sel_field.id FILTER js %]] = [ + [% FOREACH legal_value = sel_field.legal_values %] + [%# Prefix components with the name of their product so that admins + know which component we're talking about. #%] + [% IF sel_field.name == 'component' %] + [% SET value_name = display_value('product', legal_value.product.name) _ ': ' + _ display_value(sel_field.name, legal_value.name) %] + [% ELSE %] + [% SET value_name = display_value(sel_field.name, legal_value.name) %] + [% END %] + [[% legal_value.id FILTER js %], '[% 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; + } + + var reverse_desc = document.getElementById('reverse_desc'); + if (type_field.value == [% constants.FIELD_TYPE_BUG_ID %]) + { + reverse_desc.disabled = false; + } + else { + reverse_desc.disabled = true; + reverse_desc.value = ''; + } +} + +function onChangeVisibilityField() { + var vis_field = document.getElementById('visibility_field_id'); + var vis_value = document.getElementById('visibility_values'); + + 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..85338c0 --- /dev/null +++ b/template/en/default/admin/custom_fields/confirm-delete.html.tmpl @@ -0,0 +1,60 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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 + style_urls = ['skins/standard/admin.css'] + 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 class="confirmation"> + 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..fb7f06f --- /dev/null +++ b/template/en/default/admin/custom_fields/create.html.tmpl @@ -0,0 +1,179 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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" + style_urls = ['skins/standard/admin.css'] +%] + +[%# set initial editability of fields such as Reverse Relationship Description %] +<script type="text/javascript"> +YAHOO.util.Event.onDOMReady(function() {onChangeType(document.getElementById('type'))}); +</script> + +<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" id="edit_custom_field"> + <tr> + <th class="narrow_label"><label for="name">Name:</label></th> + <td> + <input type="text" id="name" name="name" value="cf_" size="40" maxlength="64"> + </td> + + <th> + <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 class="narrow_label"><label for="desc">Description:</label></th> + <td><input type="text" id="desc" name="desc" value="" size="40"></td> + + <th> + <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 class="narrow_label"><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><label for="obsolete">Is obsolete:</label></th> + <td><input type="checkbox" id="obsolete" name="obsolete" value="1"></td> + </tr> + <tr> + <th class="narrow_label"><label for="sortkey">Sortkey:</label></th> + <td> + <input type="text" id="sortkey" name="sortkey" size="6" maxlength="6"> + </td> + + <th align="right"><label for="is_mandatory">Is mandatory:</label></th> + <td><input type="checkbox" id="is_mandatory" name="is_mandatory" value="1"></td> + </tr> + + <tr> + <th class="narrow_label">Long Description:</th> + <td> + [% INCLUDE global/textarea.html.tmpl + name = 'long_desc' + id = 'long_desc' + minrows = 3 + maxrows = 5 + cols = 46 + defaultcontent = defaultcontent + %] + </td> + <th> + <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.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_values"> + <strong>is set to any of:</strong> + </label> + <select multiple="multiple" size="5" name="visibility_values" + id="visibility_values" class="field_value"> + <option value=""></option> + </select> + </td> + </tr> + + <tr> + <th class="narrow_label"> + <label for="reverse_desc">Reverse Relationship Description:</label> + </th> + <td> + <input type="text" id="reverse_desc" name="reverse_desc" value="" size="40" disabled="disabled"> + <br/> + Use this label for the list of [% terms.bugs %] that link to + [%+ terms.abug %] with this + [%+ field_types.${constants.FIELD_TYPE_BUG_ID} FILTER html %] + field. For example, if the description is "Is a duplicate of", + the reverse description would be "Duplicates of this [% terms.bug %]". + Leave blank to disable the list for this field. + </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.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..a1d7393 --- /dev/null +++ b/template/en/default/admin/custom_fields/edit.html.tmpl @@ -0,0 +1,195 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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" + style_urls = ['skins/standard/admin.css'] +%] + +<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" id="edit_custom_field"> + <tr> + <th class="narrow_label">Name:</th> + <td>[% field.name FILTER html %]</td> + + <th> + <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 class="narrow_label"><label for="desc">Description:</label></th> + <td><input type="text" id="desc" name="desc" size="40" + value="[% field.description FILTER html %]"></td> + + <th> + <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 class="narrow_label">Type:</th> + <td>[% field_types.${field.type} FILTER html %]</td> + + <th><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 class="narrow_label"><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="is_mandatory">Is mandatory:</label></th> + <td><input type="checkbox" id="is_mandatory" name="is_mandatory" value="1" + [%- ' checked="checked"' IF field.is_mandatory %]></td> + </tr> + <tr> + <th class="narrow_label">Long Description:</th> + <td> + [% INCLUDE global/textarea.html.tmpl + name = 'long_desc' + id = 'long_desc' + minrows = 3 + maxrows = 5 + cols = 46 + defaultcontent = field.long_desc + %] + </td> + <th> + <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.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_values"> + <strong>is set to any of:</strong> + </label> + <select multiple="multiple" size="5" name="visibility_values" + id="visibility_values" class="field_value"> + [% FOREACH value = field.visibility_field.legal_values %] + <option value="[% value.id FILTER html %]" + [% " selected" IF field.visibility_values.contains(value) %]> + [% IF field.visibility_field.name == 'component' %] + [% display_value('product', value.product.name) FILTER html %]: + [% END %] + [%+ display_value(field.visibility_field.name, value.name) FILTER html %] + </option> + [% END %] + </select> + </td> + </tr> + [% IF field.type == constants.FIELD_TYPE_BUG_ID %] + <tr> + <th class="narrow_label"> + <label for="reverse_desc">Reverse Relationship Description:</label> + </th> + <td> + <input type="text" id="reverse_desc" name="reverse_desc" size="40" + value="[% field.reverse_desc FILTER html %]"> + <br/> + Use this label for the list of [% terms.bugs %] that link to + [%+ terms.abug %] with this + [%+ field_types.${constants.FIELD_TYPE_BUG_ID} FILTER html %] field. + For example, if the description is "Is a duplicate of", + the reverse description would be "Duplicates of this [% terms.bug %]". + Leave blank to disable the list for this field. + </td> + <td colspan="2"> </td> + </tr> + [% END %] + [% IF field.is_select %] + <tr> + <th> </th> + <td> + <a href="editvalues.cgi?field=[% field.name FILTER uri %]">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.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..e6ec0c2 --- /dev/null +++ b/template/en/default/admin/custom_fields/list.html.tmpl @@ -0,0 +1,99 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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 => "is_mandatory" + heading => "Is Mandatory" + }, + { + name => "action" + heading => "Action" + content => "" + } + ] +%] + +[% USE Bugzilla %] +[% custom_fields = Bugzilla.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..122df36 --- /dev/null +++ b/template/en/default/admin/fieldvalues/confirm-delete.html.tmpl @@ -0,0 +1,154 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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 uri %]= + [%- value.name FILTER uri %]"> + [%- 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 uri %]= + [%- value.name FILTER uri %]"> + [% 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 cannot 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 uri %]"> + [%- 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 uri %]&value= + [%- controlled.name FILTER uri %]"> + [% 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..f9f0f7e --- /dev/null +++ b/template/en/default/admin/fieldvalues/create.html.tmpl @@ -0,0 +1,92 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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 %]"> + [% IF field.value_field.name == 'component' %] + [% field_value.product.name FILTER html %]: + [% END %] + [%- 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..ab64185 --- /dev/null +++ b/template/en/default/admin/fieldvalues/edit.html.tmpl @@ -0,0 +1,105 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# INTERFACE: + # value: Bugzilla::Field::Choice; The field value we are editing. + # field: Bugzilla::Field; The field this value belongs to. + #%] + +[% 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 %]> + [% IF field.value_field.name == 'component' %] + [% field_value.product.name FILTER html %]: + [% END %] + [% 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 %] + [% IF !(value.is_default OR value.is_static) %] + <input id="defined_is_active" name="defined_is_active" + type="hidden" value="1"> + [% 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..672e11b --- /dev/null +++ b/template/en/default/admin/fieldvalues/footer.html.tmpl @@ -0,0 +1,48 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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 uri %]">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 uri %]&value= + [%- value.name FILTER uri %]"> + '[% value.name FILTER html %]'</a>. +[% END %] + +[% UNLESS no_edit_other_link %] + Edit other values for the <a + href="editvalues.cgi?field= + [%- field.name FILTER uri %]">'[% 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..01c5717 --- /dev/null +++ b/template/en/default/admin/fieldvalues/list.html.tmpl @@ -0,0 +1,90 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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 %] + +[% 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 uri %]&value=%%name%%[% END %] +[% delete_contentlink = BLOCK %]editvalues.cgi?action=del&field= + [%- field.name FILTER uri %]&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..099eeba --- /dev/null +++ b/template/en/default/admin/fieldvalues/select-field.html.tmpl @@ -0,0 +1,37 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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/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..70f5efb --- /dev/null +++ b/template/en/default/admin/flag-type/confirm-delete.html.tmpl @@ -0,0 +1,49 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% 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..ab70e23 --- /dev/null +++ b/template/en/default/admin/flag-type/edit.html.tmpl @@ -0,0 +1,265 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% PROCESS "global/js-products.html.tmpl" %] + +[% IF action == "insert" %] + [% title = BLOCK %] + Create Flag Type for [% type.target_type == "bug" ? terms.Bugs : "Attachments" %] + [% IF type.id %] + Based on [% type.name FILTER html %] + [% END %] + [% END %] + [% doc_section = "flags-overview.html#flags-create" %] +[% ELSE %] + [% 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['flagtype_properties']; + selectProduct(f.product, f.component, null, null, '__Any__');" + javascript_urls=["js/productform.js"] + doc_section = doc_section +%] + +<form id="flagtype_properties" method="post" action="editflagtypes.cgi"> + <input type="hidden" name="action" value="[% action FILTER html %]"> + <input type="hidden" name="can_fully_edit" value="[% can_fully_edit FILTER html %]"> + <input type="hidden" name="id" value="[% type.id FILTER html %]"> + <input type="hidden" name="token" value="[% token FILTER html %]"> + <input type="hidden" name="target_type" value="[% type.target_type FILTER html %]"> + <input type="hidden" name="check_clusions" value="[% check_clusions FILTER none %]"> + [% FOREACH category = inclusions.values %] + <input type="hidden" name="inclusions" value="[% category FILTER html %]"> + [% END %] + [% FOREACH category = exclusions.values %] + <input type="hidden" name="exclusions" value="[% category 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" [%- ' disabled="disabled"' UNLESS can_fully_edit %]> + </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 + disabled = !can_fully_edit + %] + </td> + </tr> + + <tr> + <th>Category:</th> + + <td> + the products/components to which [% type.target_type == "bug" ? terms.bugs : "attachments" %] + must (inclusions) or must not (exclusions) belong in order for users + to be able to set flags of this type for them. + [% UNLESS can_fully_edit %] + <p class="warning">This flagtype also applies to some products you are not allowed + to edit (and so which are not displayed in the lists below). Your limited privileges + means you are only allowed to add and remove this flagtype to/from products you can + edit, but not to edit other properties of the flagtype.</p> + [% END %] + <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 %]">[% prod.name FILTER html %]</option> + [% END %] + </select><br> + <select name="component"> + <option value="">__Any__</option> + [% FOREACH comp = components %] + <option value="[% comp FILTER html %]">[% comp FILTER html %]</option> + [% END %] + </select><br> + <input type="submit" id="categoryAction-include" + name="categoryAction-include" value="Include"> + <input type="submit" id="categoryAction-exclude" + name="categoryAction-exclude" value="Exclude"> + </td> + <td style="vertical-align: top;"> + <b>Inclusions:</b><br> + [% PROCESS category_select name="inclusion_to_remove" categories = inclusions %]<br> + <input type="submit" id="categoryAction-removeInclusion" + name="categoryAction-removeInclusion" value="Remove Inclusion"> + </td> + <td style="vertical-align: top;"> + <b>Exclusions:</b><br> + [% PROCESS category_select name="exclusion_to_remove" categories = exclusions %]<br> + <input type="submit" id="categoryAction-removeExclusion" + name="categoryAction-removeExclusion" value="Remove Exclusion"> + </td> + </tr> + </table> + </td> + </tr> + + <tr> + <th>Sort Key:</th> + <td> + a number between 1 and [% constants.MAX_SMALLINT FILTER none %] 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 FILTER html %]" size="5" + maxlength="5" [% ' disabled="disabled"' UNLESS can_fully_edit %]> + </td> + </tr> + + <tr> + <th> </th> + <td> + <input type="checkbox" id="is_active" name="is_active" + [%- ' disabled="disabled"' UNLESS can_fully_edit %] + [% " 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" + [%- ' disabled="disabled"' UNLESS can_fully_edit %] + [% " 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" [%- ' disabled="disabled"' UNLESS can_fully_edit %]> + </td> + </tr> + + <tr> + <th> </th> + <td> + <input type="checkbox" id="is_requesteeble" name="is_requesteeble" + [%- ' disabled="disabled"' UNLESS can_fully_edit %] + [% " 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" + [%- ' disabled="disabled"' UNLESS can_fully_edit %] + [% " 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 [% type.target_type == "bug" ? terms.bug : "attachment" %])</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 group_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 group_select selname = "request_group" %] + </td> + </tr> + + <tr> + <th> </th> + <td> + <input type="submit" id="save" value="[% action == "insert" ? "Create" : "Save Changes" %]"> + </td> + </tr> + + </table> + +</form> + +[% PROCESS global/footer.html.tmpl %] + + +[%############################################################################%] +[%# Block for SELECT fields #%] +[%############################################################################%] + +[% BLOCK group_select %] + <select name="[% selname %]" id="[% selname %]" [%- ' disabled="disabled"' UNLESS can_fully_edit %]> + <option value="">(no group)</option> + [% group_found = 0 %] + [% FOREACH group = groups %] + <option value="[% group.name FILTER html %]" + [% IF type.${selname} && type.${selname}.name == group.name %] + [% ' selected="selected"' %] + [% group_found = 1 %] + [% END %]> + [%- group.name FILTER html ~%] + </option> + [% END %] + [% IF !group_found && type.${selname}.name %] + <option value="[% type.${selname}.name FILTER html %]" selected="selected"> + [%- type.${selname}.name FILTER html ~%] + </option> + [% END %] + </select> +[% END %] + +[% BLOCK category_select %] + <select name="[% name FILTER html %]" multiple="multiple" size="7"> + [% FOREACH option = categories.keys.sort %] + <option value="[% categories.$option FILTER html %]"> + [% option 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..7a02938 --- /dev/null +++ b/template/en/default/admin/flag-type/list.html.tmpl @@ -0,0 +1,159 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% 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..a9aa7e1 --- /dev/null +++ b/template/en/default/admin/groups/confirm-remove.html.tmpl @@ -0,0 +1,50 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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 id="confirm" 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..db65629 --- /dev/null +++ b/template/en/default/admin/groups/create.html.tmpl @@ -0,0 +1,94 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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> + +[% IF Param("makeproductgroups") %] + <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> +[% ELSE %] + <p>Checking the "Insert new group into all existing products" option will + make the new group be associated with existing products. Leaving it unchecked + will make the group become visible only when its controls have been added to + a product.</p> +[% END %] + +<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..5ae0ce9 --- /dev/null +++ b/template/en/default/admin/groups/delete.html.tmpl @@ -0,0 +1,172 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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 uri %]&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 uri %]">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 uri %]"> + [%- data.product.name FILTER html %]</a> + ([% active.join(', ') FILTER html %]) + [% IF hidden %] + <strong>WARNING: This product is currently hidden. + Deleting this group could make this product publicly visible + if no other group applies. + </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 uri %]">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..2f4101a --- /dev/null +++ b/template/en/default/admin/groups/edit.html.tmpl @@ -0,0 +1,233 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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" id="update-group" 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" id="remove-membership" 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..af7da33 --- /dev/null +++ b/template/en/default/admin/groups/list.html.tmpl @@ -0,0 +1,153 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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..718a32e --- /dev/null +++ b/template/en/default/admin/keywords/confirm-delete.html.tmpl @@ -0,0 +1,39 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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..e29db40 --- /dev/null +++ b/template/en/default/admin/keywords/create.html.tmpl @@ -0,0 +1,45 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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..07603e1 --- /dev/null +++ b/template/en/default/admin/keywords/edit.html.tmpl @@ -0,0 +1,57 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# INTERFACE: + # keyword: A Bugzilla::Keyword object. + #%] + +[% 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 uri %]"> + [% 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..ea98ca7 --- /dev/null +++ b/template/en/default/admin/keywords/list.html.tmpl @@ -0,0 +1,54 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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/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..cc30f16 --- /dev/null +++ b/template/en/default/admin/milestones/confirm-delete.html.tmpl @@ -0,0 +1,83 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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 + 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">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 uri %]&product= + [%- product.name FILTER uri %]"> + [% milestone.bug_count FILTER none %]</a> +[% ELSE %] + None +[% END %] + </td> +</tr> +</table> + +<h2>Confirmation</h2> + +[% IF milestone.bug_count %] + + <p class="confirmation"> + 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>ALL</b> of these [% terms.bugs %] will be retargeted + to [% product.default_milestone FILTER html %], the default milestone for + the [% product.name FILTER html %] product. + </p> +[% 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..8006c0c --- /dev/null +++ b/template/en/default/admin/milestones/create.html.tmpl @@ -0,0 +1,46 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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="64" maxlength="64" 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..759bd70 --- /dev/null +++ b/template/en/default/admin/milestones/edit.html.tmpl @@ -0,0 +1,53 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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. + #%] + +[% 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 class="field_label"><label for="milestone">Milestone:</label></th> + <td><input id="milestone" size="64" maxlength="64" name="milestone" value=" + [%- milestone.name FILTER html %]"></td> + </tr> + <tr> + <th class="field_label"><label for="sortkey">Sortkey:</label></th> + <td><input id="sortkey" size="20" maxlength="20" name="sortkey" value=" + [%- milestone.sortkey FILTER html %]"></td> + </tr> + <tr> + <th class="field_label"><label for="isactive">Enabled For [% terms.Bugs %]:</label></th> + <td><input id="isactive" name="isactive" type="checkbox" value="1" + [% 'checked="checked"' IF milestone.isactive %]></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..10c6f90 --- /dev/null +++ b/template/en/default/admin/milestones/footer.html.tmpl @@ -0,0 +1,55 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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 uri %]">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 uri %]&milestone= + [%- milestone.name FILTER uri %]"> + '[% 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 uri %]">'[% product.name FILTER html %]'</a>. + +[% END %] + + Edit product <a + href="editproducts.cgi?action=edit&product= + [%- product.name FILTER uri %]">'[% 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..1638279 --- /dev/null +++ b/template/en/default/admin/milestones/list.html.tmpl @@ -0,0 +1,98 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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 %] + +[% 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 uri %]&milestone=%%name%%[% END %] +[% delete_contentlink = BLOCK %]editmilestones.cgi?action=del&product= + [%- product.name FILTER uri %]&milestone=%%name%%[% END %] +[% bug_count_contentlink = BLOCK %]buglist.cgi?target_milestone=%%name%%&product= + [%- product.name FILTER uri %][% END %] + + +[% columns = [ + { + name => "name" + heading => "Edit milestone..." + contentlink => edit_contentlink + }, + { + name => "sortkey" + heading => "Sortkey" + }, + { + name => "isactive" + heading => "Active" + yesno_field => 1 + } + ] +%] + +[% 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 uri %]&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..18bb88c --- /dev/null +++ b/template/en/default/admin/milestones/select-product.html.tmpl @@ -0,0 +1,54 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# INTERFACE: + # products: array of product objects + # showbugcounts: if defined, then bug counts should be included in the table + #%] + +[% 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..c63329c --- /dev/null +++ b/template/en/default/admin/params/admin.html.tmpl @@ -0,0 +1,28 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] +[% + 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." } +%] 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..076d2dc --- /dev/null +++ b/template/en/default/admin/params/advanced.html.tmpl @@ -0,0 +1,68 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% + title = "Advanced" + desc = "Settings for advanced configurations." +%] + +[% sts_desc = BLOCK %] + Enables the sending of the + <a href="http://en.wikipedia.org/wiki/Strict_Transport_Security">Strict-Transport-Security</a> + header along with HTTP responses on SSL connections. This adds greater + security to your SSL connections by forcing the browser to always + access your domain over SSL and never accept an invalid certificate. + However, it should only be used if you have the <code>ssl_redirect</code> + parameter turned on, [% terms.Bugzilla %] is the only thing running + on its domain (i.e., your <code>urlbase</code> is something like + <code>http://bugzilla.example.com/</code>), and you never plan to disable + the <code>ssl_redirect</code> parameter. + <ul> + <li> + off - Don't send the Strict-Transport-Security header with requests. + </li> + <li> + this_domain_only - Send the Strict-Transport-Security header with all + requests, but only support it for the current domain. + </li> + <li> + include_subdomains - Send the Strict-Transport-Security header along + with the <code>includeSubDomains</code> flag, which will apply the + security change to all subdomains. This is especially useful when + combined with an <code>attachment_base</code> that exists as (a) + subdomain(s) under the main [% terms.Bugzilla %] domain. + </li> + </ul> +[% END %] + +[% 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.", + + strict_transport_security => sts_desc, +} %] 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..c0c32a4 --- /dev/null +++ b/template/en/default/admin/params/attachment.html.tmpl @@ -0,0 +1,62 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] +[% + 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_desc\"><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.", + + maxattachmentsize => "The maximum size (in kilobytes) of attachments to be stored " _ + "in the database. If a file larger than this size is attached " _ + "to ${terms.abug}, $terms.Bugzilla will look at the " _ + "<a href=\"#maxlocalattachment\"><tt>maxlocalattachment</tt> parameter</a> " _ + "to determine if the file can be stored locally on the web server. " _ + "If the file size exceeds both limits, then the attachment is rejected. " _ + "Settings both parameters to 0 will prevent attaching files to ${terms.bugs}.", + + maxlocalattachment => "The maximum size (in megabytes) of attachments to be stored " _ + "locally on the web server. If set to a value lower than the " _ + "<a href=\"#maxattachmentsize\"><tt>maxattachmentsize</tt> parameter</a>, " _ + "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..0a72938 --- /dev/null +++ b/template/en/default/admin/params/auth.html.tmpl @@ -0,0 +1,130 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] +[% + 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. + 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 regular expression to use for legal email addresses. " _ + "The default tries to match fully qualified email addresses. " _ + "Use <tt>.*</tt> to accept any email address following the " _ + "<a href=\"http://tools.ietf.org/html/rfc2822#section-3.4.1\">RFC 2822</a> " _ + "specification. 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 (case-insensitive) 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.", + + password_complexity => + "Set the complexity required for passwords. In all cases must the passwords " _ + "be at least ${constants.USER_PASSWORD_MIN_LENGTH} characters long." _ + "<ul><li>no_constraints - No complexity required.</li>" _ + "<li>mixed_letters - Passwords must contain at least one UPPER and one lower " _ + "case letter.</li>" _ + "<li>letters_numbers - Passwords must contain at least one UPPER and one " _ + "lower case letter and a number.</li>" _ + "<li>letters_numbers_specialchars - Passwords must contain at least one " _ + "letter, a number and a special character.</li></ul>" + } +%] 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..f442c59 --- /dev/null +++ b/template/en/default/admin/params/bugchange.html.tmpl @@ -0,0 +1,42 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] +[% + title = "$terms.Bug Change Policies" + desc = "Set up $terms.bug change policies" +%] + +[% accept_status = display_value('bug_status', 'IN_PROGRESS') FILTER html %] + +[% 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 ${field_descs.target_milestone}, do you want to require" + _ " that the milestone be set in order for a user to set" + _ " ${terms.abug}'s status to ${accept_status}?", + + 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..07b2008 --- /dev/null +++ b/template/en/default/admin/params/bugfields.html.tmpl @@ -0,0 +1,45 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] +[% + 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?", + + 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/common.html.tmpl b/template/en/default/admin/params/common.html.tmpl new file mode 100644 index 0000000..bf2675b --- /dev/null +++ b/template/en/default/admin/params/common.html.tmpl @@ -0,0 +1,125 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% sortlist_separator = '---' %] + +<dl> + [% FOREACH param = panel.param_list %] + <dt id="[% param.name FILTER html %]_desc">[% param.name FILTER html %]</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" %] + <input id="input_[% param.name FILTER html %]" size="80" + name="[% param.name FILTER html %]" + value="[% Param(param.name) FILTER html %]"><br> + [% boxSize = 7 %] + [% boxSize = 3 + param.choices.size IF param.choices.size < 7 %] + [% plist = Param(param.name).split(',') %] + + <table id="table_[% param.name FILTER html %]" class="bz_default_hidden"> + <tr> + <td rowspan="2"> + <select id="select_[% param.name FILTER html %]" + name="select_[% param.name FILTER html %]" + size="[% boxSize 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 type="text/javascript"> + bz_toggleClass("input_[% param.name FILTER html %]", "bz_default_hidden"); + bz_toggleClass("table_[% param.name FILTER html %]", "bz_default_hidden"); + </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"> + Unknown param type [% param.type FILTER html %]!!! + </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..fd839ed --- /dev/null +++ b/template/en/default/admin/params/core.html.tmpl @@ -0,0 +1,35 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% + 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..e8baf45 --- /dev/null +++ b/template/en/default/admin/params/dependencygraph.html.tmpl @@ -0,0 +1,36 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] +[% + 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 <kbd>checksetup.pl</kbd> + to recreate the .htaccess file if it has been lost."} +%] 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..3febbab --- /dev/null +++ b/template/en/default/admin/params/editparams.html.tmpl @@ -0,0 +1,103 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% 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', 'js/util.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 %] + [% Hook.process("current_panel") %] + <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 uri %]" + 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> + B[% %]ugzilla is developed entirely by volunteers. + The best way to give back to the B[% %]ugzilla 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" id="save-params" 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..daa1f35 --- /dev/null +++ b/template/en/default/admin/params/general.html.tmpl @@ -0,0 +1,73 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% + 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 <kbd>checksetup.pl</kbd> 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..7e30f07 --- /dev/null +++ b/template/en/default/admin/params/groupsecurity.html.tmpl @@ -0,0 +1,46 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] +[% + 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.", + + debug_group => "The name of the group of users who can view the actual " _ + "SQL query generated when viewing $terms.bug lists and reports.", + + 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..65aa398 --- /dev/null +++ b/template/en/default/admin/params/index.html.tmpl @@ -0,0 +1,38 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +<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 uri %]#[% param.name FILTER uri %]_desc"> + [% 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..64b3dbd --- /dev/null +++ b/template/en/default/admin/params/ldap.html.tmpl @@ -0,0 +1,45 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] +[% + 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..f491a30 --- /dev/null +++ b/template/en/default/admin/params/mta.html.tmpl @@ -0,0 +1,67 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] +[% + 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" + _ " <kbd>checksetup.pl</kbd> 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.", + + 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_ssl => "Enable SSL support for SMTP.", + + 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 CONFIRMED " _ + "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..61d32a0 --- /dev/null +++ b/template/en/default/admin/params/patchviewer.html.tmpl @@ -0,0 +1,51 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] +[% + 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..52a960b --- /dev/null +++ b/template/en/default/admin/params/query.html.tmpl @@ -0,0 +1,64 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] +[% + 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 a moderator 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!", + + search_allow_no_criteria => + "Unless the code explicitly allows all $terms.bugs to be returned, this " _ + "parameter permits to block the execution of queries with no criteria. " _ + "When turned off, a query must have some criteria specified to limit " _ + "the number of $terms.bugs returned to the user. When turned on, a user " _ + "is allowed to run a query with no criteria and get all $terms.bugs he can " _ + "see in his list. Turning this parameter on is not recommended on large " _ + "installations.", + + default_search_limit => + "By default, $terms.Bugzilla limits searches done in the web" + _ " interface to returning only this many results, for performance" + _ " reasons. (This only affects the HTML format of search results--CSV," + _ " XML, and other formats are exempted.) Users can click a link on the" + _ " search result page to see all the results." + _ "<p>Usually you should not have to change this--the default value" + _ " should be acceptable for most installations.</p>", + + max_search_results => + "The maximum number of $terms.bugs that a search can" + _ " <strong>ever</strong> return. Tabular and graphical reports" + _ " are exempted from this limit, however.", + +} %] 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..5ac291a --- /dev/null +++ b/template/en/default/admin/params/radius.html.tmpl @@ -0,0 +1,43 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] +[% + 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_desc\">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_desc\">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_desc\">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_desc\">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..9f9f314 --- /dev/null +++ b/template/en/default/admin/params/shadowdb.html.tmpl @@ -0,0 +1,36 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] +[% + 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..ebbc363 --- /dev/null +++ b/template/en/default/admin/params/usermatch.html.tmpl @@ -0,0 +1,29 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] +[% + 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.", + + ajax_user_autocompletion => "If this option is set, typing characters in a certain user " _ + "fields will display a list of matches that can be selected from.", + + 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..eb1094f --- /dev/null +++ b/template/en/default/admin/products/confirm-delete.html.tmpl @@ -0,0 +1,259 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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 uri %]"> + [% 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 uri %]" + 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 uri %]"> + 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 uri %]"> + 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 uri %]" + 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 class="confirmation">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>ALL</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..6d40095 --- /dev/null +++ b/template/en/default/admin/products/create.html.tmpl @@ -0,0 +1,74 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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', 'js/field.js'] + yui = [ 'autocomplete' ] +%] + +[% DEFAULT + product.is_active = 1, + version = "unspecified", + product.defaultmilestone = constants.DEFAULT_MILESTONE + product.allows_unconfirmed = 1 +%] + +<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="20" maxlength="64" 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" checked="checked"> + </td> + </tr> + + <tr> + <td colspan="2"> </td> + </tr> + <tr> + <td colspan="2"> + This product must have at least one component. + You will be able to create additional components later: + </td> + </tr> + + [% PROCESS "admin/components/edit-common.html.tmpl" desc_name = "comp_desc" %] + </table> + + <input type="submit" id="add-product" 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..2b76c44 --- /dev/null +++ b/template/en/default/admin/products/edit-common.html.tmpl @@ -0,0 +1,72 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# INTERFACE: + # product: Bugzilla::Product object; The product + # + # classification: Bugzilla::Classifiation object; classification product is in. + #%] + +[% IF Param('useclassification') %] + <tr> + <th align="right">Classification:</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> + +<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 %]> + </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="64" maxlength="64" name="defaultmilestone" + value="[% product.defaultmilestone FILTER html %]"> + [% END %] + </td> + </tr> +[% END %] + +[% Hook.process('rows') %] 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..c385301 --- /dev/null +++ b/template/en/default/admin/products/edit.html.tmpl @@ -0,0 +1,142 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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 uri %]"> + Edit components: + </a> + </th> + <td> + [% IF product.components.size -%] + [% FOREACH component = product.components %] + <a href="editcomponents.cgi?action=edit&product= + [%- product.name FILTER uri %]&component= + [%- component.name FILTER uri %]">[% component.name FILTER html %]</a>: + [% 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 uri %]">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 uri %]"> + 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 uri %]"> + 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 uri %]"> + [% 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" id="update-product" 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..689c5c9 --- /dev/null +++ b/template/en/default/admin/products/footer.html.tmpl @@ -0,0 +1,79 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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 uri %] + [% END %] + [% classification_url_part_start = BLOCK %]classification= + [%- classification.name FILTER uri %] + [% 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 uri %]"> + '[% 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..fc3ad9b --- /dev/null +++ b/template/en/default/admin/products/groupcontrol/confirm-edit.html.tmpl @@ -0,0 +1,42 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% 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..889647e --- /dev/null +++ b/template/en/default/admin/products/groupcontrol/edit.html.tmpl @@ -0,0 +1,303 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% title = BLOCK %] + Edit Group Controls for [% product.name FILTER html %] +[% END %] +[% PROCESS global/header.html.tmpl + title = title +%] + +[% display_headers = 1 %] +[% FOREACH group = product.group_controls(1).values.sort("name") %] + [% NEXT UNLESS group.group.isactive OR group.bug_count %] + [% IF display_headers %] + [% display_headers = 0 %] + <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> + [% END %] + [% IF !group.group.isactive %] + <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> + [% ELSE %] + <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 %] + +[% IF display_headers %] + <p>No groups are available for products. + [% IF user.in_group('creategroups') %] + <a href="editgroups.cgi?action=add">Create a new group</a> + [% END %] + </p> +[% ELSE %] + </table> + <br> + <input type=submit name="submit" value="submit"> + </form> +[% END %] + +<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..5ee066c --- /dev/null +++ b/template/en/default/admin/products/groupcontrol/updated.html.tmpl @@ -0,0 +1,42 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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..ea32a00 --- /dev/null +++ b/template/en/default/admin/products/list-classifications.html.tmpl @@ -0,0 +1,58 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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/header.html.tmpl + title = "Select Classification" +%] + +[% columns = [ + { + name => "name" + heading => "Edit products of..." + contentlink => 'editproducts.cgi?classification=%%name%%' + }, + { + 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 => 'editproducts.cgi?action=add&classification=%%name%%' }) + %] +[% END %] + +[% Hook.process('before_table') %] + +[% 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..a5126af --- /dev/null +++ b/template/en/default/admin/products/list.html.tmpl @@ -0,0 +1,86 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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 + #%] + +[% IF classification %] + [% classification_url_part = BLOCK %]&classification= + [%- classification.name FILTER uri %] + [%- END %] + [% classification_title = BLOCK %] + in classification '[% classification.name FILTER html %]' + [% END %] +[% END %] + +[% PROCESS global/header.html.tmpl + title = "Select product $classification_title" +%] + +[% columns = [ + { + name => "name" + heading => "Edit product..." + contentlink => 'editproducts.cgi?action=edit&product=%%name%%' + }, + { + name => "description" + heading => "Description" + allow_html_content => 1 + }, + { + name => "is_active" + heading => "Open For New $terms.Bugs" + yesno_field => 1 + }, +] %] + +[% IF showbugcounts %] + + [% columns.push({ + name => "bug_count" + heading => "$terms.Bug Count" + align => 'right' + contentlink => 'buglist.cgi?product=%%name%%' + }) + %] + +[% END %] + +[% columns.push({ + heading => "Action" + content => "Delete" + contentlink => 'editproducts.cgi?action=del&product=%%name%%' + }) +%] + +[% 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..4d22801 --- /dev/null +++ b/template/en/default/admin/products/updated.html.tmpl @@ -0,0 +1,90 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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'] +%] + +[% 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 uri %]">[% 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.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 uri %]&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 %] + +[% Hook.process('changes') %] + +[% IF !changes.keys.size %] + <p>Nothing changed for product '[% product.name FILTER html %]'.</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..6814662 --- /dev/null +++ b/template/en/default/admin/sanitycheck/list.html.tmpl @@ -0,0 +1,26 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% 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..bb5ca06 --- /dev/null +++ b/template/en/default/admin/sanitycheck/messages.html.tmpl @@ -0,0 +1,312 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% 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 uri %]=1&token= + [%- issue_hash_token(['sanitycheck']) FILTER uri %]">[% 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_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&token= + [%- issue_hash_token(['sanitycheck']) FILTER uri %]">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&token= + [%- issue_hash_token(['sanitycheck']) FILTER uri %]">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&token= + [%- issue_hash_token(['sanitycheck']) FILTER uri %]">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 == "profile_login_start" %] + Checking profile logins. + + [% ELSIF san_tag == "product_alert" %] + Product <a href="editproducts.cgi?product=[% name FILTER html%]"> + [%- name FILTER html %]</a> has no components or no versions. + + [% ELSIF san_tag == "product_check_start" %] + Checking products with no components or versions. + + [% 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&token= + [%- issue_hash_token(['sanitycheck']) FILTER uri %]">Send these mails</a>. + + [% 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&token= + [%- issue_hash_token(['sanitycheck']) FILTER uri %]">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 uri %]">[% bug_id FILTER html %]</a> + [% ", " IF !loop.last %] + [% END %] + (<a href="buglist.cgi?bug_id=[% badbugs.join(",") FILTER uri %]">as [% terms.bug %] list</a>). +[% END %] + +[% BLOCK bug_link %] + <a href="show_bug.cgi?id=[% bug_id FILTER uri %]">[% 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..411c527 --- /dev/null +++ b/template/en/default/admin/settings/edit.html.tmpl @@ -0,0 +1,93 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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..4d072f1 --- /dev/null +++ b/template/en/default/admin/sudo.html.tmpl @@ -0,0 +1,91 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% 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" size="20"> + <input type="hidden" name="Bugzilla_login_token" + value="[% login_request_token FILTER html %]"> + <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" id="begin_sudo" 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..80f6417 --- /dev/null +++ b/template/en/default/admin/table.html.tmpl @@ -0,0 +1,164 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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 + # + #%] + +[%################### 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 %] + [% FOREACH m = contentlink.match('%%(.+?)%%', 1) %] + [% replacement_value = FILTER uri; row.$m; END %] + [% contentlink = contentlink.replace("%%$m%%", replacement_value) %] + [% END %] + <a href="[% contentlink %]"> + [% END %] + + [% IF content_use_field %] + [% colname = row.${c.name} %] + [% field_descs.${colname} FILTER html %] + [% ELSIF content %] + [% content FILTER html_light %] + [% ELSIF yesno_field %] + [% row.${c.name} ? "Yes" : "No" %] + [% ELSIF allow_html_content %] + [% row.${c.name} FILTER html_light %] + [% ELSE %] + [% row.${c.name} FILTER html %] + [% 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..73a72d0 --- /dev/null +++ b/template/en/default/admin/users/confirm-delete.html.tmpl @@ -0,0 +1,471 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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 + # 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 uri %]">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 uri %]">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 uri %]">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 uri %]">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 || watch.watched || + watch.watcher || whine_events || whine_schedules || otheruser.has_audit_entries || + other_safe %] + <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 uri %]">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 uri %]">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 uri %]">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 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 %] + [% IF otheruser.has_audit_entries %] + <li> + The user has performed audited administrative tasks + that are logged in the database. + If you delete this user account, the audit log entries + will no longer be indentifiable. + </li> + [% END %] + [% Hook.process('warn_safe') %] + </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..354ba5f --- /dev/null +++ b/template/en/default/admin/users/create.html.tmpl @@ -0,0 +1,51 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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..b75f840 --- /dev/null +++ b/template/en/default/admin/users/edit.html.tmpl @@ -0,0 +1,173 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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" + javascript_urls = [ 'js/field.js' ] +%] + +[% 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> + + <tr> + <th>Last Login:</th> + <td> + [% IF otheruser.last_seen_date %] + [% otheruser.last_seen_date FILTER html %] + [% ELSE %] + <em>never</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..ff23b77 --- /dev/null +++ b/template/en/default/admin/users/list.html.tmpl @@ -0,0 +1,111 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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' + } + {name => 'last_seen_date' + heading => 'Last Login' + } + {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.is_enabled ? "missing" : "bz_inactive missing") %] + [% overrides.realname.login_name.${thisuser.login_name} = { + content => "missing" + override_content => 1 + class => "$classes" + override_class => 1 + } + %] + [% ELSIF !thisuser.is_enabled %] + [% overrides.realname.login_name.${thisuser.login_name} = { + class => "bz_inactive" + override_class => 1 + } + %] + [% END %] + + [% IF !thisuser.is_enabled %] + [% 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..bd03113 --- /dev/null +++ b/template/en/default/admin/users/listselectvars.html.tmpl @@ -0,0 +1,26 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# INTERFACE: + # + # listselectionvalues: selection values to recreate the current user list. + #%] + +[% BLOCK listselectionurlparams %] + [% FOREACH field = listselectionvalues.keys %]& + [% field FILTER uri %]= + [% listselectionvalues.$field FILTER uri %] + [% 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..9e6e48c --- /dev/null +++ b/template/en/default/admin/users/responsibilities.html.tmpl @@ -0,0 +1,57 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% 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> + <th>Default CC</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 uri %]&component= + [% component.name FILTER uri %]"> + [% 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 %] + <td class="center"> + [% component.initial_cc.contains(otheruser) ? "X" : " " %] + </td> + </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..c66af4c --- /dev/null +++ b/template/en/default/admin/users/search.html.tmpl @@ -0,0 +1,79 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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 %] + +<p> + <input type="checkbox" name="enabled_only" value="1" id="enabled_only" + checked="checked"> + <label for="enabled_only">Enabled user accounts only</label> +</p> + +[% Hook.process('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..ae952d1 --- /dev/null +++ b/template/en/default/admin/users/userdata.html.tmpl @@ -0,0 +1,109 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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 + #%] + +<script type="text/javascript"> + var disable_mail_manually_set = [% (otheruser.email_disabled ? 1 : 0) FILTER js %]; +</script> + +<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 uri %]">Impersonate this user</a> + [% END %] + [% END %] + [% ELSE %] + [% otheruser.login FILTER html %] + [% END %] + </td> +</tr> +[% IF default_authorizer.extern_id_used %] + <tr> + <th><label for="extern_id">External Login ID:</label></th> + <td> + [% IF editusers %] + <input size="64" maxlength="64" name="extern_id" + id="extern_id" value="[% otheruser.extern_id FILTER html %]"> + [% ELSE %] + [% otheruser.extern_id FILTER html %] + [% END %] + </td> + </tr> +[% END %] +<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" name="password" id="password" + value="" autocomplete="off" /> + [% 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 %] + onchange="disable_mail_manually_set=1;"> + (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 + onchange = "userDisabledTextOnChange(this);" + %]<br> + (If non-empty, then it will not be possible to log in using this account, + 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..e6f3922 --- /dev/null +++ b/template/en/default/admin/versions/confirm-delete.html.tmpl @@ -0,0 +1,89 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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 + 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">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 uri %]&product= + [%- product.name FILTER uri %]"> + [%- version.bug_count FILTER none %]</a> +[% ELSE %] + None +[% END %] + </td> +</tr> +</table> + +<h2>Confirmation</h2> + +[% IF version.bug_count %] + <p class="confirmation"> + Sorry, there + [% IF version.bug_count > 1 %] + are [% version.bug_count FILTER none %] outstanding [% terms.bugs %] + [% ELSE %] + is [% version.bug_count FILTER none %] outstanding [% terms.bug %] + [% END %] + + for this version. You must move + + [% IF version.bug_count > 1 %] + those [% terms.bugs %] + [% ELSE %] + that [% terms.bug %] + [% END %] + to another version before this version can be deleted. + </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..af72582 --- /dev/null +++ b/template/en/default/admin/versions/create.html.tmpl @@ -0,0 +1,40 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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..195a94c --- /dev/null +++ b/template/en/default/admin/versions/edit.html.tmpl @@ -0,0 +1,47 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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. + #%] + +[% 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 class="field_label"><label for="version">Version:</label></th> + <td><input id="version" size="64" maxlength="64" name="version" value=" + [%- version.name FILTER html %]"></td> + </tr> + <tr> + <th class="field_label"><label for="isactive">Enabled For [% terms.Bugs %]:</label></th> + <td><input id="isactive" name="isactive" type="checkbox" value="1" + [% 'checked="checked"' IF version.isactive %]></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..0af63a8 --- /dev/null +++ b/template/en/default/admin/versions/footer.html.tmpl @@ -0,0 +1,53 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# 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 uri %]">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 uri %]&version= + [%- version.name FILTER uri %]"> + '[% 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 uri %]">'[% product.name FILTER html %]'</a>. + +[% END %] + + Edit product <a + href="editproducts.cgi?action=edit&product= + [%- product.name FILTER uri %]">'[% 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..1cf3e86 --- /dev/null +++ b/template/en/default/admin/versions/list.html.tmpl @@ -0,0 +1,79 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# INTERFACE: + # product: object; Bugzilla::Product object representing the product to + # which the versions belongs. + #%] + +[% 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 uri %]&version=%%name%%[% END %] +[% delete_contentlink = BLOCK %]editversions.cgi?action=del&product= + [%- product.name FILTER uri %]&version=%%name%%[% END %] +[% bug_count_contentlink = BLOCK %]buglist.cgi?version=%%name%%&product= + [%- product.name FILTER uri %][% END %] + + +[% columns = [ + { + name => "name" + heading => "Edit version..." + contentlink => edit_contentlink + }, + { + name => "isactive" + heading => "Active" + yesno_field => 1 + } + ] +%] + +[% 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 uri %]&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..e40e408 --- /dev/null +++ b/template/en/default/admin/versions/select-product.html.tmpl @@ -0,0 +1,54 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[%# INTERFACE: + # products: array of product objects + # showbugcounts: if defined, then bug counts should be included in the table + #%] + +[% 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..b5907d1 --- /dev/null +++ b/template/en/default/admin/workflow/comment.html.tmpl @@ -0,0 +1,82 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% 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" id="update_comment" 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..403405b --- /dev/null +++ b/template/en/default/admin/workflow/edit.html.tmpl @@ -0,0 +1,100 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% 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 %] + [% 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" id="update_workflow" 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 %] |