use base qw(Bugzilla::Object Exporter);
@Bugzilla::User::EXPORT = qw(is_available_username
- login_to_id user_id_to_login
+ login_to_id user_id_to_login
USER_MATCH_MULTIPLE USER_MATCH_FAILED USER_MATCH_SUCCESS
MATCH_SKIP_CONFIRM
);
include_fields => Optional [ ArrayRef [Str] ],
Bugzilla_api_token => Optional [Str]
];
-
+
ThrowCodeError( 'param_invalid', { function => 'Bug.possible_duplicates', param => 'A param' } )
if !$params_type->check($params);
if ($params->{id}) {
my $bug = Bugzilla::Bug->check({ id => $params->{id}, cache => 1 });
$summary = $bug->short_desc;
- }
+ }
elsif ($params->{summary}) {
$summary = $params->{summary};
- }
+ }
else {
ThrowCodeError('param_required',
{ function => 'Bug.possible_duplicates', param => 'id or summary' });
if ($params->{id}) {
@$possible_dupes = grep { $_->id != $params->{id} } @$possible_dupes;
}
-
+
my @hashes = map { $self->_bug_to_hash($_, $params) } @$possible_dupes;
$self->_add_update_tokens($params, $possible_dupes, \@hashes);
return { bugs => \@hashes };
sub jobqueue_status {
my ( $self, $params ) = @_;
-
+
Bugzilla->login(LOGIN_REQUIRED);
my $dbh = Bugzilla->dbh;
(SELECT COUNT(*)
FROM ts_error
WHERE ts_error.jobid = j.jobid
- )
+ )
, 0) AS errors
FROM ts_job j
INNER JOIN ts_funcmap f
The problem is that these both pass different things for $self to WebService
methods.
-When XMLRPC::Lite calls a method, $self is the name of the *class* the
+When XMLRPC::Lite calls a method, $self is the name of the *class* the
method is in. For example, if we call Bugzilla.version(), the first argument
is Bugzilla::WebService::Bugzilla. So in order to have $self
(our first argument) act correctly in XML-RPC, we make all WebService
-classes use base qw(Bugzilla::WebService).
+classes use base qw(Bugzilla::WebService).
When JSON::RPC calls a method, $self is the JSON-RPC *server object*. In other
words, it's an instance of Bugzilla::WebService::Server::JSONRPC. So we have
means any form of the work other than Source Code Form.
1.7. "Larger Work"
- means a work that combines Covered Software with other material, in
+ means a work that combines Covered Software with other material, in
a separate file or files, that is not Covered Software.
1.8. "License"
maintainer CDATA #REQUIRED
exporter CDATA #IMPLIED
>
-<!ELEMENT bug (bug_id, (alias?, creation_ts, short_desc, delta_ts, reporter_accessible,
- cclist_accessible, classification_id, classification, product, component,
- version, rep_platform, op_sys, bug_status, resolution?, dup_id?, see_also*,
- bug_file_loc?, status_whiteboard?, keywords*, priority, bug_severity,
- target_milestone?, dependson*, blocked*, everconfirmed, reporter, assigned_to,
- cc*, (estimated_time, remaining_time, actual_time, deadline?)?, qa_contact?,
+<!ELEMENT bug (bug_id, (alias?, creation_ts, short_desc, delta_ts, reporter_accessible,
+ cclist_accessible, classification_id, classification, product, component,
+ version, rep_platform, op_sys, bug_status, resolution?, dup_id?, see_also*,
+ bug_file_loc?, status_whiteboard?, keywords*, priority, bug_severity,
+ target_milestone?, dependson*, blocked*, everconfirmed, reporter, assigned_to,
+ cc*, (estimated_time, remaining_time, actual_time, deadline?)?, qa_contact?,
votes?, token?, group*, flag*, long_desc*, attachment*)?)>
<!ATTLIST bug
error (NotFound | NotPermitted | InvalidBugId) #IMPLIED
<!ELEMENT version (#PCDATA)>
<!ELEMENT rep_platform (#PCDATA)>
<!ELEMENT assigned_to (#PCDATA)>
-<!ATTLIST assigned_to
+<!ATTLIST assigned_to
name CDATA #REQUIRED
>
<!ELEMENT delta_ts (#PCDATA)>
<!ATTLIST flag
name CDATA #REQUIRED
id CDATA #REQUIRED
- type_id CDATA #REQUIRED
+ type_id CDATA #REQUIRED
status CDATA #REQUIRED
setter CDATA #REQUIRED
requestee CDATA #IMPLIED
A good starting place to read this code is the gather.sh shell script. This
script is the driver for the remaining collection and processing scripts which
-populate the reports and charts.
+populate the reports and charts.
- Collection scripts are run once per week as a cron job
- API results
.. toctree::
:maxdepth: 1
:glob:
-
+
../extensions/*/index-admin
categorise bugs. For example, the keyword "regression" is commonly used.
A company might have a policy stating all regressions
must be fixed by the next release—this keyword can make tracking those
-bugs much easier. Keywords are global, rather than per product.
+bugs much easier. Keywords are global, rather than per product.
Keywords can be created, edited, or deleted by clicking the "Keywords"
link in the admin page. There are two fields for each keyword—the keyword
set by the administrator, then the maximum limit will
be used instead. If you set the limit equal to zero,
then all matching results will be returned instead.
-longdescs.count int The number of comments a bug has. The bug's description
+longdescs.count int The number of comments a bug has. The bug's description
is the first comment. For example, to find bugs which someone
- has commented on after they have been filed, search on
+ has commented on after they have been filed, search on
``longdescs.count`` *greater than* 1.
offset int Used in conjunction with the ``limit`` argument,
``offset`` defines the starting position for the
This only appears if the change was to an attachment,
otherwise ``attachment_id`` will not be present in this
object.
-============= ====== ==========================================================
\ No newline at end of file
+============= ====== ==========================================================
GET /rest/jobqueue_status
-This method requires an authenticated user.
+This method requires an authenticated user.
**Response**
=============== ======= ====================================================
total integer The total number of jobs in the job queue.
errors integer The number of errors produced by jobs in the queue.
-=============== ======= ====================================================
\ No newline at end of file
+=============== ======= ====================================================
my $field = new Bugzilla::Field({ name => $name });
return if $field;
-
+
$field = Bugzilla::Field->create({
name => $name,
description => $description,
.. code-block:: perl
- BEGIN {
- *Bugzilla::Bug::is_foopy = \&_bug_is_foopy;
+ BEGIN {
+ *Bugzilla::Bug::is_foopy = \&_bug_is_foopy;
}
-
+
...
-
+
sub _bug_is_foopy {
return $_[0]->{'is_foopy'};
}
...use a word other than 'bug' to describe bugs?
:ref:`Edit or override <templates>` the appropriate values in the template
:file:`template/en/default/global/variables.none.tmpl`.
-
+
...call the system something other than 'Bugzilla'?
:ref:`Edit or override <templates>` the appropriate value in the template
:file:`template/en/default/global/variables.none.tmpl`.
-
+
...alter who can change what field when?
See :ref:`who-can-change-what`.
Bugzilla's templates can be localized, although it's a `big job
<https://wiki.mozilla.org/Bugzilla:L10n:Guide>`_. If you have
-a localized set of templates for your version of Bugzilla, Bugzilla can
+a localized set of templates for your version of Bugzilla, Bugzilla can
support multiple languages at once. In that case, Bugzilla honours the user's
``Accept-Language`` HTTP header when deciding which language to serve. If
multiple languages are installed, a menu will display in the header allowing
`bugzilla.mozilla.org <http://git.mozilla.org/?p=webtools/bmo/bugzilla.git>`_.
However, in each
case you may need to check that the skin supports the version of Bugzilla
-you have.
+you have.
To create a new custom skin, make a directory that contains all the same CSS
file names as :file:`skins/standard/`, and put your directory in
.. toctree::
:maxdepth: 1
:glob:
-
+
../extensions/*/index-user
*Product and Component*:
Bugs are divided up by Product and Component, with a Product
- having one or more Components in it.
+ having one or more Components in it.
*Version:*
The "Version" field usually contains the numbers or names of released
Priority to your Team: [% cgi.param('team_priority') %]
Timeframe for Signature: [% cgi.param('signature_time') %]
-Name of Other Party:
+Name of Other Party:
[%+ cgi.param('other_party') %]
-Business Objective:
+Business Objective:
[%+ cgi.param('business_obj') %]
What is this purchase?:
# enter_bug.cgi) can be access via Bugzilla.cgi.param. It can be used to
# pull out various custom fields and format an initial Description entry
# from them.
- #%]
+ #%]
[% USE Bugzilla %]
[% cgi = Bugzilla.cgi %]
List Name: [% cgi.param("listName") %]
<td colspan="3">
<div id="possible_duplicates"></div>
<script>
- var dt_columns = [
+ var dt_columns = [
{ key: "id", label: "[% field_descs.bug_id FILTER js %]",
formatter: YAHOO.bugzilla.dupTable.formatBugLink },
- { key: "summary",
+ { key: "summary",
label: "[% field_descs.short_desc FILTER js %]",
formatter: "text" },
{ key: "status",
</th>
<td>
<i>
- Describe your request, what items are we purchasing, including number of
+ Describe your request, what items are we purchasing, including number of
units if available.<br>Also provide context and background. Enter No if not
a purchase order.</i><br>
<textarea name="what_purchase" id="what_purchase" rows="5" cols="40"></textarea>
<label for="attachment">Attachment:</label>
</th>
<td>
- <i>Upload document that needs to be signed. If this is a Purchase Request form,<br>
+ <i>Upload document that needs to be signed. If this is a Purchase Request form,<br>
also upload any supporting document such as draft SOW, quote, order form, etc.</i>
<div>
<input type="file" id="attachment" name="data" size="50">
<div id="message">
<b>Note:</b>
- You must use <a href="https://mozilla.service-now.com/"><b>Service Now</b></a>
+ You must use <a href="https://mozilla.service-now.com/"><b>Service Now</b></a>
to request a distribution list or a standard mailing list.
</div>
<br>
<span class="mandatory" title="Required">*</span> List Name:
</th>
<td>
- The desired name for the newsgroup. Should start with 'mozilla.' and fit somewhere
+ The desired name for the newsgroup. Should start with 'mozilla.' and fit somewhere
in the hierarchy described <a href="https://www.mozilla.org/about/forums/">here</a>.<br>
<input name="listName" id="listName" size="60" value="[% listName FILTER html %]">
</td>
-[%# The contents of this file are subject to the Mozilla Public
- # License Version 1.1 (the "License"); you may not use this file
- # except in compliance with the License. You may obtain a copy of
- # the License at http://www.mozilla.org/MPL/
- #
- # Software distributed under the License is distributed on an "AS
- # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- # implied. See the License for the specific language governing
- # rights and limitations under the License.
- #
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
# The Original Code is the BMO Bugzilla Extension.
#
# The Initial Developer of the Original Code is the Mozilla Foundation
# Portions created by the Initial Developers are Copyright (C) 2011 the
# Initial Developer. All Rights Reserved.
#
- # Contributor(s):
+ # Contributor(s):
# David Lawrence <dkl@mozilla.com>
- #%]
-
-[% PROCESS global/variables.none.tmpl %]
-
-[% PROCESS global/header.html.tmpl
- title = "Mozilla Corporation/Foundation Encryption Recovery Key"
+ #%]
+
+[% PROCESS global/variables.none.tmpl %]
+
+[% PROCESS global/header.html.tmpl
+ title = "Mozilla Corporation/Foundation Encryption Recovery Key"
%]
-
+
<p>Please complete the following information as you are encrypting your laptop.</p>
<ul>
- <li>The Recovery Key will be displayed during the encryption process
+ <li>The Recovery Key will be displayed during the encryption process
(<a href="https://mana.mozilla.org/wiki/display/INFRASEC/Desktop+Security#DesktopSecurity-DiskencryptionFileVault">more info</a>)
</li>
<li>The asset tag number is located on a sticker typically on the bottom of the device.</li>
</table>
</form>
-[% PROCESS global/footer.html.tmpl %]
+[% PROCESS global/footer.html.tmpl %]
-[%# 1.0@bugzilla.org %]
-[%# The contents of this file are subject to the Mozilla Public
- # License Version 1.1 (the "License"); you may not use this file
- # except in compliance with the License. You may obtain a copy of
- # the License at http://www.mozilla.org/MPL/
- #
- # Software distributed under the License is distributed on an "AS
- # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- # implied. See the License for the specific language governing
- # rights and limitations under the License.
- #
- # The Original Code is the Bugzilla Bug Tracking System.
- #
- # The Initial Developer of the Original Code is Netscape Communications
- # Corporation. Portions created by Netscape are
- # Copyright (C) 1998 Netscape Communications Corporation. All
- # Rights Reserved.
- #
- # Contributor(s): Gervase Markham <gerv@gerv.net>
+[%# 1.0@bugzilla.org %]
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
# Ville Skyttä <ville.skytta@iki.fi>
# John Hoogstrate <hoogstrate@zeelandnet.nl>
- #%]
-
-[% PROCESS global/variables.none.tmpl %]
-
-[% PROCESS global/header.html.tmpl
- title = "Trademark Usage Requests"
+ #%]
+
+[% PROCESS global/variables.none.tmpl %]
+
+[% PROCESS global/header.html.tmpl
+ title = "Trademark Usage Requests"
%]
-
-[% USE Bugzilla %]
+
+[% USE Bugzilla %]
<p>
- If, after reading
+ If, after reading
<a href="https://www.mozilla.org/foundation/trademarks/">the trademark policy
documents</a>, you know you need permission to use a certain trademark, this
is the place to be.
<p><strong>Please use this form for trademark requests only!</strong></p>
<form method="post" action="post_bug.cgi" id="tmRequestForm">
-
+
<input type="hidden" name="product" value="Marketing">
<input type="hidden" name="component" value="Trademark Permissions">
<input type="hidden" name="bug_severity" value="enhancement">
<input type="submit" id="commit" value="Submit Request">
</form>
-<p>Thanks for contacting us.
+<p>Thanks for contacting us.
You will be notified by email of any progress made in resolving your
request.
</p>
-[% PROCESS global/footer.html.tmpl %]
+[% PROCESS global/footer.html.tmpl %]
[% END %]
[% END %]
</ul>
- Configure your email settings at
+ Configure your email settings at
<a href="[% urlbase FILTER none %]userprefs.cgi?tab=email">[% urlbase FILTER none %]userprefs.cgi?tab=email</a>.
</div>
[% USE Bugzilla %]
[% IF Bugzilla.request_cache.bmo_fields_page %]
- [%
+ [%
vars.help_html.priority =
"This field describes the importance and order in which $terms.abug
should be fixed compared to other ${terms.bugs}. This field is utilized
by the programmers/engineers to prioritize their work to be done where
P1 is considered the highest and P5 is the lowest."
-
+
vars.help_html.bug_severity =
"This field describes the impact of ${terms.abug}.
<table>
<th>enhancement</th>
<td>Request for enhancement</td>
</table>"
-
- vars.help_html.rep_platform =
- "This is the hardware platform against which the $terms.bug was reported.
+
+ vars.help_html.rep_platform =
+ "This is the hardware platform against which the $terms.bug was reported.
Legal platforms include:
<ul>
<li>All (happens on all platforms; cross-platform ${terms.bug})</li>
</ul>
<b>Note:</b> When searching, selecting the option
<em>All</em> does not
- select $terms.bugs assigned against any platform. It merely selects
- $terms.bugs that are marked as occurring on all platforms, i.e. are
+ select $terms.bugs assigned against any platform. It merely selects
+ $terms.bugs that are marked as occurring on all platforms, i.e. are
designated <em>All</em>.",
-
+
vars.help_html.op_sys =
"This is the operating system against which the $terms.bug was
reported. Legal operating systems include:
</ul>
Sometimes the operating system implies the platform, but not
always. For example, Linux can run on x86_64, ARM, and others.",
-
+
vars.help_html.assigned_to =
"This is the person in charge of resolving the ${terms.bug}. Every time
- this field changes, the status changes to
+ this field changes, the status changes to
<b>NEW</b> to make it
easy to see which new $terms.bugs have appeared on a person's list.</p>",
%]
[% title = title _ "($filtered_alias) " %]
[% END %]
[% title = title _ filtered_desc %]
-[% javascript = javascript _
+[% javascript = javascript _
"document.title = document.title.replace(/^" _ terms.Bug _ " /, '');"
%]
[% js_bug_id = bug.bug_id FILTER js %]
</span>
</td>
</tr>
-
+
<tr>
<td> </td>
<td colspan="2">
<p>Work continues on improving usability for the next release of
[%+ terms.Bugzilla %], but the results of the research have already
had an impact on this 3.6 release.</p>
-
+
<h4>Improved Quicksearch</h4>
<p>The "quicksearch" box that appears on the front page of
<p>There is now a "Browse" link in the header of each [% terms.Bugzilla %]
page that presents a very basic interface that allows users to simply
browse through all open [% terms.bugs %] in particular components.</p>
-
+
<h4>JSON-RPC Interface</h4>
<p>[% terms.Bugzilla %] now has support for the
mandatory.</li>
<li><b>[% terms.Bug %] Filing:</b> "Bookmarkable templates" now
support the "alias" and "estimated hours" fields.</li>
-
+
<li><b>[% terms.Bug %] Editing:</b> In previous versions of
[%+ terms.Bugzilla %], if you added a private comment to [% terms.abug %],
then <em>none</em> of the changes that you made at that time were
<li><b>Attachments:</b> When you click on an "attachment 12345" link
in a comment, if the attachment is a patch, you will now see the
formatted "Diff" view instead of the raw patch.</li>
- <li><b>Attachments</b>: For text attachments, we now let the browser
+ <li><b>Attachments</b>: For text attachments, we now let the browser
auto-detect the character encoding, instead of forcing the browser to
always assume the attachment is in UTF-8.</li>
-
+
<li><b>Search:</b> You can now display [% terms.bug %] flags as a column
in search results.</li>
<li><b>Search:</b> When viewing search results, you can see which columns are
<kbd>buglist.cgi</kbd> now accepts nearly every valid field in
[%+ terms.Bugzilla %] as a direct URL parameter, like
<kbd>&field=value</kbd>.</li>
-
+
<li><b>Requests:</b> When viewing the "My Requests" page, you can now
see the lists as a normal search result by clicking a link at the
bottom of each table.</li>
if there are no [% terms.bugs %] that match your searches.</li>
<li>The arrows in dependency graphs now point the other way, so that
[%+ terms.bugs %] point at their dependencies.</li>
-
+
<li><b>New Charts:</b> You can now convert an existing Saved Search
into a data series for New Charts.</li>
<li><b>New Charts:</b> There is now an interface that allows you to
<li>Information about duplicates is now stored in the database instead
of being stored in the <kbd>data/</kbd> directory. On large installations
this could save several hundred megabytes of disk space.</li>
-
+
<li>When editing a group, you can now specify that members of a group
are allowed to grant others membership in that group itself.</li>
<li>The ability to compress BMP attachments to PNGs is now an Extension.
There used to be an issue in <a href="https://www.bugzilla.org/">Bugzilla</a>
which caused activity data to be lost if there were a large number of cc's
or dependencies. That has been fixed, but some data was already lost in
- your activity table that could not be regenerated. The changes that
+ your activity table that could not be regenerated. The changes that
could not reliably determine are prefixed by '?'.
</p>
[% END %]
'<input type="checkbox" id="field_' + field.id + '_cb" ' +
'onClick="onFieldToggle(this,' + field.id + ')">' +
'</td>' +
- '<td class="disabled" id="field_' + field.id + '_td">' +
+ '<td class="disabled" id="field_' + field.id + '_td">' +
'<label for="field_' + field.id + '_cb">' +
field.desc.htmlEncode() + ':</label>' +
'</td>' +
version 2
7th April 2007
Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/
-
+
Instructions:
Download this file
Add <script src="sorttable.js"></script> to your HTML
Add class="sortable" to any table you'd like to make sortable
Click on the headers to sort
-
+
Thanks to many, many people for contributions and suggestions.
Licenced as X11: http://www.kryogenix.org/code/browser/licence.html
This basically means: do what you want with it.
arguments.callee.done = true;
// kill the timer
if (_timer) clearInterval(_timer);
-
+
if (!document.createElement || !document.getElementsByTagName) return;
-
+
sorttable.DATE_RE = /^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/;
-
+
forEach(document.getElementsByTagName('table'), function(table) {
if (table.className.search(/\bsortable\b/) != -1) {
sorttable.makeSortable(table);
}
});
-
+
},
- /*
+ /*
* Prepares the table so that it can be sorted
*
*/
}
// Safari doesn't support table.tHead, sigh
if (table.tHead == null) table.tHead = table.getElementsByTagName('thead')[0];
-
+
//if (table.tHead.rows.length != 1) return; // can't cope with two header rows
-
+
// Sorttable v1 put rows with a class of "sortbottom" at the bottom (as
// "total" rows, for example). This is B&R, since what you're supposed
// to do is put them in a tfoot. So, if there are sortbottom rows,
table.sorttable_rows = table_rows;
table.sorttable_body_size = body_size;
table.sorttable_bodies = bodies;
-
+
// work through each column and calculate its type
_check_already_sorted: function(cell) {
if (cell.className.search(/\bsorttable_sorted\b/) != -1) {
- // if we're already sorted by this column, just
+ // if we're already sorted by this column, just
// reverse the table, which is quicker
sorttable.reverse_table(cell);
}
if (cell.className.search(/\bsorttable_sorted_reverse\b/) != -1) {
- // if we're already sorted by this column in reverse, just
+ // if we're already sorted by this column in reverse, just
// re-reverse the table, which is quicker
sorttable.reverse_table(cell);
return;
- // First, remove sorttable_sorted classes from the other header
+ // First, remove sorttable_sorted classes from the other header
// that is currently sorted and its marker (the simbol indicating
// that its sorted.
sorttable._remove_sorted_classes(this.table.tHead);
sorttable._mark_column_as_sorted(this, '▼', 0);
sorttable.sort_table(this);
-
+
},
sort_table: function(cell) {
body_size = cell.table.sorttable_body_size;
body_index = 0;
- for (var j=0; j<rows.length; j++) {
+ for (var j=0; j<rows.length; j++) {
if (j % 2)
rows[j].className = rows[j].className.replace('bz_row_even',
'bz_row_odd');
cell.table.sorttable_rows = rows;
},
-
+
reverse_table: function(cell) {
oldrows = cell.table.sorttable_rows;
newrows = [];
tb = cell.table.sorttable_bodies[0];
body_size = cell.table.sorttable_body_size;
body_index = 0;
-
+
var BUGLIST = '';
cell.table.sorttable_rows = [];
delete newrows;
},
-
+
guessType: function(table, column) {
// guess the type of a column based on its first non-blank row
sortfn = sorttable.sort_alpha;
for (var i=0; i<table.sorttable_bodies[0].rows.length; i++) {
text = sorttable.getInnerText(table.sorttable_bodies[0].rows[i].cells[column]);
if (text != '') {
- if (text.match(/^-?[£$¤]?[\d,.]+%?$/)) {
+ if (text.match(/^-?[£$¤]?[\d,.]+%?$/)) {
return sorttable.sort_numeric;
}
- // check for a date: dd/mm/yyyy or dd/mm/yy
+ // check for a date: dd/mm/yyyy or dd/mm/yy
// can have / or . or - as separator
// can be mm/dd as well
possdate = text.match(sorttable.DATE_RE)
}
return sortfn;
},
-
+
getInnerText: function(node) {
// gets the text we want to use for sorting for a cell.
// strips leading and trailing whitespace.
hasInputs = (typeof node.getElementsByTagName == 'function') &&
node.getElementsByTagName('input').length;
-
+
if (typeof node.getAttribute != 'undefined' && node.getAttribute("sorttable_customkey") != null) {
return node.getAttribute("sorttable_customkey");
}
}
}
},
-
+
/* sort functions
each sort function takes two parameters, a and b
you are comparing a.sort_data and b.sort_data */
sort_numeric: function(a,b) {
aa = parseFloat(a.sort_data.replace(/[^0-9.-]/g,''));
if (isNaN(aa)) aa = 0;
- bb = parseFloat(b.sort_data.replace(/[^0-9.-]/g,''));
+ bb = parseFloat(b.sort_data.replace(/[^0-9.-]/g,''));
if (isNaN(bb)) bb = 0;
return aa-bb;
},
if (dt1<dt2) return -1;
return 1;
},
-
+
shaker_sort: function(list, comp_func) {
// A stable sort function to allow multi-level sorting of data
// see: http://en.wikipedia.org/wiki/Cocktail_sort
b++;
} // while(swap)
- }
+ }
}
/* ******************************************************************
return total;
}
-function calculateTotalSwag() {
- document.getElementById('Totalswag').value =
+function calculateTotalSwag() {
+ document.getElementById('Totalswag').value =
getTotal( new Array('Lanyards',
'Stickers',
'Bracelets',
'Tattoos',
'Buttons',
'Posters'));
-
+
}
-function calculateTotalMensShirts() {
- document.getElementById('mens_total').value =
+function calculateTotalMensShirts() {
+ document.getElementById('mens_total').value =
getTotal( new Array('mens_s',
'mens_m',
'mens_l',
'mens_xl',
'mens_xxl',
'mens_xxxl'));
-
+
}
-function calculateTotalWomensShirts() {
- document.getElementById('womens_total').value =
+function calculateTotalWomensShirts() {
+ document.getElementById('womens_total').value =
getTotal( new Array('womens_s',
'womens_m',
'womens_l',
'womens_xl',
'womens_xxl',
'womens_xxxl'));
-
+
}
function() {
alert("Network issues. Please refresh the page and try again");
}
- );
+ );
}
$(document).ready(function() {
callback(initial.keywords);
}
});
-
+
$("#product").on("change", function () {
component_load($("#product").val());
});
# defined by the Mozilla Public License, v. 2.0.
#%]
-[% watch_reason_descs.${constants.REL_COMPONENT_WATCHER} =
+[% watch_reason_descs.${constants.REL_COMPONENT_WATCHER} =
"You are watching the component for the ${terms.bug}." %]
-[%
+[%
setting_descs.product_chooser = "Product chooser to use when entering $terms.bugs",
setting_descs.pretty = "Pretty chooser with common products and icons",
setting_descs.full = "Full chooser with all products",
setting_descs.small = "Product chooser for mobile devices",
-%]
\ No newline at end of file
+%]
[%# Note that error messages should generally be indented four spaces, like
# below, because when Bugzilla translates an error message into plain
- # text, it takes four spaces off the beginning of the lines.
+ # text, it takes four spaces off the beginning of the lines.
#
# Note also that I prefixed my error name with "example", the name of my
# extension, so that I wouldn't conflict with other error names in
# Portions created by Canonical Ltd. are Copyright (C) 2009
# Canonical Ltd. All Rights Reserved.
#
- # Contributor(s):
+ # Contributor(s):
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
[% PROCESS global/header.html.tmpl
- title = "Example Page"
+ title = "Example Page"
%]
<p>Here's what you passed me:</p>
<td>
If flag is specifically requestable, this user will be entered in the
requestee field by default unless the user changes it.<br>
- [% INCLUDE global/userselect.html.tmpl
+ [% INCLUDE global/userselect.html.tmpl
name => 'default_requestee'
id => 'default_requestee'
value => type.default_requestee.login
&& flagItem[3] == flagName + flagValue
&& flagItem[4] == setterIdentity
) {
- flagLabel.innerHTML =
+ flagLabel.innerHTML =
'<a href="#' + flagItem[5] + '">' + flagName + '</a>';
break;
}
#%]
<td align="center">
- <input type="checkbox"
+ <input type="checkbox"
name="in_mydashboard_[% q.id FILTER html %]"
value="1"
alt="[% q.name FILTER html %]"
[% param_descs = {
- "move-to-url" =>
+ "move-to-url" =>
"The URL of the database we allow some of our $terms.bugs to"
_ " be moved to.",
- "move-to-address" =>
+ "move-to-address" =>
"To move ${terms.bugs}, an email is sent to the target database."
_ " This is the email address that that database uses to listen"
_ " for incoming ${terms.bugs}.",
- movers =>
+ movers =>
"A list of people with permission to move $terms.bugs ",
} %]
[% IF oldbugmove_user_is_mover(user) AND bug.resolution != 'MOVED' %]
<p>
<input type="submit" id="oldbugmove" name="oldbugmove"
- value="Move [% terms.Bug FILTER html %] to
+ value="Move [% terms.Bug FILTER html %] to
[%= Param('move-to-url') FILTER html %]">
</p>
[% END %]
[%+ terms.Bug %] moved to [% Param("move-to-url") %].
If the move succeeded, [% comment.extra_data FILTER email %] will receive a mail
containing the number of the new [% terms.bug %] in the other database.
-If all went well, please paste in a link to the new [% terms.bug %].
+If all went well, please paste in a link to the new [% terms.bug %].
Otherwise, reopen this [% terms.bug %].
[% END %]
delete the [%+ display_value("resolution", "MOVED") FILTER html %]
resolution.
[% ELSIF error == "oldbugmove_no_manual_move" %]
- You cannot set the resolution of [% terms.abug %] to
+ You cannot set the resolution of [% terms.abug %] to
[%+ display_value("resolution", "MOVED") FILTER html %] without
moving the [% terms.bug %].
[% END %]
[% IF oldbugmove_user_is_mover(user) %]
<p>
<input type="submit" id="oldbugmove" name="oldbugmove"
- value="Move [% terms.Bugs FILTER html %] to
+ value="Move [% terms.Bugs FILTER html %] to
[%= Param('move-to-url') FILTER html %]">
</p>
[% END %]
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
+without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
+without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* 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.
+ * defined by the Mozilla Public License, v. 2.0.
*/
$(function() {
-/* Sparklines.js - Will Larson (http://lethain.com)
+/* Sparklines.js - Will Larson (http://lethain.com)
* This code is distributed under the MIT license.
* See LICENSE.sparklines.js
* More information: https://github.com/lethain/sparklines.js
* Fix Bugzilla::Auth::Login::Stack to allow failure part way down the chain
(currently, it seems that both CGI and BrowserID have to be last in order
to report login failures correctly.)
-
-* JS inclusions noticeably slow page load. Do we want a local copy of
- browserid.js? Do the browserid folks object to that? How can we get good
- performance? How can we avoid including it in every logged-in page? Can we
+
+* JS inclusions noticeably slow page load. Do we want a local copy of
+ browserid.js? Do the browserid folks object to that? How can we get good
+ performance? How can we avoid including it in every logged-in page? Can we
do demand loading onclick, and/or load-on-reveal?
* Fix -8px margin-bottom hack in login-small-additional_methods.html.tmpl
-Profanivore 'eats' English profanities in comments, leaving behind instead a
-trail of droppings ('****'). It finds its food using a standard library Perl
-regexp. The profanity is only eaten where the comment was written by a user
-who does not have the global 'editbugs' privilege. The digestion happens at
+Profanivore 'eats' English profanities in comments, leaving behind instead a
+trail of droppings ('****'). It finds its food using a standard library Perl
+regexp. The profanity is only eaten where the comment was written by a user
+who does not have the global 'editbugs' privilege. The digestion happens at
display time, so the comment in the database is unaltered.
-However, it does not eat profanities when showing people their own comments;
-the aim here is to prevent people immediately noticing they are being
+However, it does not eat profanities when showing people their own comments;
+the aim here is to prevent people immediately noticing they are being
censored, and getting 'creative'.
-The purpose of Profanivore is to make it a little harder for trolls to
+The purpose of Profanivore is to make it a little harder for trolls to
vandalise public Bugzilla installations.
It does not currently affect fields other than comments.
# enter_bug.cgi) can be access via Bugzilla.cgi.param. It can be used to
# pull out various custom fields and format an initial Description entry
# from them.
- #%]
+ #%]
[% USE Bugzilla %]
[% cgi = Bugzilla.cgi %]
Requester info:
-Requester: [% cgi.param('firstname') %] [%+ cgi.param('lastname') %]
+Requester: [% cgi.param('firstname') %] [%+ cgi.param('lastname') %]
Profile page: [% cgi.param('profilepage') %]
Event page: [% cgi.param('eventpage') %]
Funtional Goals:
Country You Reside: [% cgi.param('country') %]
Advance payment needed: [% IF cgi.param('advancepayment') %]Yes[% ELSE %]No[% END %]
-Budget breakdown:
+Budget breakdown:
Total amount requested in $USD: [% cgi.param('budgettotal') %]
Costs per service:
# enter_bug.cgi) can be access via Bugzilla.cgi.param. It can be used to
# pull out various custom fields and format an initial Description entry
# from them.
- #%]
+ #%]
[% USE Bugzilla %]
[% cgi = Bugzilla.cgi %]
-Requester info:
+Requester info:
First name: [% cgi.param('firstname') %]
Last name: [% cgi.param('lastname') %]
[%+ IF cgi.param("shiptoidrut") %]Custom reference: [% cgi.param("shiptoidrut") %][% END %]
Addition information for delivery person:
-[%+ cgi.param('shipadditional') %]
+[%+ cgi.param('shipadditional') %]
-Swag requested:
+Swag requested:
Stickers: [% IF cgi.param('stickers') %]Yes[% ELSE %]No[% END %]
Buttons: [% IF cgi.param('buttons') %]Yes[% ELSE %]No[% END %]
You can only attach budget payment information to [% terms.bugs %] under
the product 'Mozilla Reps' and component 'Budget Requests'.
-[% ELSIF error == "remo_payment_bug_edit_denied" %]
+[% ELSIF error == "remo_payment_bug_edit_denied" %]
[% title = "Mozilla Reps Payment Bug Edit Denied" %]
You do not have permission to edit [% terms.bug %] '[% bug_id FILTER html %]'.
Requester info:
-First name: [% cgi.param('firstname') %]
-Last name: [% cgi.param('lastname') %]
-Wiki user profile: [% cgi.param('wikiprofile') %]
+First name: [% cgi.param('firstname') %]
+Last name: [% cgi.param('lastname') %]
+Wiki user profile: [% cgi.param('wikiprofile') %]
Event wiki page: [% cgi.param('wikipage') %]
Budget request [% terms.bug %]: [% cgi.param('bug_id') %]
Have you already received payment for this event? [% IF cgi.param('receivedpayment') %]Yes[% ELSE %]No[% END %]
<br>
Payment information:<br>
Bank name:<br>
- Bank address: <br>
+ Bank address: <br>
IBAN:<br>
Swift code/BIC:<br>
Additional bank details (if necessary):
/**
* Some Form Validation and Interaction
**/
-//Makes sure that there is an '@' in the address with a '.'
+//Makes sure that there is an '@' in the address with a '.'
//somewhere after it (and at least one character in between them
function isValidEmail(email) {
return total;
}
-function calculateTotalSwag() {
- document.getElementById('Totalswag').value =
+function calculateTotalSwag() {
+ document.getElementById('Totalswag').value =
getTotal( new Array('Lanyards',
'Stickers',
'Bracelets',
'Tattoos',
'Buttons',
'Posters'));
-
+
}
-function calculateTotalMensShirts() {
- document.getElementById('mens_total').value =
+function calculateTotalMensShirts() {
+ document.getElementById('mens_total').value =
getTotal( new Array('mens_s',
'mens_m',
'mens_l',
'mens_xl',
'mens_xxl',
'mens_xxxl'));
-
+
}
-function calculateTotalWomensShirts() {
- document.getElementById('womens_total').value =
+function calculateTotalWomensShirts() {
+ document.getElementById('womens_total').value =
getTotal( new Array('womens_s',
'womens_m',
'womens_l',
'womens_xl',
'womens_xxl',
'womens_xxxl'));
-
+
}
[% IF bug_id || email_type == 'whine' %]
In order to receive the full text of similar mails in the future, please
-go to:
+go to:
[%+ urlbase %]userprefs.cgi?tab=securemail
and provide a key or certificate.
# The Original Code is the Bugzilla Bug Tracking System.
#
# The Initial Developer of the Original Code is the Mozilla Corporation.
- # Portions created by the Initial Developer are Copyright (C) 2008 the
+ # Portions created by the Initial Developer are Copyright (C) 2008 the
# Initial Developer. All Rights Reserved.
#
# Contributor(s): Max Kanat-Alexander <mkanat@bugzilla.org>
</div>
[% END %]
-<p>Some [% terms.bugs %] in this [% terms.Bugzilla %] are in groups the administrator has
-deemed 'secure'. This means emails containing information about those [% terms.bugs %]
-will only be sent encrypted. Enter your PGP/GPG public key or
+<p>Some [% terms.bugs %] in this [% terms.Bugzilla %] are in groups the administrator has
+deemed 'secure'. This means emails containing information about those [% terms.bugs %]
+will only be sent encrypted. Enter your PGP/GPG public key or
SMIME certificate here to receive full update emails for such [% terms.bugs %].</p>
<p>If you are a member of a secure group, or if you enter a key here, your password reset email will also be sent to you encrypted. If you are a member of a secure group and do not enter a key, you will not be able to reset your password without the assistance of an administrator.</p>
# All Rights Reserved.
#
# Contributor(s): Max Kanat-Alexander <mkanat@bugzilla.org>
- # Gervase Markham <gerv@gerv.net>
+ # Gervase Markham <gerv@gerv.net>
#%]
[% tabs = tabs.import([{
# The Original Code is the Bugzilla Bug Tracking System.
#
# The Initial Developer of the Original Code is the Mozilla Corporation.
- # Portions created by the Initial Developer are Copyright (C) 2008 the
+ # Portions created by the Initial Developer are Copyright (C) 2008 the
# Initial Developer. All Rights Reserved.
#
# Contributor(s): Max Kanat-Alexander <mkanat@bugzilla.org>
<td colspan="3">
<input type="checkbox" id="secure_mail" name="secure_mail"
[% ' checked="checked"' IF group.secure_mail %]>
- </td>
-</tr>
+ </td>
+</tr>
# The Original Code is the Bugzilla Bug Tracking System.
#
# The Initial Developer of the Original Code is the Mozilla Corporation.
- # Portions created by the Initial Developer are Copyright (C) 2008 the
+ # Portions created by the Initial Developer are Copyright (C) 2008 the
# Initial Developer. All Rights Reserved.
#
# Contributor(s): Max Kanat-Alexander <mkanat@bugzilla.org>
[% otheruser.public_key ? "Yes" : "No" %]
</td>
</tr>
-
+
<tr>
<th>Member of Secure Mail Group:</th>
<td>
# The Original Code is the Bugzilla Bug Tracking System.
#
# The Initial Developer of the Original Code is the Mozilla Corporation.
- # Portions created by the Initial Developer are Copyright (C) 2008 the
+ # Portions created by the Initial Developer are Copyright (C) 2008 the
# Initial Developer. All Rights Reserved.
#
# Contributor(s): Max Kanat-Alexander <mkanat@bugzilla.org>
[% IF error == "securemail_invalid_key" %]
[% title = "Invalid Public Key" %]
We were unable to read the public key that you entered. Make sure
- that you are entering either an ASCII-armored PGP/GPG public key,
- including the "BEGIN PGP PUBLIC KEY BLOCK" and "END PGP PUBLIC KEY BLOCK"
+ that you are entering either an ASCII-armored PGP/GPG public key,
+ including the "BEGIN PGP PUBLIC KEY BLOCK" and "END PGP PUBLIC KEY BLOCK"
lines, or a PEM format (Base64-encoded X.509) S/MIME key, including the
BEGIN CERTIFICATE and END CERTIFICATE lines.<br><br>[% errstr FILTER html %]
[% END %]
title = "SecureMail Help"
%]
-[% terms.Bugzilla %] considers certain groups as "secure". If a [% terms.bug %] is in one of those groups, [% terms.Bugzilla %] will not send unencrypted
-email about it. To receive encrypted email rather than just a "something changed" placeholder, you must provide either
+[% terms.Bugzilla %] considers certain groups as "secure". If a [% terms.bug %] is in one of those groups, [% terms.Bugzilla %] will not send unencrypted
+email about it. To receive encrypted email rather than just a "something changed" placeholder, you must provide either
a S/MIME or a GPG/PGP key on the <a href="[% urlbase FILTER none %]userprefs.cgi?tab=securemail">SecureMail preferences tab</a>.<br>
<br>
In addition, if you have uploaded a S/MIME or GPG/PGP key using the <a href="[% urlbase FILTER none %]userprefs.cgi?tab=securemail">
<b>S/MIME Keys must be in PEM format - i.e. Base64-encoded text, with the first line containing BEGIN CERTIFICATE.</b></p>
-<p>S/MIME certificates can be obtained from a number of providers.
-Once you have it, export it from your browser as a .p12 file and import it into your mail client.
-You'll need to provide a password when you export - pick a strong one,
+<p>S/MIME certificates can be obtained from a number of providers.
+Once you have it, export it from your browser as a .p12 file and import it into your mail client.
+You'll need to provide a password when you export - pick a strong one,
and then back up the .p12 file somewhere safe.</p>
<p>Import on Thunderbird as follows:</p>
<p>
Open the .pem file in a text editor. You can recognise the public key because
-it starts "BEGIN CERTIFICATE" and ends "END CERTIFICATE" and
+it starts "BEGIN CERTIFICATE" and ends "END CERTIFICATE" and
has an appropriate friendly name (e.g. "StartCom Free Certificate Member's StartCom Ltd. ID").</p>
<p>Paste the contents of the .pem file into the SecureMail text field in [% terms.Bugzilla %].</p>
<p><code>gpg --armor --output pubkey.txt --export 'Your Name'</code></p>
-<p>Paste the contents of pubkey.txt into the SecureMail text field in [% terms.Bugzilla %].
+<p>Paste the contents of pubkey.txt into the SecureMail text field in [% terms.Bugzilla %].
<li>Configure your email client to use your associated private key to decrypt the encrypted emails. For Thunderbird, you need the <a href="https://addons.mozilla.org/en-us/thunderbird/addon/enigmail/">Enigmail</a> extension.</p>
</ol>
[% ELSIF message_tag == "sitemap_no_urlbase" %]
You have not yet set the "urlbase" parameter. We cannot update
- search engines and inform them about your sitemap without a
+ search engines and inform them about your sitemap without a
urlbase. Please set the "urlbase" parameter and re-run
checksetup.pl.
}
} else {
tzoffset = parseInt(m[8], 10);
- }
+ }
var unadjustedDate = new Date(Date.UTC(m[1], m[2] - 1, m[3], m[4], m[5]));
return new Date(unadjustedDate.getTime() -
sign * adjustmentHours * 3600000 -
sign * adjustmentMinutes * 60000);
- },
+ },
_formatWho : function(name, email) {
if (name && email) {
draggable: false,
close: false,
hideaftersubmit: true,
- constraintoviewport: true
+ constraintoviewport: true
});
this.dialog.setHeader(prompt);
},
addButton : function (label, callback, isdefault) {
- this.buttons.push({ text : label,
- handler : function () { this.hide(); callback(); },
+ this.buttons.push({ text : label,
+ handler : function () { this.hide(); callback(); },
isDefault : isdefault });
this.dialog.cfg.queueProperty("buttons", this.buttons);
},
lines[j][2] |= Splinter.Patch.CHANGED;
}
}
-
+
currentStart = -1;
currentOldCount = 0;
currentNewCount = 0;
}
}
-
+
var i;
for (i = 0; i < rawlines.length; i++) {
var line = rawlines[i];
}
currentNewCount++;
}
- }
+ }
// git mail-formatted patches end with --\n<git version> like a signature
// This is troublesome since it looks like a subtraction at the end
if (line[1] != null) {
newLine++;
}
- }
+ }
}
};
}
if ((oldLine != null && oldLine < hunk.oldStart + hunk.oldCount) ||
- (newLine != null && newLine < hunk.newStart + hunk.newCount))
+ (newLine != null && newLine < hunk.newStart + hunk.newCount))
{
var location = -1;
hunk.iterate(function(loc, oldl, oldText, newl, newText, flags) {
if ((oldLine == null || oldl == oldLine) &&
- (newLine == null || newl == newLine))
+ (newLine == null || newl == newLine))
{
location = loc;
}
});
-
+
if (location != -1) {
return location;
}
}
- }
+ }
throw "Bad oldLine,newLine: " + oldLine + "," + newLine;
},
} else {
status = Splinter.Patch.CHANGED;
}
- }
+ }
this.files.push(new Splinter.Patch.File(filename, status, extra, hunks));
var i;
for (i = 0; i < this.comments.length; i++) {
if (this.comments[i].location == location &&
- this.comments[i].type == type)
+ this.comments[i].type == type)
{
return this.comments[i];
}
addNewLine(newLine);
unchangedLines++;
} else {
- if ((comment.type == Splinter.Patch.REMOVED
- || comment.type == Splinter.Patch.CHANGED)
- && oldText != null)
+ if ((comment.type == Splinter.Patch.REMOVED
+ || comment.type == Splinter.Patch.CHANGED)
+ && oldText != null)
{
- patchLines.push('> -' + oldText +
+ patchLines.push('> -' + oldText +
Splinter.Review._noNewLine(flags, Splinter.Patch.OLD_NONEWLINE));
addOldLine(oldLine);
}
- if ((comment.type == Splinter.Patch.ADDED
- || comment.type == Splinter.Patch.CHANGED)
- && newText != null)
+ if ((comment.type == Splinter.Patch.ADDED
+ || comment.type == Splinter.Patch.CHANGED)
+ && newText != null)
{
- patchLines.push('> +' + newText +
+ patchLines.push('> +' + newText +
Splinter.Review._noNewLine(flags, Splinter.Patch.NEW_NONEWLINE));
addNewLine(newLine);
}
}
if ((oldStart == null || oldLine == oldStart + oldCount) &&
- (newStart == null || newLine == newStart + newCount))
+ (newStart == null || newLine == newStart + newCount))
{
commentText = rawlines.slice(i + 1).join("\n");
break;
str += file.toString();
}
}
-
+
return str;
}
};
saveDraft : function(bug, attachment, review, extraProps) {
var propertyName = this._reviewPropertyName(bug, attachment);
- if (!extraProps) {
- extraProps = {};
+ if (!extraProps) {
+ extraProps = {};
}
extraProps.isDraft = true;
this._updateOrCreateReviewInfo(bug, attachment, extraProps);
Splinter.LINE_RE = /(?!$)([^\r\n]*)(?:\r\n|\r|\n|$)/g;
Splinter.displayError = function (msg) {
- var el = new Element(document.createElement('p'));
+ var el = new Element(document.createElement('p'));
el.appendChild(document.createTextNode(msg));
Dom.get('error').appendChild(Dom.get(el));
Dom.setStyle('error', 'display', 'block');
Splinter.theReview.setIntro(Dom.get('myComment').value);
if (Splinter.reviewStorage) {
- Splinter.reviewStorage.draftPublished(Splinter.theBug,
+ Splinter.reviewStorage.draftPublished(Splinter.theBug,
Splinter.theAttachment);
}
// This is a "magic string" used to identify review comments
if (Splinter.theReview.toString()) {
var comment = "Review of attachment " + Splinter.theAttachment.id + ":\n" +
- "-----------------------------------------------------------------\n\n" +
+ "-----------------------------------------------------------------\n\n" +
Splinter.theReview.toString();
publish_review.value = comment;
}
- if (Splinter.theAttachment.status
- && Dom.get('attachmentStatus').value != Splinter.theAttachment.status)
+ if (Splinter.theAttachment.status
+ && Dom.get('attachmentStatus').value != Splinter.theAttachment.status)
{
publish_attach_status.value = Dom.get('attachmentStatus').value;
}
Dom.get('myComment').value = '';
Dom.setStyle('emptyCommentNotice', 'display', 'block');
-
+
var i;
for (i = 0; i < Splinter.theReview.files.length; i++) {
while (Splinter.theReview.files[i].comments.length > 0) {
filesReviewed[file.filename] = true;
}
}
- Splinter.reviewStorage.saveDraft(Splinter.theBug, Splinter.theAttachment, Splinter.theReview,
+ Splinter.reviewStorage.saveDraft(Splinter.theBug, Splinter.theAttachment, Splinter.theReview,
{ 'filesReviewed' : filesReviewed });
draftSaved = true;
} else {
Dom.addClass(reviewer, 'reviewer');
reviewer.appendChild(document.createTextNode(review.who));
reviewer.appendTo(reviewInfo);
-
+
var reviewDate = new Element(document.createElement('div'));
Dom.addClass(reviewDate, 'review-date');
reviewDate.appendChild(document.createTextNode(Splinter.Utils.formatDate(review.date)));
var separatorClass = Splinter.getSeparatorClass(type);
var nodes = Dom.getElementsByClassName('reviewer-0', 'div', commentArea);
- var i;
+ var i;
for (i = 0; i < nodes.length; i++) {
if (separatorClass && Dom.hasClass(nodes[i], separatorClass)) {
nodes[i].parentNode.removeChild(nodes[i]);
Dom.setAttribute(commentEditor, 'id', 'commentEditor');
Dom.addClass(commentEditor, typeClass);
commentEditor.appendTo(commentArea);
-
+
var commentEditorInner = new Element(document.createElement('div'));
Dom.setAttribute(commentEditorInner, 'id', 'commentEditorInner');
commentEditorInner.appendTo(commentEditor);
Dom.setAttribute(commentTextArea, 'tabindex', 1);
commentTextArea.appendChild(document.createTextNode(previousText));
commentTextArea.appendTo(commentTextFrame);
- Event.addListener('commentTextArea', 'keydown', function (e) {
+ Event.addListener('commentTextArea', 'keydown', function (e) {
if (e.which == 13 && e.ctrlKey) {
Splinter.saveComment();
} else if (e.which == 27) {
var navigationDiv = Dom.get('navigation');
if (Dom.getChildren(navigationDiv).length > 0) {
navigationDiv.appendChild(document.createTextNode(' | '));
- }
+ }
var navigationLink = new Element(document.createElement('a'));
Dom.addClass(navigationLink, 'navigation-link');
navigationLink.appendTo(navigationDiv);
// FIXME: Find out why I need to use an id here instead of just passing
- // navigationLink to Event.addListener()
+ // navigationLink to Event.addListener()
Event.addListener('switch-' + encodeURIComponent(identifier), 'click', function () {
if (!Dom.hasClass(this, 'navigation-link-selected')) {
callback();
}
});
-
+
if (selected) {
Dom.addClass(navigationLink, 'navigation-link-selected');
}
Splinter.showOverview = function () {
Splinter.selectNavigationLink('__OVERVIEW__');
Dom.setStyle('overview', 'display', 'block');
- Dom.getElementsByClassName('file', 'div', '', function (node) {
+ Dom.getElementsByClassName('file', 'div', '', function (node) {
Dom.setStyle(node, 'display', 'none');
});
if (!Splinter.readOnly)
Dom.setAttribute(haveDraftNotice, 'id', 'haveDraftNotice');
haveDraftNotice.appendChild(document.createTextNode('Draft'));
haveDraftNotice.appendTo(navigation);
-
+
var clear = new Element(document.createElement('div'));
Dom.addClass(clear, 'clear');
clear.appendTo(navigation);
reviewIntro.appendTo(reviewerBox);
Dom.setStyle('oldReviews', 'display', 'block');
-
+
Splinter.appendReviewComments(review, reviewerBox);
}
}
Dom.setStyle('restored', 'display', 'block');
for (i = 0; i < storedReviews.length; i++) {
if (storedReviews[i].bugId == Splinter.theBug.id &&
- storedReviews[i].attachmentId == Splinter.theAttachment.id)
+ storedReviews[i].attachmentId == Splinter.theAttachment.id)
{
Splinter.replaceText(Dom.get("restoredLastModified"), Splinter.Utils.formatDate(new Date(storedReviews[i].modificationTime)));
// Restore file reviewed checkboxes
responseType: YAHOO.util.DataSource.TYPE_JSARRAY,
responseSchema: { fields:["id","description","date", "extra"] }
};
-
+
var columnDefs = [
{ key: "id", label: "ID", formatter: attachLink },
{ key: "description", label: "Description", formatter: attachDesc },
var dataSource = new YAHOO.util.LocalDataSource(attachData, dsConfig);
var dataTable = new YAHOO.widget.DataTable("chooseAttachmentTable", columnDefs, dataSource);
-
+
Dom.setStyle('chooseAttachment', 'display', 'block');
};
quickHelpContent.style.display = 'none';
quickHelpShow.style.display = 'block';
}
-};
+};
Splinter.init = function () {
Splinter.showNote();
if (Splinter.attachmentId) {
Splinter.theAttachment = Splinter.theBug.getAttachment(Splinter.attachmentId);
-
+
if (Splinter.theAttachment == null) {
Splinter.displayError("Attachment " + Splinter.attachmentId + " is not an attachment to bug " + Splinter.theBug.id);
}
Dom.setStyle('attachInfo', 'display', 'block');
Dom.setStyle('quickHelpShow', 'display', 'block');
-
- document.title = "Patch Review of Attachment " + Splinter.theAttachment.id +
+
+ document.title = "Patch Review of Attachment " + Splinter.theAttachment.id +
" for Bug " + Splinter.theBug.id;
Splinter.thePatch = new Splinter.Patch.Patch(Splinter.theAttachment.data);
}
};
-YAHOO.util.Event.addListener(window, 'load', Splinter.init);
+YAHOO.util.Event.addListener(window, 'load', Splinter.init);
# Portions created by the Initial Developer are Copyright (C) 2010
# the Initial Developer. All Rights Reserved.
#
- # Contributor(s):
+ # Contributor(s):
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
# Portions created by the Initial Developer are Copyright (C) 2010
# the Initial Developer. All Rights Reserved.
#
- # Contributor(s):
+ # Contributor(s):
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
-[% DEFAULT
+[% DEFAULT
product.maxvotesperbug = constants.DEFAULT_VOTES_PER_BUG
product.votesperuser = 0
product.votestoconfirm = 0
%]
-
+
<tr>
<th align="right">Maximum votes per person:</th>
<td><input size="5" maxlength="5" name="votesperuser" id="votesperuser"
# Portions created by the Initial Developer are Copyright (C) 2010
# the Initial Developer. All Rights Reserved.
#
- # Contributor(s):
+ # Contributor(s):
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
# Portions created by the Initial Developer are Copyright (C) 2010
# the Initial Developer. All Rights Reserved.
#
- # Contributor(s):
+ # Contributor(s):
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
# Portions created by the Initial Developer are Copyright (C) 2010
# the Initial Developer. All Rights Reserved.
#
- # Contributor(s):
+ # Contributor(s):
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
# Portions created by the Initial Developer are Copyright (C) 2010
# the Initial Developer. All Rights Reserved.
#
- # Contributor(s):
+ # Contributor(s):
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
[% IF bug.product_obj.votesperuser %]
with
<a href="page.cgi?id=voting/bug.html&bug_id=
[%- bug.id FILTER uri %]">
- [%- bug.votes FILTER html %]
+ [%- bug.votes FILTER html %]
[% IF bug.votes == 1 %]
vote
[% ELSE %]
# Portions created by the Initial Developer are Copyright (C) 2010
# the Initial Developer. All Rights Reserved.
#
- # Contributor(s):
+ # Contributor(s):
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
# Portions created by the Initial Developer are Copyright (C) 2010
# the Initial Developer. All Rights Reserved.
#
- # Contributor(s):
+ # Contributor(s):
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
# Portions created by the Initial Developer are Copyright (C) 2010
# the Initial Developer. All Rights Reserved.
#
- # Contributor(s):
+ # Contributor(s):
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
# Portions created by the Initial Developer are Copyright (C) 2010
# the Initial Developer. All Rights Reserved.
#
- # Contributor(s):
+ # Contributor(s):
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
# Portions created by the Initial Developer are Copyright (C) 2010
# the Initial Developer. All Rights Reserved.
#
- # Contributor(s):
+ # Contributor(s):
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
# Portions created by the Initial Developer are Copyright (C) 2010
# the Initial Developer. All Rights Reserved.
#
- # Contributor(s):
+ # Contributor(s):
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
# Portions created by the Initial Developer are Copyright (C) 2010
# the Initial Developer. All Rights Reserved.
#
- # Contributor(s):
+ # Contributor(s):
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
[% reason_descs.${constants.REL_VOTER} = "You voted for the ${terms.bug}." %]
-[% watch_reason_descs.${constants.REL_VOTER} =
+[% watch_reason_descs.${constants.REL_VOTER} =
"You are watching a voter for the ${terms.bug}." %]
# Portions created by the Initial Developer are Copyright (C) 2010
# the Initial Developer. All Rights Reserved.
#
- # Contributor(s):
+ # Contributor(s):
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
# Portions created by the Initial Developer are Copyright (C) 2010
# the Initial Developer. All Rights Reserved.
#
- # Contributor(s):
+ # Contributor(s):
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
# Portions created by the Initial Developer are Copyright (C) 2010
# the Initial Developer. All Rights Reserved.
#
- # Contributor(s):
+ # Contributor(s):
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
[% PROCESS global/variables.none.tmpl %]
[% INCLUDE global/header.html.tmpl title = "Voting" %]
-<p>[% terms.Bugzilla %] has a "voting" feature. Each product allows users to
-have a certain number of votes. (Some products may not allow any, which means
-you can't vote on things in those products at all.) With your vote, you
-indicate which [% terms.bugs %] you think are the most important and
-would like to see fixed. Note that voting is nowhere near as effective
+<p>[% terms.Bugzilla %] has a "voting" feature. Each product allows users to
+have a certain number of votes. (Some products may not allow any, which means
+you can't vote on things in those products at all.) With your vote, you
+indicate which [% terms.bugs %] you think are the most important and
+would like to see fixed. Note that voting is nowhere near as effective
as providing a fix yourself.</p>
<p>Depending on how the administrator has configured the relevant product,
you may be able to vote for the same [% terms.bug %] more than once.
-Remember that you have a limited number of votes. When weighted voting
-is allowed and a limited number of votes are available to you, you will
-have to decide whether you want to distribute your votes among a large
-number of [% terms.bugs %] indicating your minimal interest or focus on
+Remember that you have a limited number of votes. When weighted voting
+is allowed and a limited number of votes are available to you, you will
+have to decide whether you want to distribute your votes among a large
+number of [% terms.bugs %] indicating your minimal interest or focus on
a few [% terms.bugs %] indicating your strong support for them.
</p>
fields. (If no such link appears, then voting may not be allowed in
this [% terms.bug %]'s product.)</li>
- <li>Indicate how many votes you want to give this [% terms.bug %]. This page
- also displays how many votes you've given to other [% terms.bugs %], so you
+ <li>Indicate how many votes you want to give this [% terms.bug %]. This page
+ also displays how many votes you've given to other [% terms.bugs %], so you
may rebalance your votes as necessary.</li>
</ul>
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
- *
+ *
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
- *
+ *
* The Original Code is the Bugzilla Bug Tracking System.
- *
+ *
* The Initial Developer of the Original Code is Netscape Communications
* Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
- *
+ *
* Contributor(s): Dennis Melentyev <dennis.melentyev@infopulse.com.ua>
* Max Kanat-Alexander <mkanat@bugzilla.org>
*/
/* This file provides JavaScript functions to be included when one wishes
* to show/hide certain UI elements, and have the state of them being
* shown/hidden stored in a cookie.
- *
+ *
* TUI stands for Tweak UI.
*
* Requires js/util.js and the YUI Dom and Cookie libraries.
var TUI_alternates = new Array();
-/**
- * Hides a particular class of elements if they are shown,
+/**
+ * Hides a particular class of elements if they are shown,
* or shows them if they are hidden. Then it stores whether that
* class is now hidden or shown.
*
/**
* Specifies that a certain class of items should be hidden by default,
* if the user doesn't have a TUI cookie.
- *
+ *
* @param className The class to hide by default.
*/
function TUI_hide_default(className) {
var av_select = document.getElementById("available_columns");
var sel_select = document.getElementById("selected_columns");
YAHOO.util.Dom.removeClass(
- ['avail_header', av_select, 'select_button',
+ ['avail_header', av_select, 'select_button',
'deselect_button', 'up_button', 'down_button'], 'bz_default_hidden');
switch_options(sel_select, av_select, false);
sel_select.selectedIndex = -1;
from_box.options[i] = null;
i = i - 1;
}
-
+
}
}
}
else{
last = opt;
- }
+ }
}
updateView();
}
}
else{
last = opt;
- }
+ }
}
updateView();
}
function toggleAdvancedFields() {
TUI_toggle_class('expert_fields');
- var elements = YAHOO.util.Dom.getElementsByClassName('expert_fields');
+ var elements = YAHOO.util.Dom.getElementsByClassName('expert_fields');
if (YAHOO.util.Dom.hasClass(elements[0], TUI_HIDDEN_CLASS)) {
handleWantsBugFlags(false);
}
}
// force field widths
-
+
var width = document.getElementById('short_desc').clientWidth + 'px';
var el;
* The Original Code is the Bugzilla Bug Tracking System.
*
* The Initial Developer of the Original Code is BugzillaSource, Inc.
- * Portions created by the Initial Developer are Copyright (C) 2011
+ * Portions created by the Initial Developer are Copyright (C) 2011
* the Initial Developer. All Rights Reserved.
*
- * Contributor(s):
+ * Contributor(s):
* Max Kanat-Alexander <mkanat@bugzilla.org>
*/
function custom_search_new_row() {
var row = document.getElementById('custom_search_last_row');
var clone = row.cloneNode(true);
-
+
_cs_fix_row_ids(clone);
-
+
// We only want one copy of the buttons, in the new row. So the old
// ones get deleted.
var op_button = document.getElementById('op_button');
function custom_search_close_paren() {
var new_row = custom_search_new_row();
-
+
// We need to up the new row's id by one more, because we're going
// to insert a "CP" before it.
var id = _cs_fix_row_ids(new_row);
paren_row.id = null;
paren_row.innerHTML = ')<input type="hidden" name="f' + (id - 1)
+ '" id="f' + (id - 1) + '" value="CP">';
-
+
new_row.parentNode.insertBefore(paren_row, new_row);
if (new_margin == 0) {
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
- *
+ *
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
- *
+ *
* The Original Code is the Bugzilla Bug Tracking System.
- *
+ *
* The Initial Developer of the Original Code is Netscape Communications
* Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
- *
+ *
* Contributor(s): Mike Shaver <shaver@mozilla.org>
* Christian Reis <kiko@async.com.br>
- * André Batosti <batosti@async.com.br>
+ * André Batosti <batosti@async.com.br>
*/
if (!Node) {
highlighted = 0;
return;
}
- }
+ }
highlighted = element;
var elem = document.getElementById(element);
highlightedclass = elem.className;
* Reed Loden <reed@reedloden.com>
*/
-/* This library assumes that the needed YUI libraries have been loaded
+/* This library assumes that the needed YUI libraries have been loaded
already. */
var bz_no_validate_enter_bug = false;
}
function createCalendar(name) {
- var cal = new YAHOO.widget.Calendar('calendar_' + name,
+ var cal = new YAHOO.widget.Calendar('calendar_' + name,
'con_calendar_' + name);
YAHOO.bugzilla['calendar_' + name] = cal;
var field = document.getElementById(name);
};
// If somebody clicks outside the calendar, hide it.
- YAHOO.util.Event.addListener(document.body, 'click',
+ YAHOO.util.Event.addListener(document.body, 'click',
calendar.bz_myBodyCloser, calendar, true);
// Make Esc close the calendar.
YAHOO.util.Event.removeListener(document.body, 'keydown', cal.bz_escCal);
}
-/* This is the selectEvent for our Calendar objects on our custom
+/* This is the selectEvent for our Calendar objects on our custom
* DateTime fields.
*/
function setFieldFromCalendar(type, args, date_field) {
var dates = args[0];
var setDate = dates[0];
- // We can't just write the date straight into the field, because there
+ // We can't just write the date straight into the field, because there
// might already be a time there.
var timeRe = /\b(\d{1,2}):(\d\d)(?::(\d\d))?/;
var currentTime = timeRe.exec(date_field.value);
hideCalendar(date_field.id);
}
-/* Sets the calendar based on the current field value.
- */
+/* Sets the calendar based on the current field value.
+ */
function updateCalendarFromField(date_field) {
var dateRe = /(\d\d\d\d)-(\d\d?)-(\d\d?)/;
var pieces = dateRe.exec(date_field.value);
cal.select(new Date(pieces[1], pieces[2] - 1, pieces[3]));
var selectedArray = cal.getSelectedDates();
var selected = selectedArray[0];
- cal.cfg.setProperty("pagedate", (selected.getMonth() + 1) + '/'
+ cal.cfg.setProperty("pagedate", (selected.getMonth() + 1) + '/'
+ selected.getFullYear());
cal.render();
}
*/
function showEditableField (e, ContainerInputArray) {
var inputs = new Array();
- var inputArea = YAHOO.util.Dom.get(ContainerInputArray[1]);
+ var inputArea = YAHOO.util.Dom.get(ContainerInputArray[1]);
if ( ! inputArea ){
YAHOO.util.Event.preventDefault(e);
return;
* var ContainerInputArray: An array containing the (edit) and text area and the input being displayed
* var ContainerInputArray[0]: the container that will be hidden usually shows the (edit) text
* var ContainerInputArray[1]: the input area and label that will be displayed
- * var ContainerInputArray[2]: the field that is on the page, might get changed by browser autocomplete
+ * var ContainerInputArray[2]: the field that is on the page, might get changed by browser autocomplete
* var ContainerInputArray[3]: the original value from the page loading.
*
- */
+ */
function checkForChangedFieldValues(e, ContainerInputArray ) {
var el = document.getElementById(ContainerInputArray[2]);
var unhide = false;
function hideAliasAndSummary(short_desc_value, alias_value) {
// check the short desc field
hideEditableField( 'summary_alias_container','summary_alias_input',
- 'editme_action','short_desc', short_desc_value);
+ 'editme_action','short_desc', short_desc_value);
// check that the alias hasn't changed
var bz_alias_check_array = new Array('summary_alias_container',
'summary_alias_input', 'alias', alias_value);
new Array( 'bz_' + field_id + '_edit_container',
'bz_' + field_id + '_input',
'set_default_' + field_id ,'1'));
-
+
YAHOO.util.Event.addListener( window, 'load', boldOnChange,
- 'set_default_' + field_id );
+ 'set_default_' + field_id );
}
function showHideStatusItems(e, dupArrayInfo) {
if ( (el.value == dupArrayInfo[1] && dupArrayInfo[0] == "is_duplicate")
- || bz_isValueInArray(close_status_array, el.value) )
+ || bz_isValueInArray(close_status_array, el.value) )
{
- YAHOO.util.Dom.removeClass('resolution_settings',
+ YAHOO.util.Dom.removeClass('resolution_settings',
'bz_default_hidden');
- YAHOO.util.Dom.removeClass('resolution_settings_warning',
+ YAHOO.util.Dom.removeClass('resolution_settings_warning',
'bz_default_hidden');
// Remove the blank option we inserted.
if (resolution) {
if (resolution.value == 'DUPLICATE' && bz_isValueInArray( close_status_array, bug_status.value) ) {
// hide resolution show duplicate
- YAHOO.util.Dom.removeClass('duplicate_settings',
+ YAHOO.util.Dom.removeClass('duplicate_settings',
'bz_default_hidden');
YAHOO.util.Dom.addClass('dup_id_discoverable', 'bz_default_hidden');
// check to make sure the field is visible or IE throws errors
}
else {
YAHOO.util.Dom.addClass('duplicate_settings', 'bz_default_hidden');
- YAHOO.util.Dom.removeClass('dup_id_discoverable',
+ YAHOO.util.Dom.removeClass('dup_id_discoverable',
'bz_default_hidden');
dup_id.blur();
}
function setClassification() {
var classification = document.getElementById('classification');
var product = document.getElementById('product');
- var selected_product = product.value;
+ var selected_product = product.value;
var select_classification = all_classifications[selected_product];
classification.value = select_classification;
bz_fireEvent(classification, 'change');
}
/**
- * Called by showFieldWhen when a field's visibility controller
- * changes values.
+ * Called by showFieldWhen when a field's visibility controller
+ * changes values.
*/
function handleVisControllerValueChange(e, args) {
var controlled_id = args[0];
var controller = args[1];
var values = args[2];
- var label_container =
+ var label_container =
document.getElementById('field_label_' + controlled_id);
var field_container =
document.getElementById('field_container_' + controlled_id);
}
}
-function showValueWhen(controlled_field_id, controlled_value_ids,
+function showValueWhen(controlled_field_id, controlled_value_ids,
controller_field_id, controller_value_id)
{
var controller_field = document.getElementById(controller_field_id);
- // Note that we don't get an object for the controlled field here,
+ // Note that we don't get an object for the controlled field here,
// because it might not yet exist in the DOM. We just pass along its id.
YAHOO.util.Event.addListener(controller_field, 'change',
handleValControllerChange, [controlled_field_id, controlled_value_ids,
};
// DataSource can't understand a JSON-RPC error response, so
// we have to modify the result data if we get one.
- dataSource.doBeforeParseData =
+ dataSource.doBeforeParseData =
function(oRequest, oFullResponse, oCallback) {
if (oFullResponse.error) {
oFullResponse.result = {};
}
return oFullResponse;
};
- dataSource.subscribe('dataErrorEvent',
+ dataSource.subscribe('dataErrorEvent',
function() {
YAHOO.bugzilla.instantSearch.currentSearchQuery = '';
}
);
this.dataTable = new YAHOO.widget.DataTable(
- 'results',
- this.dataTableColumns,
- dataSource,
- {
+ 'results',
+ this.dataTableColumns,
+ dataSource,
+ {
initialLoad: false,
MSG_EMPTY: 'No matching bugs found.',
MSG_ERROR: 'An error occurred while searching for bugs, please try again.'
YAHOO.bugzilla.instantSearch.dataTable.showTableMessage(
'Searching... ' +
- '<img src="extensions/GuidedBugEntry/web/images/throbber.gif"' +
+ '<img src="extensions/GuidedBugEntry/web/images/throbber.gif"' +
' width="16" height="11">',
YAHOO.widget.DataTable.CLASS_LOADING
);
}
YAHOO.bugzilla.instantSearch.dataTable.getDataSource().sendRequest(
- YAHOO.lang.JSON.stringify(jsonObject),
+ YAHOO.lang.JSON.stringify(jsonObject),
{
success: YAHOO.bugzilla.instantSearch.onSearchResults,
failure: YAHOO.bugzilla.instantSearch.onSearchResults,
scope: YAHOO.bugzilla.instantSearch.dataTable,
- argument: YAHOO.bugzilla.instantSearch.dataTable.getState()
+ argument: YAHOO.bugzilla.instantSearch.dataTable.getState()
}
);
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
- *
+ *
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
- *
+ *
* The Original Code is the Bugzilla Bug Tracking System.
- *
+ *
* The Initial Developer of the Original Code is Netscape Communications
* Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
- *
+ *
* Contributor(s): Christian Reis <kiko@async.com.br>
*/
first_load = false;
return;
}
-
+
// Don't reset first_load as done in selectProduct. That's because we
// want selectProduct to handle the first_load attribute.
if (!findall) {
// Save sel for the next invocation of selectClassification().
var tmp = sel;
-
+
// This is an optimization: if we have just added classifications to an
// existing selection, no need to clear the form elements and add
// everything again; just merge the new ones with the existing
/**
* Causes a block to appear directly underneath another block,
* overlaying anything below it.
- *
+ *
* @param item The block that you want to move.
* @param parent The block that it goes on top of.
* @return nothing
/**
* Tells you whether or not a particular value is selected in a select,
- * whether it's a multi-select or a single-select. The check is
+ * whether it's a multi-select or a single-select. The check is
* case-sensitive.
*
* @param aSelect The select you're checking.
/**
* Used to fire an event programmatically.
- *
+ *
* @param anElement The element you want to fire the event of.
- * @param anEvent The name of the event you want to fire,
+ * @param anEvent The name of the event you want to fire,
* without the word "on" in front of it.
*/
function bz_fireEvent(anElement, anEvent) {
margin: .5em 1em;
}
-#bug_id_container, .search_field_grid,
-.search_email_fields, ul.bug_changes li {
+#bug_id_container, .search_field_grid,
+.search_email_fields, ul.bug_changes li {
zoom: 1;
display: inline;
}
* Rights Reserved.
*
* Contributor(s): Christian Reis <kiko@async.com.br>
- * André Batosti <batosti@async.com.br>
+ * André Batosti <batosti@async.com.br>
*/
ul.tree {
display: block;
}
-ul.tree li {
+ul.tree li {
/* see http://www.kryogenix.org/code/browser/aqlists/ for idea */
- padding-top: 3px;
- text-indent: -1.2em;
- padding-left: 0.5em;
+ padding-top: 3px;
+ text-indent: -1.2em;
+ padding-left: 0.5em;
padding-bottom: 3px;
list-style-type: none;
background: url("dependency-tree/bug-item.png") no-repeat;
}
ul.tree li a.b {
- padding-left: 30px;
- margin-right: -14px;
+ padding-left: 30px;
+ margin-right: -14px;
text-decoration: none;
}
.summ_info {
/* change to inline if you would like to see the full bug details
* displayed in the list */
- display: none;
+ display: none;
font-size: 75%;
}
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
- *
+ *
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
- *
+ *
* The Original Code is the Bugzilla Bug Tracking System.
- *
+ *
* The Initial Developer of the Original Code is Everything Solved, Inc.
* Portions created by the Initial Developer are Copyright (C) 2009
* the Initial Developer. All Rights Reserved.
- *
+ *
* Contributor(s):
* Max Kanat-Alexander <mkanat@bugzilla.org>
*/
}
#duplicates_table .resolved {
- background-color: #d9d9d9;
+ background-color: #d9d9d9;
color: black;
}
/* The Possible Duplicates table on enter_bug. */
#possible_duplicates th {
- text-align: center;
+ text-align: center;
background: none;
border-collapse: collapse;
}
* Portions created by the Initial Developer are Copyright (C) 2010 the
* Initial Developer. All Rights Reserved.
*
- * Contributor(s):
+ * Contributor(s):
* Guy Pyrzak <guy.pyrzak@gmail.com>
*/
white-space: nowrap;
}
-#bug_id_container {
+#bug_id_container {
display: inline-block;
vertical-align: middle;
padding-bottom: 1ex;
width: 9em;
}
-.container_date_from,
+.container_date_from,
.container_date_to {
width: 14em;
padding-bottom: 1ex;
display: inline-block;
}
-.search_field_grid .field_help_link,
-.history_query .field_help_link
+.search_field_grid .field_help_link,
+.history_query .field_help_link
{
display: block;
text-align: left;
}
#chart .section_help {
- font-size: 0.8em;
+ font-size: 0.8em;
font-weight: normal
}
display: block;
}
-#summary_field.search_field_row input,
+#summary_field.search_field_row input,
#summary_field.search_field_row select
{
display: inline;
}
div.bz_section_title a {
- font-weight: bold;
+ font-weight: bold;
}
div.bz_section_title span {
font-size: 0.75em;
- margin-left: 1em;
-}
+ margin-left: 1em;
+}
#summary_field label {
font-weight: bold;
margin-top: 2em;
}
-.hide_people_filter #people_filter_section,
-.hide_history_filter #history_filter_section,
-.hide_detailed_information #detailed_information_section
+.hide_people_filter #people_filter_section,
+.hide_history_filter #history_filter_section,
+.hide_detailed_information #detailed_information_section
{
display: none;
}
.bz_alias_short_desc_container {
- margin: 8px 0;
- padding: 0.3em;
- background-color: rgb(208, 208, 208);
+ margin: 8px 0;
+ padding: 0.3em;
+ background-color: rgb(208, 208, 208);
border-radius: 0.5em;
- font-size: 125%;
+ font-size: 125%;
font-weight: bold;
}
}
.related_actions {
- font-size: 0.85em;
+ font-size: 0.85em;
float: right;
list-style-type: none;
white-space: nowrap;
text-align: center;
}
-.bz_time_tracking_table th,
+.bz_time_tracking_table th,
.bz_time_tracking_table td {
padding: 4px;
}
width: 7em;
}
-#summary tr td {
+#summary tr td {
vertical-align:top;
}
-#status {
+#status {
margin-bottom: 3ex;
}
tspan.mg-points-mono {
fill: #0000ff;
- stroke: #0000ff;
+ stroke: #0000ff;
}
/* a selected point in a scatterplot */
});
});
})
-
+
$('a.pill').on('click', function(event) {
event.preventDefault();
$('a.pill').removeClass('active');
return false;
});
-
-
+
+
$('#accessible-css').on('click', function () {
$('.head ul li a.pill').removeClass('active');
last;
}
}
-
+
close (FILE);
-
+
if ($found_word) {
ok(0,"$file: found SPELLING ERROR $found_word --WARNING");
} else {
} else {
ok(0,"could not open $file for spellcheck --WARNING");
}
-}
+}
exit 0;
use Test::More tests => 17;
use DateTime;
-BEGIN {
+BEGIN {
use_ok('Bugzilla');
use_ok('Bugzilla::Util');
}
my %email_strings = (
'somebody@somewhere.com' => 'somebody',
'Somebody <somebody@somewhere.com>' => 'Somebody <somebody>',
- 'One Person <one@person.com>, Two Person <two@person.com>'
+ 'One Person <one@person.com>, Two Person <two@person.com>'
=> 'One Person <one>, Two Person <two>',
'This string contains somebody@somewhere.com and also this@that.com'
=> 'This string contains somebody and also this',
);
foreach my $input (keys %email_strings) {
- is(Bugzilla::Util::email_filter($input), $email_strings{$input},
+ is(Bugzilla::Util::email_filter($input), $email_strings{$input},
"email_filter('$input')");
}
# This test scans all our templates for every directive. Having eliminated
# those which cannot possibly cause XSS problems, it then checks the rest
-# against the safe list stored in the filterexceptions.pl file.
+# against the safe list stored in the filterexceptions.pl file.
# Sample exploit code: '>"><script>alert('Oh dear...')</script>
chdir $topdir; # absolute path
my @testitems = Support::Templates::find_actual_files($path);
chdir $topdir; # absolute path
-
+
next unless @testitems;
-
+
# Some people require this, others don't. No-one knows why.
chdir $path; # relative path
-
+
# We load a %safe list of acceptable exceptions.
if (-r "filterexceptions.pl") {
do "filterexceptions.pl";
if (ON_WINDOWS) {
- # filterexceptions.pl uses / separated paths, while
+ # filterexceptions.pl uses / separated paths, while
# find_actual_files returns \ separated ones on Windows.
# Here, we convert the filter exception hash to use \.
foreach my $file (keys %safe) {
}
}
}
-
+
# We preprocess the %safe hash of lists into a hash of hashes. This allows
- # us to flag which members were not found, and report that as a warning,
+ # us to flag which members were not found, and report that as a warning,
# thereby keeping the lists clean.
foreach my $file (keys %safe) {
if (ref $safe{$file} eq 'ARRAY') {
my $list = $safe{$file};
$safe{$file} = {};
foreach my $directive (@$list) {
- $safe{$file}{$directive} = 0;
+ $safe{$file}{$directive} = 0;
}
}
}
if (!directive_ok($file, $directive)) {
# This intentionally makes no effort to eliminate duplicates; to do
- # so would merely make it more likely that the user would not
+ # so would merely make it more likely that the user would not
# escape all instances when attempting to correct an error.
push(@unfiltered, "$lineno:$directive");
}
- }
+ }
my $fullpath = File::Spec->catfile($path, $file);
-
+
if (@unfiltered) {
my $uflist = join("\n ", @unfiltered);
ok(0, "($lang/$flavor) $fullpath has unfiltered directives:\n $uflist\n--ERROR");
# Find any members of the exclusion list which were not found
my @notfound;
foreach my $directive (keys %{$safe{$file}}) {
- push(@notfound, $directive) if ($safe{$file}{$directive} == 0);
+ push(@notfound, $directive) if ($safe{$file}{$directive} == 0);
}
if (@notfound) {
my $nflist = join("\n ", @notfound);
- ok(0, "($lang/$flavor) $fullpath - filterexceptions.pl has extra members:\n $nflist\n" .
+ ok(0, "($lang/$flavor) $fullpath - filterexceptions.pl has extra members:\n $nflist\n" .
"--WARNING");
}
else {
my ($file, $directive) = @_;
# Comments
- return 1 if $directive =~ /^#/;
+ return 1 if $directive =~ /^#/;
# Remove any leading/trailing whitespace.
$directive =~ s/^\s*//;
# Simple assignments
return 1 if $directive =~ /^[\w\.\$\{\}]+\s+=\s+/;
- # Conditional literals with either sort of quotes
+ # Conditional literals with either sort of quotes
# There must be no $ in the string for it to be a literal
return 1 if $directive =~ /^(["'])[^\$]*[^\\]\1/;
return 1 if $directive =~ /^(["'])\1/;
# Special values always used for numbers
return 1 if $directive =~ /^[ijkn]$/;
return 1 if $directive =~ /^count$/;
-
+
# Params
return 1 if $directive =~ /^Param\(/;
-
+
# Hooks
return 1 if $directive =~ /^Hook.process\(/;
# Special Template Toolkit loop variable
return 1 if $directive =~ /^loop\.(index|count)$/;
-
+
# Branding terms
return 1 if $directive =~ /^terms\./;
-
+
# Things which are already filtered
- # Note: If a single directive prints two things, and only one is
+ # Note: If a single directive prints two things, and only one is
# filtered, we may not catch that case.
return 1 if $directive =~ /FILTER\ (html|csv|js|base64|css_class_quote|ics|
quoteUrls|time|uri|xml|lower|html_light|
#Bugzilla Test 9#
####bugwords#####
-# Bugzilla has a mechanism for taking various words, including "bug", "bugs",
+# Bugzilla has a mechanism for taking various words, including "bug", "bugs",
# and "a bug" and automatically replacing them in the templates with the local
-# terminology. It does this by using the 'terms' hash, so "bug" becomes
+# terminology. It does this by using the 'terms' hash, so "bug" becomes
# "[% terms.bug %]". This test makes sure the relevant words aren't used
# bare.
use File::Spec;
-use Test::More tests => ($Support::Templates::num_actual_files);
+use Test::More tests => ($Support::Templates::num_actual_files);
# Find all the templates
my @testitems;
foreach my $file (@testitems) {
my @errors;
-
+
# Read the entire file into a string
local $/;
- open (FILE, "<$file") || die "Can't open $file: $!\n";
+ open (FILE, "<$file") || die "Can't open $file: $!\n";
my $slurp = <FILE>;
close (FILE);
my @lineno = ($` =~ m/\n/gs);
my $lineno = scalar(@lineno) + 1;
-
+
# "a bug", "bug", "bugs"
if (grep /(a?[\s>]bugs?[\s.:;,<])/i, $text) {
# Exclude variable assignment.
}
}
}
-
+
if (scalar(@errors)) {
ok(0, "$file contains invalid bare words (e.g. 'bug') --WARNING");
-
+
foreach my $error (@errors) {
print "$error->[0]: $error->[1]\n";
}
- }
+ }
else {
ok(1, "$file has no invalid barewords");
}
my $file = File::Spec->catfile($include_path, $path);
$file =~ s/\s.*$//; # nuke everything after the first space
$file =~ s|\\|/|g if ON_WINDOWS; # convert \ to / in path if on windows
- $test_templates{$file} = ()
+ $test_templates{$file} = ()
if $file =~ m#global/(code|user)-error(?:-errors)?\.html\.tmpl#;
# Make sure the extension is not disabled
Register(\%test_templates, $file, "could not open file --WARNING");
next;
}
-
+
my $lineno=0;
while (my $line = <TMPL>) {
$lineno++;
if ($line =~ /\[%\s[A-Z]+\s*error\s*==\s*"(.+)"\s*%\]/) {
my $errtag = $1;
if ($errtag =~ /\s/) {
- Register(\%test_templates, $file,
+ Register(\%test_templates, $file,
"has an error definition \"$errtag\" at line $lineno with "
. "space(s) embedded --ERROR");
}
push @{$Errors{$errtype}{$errtag}{used_in}{$file}}, $lineno;
}
}
-
+
close(TMPL);
}
if (scalar @langs) {
UsedIn($errtype, $errtag, join(', ',@langs));
}
-
+
# Now check for tag usage in all DEFINED languages
foreach my $lang (keys %{$Errors{$errtype}{$errtag}{defined_in}}) {
if (!defined $Errors{$errtype}{$errtag}{used_in}) {
# And make sure that everything defined in WS_ERROR_CODE
# is actually a valid error.
foreach my $err_name (keys %{WS_ERROR_CODE()}) {
- if (!defined $Errors{'code'}{$err_name}
+ if (!defined $Errors{'code'}{$err_name}
&& !defined $Errors{'user'}{$err_name})
{
Register(\%test_modules, 'WS_ERROR_CODE',
my ($errtype, $errtag, $lang) = @_;
$lang = $lang || "any";
foreach my $file (keys %{$Errors{$errtype}{$errtag}{used_in}}) {
- Register(\%test_modules, $file,
- "$errtype error tag '$errtag' is used at line(s) ("
- . join (',', @{$Errors{$errtype}{$errtag}{used_in}{$file}})
+ Register(\%test_modules, $file,
+ "$errtype error tag '$errtag' is used at line(s) ("
+ . join (',', @{$Errors{$errtype}{$errtag}{used_in}{$file}})
. ") but not defined for language(s): $lang");
}
}
sub DefinedIn {
my ($errtype, $errtag, $lang) = @_;
foreach my $file (keys %{$Errors{$errtype}{$errtag}{defined_in}{$lang}}) {
- Register(\%test_templates, $file,
+ Register(\%test_templates, $file,
"$errtype error tag '$errtag' is defined at line(s) ("
- . join (',', @{$Errors{$errtype}{$errtag}{defined_in}{$lang}{$file}})
+ . join (',', @{$Errors{$errtype}{$errtag}{defined_in}{$lang}{$file}})
. ") but is not used anywhere", 1);
}
}
[% IF !target %]
[% target = "index.cgi" %]
[% END %]
-
+
[% PROCESS global/variables.none.tmpl %]
[% PROCESS global/header.html.tmpl
<input type="password" id="Bugzilla_password" name="Bugzilla_password" required>
</div>
- [% IF Param('rememberlogin') == 'defaulton' ||
+ [% IF Param('rememberlogin') == 'defaulton' ||
Param('rememberlogin') == 'defaultoff' %]
<div class="field-remember">
<input type="checkbox" id="Bugzilla_remember" name="Bugzilla_remember" value="on"
[%# INTERFACE
# none
- #
+ #
# Param("maintainer") is used to display the maintainer's email.
# Param("emailsuffix") is used to pre-fill the email field.
#%]
created within [% constants.MAX_TOKEN_AGE FILTER html %] days.
</p>
-[% PROCESS global/footer.html.tmpl %]
+[% PROCESS global/footer.html.tmpl %]
[%# INTERFACE:
# token: string. The token to be used in this address change.
#%]
-
+
[% title = "Confirm Change Email" %]
[% PROCESS global/header.html.tmpl %]
[%+ terms.Bugzilla %] has received a request to create a user account
using your email address ([% email %]).
-To continue creating an account using this email address, visit the
+To continue creating an account using this email address, visit the
following link by [% expiration_ts FILTER time("%B %e, %Y at %H:%M %Z") %]:
[%+ urlbase %]token.cgi?t=[% token FILTER uri %]&a=request_new_account
Subject: [% terms.Bugzilla %] Change Password Request
X-Bugzilla-Type: admin
-You have (or someone impersonating you has) requested to change your
+You have (or someone impersonating you has) requested to change your
[%+ terms.Bugzilla %] password. To complete the change, visit the following link:
[%+ urlbase %]token.cgi?t=[% token FILTER uri %]&a=cfmpw
<td width="150"></td>
<td>
[% prefname = "email-$constants.REL_ANY-$constants.EVT_FLAG_REQUESTED" %]
- <input type="checkbox" name="[% prefname %]" id="[% prefname %]"
+ <input type="checkbox" name="[% prefname %]" id="[% prefname %]"
value="1"
[% " checked"
IF user.mail_settings.${constants.REL_ANY}.${constants.EVT_FLAG_REQUESTED} %]>
<td width="150"></td>
<td>
[% prefname = "email-$constants.REL_ANY-$constants.EVT_REQUESTED_FLAG" %]
- <input type="checkbox" name="[% prefname %]" id="[% prefname %]"
+ <input type="checkbox" name="[% prefname %]" id="[% prefname %]"
value="1"
[% " checked"
IF user.mail_settings.${constants.REL_ANY}.${constants.EVT_REQUESTED_FLAG} %]>
] %]
[% IF Param('useqacontact') %]
- [% relationships.push({ id = constants.REL_QA,
+ [% relationships.push({ id = constants.REL_QA,
description = "QA Contact" }) %]
[% END %]
</th>
[% END %]
</tr>
-
- [% FOREACH event = events %]
+
+ [% FOREACH event = events %]
[% count = loop.count() %]
<tr class="bz_row_[% count % 2 == 1 ? "odd" : "even" %]">
[% FOREACH relationship = relationships %]
<td align="center">
- <input type="checkbox"
+ <input type="checkbox"
name="email-[% relationship.id %]-[% event.id %]"
value="1"
[%# The combinations don't always make sense; disable a couple %]
- [% IF event.id == constants.EVT_ADDED_REMOVED AND
- no_added_removed.contains(relationship.id)
+ [% IF event.id == constants.EVT_ADDED_REMOVED AND
+ no_added_removed.contains(relationship.id)
%]
disabled
[% ELSIF user.mail_settings.${relationship.id}.${event.id} %]
</td>
</tr>
[% END %]
-
+
<tr>
- <td colspan="[% num_columns FILTER html %]"
+ <td colspan="[% num_columns FILTER html %]"
align="center" width="50%">
</td>
</td>
</tr>
- [% FOREACH event = neg_events %]
+ [% FOREACH event = neg_events %]
[% count = loop.count() %]
<tr class="bz_row_[% count % 2 == 1 ? "odd" : "even" %]">
[% FOREACH relationship = relationships %]
<td align="center">
- <input type="checkbox"
+ <input type="checkbox"
name="neg-email-[% relationship.id %]-[% event.id %]"
value="1"
[% " checked" IF NOT user.mail_settings.${relationship.id}.${event.id} %]>
</td>
</tr>
[% END %]
-
+
</table>
<hr>
<b>User Watching</b>
<p>
-If you watch a user, it is as if you are standing in their shoes for the
+If you watch a user, it is as if you are standing in their shoes for the
purposes of getting email. Email is sent or not according to <u>your</u>
-preferences for <u>their</u> relationship to the [% terms.bug %]
+preferences for <u>their</u> relationship to the [% terms.bug %]
(e.g. Assignee).
</p>
size => 60
multiple => 5
%]
-</p>
+</p>
<p id="watching_you">Users watching you:<br>
[% IF watchers.size %]
<p>
You can specify a list of [% terms.bugs %] from which you never want to get
any email notification of any kind by adding their ID(s) as a comma-separated
- list. Removing [% terms.abug %] by selecting it from the current ignored list
+ list. Removing [% terms.abug %] by selecting it from the current ignored list
will re-enable email notifications for the [% terms.bug %].
</p>
[% IF user.bugs_ignored.size %]
[% END %]
<p>Add [% terms.bugs %]:<br>
- <input type="text" id="add_ignored_bugs"
+ <input type="text" id="add_ignored_bugs"
name="add_ignored_bugs" size="60"></p>
[% IF user.in_group('bz_sudoers') %]
<br>
- You are a member of the <b>bz_sudoers</b> group, so you can
+ You are a member of the <b>bz_sudoers</b> group, so you can
<a href="relogin.cgi?action=prepare-sudo">impersonate someone else</a>.
[% END %]
</td>
# description: string. Description of the tab (used in tab title).
# saveable: boolean. True if tab has a form which can be submitted.
# True if user is not receiving self-generated mail.
- # Note: For each tab name, a template "prefs/${tab.name}.tmpl" must exist,
+ # Note: For each tab name, a template "prefs/${tab.name}.tmpl" must exist,
# and its interface must be fulfilled.
# current_tab: A direct reference to one of the hashes in the tabs list.
# This tab will be displayed.
- # changes_saved: boolean/string. True if the CGI processed form data before
+ # changes_saved: boolean/string. True if the CGI processed form data before
# displaying anything, and can contain an optional custom
# message if required (which Perl still evaluates as True).
# dont_show_button: boolean. Prevent the display of the "Submit Changes" button.
<input type="hidden" name="token" value="[% token FILTER html %]">
[% END %]
-[% PROCESS "account/prefs/${current_tab.name}.html.tmpl"
+[% PROCESS "account/prefs/${current_tab.name}.html.tmpl"
IF current_tab.name.defined %]
[% IF current_tab.saveable %]
<p>Your saved searches are as follows:</p>
<blockquote>
- <table border="1" cellpadding="3">
+ <table border="1" cellpadding="3">
<tr>
<th>
Search
</td>
<td align="center">
- <input type="checkbox"
+ <input type="checkbox"
name="showmybugslink"
value="1"
[% " checked" IF user.showmybugslink %]>
[% END %]
</td>
<td align="center">
- <input type="checkbox"
+ <input type="checkbox"
name="link_in_footer_[% q.id FILTER html %]"
value="1"
alt="[% q.name FILTER html %]"
<option value="">Don't share</option>
[% FOREACH group = queryshare_groups %]
<option value="[% group.id %]"
- [% ' selected="selected"'
+ [% ' selected="selected"'
IF q.shared_with_group.id == group.id %]
>[% group.name FILTER html %]</option>
[% END %]
[% IF user.queries_available.size %]
<p>You may use these searches saved and shared by others:</p>
- <table border="1" cellpadding="3">
+ <table border="1" cellpadding="3">
<tr>
<th>
Search
[% q.name FILTER uri %]">Edit</a>
</td>
<td align="center">
- <input type="checkbox"
+ <input type="checkbox"
name="link_in_footer_[% q.id FILTER html %]"
value="1"
alt="[% q.name FILTER html %]"
# listselectionvalues: selection values to recreate the current user list.
#
# profile_changes: An array of hashes containing the following fields:
- #
+ #
# who: string; login name of who made the change
# activity_when: string; when the change was made
# what: string; the description of the field which was changed
[% END %]
</p>
-[% PROCESS global/footer.html.tmpl %]
+[% PROCESS global/footer.html.tmpl %]
<input type="hidden" name="token" value="[% token FILTER html %]">
</FORM>
-[% PROCESS admin/classifications/footer.html.tmpl %]
+[% PROCESS admin/classifications/footer.html.tmpl %]
-[% PROCESS global/footer.html.tmpl %]
+[% PROCESS global/footer.html.tmpl %]
<input type="hidden" name="token" value="[% token FILTER html %]">
</form>
-[% PROCESS admin/classifications/footer.html.tmpl %]
+[% PROCESS admin/classifications/footer.html.tmpl %]
-[% PROCESS global/footer.html.tmpl %]
+[% PROCESS global/footer.html.tmpl %]
<tr>
<th align="right">Classification:</th>
- <td><input size=64 maxlength=64 name="classification"
+ <td><input size=64 maxlength=64 name="classification"
value="[% classification.name FILTER html %]"></td>
</tr>
<tr>
</tr>
</table>
- <input type=hidden name="classificationold"
+ <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 admin/classifications/footer.html.tmpl %]
-[% PROCESS global/footer.html.tmpl %]
+[% PROCESS global/footer.html.tmpl %]
[% 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">
+ <td valign="top">
[% IF cl.description %]
[% cl.description FILTER html_light %]
[% ELSE %]
</tr>
</table>
-[% PROCESS global/footer.html.tmpl %]
+[% PROCESS global/footer.html.tmpl %]
<tr>
<td valign="top">Default assignee:</td>
<td valign="top">[% comp.default_assignee.login FILTER html %]</td>
-
+
[% IF Param('useqacontact') %]
</tr>
<tr>
</table>
<h2>Confirmation</h2>
-
+
[% IF comp.bug_count %]
[% IF !Param("allowbugdeletion") %]
<p>
Sorry, there
- [% IF comp.bug_count > 1 %]
- are [% comp.bug_count %] [%+ terms.bugs %]
+ [% IF comp.bug_count > 1 %]
+ are [% comp.bug_count %] [%+ terms.bugs %]
[% ELSE %]
- is [% comp.bug_count %] [%+ terms.bug %]
+ is [% comp.bug_count %] [%+ terms.bug %]
[% END %]
- outstanding for this component. You must reassign
+ outstanding for this component. You must reassign
[% IF comp.bug_count > 1 %]
- those [% terms.bugs %]
+ those [% terms.bugs %]
[% ELSE %]
that [% terms.bug %]
[% END %]
<table border="0" cellpadding="20" width="70%" bgcolor="red"><tr><td>
- There [% IF comp.bug_count > 1 %]
- are [% comp.bug_count %] [%+ terms.bugs %]
+ There [% IF comp.bug_count > 1 %]
+ are [% comp.bug_count %] [%+ terms.bugs %]
[% ELSE %]
is 1 [% terms.bug %]
[% 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">
[% PROCESS admin/components/footer.html.tmpl %]
-[% PROCESS global/footer.html.tmpl %]
+[% PROCESS global/footer.html.tmpl %]
# 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
javascript_urls = [ "js/field.js" ]
<table border="0" cellpadding="4" cellspacing="0">
[% PROCESS "admin/components/edit-common.html.tmpl" %]
-
+
</table>
<hr>
<input type="submit" id="create" value="Add">
<tr>
<th class="field_label"><label for="isactive">Enabled For [% terms.Bugs %]:</label></th>
- <td><input id="isactive" name="isactive" type="checkbox" value="1"
+ <td><input id="isactive" name="isactive" type="checkbox" value="1"
[% 'checked="checked"' IF comp.isactive %]></td>
</tr>
<tr>
<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
+ <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.
#%]
[%# INTERFACE:
- # comp: object; Bugzilla::Component object representing the component
+ # comp: object; Bugzilla::Component object representing the component
# product: object; Bugzilla::Product object representing the product to
# which the component belongs.
#%]
<hr>
<p>
-Edit
+Edit
[% IF comp && !no_edit_component_link %]
- component <a
+ 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>
+ '[% comp.name FILTER html %]'</a>
or edit
[% END %]
[% IF !no_edit_other_components_link %]
-other components of product <a
+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
+ [%- product.name FILTER uri %]">'[% product.name FILTER html %]'</a>,
+ or edit
[% END %]
-product <a
+product <a
title="Edit Product '[% product.name FILTER html %]'"
href="editproducts.cgi?action=edit&product=
[%- product.name FILTER uri %]">'[% product.name FILTER html %]'</a>.
[% columns = [
- {
+ {
name => "name"
heading => "Edit component..."
contentlink => edit_contentlink
},
- {
+ {
name => "description"
- heading => "Description"
+ heading => "Description"
allow_html_content => 1
},
- {
+ {
name => "initialowner"
heading => "Default Assignee"
},
%]
[% columns = [
- {
+ {
name => "name"
heading => "Edit components of..."
- contentlink => "editcomponents.cgi?product=%%name%%"
+ contentlink => "editcomponents.cgi?product=%%name%%"
},
- {
+ {
name => "description"
- heading => "Description"
+ heading => "Description"
allow_html_content => 1
}
]
# The Original Code is the Bugzilla Bug Tracking System.
#
# The Initial Developer of the Original Code is NASA.
- # Portions created by NASA are Copyright (C) 2008
+ # Portions created by NASA are Copyright (C) 2008
# San Jose State University Foundation. All Rights Reserved.
#
# Contributor(s): Max Kanat-Alexander <mkanat@bugzilla.org>
<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
+ [%+ 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 %]".
value="[% field.reverse_desc FILTER html %]">
<br>
Use this label for the list of [% terms.bugs %] that link to
- [%+ terms.abug %] with this
+ [%+ 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 %]".
[% FOREACH sel_field = Bugzilla.fields({ is_select => 1 }) %]
[% NEXT IF sel_field.id == field.id %]
<option value="[% sel_field.id FILTER html %]"
- [% ' selected="selected"'
+ [% ' selected="selected"'
IF sel_field.id == field.visibility_field.id %]>
[% sel_field.description FILTER html %]
([% sel_field.name FILTER html %])
<label for="visibility_values">
<strong>is set to any of:</strong>
</label>
- <select multiple="multiple" size="5" name="visibility_values"
+ <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 %]"
[% END %]
[%+ display_value(field.visibility_field.name, value.name) FILTER html %]
</option>
- [% END %]
+ [% END %]
</select>
</td>
</tr>
[% FOREACH sel_field = Bugzilla.fields({ is_select => 1 }) %]
[% NEXT IF sel_field.id == field.id %]
<option value="[% sel_field.id FILTER html %]"
- [% ' selected="selected"'
+ [% ' selected="selected"'
IF sel_field.id == field.value_field.id %]>
[% sel_field.description FILTER html %]
([% sel_field.name FILTER html %])
contentlink => delete_contentlink
}
}
-%]
+%]
[% PROCESS admin/table.html.tmpl
columns = columns
#%]
[% title = BLOCK %]
- Delete Value '[% value.name FILTER html %]' from the
+ Delete Value '[% value.name FILTER html %]' from the
'[% field.description FILTER html %]' ([% field.name FILTER html %]) field
[% END %]
[% IF value.is_default || value.bug_count || (value_count == 1)
|| value.controls_visibility_of_fields.size
- || value.controlled_values_array.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
+ from the '[% field.description FILTER html %]' field for the following
reason(s):</p>
<ul class="warningmessages">
[% IF value.bug_count %]
<li>
[% IF value.bug_count > 1 %]
- There are [% value.bug_count FILTER html %] [%+ terms.bugs %]
+ There are [% value.bug_count FILTER html %] [%+ terms.bugs %]
with this field value.
[% ELSE %]
There is 1 [% terms.bug %] with this field value.
href="buglist.cgi?[% field.name FILTER uri %]=
[%- value.name FILTER uri %]">
[% IF value.bug_count > 1 %]
- those [% terms.bugs %]
+ those [% terms.bugs %]
[% ELSE %]
that [% terms.bug %]
[% END %]
[% FOREACH field = value.controls_visibility_of_fields %]
<a href="editfields.cgi?action=edit&name=
[%- field.name FILTER uri %]">
- [%- field.description FILTER html %]
+ [%- field.description FILTER html %]
([% field.name FILTER html %])</a><br>
[% END %]
</li>
no_edit_link = 1
+%]
-[% PROCESS global/footer.html.tmpl %]
+[% PROCESS global/footer.html.tmpl %]
[%# 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 %]
%]
<p>
- This page allows you to add a new value for the
+ This page allows you to add a new value for the
'[% field.description FILTER html %]' field.
</p>
<tr>
<th align="right"><label for="is_open">Status Type:</label></th>
<td>
- <input type="radio" id="open_status" name="is_open" value="1"
+ <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">
[% IF field.value_field %]
<tr>
<th align="right">
- <label for="visibility_value_id">Only appears when
+ <label for="visibility_value_id">Only appears when
[%+ field.value_field.description FILTER html %] is set to:
</label>
</th>
[% PROCESS global/variables.none.tmpl %]
[% title = BLOCK %]
- Edit Value '[% value.name FILTER html %]' for the
+ Edit Value '[% value.name FILTER html %]' for the
'[% field.description FILTER html %]' ([% field.name FILTER html %]) field
[% END %]
[% PROCESS global/header.html.tmpl
</tr>
<tr>
<th align="right"><label for="sortkey">Sortkey:</label></th>
- <td><input id="sortkey" size="6" maxlength="6" name="sortkey"
+ <td><input id="sortkey" size="6" maxlength="6" name="sortkey"
value="[%- value.sortkey FILTER html %]"></td>
</tr>
[% IF field.name == "bug_status" %]
[% FOREACH field_value = field.value_field.legal_values %]
[% NEXT IF field_value.name == '' %]
<option value="[% field_value.id FILTER none %]"
- [% ' selected="selected"'
+ [% ' selected="selected"'
IF field_value.id == value.visibility_value.id %]>
[% IF field.value_field.name == 'component' %]
[% field_value.product.name FILTER html %]:
[% 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"
+ <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 %]
[% END %]
[% IF value.defined && !no_edit_link %]
- Edit value <a
+ Edit value <a
title="Edit value '[% value.name FILTER html %]' for the '
[%- field.name FILTER html %]' field"
href="editvalues.cgi?action=edit&field=
[% END %]
[% UNLESS no_edit_other_link %]
- Edit other values for the <a
+ Edit other values for the <a
href="editvalues.cgi?field=
[%- field.name FILTER uri %]">'[% field.description FILTER html %]'</a> field.
[%# INTERFACE:
# values: array of hashes having the following properties:
# - name: string; The value.
- # - sortkey: number; The sortkey used to order the value when
+ # - 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.
[% columns = [
- {
+ {
name => "name"
heading => "Edit field value..."
contentlink => edit_contentlink
},
- {
+ {
name => "sortkey"
heading => "Sortkey"
},
[%# INTERFACE:
# fields: Array of hashes. Each hash contains only one key, "name."
- # The names are the same as the keys from field_descs
+ # The names are the same as the keys from field_descs
# (see global/field-descs.html.tmpl).
#%]
%]
[% columns = [
- {
+ {
name => "name"
heading => "Edit field values for..."
content_use_field = 1
<option value="[% comp FILTER html %]">[% comp FILTER html %]</option>
[% END %]
</select><br>
- <input type="submit" id="categoryAction-include"
+ <input type="submit" id="categoryAction-include"
name="categoryAction-include" value="Include">
<input type="submit" id="categoryAction-exclude"
name="categoryAction-exclude" value="Exclude">
<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"
+ <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"
+ <input type="submit" id="categoryAction-removeExclusion"
name="categoryAction-removeExclusion" value="Remove Exclusion">
</td>
</tr>
<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 %]
+
+[% PROCESS global/footer.html.tmpl %]
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
+<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>
in comments in [% terms.bugs %] besides the name of the author of comments.
</p>
-<p>By default, the new group will be associated with existing
-products. Unchecking the "Insert new group into all existing
-products" option will prevent this and make the group become
+<p>By default, the new group will be associated with existing
+products. Unchecking the "Insert new group into all existing
+products" option will prevent this and make the group become
visible only when its controls have been added to a product.</p>
<p>Back to the <a href="./">main [% terms.bugs %] page</a>
or to the <a href="editgroups.cgi">group list</a>.
-[% PROCESS global/footer.html.tmpl %]
+[% PROCESS global/footer.html.tmpl %]
[% 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
+ 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> -
+ which [% terms.bugs %]</a> -
<label><input type="checkbox" name="removebugs">Remove
all [% terms.bugs %] from this group restriction for me.</label></p>
[% SET hidden = 0 %]
[% IF data.controls.othercontrol == constants.CONTROLMAPMANDATORY
AND data.controls.membercontrol == constants.CONTROLMAPMANDATORY
- AND data.controls.entry
+ AND data.controls.entry
%]
[% SET hidden = 1 %]
[% END %]
<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> -
+ me which types</a> -
<label><input type="checkbox" name="removeflags">Remove all
flag types from this group for me.</label></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
+ [% 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
Go back to the <a href="editgroups.cgi">group list</a>.
-[% PROCESS global/footer.html.tmpl %]
+[% PROCESS global/footer.html.tmpl %]
# 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 - Arrays of Bugzilla::Group objects that show the current
# available values for each grant.
#%]
<th>Group:</th>
<td>
[% IF group.is_bug_group %]
- <input type="text" name="name" size="60"
+ <input type="text" name="name" size="60"
value="[% group.name FILTER html %]">
[% ELSE %]
[% group.name FILTER html %]
<th>Description:</th>
<td>
[% IF group.is_bug_group %]
- <input type="text" name="desc" size="70"
+ <input type="text" name="desc" size="70"
value="[% group.description FILTER html %]">
[% ELSE %]
[% group.description FILTER html %]
<tr>
<th>User Regexp:</th>
<td>
- <input type="text" name="regexp" size="40"
+ <input type="text" name="regexp" size="40"
value="[% group.user_regexp FILTER html %]">
</td>
</tr>
<tr>
<th>Use For [% terms.Bugs %]:</th>
<td>
- <input type="checkbox" name="isactive"
+ <input type="checkbox" name="isactive"
value="1" [% 'checked="checked"' IF group.is_active %]>
</td>
</tr>
<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
+ ("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
+ ("If you are in [% group.name FILTER html %], you are
automatically also in...")</th>
</tr>
<tr>
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>
<th class="one">
Groups That Can Grant Membership in This Group<br>
- ("Users in <var>X</var> can add other users to
+ ("Users in <var>X</var> can add other users to
[%+ group.name FILTER html %]")
</th>
<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 %]
+ This is often very useful if you upgraded from [% terms.Bugzilla %]
2.16.</p>
<table><tr><td>
<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
+ <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">
</fieldset>
</form>
</td></tr></table>
-
+
<p>Back to the <a href="editgroups.cgi">group list</a>.</p>
-[% PROCESS global/footer.html.tmpl %]
+[% PROCESS global/footer.html.tmpl %]
[% BLOCK select_pair %]
<table class="select_pair">
content => " "
}
}
- }
+ }
%]
[% FOREACH group IN ["chartgroup", "insidergroup", "timetrackinggroup", "querysharegroup"] %]
content => "user"
}
}
-%]
+%]
[% PROCESS admin/table.html.tmpl
columns = columns
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>
<p><a href="editkeywords.cgi">Edit other keywords</a>.</p>
-[% PROCESS global/footer.html.tmpl %]
+[% PROCESS global/footer.html.tmpl %]
[%# INTERFACE:
# none
#%]
-
+
[% PROCESS global/header.html.tmpl
title = "Add keyword"
subheader = "This page allows you to add a new keyword."
</table>
<h2>Confirmation</h2>
-
+
[% IF milestone.bug_count %]
<table border="0" cellpadding="20" width="70%" bgcolor="red">
<tr><td>
There
- [% IF milestone.bug_count > 1 %]
- are [% milestone.bug_count FILTER none %] [%+ terms.bugs %]
+ [% IF milestone.bug_count > 1 %]
+ are [% milestone.bug_count FILTER none %] [%+ terms.bugs %]
[% ELSE %]
is 1 [% terms.bug %]
[% END %]
entered for this milestone! When you delete this milestone,
<b><blink>ALL</blink></b> of these [% terms.bugs %] will be retargeted
- to [% product.default_milestone FILTER html %], the default milestone for
+ to [% product.default_milestone FILTER html %], the default milestone for
the [% product.name FILTER html %] product.
</td></tr>
</table>
[% PROCESS admin/milestones/footer.html.tmpl %]
-[% PROCESS global/footer.html.tmpl %]
+[% PROCESS global/footer.html.tmpl %]
# 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 %]
[% 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.
+ [%- product.name FILTER uri %]">Add</a> a milestone.
[% END %]
[% IF milestone.name && !no_edit_milestone_link %]
- Edit milestone <a
+ Edit milestone <a
title="Edit Milestone '[% milestone.name FILTER html %]' of product '
[%- product.name FILTER html %]'"
href="editmilestones.cgi?action=edit&product=
[% END %]
[% UNLESS no_edit_other_milestones_link %]
- Edit other milestones of product <a
+ Edit other milestones of product <a
href="editmilestones.cgi?product=
[%- product.name FILTER uri %]">'[% product.name FILTER html %]'</a>.
[% END %]
- Edit product <a
+ Edit product <a
href="editproducts.cgi?action=edit&product=
[%- product.name FILTER uri %]">'[% product.name FILTER html %]'</a>.
[% columns = [
- {
+ {
name => "name"
heading => "Edit milestone..."
contentlink => edit_contentlink
},
- {
+ {
name => "sortkey"
heading => "Sortkey"
},
content => "(Default milestone)"
override_contentlink => 1
contentlink => undef
- }
-%]
+ }
+%]
[% Hook.process('before_table') %]
%]
[% columns = [
- {
+ {
name => "name"
heading => "Edit milestones of..."
- contentlink => "editmilestones.cgi?product=%%name%%"
+ contentlink => "editmilestones.cgi?product=%%name%%"
},
- {
+ {
name => "description"
- heading => "Description"
+ heading => "Description"
allow_html_content => 1
}
]
"If off, then all $terms.bugs initially have the default " _
"milestone for the product being filed in.",
- musthavemilestoneonaccept =>
+ 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}?",
usebugaliases => "Do you wish to use $terms.bug aliases, which allow you to assign " _
"$terms.bugs an easy-to-remember name by which you can refer to them?",
- use_see_also =>
+ 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"
<font color="red">
<blink>Unknown param type [% param.type FILTER html %]!!!</blink>
</font>
- [% END %]
+ [% END %]
</p>
[% UNLESS param.no_reset %]
<p>
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.",
+ "user is forbidden to edit.",
}
%]
<a href="editparams.cgi?section=
[%- panel.name FILTER uri %]#[% param.name FILTER uri %]_desc">
[% param.name FILTER html %]</a>
- </td>
+ </td>
<td>
[% panel.title FILTER html %]
</td>
"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.",
+ "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. " _
#
# (classification fields available if Param('useclassification') is enabled:)
#
- # classification: Bugzilla::Classification object; The classification
+ # classification: Bugzilla::Classification object; The classification
# the product is in
#
#%]
[%# INTERFACE:
# classification: Bugzilla::Classification object; If classifications
- # are enabled, then this is
+ # are enabled, then this is
# the currently selected classification
#
#%]
<tr>
<th align="right">Version:</th>
- <td><input size="64" maxlength="255" name="version"
+ <td><input size="64" maxlength="255" name="version"
value="[% version FILTER html %]">
</td>
</tr>
</form>
[% PROCESS "admin/products/footer.html.tmpl"
- no_add_product_link = 1
+ no_add_product_link = 1
no_edit_product_link = 1 %]
[% PROCESS global/footer.html.tmpl %]
<td><b>[% classification.name FILTER html %]</b></td>
</tr>
[% END %]
-
+
<tr>
<th align="right">Product:</th>
- <td><input size="64" maxlength="64" name="product"
+ <td><input size="64" maxlength="64" name="product"
value="[% product.name FILTER html %]">
</td>
</tr>
</td>
</tr>
[% END %]
-
+
<tr>
<th align="right">Open for [% terms.bug %] entry:</th>
<td><input type="checkbox" name="is_active" value="1"
#
# (classification fields available if Param('useclassification') is enabled:)
#
- # classification: Bugzilla::Classification object; The classification
+ # classification: Bugzilla::Classification object; The classification
# the product is in
#%]
[% product.bug_count FILTER html %]</a></td>
</tr>
</table>
-
- <input type="hidden" name="product_old_name"
+
+ <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_add_product_link = 1
no_edit_product_link = 1 %]
[% PROCESS global/footer.html.tmpl %]
# product: Bugzilla::Product Object; the product
#
# classification: Bugzilla::Classification object ; If classifications
- # are enabled, then this is the currently
+ # are enabled, then this is the currently
# selected classification
#
# no_XXX_link: boolean; if defined, then don't show the corresponding
[% classification_url_part_start = BLOCK %]classification=
[%- classification.name FILTER uri %]
[% END %]
- [% classification_text = BLOCK %]
+ [% classification_text = BLOCK %]
of classification '[% classification.name FILTER html %]'
[% END %]
[% END %]
[% END %]
[% IF product && !no_edit_product_link %]
- Edit product <a
- title="Edit Product '[% product.name FILTER html %]'
+ 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>.
[%# Edit other products (in a classification if specified): %]
[% UNLESS no_edit_other_products_link %]
- Edit <a
+ Edit <a
href="editproducts.cgi?
[%- classification_url_part_start FILTER none %]">other products
[% classification_text %]</a>.
[% PROCESS global/header.html.tmpl title = title %]
[% FOREACH group = mandatory_groups %]
<P>
-group '[% group.name FILTER html %]' impacts [% group.count %]
+group '[% group.name FILTER html %]' impacts [% group.count %]
[%+ terms.bugs %] for
which the group is newly mandatory and will be added.
[% END %]
[% title = BLOCK %]
Edit Group Controls for [% product.name FILTER html %]
[% END %]
-[% PROCESS global/header.html.tmpl
- title = title
+[% PROCESS global/header.html.tmpl
+ title = title
%]
<form method="post" action="editproducts.cgi">
#
# The Original Code is the Bugzilla Bug Tracking System.
#
- # Contributor(s): André Batosti <batosti@async.com.br>
+ # Contributor(s): André Batosti <batosti@async.com.br>
#
#%]
[% 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
+ 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 %]
%]
[% 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"
#%]
[%# INTERFACE:
- # products: array of Bugzilla::Product objects
+ # products: array of Bugzilla::Product objects
#
# classification: Bugzilla::Classification object; If classifications
- # are enabled, then this is
+ # are enabled, then this is
# the currently selected classification
# showbugcounts: boolean; true if bug counts should be included in the table
#%]
[% classification_url_part = BLOCK %]&classification=
[%- classification.name FILTER uri %]
[%- END %]
- [% classification_title = BLOCK %]
+ [% classification_title = BLOCK %]
in classification '[% classification.name FILTER html %]'
[% END %]
[% END %]
%]
[% 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
[% END %]
[% END %]
-[% title = BLOCK %]Updating Product '[% product.name FILTER html %]'
+[% title = BLOCK %]Updating Product '[% product.name FILTER html %]'
[% classification_text FILTER none %][% END %]
[% PROCESS global/header.html.tmpl
title = title
[% IF product.is_active %]
open for
[% ELSE %]
- closed to
+ closed to
[% END %]
new [% terms.bugs %].
</p>
[% IF changes.allows_unconfirmed.defined %]
<p>
[% IF product.allows_unconfirmed %]
- The product now allows the
+ The product now allows the
[%+ display_value('bug_status', 'UNCONFIRMED') FILTER html %] status.
[% ELSE %]
- The product no longer allows the
+ The product no longer allows the
[%+ display_value('bug_status', 'UNCONFIRMED') FILTER html %] status.
- Note that any
+ Note that any
<a href="buglist.cgi?product=
- [%- product.name FILTER uri %]&bug_status=UNCONFIRMED">
- [%- terms.bugs %] that currently have the
+ [%- 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 %]
</td>
</tr>
</table>
-
+
</form>
[% ELSE %]
There are no preferences to edit.
#
# Contributor(s): A. Karl Kornel <karl@kornel.name>
#%]
-
+
[% PROCESS global/variables.none.tmpl %]
[% PROCESS global/header.html.tmpl
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
+ 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.
+ 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,
+ To begin,
[% IF Param('usemenuforusers') %]
- select
+ select
[% ELSE %]
- enter the login of
+ enter the login of
[% END %]
<label for="target_login">the <u>u</u>ser to impersonate</label>:
[% INCLUDE global/userselect.html.tmpl
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
+ 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="current_password">your [% terms.Bugzilla %]
password</label>:
<input type="password" id="current_password" name="current_password" size="20">
<br>
- This is done for two reasons. First of all, it is done to reduce
- the chances of someone doing large amounts of damage using your
- already-logged-in account. Second, it is there to force you to take the
+ 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">
[%# INTERFACE:
#
- # columns:
- # array of hashes representing the columns in the table.
+ # 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
# 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.
+ # 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
+ # 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 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.
# 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
[%# 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 %]
[% END %]
<a href="[% link_uri %]">
[% END %]
-
+
[% IF content_use_field && field_descs.exists(row.${c.name}) %]
[% colname = row.${c.name} %]
[% field_descs.${colname} FILTER html %]
[% END %]
[% END %]
[% END %]
-
+
[% IF contentlink %]
</a>
[% END %]
-
+
</td>
[% END %]
</tr>
# id: group id
# name: group name
#%]
-
+
[% PROCESS global/header.html.tmpl
title = "Search users"
<th><label for="login">Login name:</label></th>
<td>
[% IF editusers %]
- <input size="64" maxlength="255" name="login"
+ <input size="64" maxlength="255" name="login"
id="login" value="[% otheruser.login FILTER html %]">
[% IF editform %]
[% IF !otheruser.in_group('bz_sudo_protect') %]
[% IF version.bug_count %]
<p>
Sorry, there
- [% IF version.bug_count > 1 %]
- are [% version.bug_count FILTER none %] [%+ terms.bugs %]
+ [% IF version.bug_count > 1 %]
+ are [% version.bug_count FILTER none %] [%+ terms.bugs %]
[% ELSE %]
- is [% version.bug_count FILTER none %] [%+ terms.bug %]
+ is [% version.bug_count FILTER none %] [%+ terms.bug %]
[% END %]
- outstanding for this version. You must move
+ outstanding for this version. You must move
[% IF version.bug_count > 1 %]
- those [% terms.bugs %]
+ those [% terms.bugs %]
[% ELSE %]
that [% terms.bug %]
[% END %]
[% 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">
[% PROCESS admin/versions/footer.html.tmpl %]
-[% PROCESS global/footer.html.tmpl %]
+[% PROCESS global/footer.html.tmpl %]
# 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 %]
[% 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.
+ [%- product.name FILTER uri %]">Add</a> a version.
[% END %]
[% IF version.name && !no_edit_version_link %]
- Edit version <a
+ Edit version <a
title="Edit Version '[% version.name FILTER html %]' of product '
[%- product.name FILTER html %]'"
href="editversions.cgi?action=edit&product=
[% END %]
[% UNLESS no_edit_other_versions_link %]
- Edit other versions of product <a
+ Edit other versions of product <a
href="editversions.cgi?product=
[%- product.name FILTER uri %]">'[% product.name FILTER html %]'</a>.
[% END %]
- Edit product <a
+ Edit product <a
href="editproducts.cgi?action=edit&product=
[%- product.name FILTER uri %]">'[% product.name FILTER html %]'</a>.
[% columns = [
- {
+ {
name => "name"
heading => "Edit version..."
contentlink => edit_contentlink
%]
[% columns = [
- {
+ {
name => "name"
heading => "Edit versions of..."
- contentlink => "editversions.cgi?product=%%name%%"
+ contentlink => "editversions.cgi?product=%%name%%"
},
- {
+ {
name => "description"
- heading => "Description"
+ heading => "Description"
allow_html_content => 1
}
]
<a href="[% bonsai_prefix %]#[% section.old_start %]">
[% END %]
[% IF section.old_lines > 1 %]
- Lines [% section.old_start %]-[% section.old_start +
+ Lines [% section.old_start %]-[% section.old_start +
section.old_lines - 1 %]
[% ELSE %]
Line [% section.old_start %]
</a>
[% END %]
[% section.func_info FILTER html IF section.func_info %]
- [% END %]
+ [% END %]
</th><th>
<a href="#[% file.filename FILTER html %]_sec[% section_num %]">Link Here</a>
</th></tr></table>
<span>Return to [% "$terms.bug $bugid" FILTER bug_link(bugid) FILTER none %]</span>
[% PROCESS global/footer.html.tmpl %]
-
+
[% ELSE %]
</body>
</html>
<div id="attachment_attributes">
<div id="attachment_information_read_only" class="[% "bz_private" IF attachment.isprivate %]">
<div class="title">
- [% "[patch]" IF attachment.ispatch%]
- <span class="[% "bz_obsolete" IF attachment.isobsolete %]" title="[% "obsolete" IF attachment.isobsolete %]">
+ [% "[patch]" IF attachment.ispatch%]
+ <span class="[% "bz_obsolete" IF attachment.isobsolete %]" title="[% "obsolete" IF attachment.isobsolete %]">
[% attachment.description FILTER html %]
</span>
[% IF can_edit %]
wrap = 'soft'
classes = 'block' _ editable_or_hide
defaultcontent = attachment.description
- %]
+ %]
</div>
<div id="attachment_filename">
<label for="filename">Filename:</label>
<input type="text" size="20" class="text block[% editable_or_hide %]"
id="filename" name="filename"
- value="[% attachment.filename FILTER html %]">
+ value="[% attachment.filename FILTER html %]">
</div>
<div id="attachment_mimetype">
<label for="contenttypeentry">MIME Type:</label>
<input type="text" size="20" class="text block[% editable_or_hide %]"
id="contenttypeentry" name="contenttypeentry"
- value="[% attachment.contenttype FILTER html %]">
+ value="[% attachment.contenttype FILTER html %]">
</div>
-
+
<div id="attachment_creator">
<span class="label">Creator:</span>
[%+ INCLUDE global/user.html.tmpl who = attachment.attacher %]
</div>
-
+
<div id="attachment_size">
<span class="label">Size:</span>
[% IF attachment.datasize %]
<div class="readonly">
<div class="checkboxes">
<div id="attachment_isobsolete">
- <input type="checkbox" id="isobsolete" name="isobsolete" value="1"
+ <input type="checkbox" id="isobsolete" name="isobsolete" value="1"
[%+ 'checked="checked"' IF attachment.isobsolete %]>
<label for="isobsolete">obsolete</label>
</div>
</div>
[% END %]
</div>
- </div>
+ </div>
</div>
<div id="attachment_view_window">
[% ELSE %]
<div id="noview">
<p><b>
- Attachment is not viewable in your browser because its MIME type
- ([% attachment.contenttype FILTER html %]) is not one that your browser is
+ Attachment is not viewable in your browser because its MIME type
+ ([% attachment.contenttype FILTER html %]) is not one that your browser is
able to display.
</b></p>
<p><b>
[% Hook.process('form_before_submit') %]
- [% IF user.id %]
+ [% IF user.id %]
<div id="update_container">
<input type="submit" value="Submit" id="update">
</div>
- [% END %]
- </div>
+ [% END %]
+ </div>
</div>
</div>
</form>
# enter_bug.cgi) can be access via Bugzilla.cgi.param. It can be used to
# pull out various custom fields and format an initial Description entry
# from them.
- #%]
+ #%]
[% USE Bugzilla %]
[% cgi = Bugzilla.cgi %]
User-Agent: [%+ cgi.user_agent() %]
[% END %]
[% IF cgi.param("actual_results") %]
-Actual Results:
+Actual Results:
[%+ cgi.param("actual_results") %]
[% END %]
[% IF cgi.param("expected_results") %]
-Expected Results:
+Expected Results:
[%+ cgi.param("expected_results") %]
[% END %]
<h3 id="step1">Step 1 of 3 - has your [% terms.bug %] already been reported?</h3>
<p>
- <font color="red">Please don't skip this step - half of all
+ <font color="red">Please don't skip this step - half of all
[% terms.bugs %] filed are
reported already.</font>
Check the two lists of frequently-reported [% terms.bugs %]:
<p>
<a href="duplicates.cgi?[% productstring %]&format=simple" target="somebugs">All-time Top 20</a> (loaded initially) |
- <a href="duplicates.cgi?[% productstring %]&format=simple&sortby=delta&reverse=1&maxrows=100&changedsince=14" target="somebugs">Hot in the last two weeks</a>
+ <a href="duplicates.cgi?[% productstring %]&format=simple&sortby=delta&reverse=1&maxrows=100&changedsince=14" target="somebugs">Hot in the last two weeks</a>
</p>
<iframe name="somebugs" id="somebugs"
<input type="hidden" name="order" value="relevance desc">
<input type="hidden" name="bug_status" value="__all__">
<input type="hidden" name="product" value="[% product.name FILTER html %]">
- [% IF product.name == "Firefox" OR
- product.name == "Thunderbird" OR
+ [% IF product.name == "Firefox" OR
+ product.name == "Thunderbird" OR
product.name == "SeaMonkey" OR
product.name == "Camino" %]
<input type="hidden" name="product" value="Core">
<h3 id="step2">Step 2 of 3 - give information</h3>
<p>
- If you've tried a few searches and your [% terms.bug %] really isn't in
+ If you've tried a few searches and your [% terms.bug %] really isn't in
there, tell us all about it.
</p>
</td>
</tr>
</table>
-
+
<p>
The area where the problem occurs.
To pick the right component, you could use the same one as
[% matches = cgi.user_agent('Gecko/(\d+)') %]
[% buildid = cgi.user_agent() IF matches %]
[% END %]
-
+
[%# Accept URL parameter build ID for non-browser products %]
[% IF cgi.param("buildid") %]
[% buildid = cgi.param("buildid") %]
<td valign="top">
<input type="text" size="80" name="buildid" value="[% buildid FILTER html %]">
<p>
- This should identify the exact version of the product you were using.
- If the above field is blank or you know it is incorrect, copy the
- user agent text from the product's Help | Troubleshooting Information menu
- (for browsers this will begin with "Mozilla/5.0...").
- If the product won't start, instead paste the complete URL you downloaded
+ This should identify the exact version of the product you were using.
+ If the above field is blank or you know it is incorrect, copy the
+ user agent text from the product's Help | Troubleshooting Information menu
+ (for browsers this will begin with "Mozilla/5.0...").
+ If the product won't start, instead paste the complete URL you downloaded
it from.
</p>
</td>
<b>Summary</b>
</td>
<td valign="top">
- <input type="text" size="80" name="short_desc" id="short_desc"
+ <input type="text" size="80" name="short_desc" id="short_desc"
maxlength="255" spellcheck="true">
<p>
A sentence which summarises the problem.
<tt>
<font color="#009900">Good example</font>: After a crash which
happened when I was sorting in the Bookmark Manager,<br> all of my
- top-level bookmark folders beginning with the letters Q to Z are
+ top-level bookmark folders beginning with the letters Q to Z are
no longer present.
</tt>
</p>
</p>
</td>
</tr>
-
+
<tr>
<td valign="top" align="right">
<b>Severity</b>
</option>
</select>
<p>
- Say how serious the problem is, or if your [% terms.bug %] is a
+ Say how serious the problem is, or if your [% terms.bug %] is a
request for a new feature.
</p>
</td>
<p>
That's it! Thanks very much. You'll be notified by email about any
- progress that is made on fixing your [% terms.bug %].
+ progress that is made on fixing your [% terms.bug %].
-<p>
+<p>
Please be warned
- that we get a lot of [% terms.bug %] reports filed - it may take quite a
- while to get around to yours. You can help the process by making sure your
+ that we get a lot of [% terms.bug %] reports filed - it may take quite a
+ while to get around to yours. You can help the process by making sure your
[%+ terms.bug %] is
complete and easy to understand, and by quickly replying to any questions
which may arrive by email.
[% PROCESS global/variables.none.tmpl %]
-Before reporting [% terms.abug %], please read the
+Before reporting [% terms.abug %], please read the
<a href="https://developer.mozilla.org/docs/Mozilla/QA/Bug_writing_guidelines">
[% terms.bug %] writing guidelines</a>, please look at the list of
<a href="duplicates.cgi">most frequently reported [% terms.bugs %]</a>, and please
[% filtered_desc = blocked_tree.$bugid.short_desc FILTER html %]
[% PROCESS global/header.html.tmpl
title = "Dependency tree for $terms.Bug $bugid"
- header = "Dependency tree for
+ header = "Dependency tree for
<a href=\"show_bug.cgi?id=$bugid\">$terms.Bug $bugid</a>"
javascript_urls = ["js/expanding-tree.js"]
style_urls = ["skins/standard/dependency-tree.css"]
%]
[% PROCESS depthControlToolbar %]
-
+
[% INCLUDE tree_section ids=dependson_ids type=1 %]
-
-[% INCLUDE tree_section ids=blocked_ids type=2 %]
+
+[% INCLUDE tree_section ids=blocked_ids type=2 %]
[% PROCESS depthControlToolbar %]
[% global.seen = {} %]
[%# Display the tree of bugs that this bug depends on. %]
<h3>
- <a href="show_bug.cgi?id=[% bugid %]">[% terms.Bug %] [%+ bugid %]</a>
+ <a href="show_bug.cgi?id=[% bugid %]">[% terms.Bug %] [%+ bugid %]</a>
[% IF type == 1 %]
[% tree_name = "dependson_tree" %]
[% IF ids.size %]
- depends on
+ depends on
[% ELSE %]
does not depend on any [% 'open ' IF hide_resolved %][% terms.bugs %].
[% END %]
[% ELSIF type == 2 %]
[% tree_name = "blocked_tree" %]
- [% IF ids.size %]
- blocks
+ [% IF ids.size %]
+ blocks
[% ELSE %]
does not block any [% 'open ' IF hide_resolved %][% terms.bugs %].
[% END %]
[%+ (ids.size == 1) ? "one" : ids.size %]
[%+ IF hide_resolved %]open[% END %]
[%+ (ids.size == 1) ? terms.bug : terms.bugs %]:
- [% END %]
+ [% END %]
</h3>
[% IF ids.size %]
[%# 27 chars is the length of buglist.cgi?tweak=&bug_id=" %]
[% bug = tree.$bugid %]
<li>
[%- INCLUDE bullet bugid=bugid tree=tree -%]
- <span class="summ[% "_deep" IF tree.dependencies.$bugid.size %]"
- id="[% bugid FILTER html %]"
+ <span class="summ[% "_deep" IF tree.dependencies.$bugid.size %]"
+ id="[% bugid FILTER html %]"
[% IF global.seen.$bugid %]
onMouseover="duplicatedover('[% bugid FILTER html %]')"
onMouseout="duplicatedout('[% bugid FILTER html %]')"
[% BLOCK bullet %]
[% IF tree.dependencies.$bugid.size && ! global.seen.$bugid %]
[% extra_class = " b_open" %]
- [% extra_args = 'onclick="return doToggle(this, event)"' %]
+ [% extra_args = 'onclick="return doToggle(this, event)"' %]
[% END %]
- <a id="b[% bugid %]"
+ <a id="b[% bugid %]"
class="b [%+ extra_class FILTER none %]"
title="Click to expand or contract this portion of the tree. Hold down the Ctrl key while clicking to expand or contract all subtrees."
[% extra_args FILTER none %]> </a>
style="display: inline; margin: 0px;">
[%# set to one form %]
<input type="submit" id="change_maxdepth"
- value=" 1 "
+ value=" 1 "
[% "disabled" IF realdepth < 2 || maxdepth == 1 %]>
<input name="id" type="hidden" value="[% bugid %]">
<input name="maxdepth" type="hidden" value="1">
<input name="maxdepth" type="hidden" value="[% maxdepth + 1 %]">
[% END %]
<input name="hide_resolved" type="hidden" value="[% hide_resolved %]">
- <input type="submit" id="increase_depth" value=" > "
+ <input type="submit" id="increase_depth" value=" > "
[% "disabled" IF realdepth < 2 || !maxdepth || maxdepth >= realdepth %]>
</form>
</td>
#
# The Original Code is the Bugzilla Bug Tracking System.
#
- # The Initial Developer of the Original Code is the San Jose State
+ # The Initial Developer of the Original Code is the San Jose State
# University Foundation. Portions created by the Initial Developer
# are Copyright (C) 2008 the Initial Developer. All Rights Reserved.
#
"Users who may not have a direct role to play on this $terms.bug, but who
are interested in its progress.",
-classification =>
+classification =>
"$terms.Bugs are categorised into Classifications, Products and"
- _ " Components. classifications is the top-level categorisation.",
+ _ " Components. classifications is the top-level categorisation.",
-component =>
+component =>
"Components are second-level categories; each belongs to a"
_ " particular Product. Select a Product to narrow down this list.",
remaining_time =>
"The number of hours of work left on this $terms.bug, calculated by
- subtracting the $vars.field_descs.work_time from the
+ subtracting the $vars.field_descs.work_time from the
${vars.field_descs.estimated_time}.",
-rep_platform =>
+rep_platform =>
"The hardware platform the $terms.bug was observed on.",
reporter =>
<p>You should normally use this field to refer to $terms.bugs in
<em>other</em> installations. For $terms.bugs in this
- installation, it is better to use the $vars.field_descs.dependson and
+ installation, it is better to use the $vars.field_descs.dependson and
$vars.field_descs.blocked fields.</p>",
short_desc =>
[% END %]
[% IF Param('useclassification') %]
- [% vars.help_html.product = vars.help_html.product
+ [% vars.help_html.product = vars.help_html.product
_ " Select a Classification to narrow down this list." %]
[% END %]
[% field_type_desc = BLOCK -%]
[% field_types.$field_type FILTER html %]
[%- END %]
- [% vars.help_html.${help_field} =
+ [% vars.help_html.${help_field} =
"A custom $field_type_desc field in this installation"
_ " of ${terms.Bugzilla}." %]
[% END %]
[%# Add help for the search types, for query.cgi. %]
[% type_desc = BLOCK %]
- The type of [% vars.field_descs.${help_field} FILTER html %] search you
+ The type of [% vars.field_descs.${help_field} FILTER html %] search you
would like.
[% END %]
[% SET type_name = help_field _ '_type' %]
<label for="[% field.name FILTER html %]"[% IF accesskey %] accesskey="[% accesskey FILTER html %]"[% END %]>
[% END %]
- <a
+ <a
[% IF help_html.${field.name}.defined %]
title="[% help_html.${field.name} FILTER txt FILTER collapse FILTER html %]"
class="field_help_link"
# allow_dont_change: display the --do_not_change-- option for select fields.
# value_span: A colspan for the table cell containing
# the field value.
- # no_tds: boolean; if true, don't display the label <th> or the
+ # no_tds: boolean; if true, don't display the label <th> or the
# wrapping <td> for the field.
- # bug (optional): The current Bugzilla::Bug being displayed, or a hash
+ # bug (optional): The current Bugzilla::Bug being displayed, or a hash
# with default field values being displayed on a page.
#%]
[% IF NOT no_tds %]
[% PROCESS "bug/field-label.html.tmpl" %]
<td class="field_value [% ' bz_hidden_field' IF hidden %]"
- id="field_container_[% field.name FILTER html %]"
+ id="field_container_[% field.name FILTER html %]"
[% " colspan=\"$value_span\"" FILTER none IF value_span %]>
[% END %]
[% Hook.process('start_field_column') %]
</span>
- [% IF value %]
+ [% IF value %]
[% value FILTER bug_link(value, use_alias => 1) FILTER none %]
[% END %]
<span id="[% field.name FILTER html %]_edit_container" class="edit_me bz_default_hidden">
'[% field.name FILTER js %]',
"[% value FILTER js %]");
</script>
- [% CASE [ constants.FIELD_TYPE_SINGLE_SELECT
+ [% CASE [ constants.FIELD_TYPE_SINGLE_SELECT
constants.FIELD_TYPE_MULTI_SELECT ] %]
<input type="hidden" id="[% field.name FILTER html %]_dirty">
- <select id="[% field.name FILTER html %]"
- name="[% field.name FILTER html %]"
+ <select id="[% field.name FILTER html %]"
+ name="[% field.name FILTER html %]"
[% IF field.type == constants.FIELD_TYPE_MULTI_SELECT %]
[% SET field_size = 5 %]
[% IF field.legal_values.size < 5 %]
[% END %]
[% FOREACH legal_value = legal_values %]
[% NEXT IF NOT legal_value.is_active AND NOT value.contains(legal_value.name).size %]
-
+
[%# Purpose: hide field values from those who can't change them %]
[% IF field.name.match("^cf_blocking_") OR
field.name.match("^cf_status_") OR
[% NEXT UNLESS bug.check_can_change_field(field.name, '---', legal_value.name) OR
value.contains(legal_value.name).size %]
[% END %]
-
+
[% IF field.name == "resolution" &&
legal_value.name != bug.resolution %]
[% r = legal_value.name %]
[% END %]
[% NEXT IF r == "EXPIRED" %]
[% END %]
-
+
<option value="[% legal_value.name FILTER html %]"
id="v[% legal_value.id FILTER html %]_
[%- field.name FILTER html %]"
[% CASE constants.FIELD_TYPE_TEXTAREA %]
<div class="uneditable_textarea">[% value FILTER html %]</div>
[% CASE constants.FIELD_TYPE_BUG_ID %]
- [% IF value %]
+ [% IF value %]
[% value FILTER bug_link(value, use_alias => 1) FILTER none %]
[% END %]
- [% CASE [ constants.FIELD_TYPE_SINGLE_SELECT
+ [% CASE [ constants.FIELD_TYPE_SINGLE_SELECT
constants.FIELD_TYPE_MULTI_SELECT ] %]
[% FOREACH val = value %]
[% display_value(field.name, val) FILTER html %]
# Contributor(s): Marc Schumann <wurblzap@gmail.com>
#%]
-[%# NOTE: Everywhere you use this template, you must call
+[%# NOTE: Everywhere you use this template, you must call
# "FILTER remove('^X')" on the result. This is unfortunately the only way
# to preserve leading whitespace in comments.
#%]
editable = bug.choices.bug_status.size > 1
%]
- [% IF bug.resolution
+ [% IF bug.resolution
OR bug.check_can_change_field('resolution', bug.resolution, 1)
%]
<noscript><br>resolved as </noscript>
</div>
[% ELSIF bug.dup_id %]
<noscript><br> duplicate</noscript>
- <span id="duplicate_display">of
+ <span id="duplicate_display">of
[% "${terms.bug} ${bug.dup_id}" FILTER bug_link(bug.dup_id) FILTER none %]</span>
[% END %]
</div>
[% anchor = "#c$comment_num" %]
[% END %]
-<a class="bz_bug_link
- bz_status_[% bug.bug_status FILTER css_class_quote %]
+<a class="bz_bug_link
+ bz_status_[% bug.bug_status FILTER css_class_quote %]
[% ' bz_closed' IF !bug.isopened %]"
title="[% link_title FILTER collapse FILTER html %]"
href="[% urlbase FILTER html IF full_url %]show_bug.cgi?id=
[% PROCESS global/variables.none.tmpl %]
[% title = BLOCK %]Enter [% terms.Bug %] [% END %]
-[% PROCESS bug_modal/common_header.html.tmpl
+[% PROCESS bug_modal/common_header.html.tmpl
title = title
jquery = [ "selectize" ]
jquery_css = [ "js/jquery/plugins/selectize/selectize.bootstrap3.css" ]
editable = 1
help = "describecomponents.cgi?product=$filtered_product"
%]
-
+
<span aria-owns="product-name product-latch">
<span role="button" aria-label="show product information" aria-expanded="false" tabindex="0"
class="spin-latch" id="product-latch" data-latch="product" data-for="product">▸</span>
<ul>
<li>
<form method="post" action="process_bug.cgi">
- <input type="hidden" name="delta_ts"
+ <input type="hidden" name="delta_ts"
value="[% bug.delta_ts FILTER html %]">
- [% PROCESS "global/hidden-fields.html.tmpl"
+ [% PROCESS "global/hidden-fields.html.tmpl"
exclude="^Bugzilla_login|Bugzilla_password|delta_ts$" %]
<input type="submit" id="process" value="Submit my changes anyway">
This will cause all of the above changes to be overwritten
exclude = '^' _ exclude_items.join('|') _ '$' %]
<input type="hidden" name="confirm_product_change" value="1">
-
+
[%# Verify the version, component, and target milestone fields. %]
<h3>Verify Version, Component
- [%- ", Target Milestone"
+ [%- ", Target Milestone"
IF Param("usetargetmilestone")
&& bug.check_can_change_field('target_milestone', 0, 1) %]</h3>
<p>
-[% IF Param("usetargetmilestone")
- && bug.check_can_change_field('target_milestone', 0, 1)
+[% IF Param("usetargetmilestone")
+ && bug.check_can_change_field('target_milestone', 0, 1)
%]
- You are moving the [% terms.bug %](s) to the product
+ You are moving the [% terms.bug %](s) to the product
<b>[% product.name FILTER html %]</b>,
and the version, component, and/or target milestone fields are no longer
correct. Please set the correct version, component, and target milestone now:
[% ELSE %]
- You are moving the [% terms.bug %](s) to the product
+ You are moving the [% terms.bug %](s) to the product
<b>[% product.name FILTER html %]</b>,
and the version and component fields are no longer correct.
Please set the correct version and component now:
[% ELSE %]
[% SET default_version = defaults.version %]
[% END %]
- [% PROCESS "global/select-menu.html.tmpl"
+ [% PROCESS "global/select-menu.html.tmpl"
name="version"
options=versions
default=default_version
default=default_component
size=10 %]
</td>
- [% IF Param("usetargetmilestone")
- && bug.check_can_change_field('target_milestone', 0, 1)
+ [% IF Param("usetargetmilestone")
+ && bug.check_can_change_field('target_milestone', 0, 1)
%]
<td>
<b>Target Milestone:</b><br>
[% IF verify_bug_groups %]
<h3>Verify [% terms.Bug %] Group</h3>
-
+
[% IF old_groups.size %]
<p>These groups are not legal for the '[% product.name FILTER html %]'
product or you are not allowed to restrict [% terms.bugs %] to these groups.<br>
[% BLOCK bug_display %]
<h1>
- [% terms.Bug %]
+ [% terms.Bug %]
<a href="show_bug.cgi?id=[% bug.bug_id FILTER html %]">[% bug.bug_id FILTER html %]</a>
[% IF Param("usebugaliases") AND bug.alias AND NOT bug.error %]
(<a href="show_bug.cgi?id=[% bug.alias FILTER uri %]">
</td>
<td>
[% PROCESS formattimeunit
- time_unit=bug.estimated_time -
+ time_unit=bug.estimated_time -
(bug.actual_time + bug.remaining_time) %]
</td>
</tr>
</tr>
[% END %]
[% END %]
-
+
[% Hook.process("last_row", "bug/show-multiple.html.tmpl") %]
-
+
</table>
[% FOREACH c = bug.cc %]
[% c FILTER email FILTER html %][% ", " IF not loop.last() %]
[% END %]
- [% ELSIF name == "reporter" || name == "assigned_to"
+ [% ELSIF name == "reporter" || name == "assigned_to"
|| name == "qa_contact" %]
<th class="rightcell">[% field_descs.${name} FILTER html %]:</th>
<td>[% bug.${name}.identity FILTER email FILTER html %]</td>
<bugzilla version="[% constants.BUGZILLA_VERSION %]"
urlbase="[% urlbase FILTER xml %]"
- [%# Note that the maintainer's email is not filtered,
+ [%# Note that the maintainer's email is not filtered,
# intentionally. Even logged-out users should be able
- # to see that, since it will be in error messages anyway.
+ # to see that, since it will be in error messages anyway.
%]
maintainer="[% Param('maintainer') FILTER xml %]"
[% IF user.id %]
</long_desc>
[% END %]
[% END %]
-
+
[% IF displayfields.attachment %]
[% FOREACH a = bug.attachments %]
[% NEXT IF a.isprivate && !user.is_insider %]
</attachment>
[% END %]
[% END %]
-
+
[% Hook.process("bug_end") %]
</bug>
[% BLOCK section_flags %]
[% RETURN UNLESS displayfields.flag %]
-
+
[% FOREACH flag = obj.flags %]
<flag name="[% flag.type.name FILTER xml %]"
id="[% flag.id FILTER xml %]"
[% header = title %]
[% END %]
-[% PROCESS global/header.html.tmpl
- title = title
+[% PROCESS global/header.html.tmpl
+ title = title
generate_api_token = 1
- header = header
+ header = header
style_urls = ["skins/standard/summarize-time.css"]
doc_section = "timetracking.html"
javascript_urls = [ "js/util.js", "js/field.js" ]
[% END %]
[% additional = "$global.owner_count.size developers @
- $global.bug_count.size $terms.bugs" %]
+ $global.bug_count.size $terms.bugs" %]
[% INCLUDE section_total colspan=3 additional=additional %]
</table>
[% END %]
[% subtotal = subtotal + work_time %]
[% login_name = owner.login_name %]
[% global.owner_count.$login_name = 1 %]
- [% IF detailed %]
+ [% IF detailed %]
[% cid = cid + 1 %]
<tr class="owner_header[% 2 FILTER none IF cid % 2 %]">
<td> </td>
<table>
<tr>
<td align="right">
- <b><label accesskey="s"
- for="start_date">Period <u>s</u>tarting</label></b>:
+ <b><label accesskey="s"
+ for="start_date">Period <u>s</u>tarting</label></b>:
</td><td colspan="3">
<input type="text" id="start_date" name="start_date" size="11" autofocus
align="right" value="[% start_date FILTER html %]" maxlength="10"
</button>
<div id="con_calendar_start_date"></div>
- <b>and <label accesskey="e" for="end_date"><u>e</u>nding</label></b>:
+ <b>and <label accesskey="e" for="end_date"><u>e</u>nding</label></b>:
<input type="text" name="end_date" size="11" id="end_date"
align="right" value ="[% end_date FILTER html %]" maxlength="10"
onchange="updateCalendarFromField(this)">
</td><td colspan="2">
<input type="radio" name="group_by" id="number" value="number" [%+
'checked="checked"' IF group_by == "number"
- %]><label
+ %]><label
for="number" accesskey="n">[% terms.Bug %] <u>N</u>umber</label>
<input type="radio" name="group_by" id="owner" value="owner" [%+
'checked="checked"' IF group_by == "owner"
- %]><label
+ %]><label
for="owner" accesskey="d"><u>D</u>eveloper</label>
</td><td colspan="2">
<label for="ctype"><b>Format</b></label>: <select name="ctype" id="ctype">
// A list of all products and their components, versions, and target milestones:
-
+
var component = new Object();
var version = new Object();
var target_milestone = new Object();
// Product and Component Exceptions
// ================================
//
-// A blacklist for some commonly used words or word fragments
+// A blacklist for some commonly used words or word fragments
// that occur in a product or component name but should *not*
// trigger product/component search in QuickSearch.
[% PROCESS "global/field-descs.none.tmpl" %]
var field = [
[% FOREACH x = field %]
- { name: '[% x.name FILTER js %]',
+ { name: '[% x.name FILTER js %]',
description: '[% (field_descs.${x.name} OR x.description) FILTER js %]',
[%-# These values are meaningful for custom fields only. %]
[% IF x.custom %]
#
# Contributor(s): Guy Pyrzak <guy.pyrzak@gmail.com>
#%]
-
+
[% PROCESS "global/field-descs.none.tmpl" %]
[% field_label = field_descs.${change.field_name} %]
[% IF change.field_name == 'longdescs.isprivate' %]
[% field_label = field_label.replace('^(Comment )?', "Comment #${change.num} ") %]
[% END %]
-
\ No newline at end of file
# Frédéric Buclin <LpSolit@gmail.com>
# Guy Pyrzak <guy.pyrzak@gmail.com>
#%]
-
+
[% PROCESS "global/field-descs.none.tmpl" %]
[% PROCESS "global/reason-descs.none.tmpl" %]
[% isnew = bug.lastdiffed ? 0 : 1 %]
#
# Contributor(s): Guy Pyrzak <guy.pyrzak@gmail.com>
#%]
-
+
[% PROCESS "global/field-descs.none.tmpl" %]
[% PROCESS "global/reason-descs.none.tmpl" %]
The address [% address %] failed too many login attempts (
[%- constants.MAX_LOGIN_ATTEMPTS +%]) for
-the account [% locked_user.login %].
+the account [% locked_user.login %].
The login attempts occurred at these times:
is being impersonated
X-Bugzilla-Type: admin
- [%+ sudoer.identity %] has used the 'sudo' feature to access
+ [%+ sudoer.identity %] has used the 'sudo' feature to access
[%+ terms.Bugzilla %] using your account.
[% IF reason %]
[%+ sudoer.identity %] did not provide a reason for doing this.
[% END %]
- If you feel that this action was inappropriate, please contact
-[%+ Param("maintainer") %]. For more information on this feature,
+ If you feel that this action was inappropriate, please contact
+[%+ Param("maintainer") %]. For more information on this feature,
visit <[% urlbase %]page.cgi?id=sudo.html>.
[This e-mail has been automatically generated.]
-You have one or more [% terms.bugs %] assigned to you in the [% terms.Bugzilla %]
+You have one or more [% terms.bugs %] assigned to you in the [% terms.Bugzilla %]
[% terms.bug %] tracking system ([% urlbase %]) that require
attention.
[% urlbase %]buglist.cgi?bug_status=CONFIRMED&assigned_to=[% email %]
-Or, you can use the general query page, at
+Or, you can use the general query page, at
[%+ urlbase %]query.cgi
Appended below are the individual URLs to get to all of your [% display_value("bug_status", "CONFIRMED") %] [%+ terms.bugs %]
our $VERSION = '0.01';
-# See the documentation of B[% %]ugzilla::Hook ("perldoc B[% %]ugzilla::Hook"
+# See the documentation of B[% %]ugzilla::Hook ("perldoc B[% %]ugzilla::Hook"
# in the bugzilla directory) for a list of all available hooks.
sub install_update_db {
my ($self, $args) = @_;
Template hooks go in this directory. Template hooks are called in normal
[%+ terms.Bugzilla %] templates like [[% '%' %] Hook.process('some-hook') %].
-More information about them can be found in the documentation of
+More information about them can be found in the documentation of
B[% %]ugzilla::Extension. (Do "perldoc B[% %]ugzilla::Extension" from the main
[%+ terms.Bugzilla %] directory to see that documentation.)
was in this directory.
Note that you have to be careful that the full path of your template
-never conflicts with a template that exists in [% terms.Bugzilla %] or in
+never conflicts with a template that exists in [% terms.Bugzilla %] or in
another extension, or your template might override that template. That's why
we created this directory called '[% name FILTER lower %]' for you, so you
can put your templates in here to help avoid conflicts.
use strict;
use parent qw(Exporter);
our @EXPORT = qw(
-
+
);
-# This file can be loaded by your extension via
+# This file can be loaded by your extension via
# "use B[% %]ugzilla::Extension::[% name %]::Util". You can put functions
# used by your extension in here. (Make sure you also list them in
# @EXPORT.)
<tr>
<th align="right">
<a href="[% target FILTER uri %]?classification=__all
- [% IF cloned_bug_id %]&cloned_bug_id=[% cloned_bug_id FILTER uri %][% END -%]
+ [% IF cloned_bug_id %]&cloned_bug_id=[% cloned_bug_id FILTER uri %][% END -%]
[%- IF format %]&format=[% format FILTER uri %][% END %]">
All</a>:
</th>
<tr>
<th align="right">
<a href="[% target FILTER uri %]?classification=[% class.name FILTER uri -%]
- [%- IF cloned_bug_id %]&cloned_bug_id=[% cloned_bug_id FILTER uri %][% END -%]
+ [%- IF cloned_bug_id %]&cloned_bug_id=[% cloned_bug_id FILTER uri %][% END -%]
[%- IF format %]&format=[% format FILTER uri %][% END %]">
[% class.name FILTER html %]</a>:
</th>
<tr>
<th align="right" valign="top">
<a href="[% target %]?product=[% p.name FILTER uri -%]
- [%- IF cloned_bug_id %]&cloned_bug_id=[% cloned_bug_id FILTER uri %][% END -%]
+ [%- IF cloned_bug_id %]&cloned_bug_id=[% cloned_bug_id FILTER uri %][% END -%]
[%- IF format %]&format=[% format FILTER uri %][% END %]">
[% p.name FILTER html FILTER no_break %]</a>:
</th>
[% ELSIF error == "jobqueue_status_error" %]
An error occurred while checking the job queue status. Try again at a
- later time.
+ later time.
[% ELSIF error == "ldap_bind_failed" %]
Failed to bind to the LDAP server. The error message was:
[% USE Bugzilla %]
- <form method="post"
+ <form method="post"
[% IF script -%]
action="[% script %]"
[%- END -%]
# Portions created by the Initial Developer are Copyright (C) 2010
# the Initial Developer. All Rights Reserved.
#
- # Contributor(s):
+ # Contributor(s):
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
# multiple: boolean; whether or not the menu is multi-select
#
# size: integer; the number of items to display at once
- #
+ #
# options: array or hash; the items with which to populate the array.
# If a hash is passed, the hash keys become the names displayed
# to the user while the hash values become the value of the item.
- #
+ #
# default: string; the item selected in the menu by default.
- #
+ #
# onchange: code; JavaScript to be run when the user changes the value
# selected in the menu.
#%]
-
-[%# Get the scalar representation of the options reference,
+
+[%# Get the scalar representation of the options reference,
# which looks like "ARRAY(0xA352BA3F)" or "HASH(0xA352BA3F)",
# so we can figure out whether it is a reference to an array
# or a hash.
#%]
[% options_type = BLOCK %][% options %][% END %]
-<select name="[% name FILTER html %]"
+<select name="[% name FILTER html %]"
[% IF onchange %]onchange="[% onchange FILTER html %]"[% END %]
[% IF multiple %] multiple [% END %]
[% IF size %] size="[% size %]" [% END %]>
[% END %]
[% ELSIF options_type.search("HASH") %]
[% FOREACH option = options %]
- <option value="[% option.value FILTER html %]"
+ <option value="[% option.value FILTER html %]"
[% " selected" IF option.value == default %]>
[% option.key FILTER html %]
</option>
# Portions created by the Initial Developer are Copyright (C) 2007
# the Initial Developer. All Rights Reserved.
#
- # Contributor(s):
+ # Contributor(s):
# Daniel Brooks <db48x@db48x.net>
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
# Portions created by the Initial Developer are Copyright (C) 2010
# the Initial Developer. All Rights Reserved.
#
- # Contributor(s):
+ # Contributor(s):
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
# The Original Code is the Bugzilla Bug Tracking System.
#
# The Initial Developer of the Original Code is BugzillaSource, Inc.
- # Portions created by the Initial Developer are Copyright (C) 2011
+ # Portions created by the Initial Developer are Copyright (C) 2011
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Contributor(s):
#%]
-[%# This is a list of terms that may be changed to "brand" the Bugzilla
+[%# This is a list of terms that may be changed to "brand" the Bugzilla
# instance (for example, referring to "bugs" as "issues".) When used, these
- # strings are used in several different types of content, and are not
- # protected with Template-Toolkit FILTERs. Consequently, no special
+ # strings are used in several different types of content, and are not
+ # protected with Template-Toolkit FILTERs. Consequently, no special
# characters are allowed.
#
- # Remember to PROCESS rather than INCLUDE this template.
+ # Remember to PROCESS rather than INCLUDE this template.
#%]
[% terms = {
[% USE Bugzilla %]
[% PROCESS global/header.html.tmpl
title = "$terms.Bugzilla Main Page"
- header = "Main Page"
+ header = "Main Page"
style_urls = [ 'skins/standard/index.css' ]
no_yui = 1
og_image = "extensions/OpenGraph/web/moz-social-bw-rgb-1200x1200.png"
<div class="intro">[% Hook.process('intro') %]</div>
<a id="enter_bug" class="bz_common_actions"
href="enter_bug.cgi"><span>File [% terms.aBug %]</span></a>
- <a id="query" class="bz_common_actions"
+ <a id="query" class="bz_common_actions"
href="query.cgi"><span>Search</span></a>
<a id="account" class="bz_common_actions"
[% IF user.id %]
</tr>
<tr>
<td>
- <select name="available_columns" id="available_columns"
+ <select name="available_columns" id="available_columns"
size="15" multiple="multiple" onchange="updateView();"
- class="bz_default_hidden">
+ class="bz_default_hidden">
</select>
</td>
<td>
onclick="move_deselect()">←</button>
</td>
<td>
- <select name="selected_columns" id="selected_columns"
+ <select name="selected_columns" id="selected_columns"
size="15" multiple="multiple" onchange="updateView();">
[% FOREACH column = collist %]
<option value="[% column FILTER html %]" selected="selected">
value="[% saved_search.id FILTER html%]">
<input type="hidden" name="token"
value="[% issue_hash_token([saved_search.id, saved_search.name]) FILTER html %]">
- <input type="checkbox" id="save_columns_for_search" checked="checked"
+ <input type="checkbox" id="save_columns_for_search" checked="checked"
name="save_columns_for_search" value="1">
- <label for="save_columns_for_search">Save this column list only
+ <label for="save_columns_for_search">Save this column list only
for search '[% saved_search.name FILTER html %]'</label>
</p>
[% ELSE %]
<input type="submit" id="change" value="Change Columns">
</p>
- <input type="submit" id="resetit" name="resetit"
+ <input type="submit" id="resetit" name="resetit"
value="Reset to [% terms.Bugzilla %] default">
</form>
</td>
[% END %]
</tr>
-
+
<tr>
<th><label for="bug_status">Status:</label></th>
<td colspan="3">[% PROCESS status_section %]</td>
value="[% dontchange FILTER html %]"
size="6">
</td>
- [% PROCESS bug/field.html.tmpl
+ [% PROCESS bug/field.html.tmpl
field = bug_fields.deadline, value = dontchange
editable = 1, allow_dont_change = 1 %]
</tr>
<b>Status Whiteboard:</b>
</td>
<td colspan="7">
- <input name="status_whiteboard"
+ <input name="status_whiteboard"
value="[% dontchange FILTER html %]" size="60">
</td>
</tr>
[% FOREACH group = groups %]
<tr>
<td align="center">
- <input type="checkbox" name="defined_groups"
+ <input type="checkbox" name="defined_groups"
id="defined_group_[% group.id %]"
value="[% group.name FILTER html %]"
onchange="turn_off(this, 'group_[% group.id %]')">
</td>
[% IF group.is_active %]
<td align="center">
- <input type="checkbox" name="groups"
+ <input type="checkbox" name="groups"
id="group_[% group.id FILTER html %]"
value="[% group.name FILTER html %]"
onchange="turn_off(this, 'defined_group_[% group.id %]')">
[% all_open_bugs = !current_bug_statuses.containsany(closedstates) %]
[% all_closed_bugs = !current_bug_statuses.containsany(openstates) %]
[% closed_status_array = [] %]
-
- <select name="bug_status" id="bug_status">
+
+ <select name="bug_status" id="bug_status">
<option value="[% dontchange FILTER html %]" selected="selected">[% dontchange FILTER html %]</option>
-
+
[% FOREACH bug_status = new_bug_statuses %]
<option value="[% bug_status.name FILTER html %]">
[% display_value("bug_status", bug_status.name) FILTER html %]
[% closed_status_array.push( filtered_status ) %]
[% END %]
[% END %]
-
+
[%# If all the bugs being changed are closed, allow the user to change their resolution. %]
[% IF all_closed_bugs %]
[% filtered_status = dontchange FILTER js %]
[% closed_status_array.push( filtered_status ) %]
[% END %]
</select>
-
+
<span id="resolution_settings">
<select id="resolution" name="resolution">
<option value="[% dontchange FILTER html %]" selected >[% dontchange FILTER html %]</option>
# Jason Remillard <jremillardshop@letterboxes.org>
# Phil Ringnalda <bugzilla@philringnalda.com>
#
- # This is a template for generating an Atom representation of a buglist.
+ # This is a template for generating an Atom representation of a buglist.
#%]
[% PROCESS "global/field-descs.none.tmpl" %]
title = title
generate_api_token = dotweak
style = style
- atomlink = "buglist.cgi?$urlquerypart&title=$url_filtered_title&ctype=atom"
+ atomlink = "buglist.cgi?$urlquerypart&title=$url_filtered_title&ctype=atom"
javascript_urls = [ "js/util.js", "js/field.js" ]
style_urls = [ "skins/standard/buglist.css" ]
doc_section = "query.html#list"
[% END %]
[% SET shown_types = [
- 'notequals', 'regexp', 'notregexp', 'lessthan', 'lessthaneq',
- 'greaterthan', 'greaterthaneq', 'changedbefore', 'changedafter',
+ 'notequals', 'regexp', 'notregexp', 'lessthan', 'lessthaneq',
+ 'greaterthan', 'greaterthaneq', 'changedbefore', 'changedafter',
'changedfrom', 'changedto', 'changedby', 'notsubstring', 'nowords',
'nowordssubstr', 'notmatches', 'isempty', 'isnotempty'
] %]
[% PROCESS num_results %]
[% IF bugs.size == 0 %]
- <p>We couldn't find any [% terms.bugs %] matching your search terms.
+ <p>We couldn't find any [% terms.bugs %] matching your search terms.
You could try searching with fewer or different terms.</p>
<ul class="zero_result_links">
<li>[% PROCESS enter_bug_link %]</li>
[% END %]
[% END %]
</td>
-
+
<td> </td>
[% END %]
<td valign="middle" class="bz_query_edit">
<a href="[% PROCESS edit_search_url %]">Edit Search</a>
</td>
-
+
[% IF searchtype == "saved" %]
<td valign="middle" nowrap="nowrap" class="bz_query_forget">
|
</td>
[% ELSE %]
<td> </td>
-
+
<td valign="middle" class="bz_query_remember">
<form method="get" action="buglist.cgi">
- <input type="submit" id="remember" value="Remember search"> as
- <input type="hidden" name="newquery"
+ <input type="submit" id="remember" value="Remember search"> as
+ <input type="hidden" name="newquery"
value="[% urlquerypart FILTER html %][% "&order=$qorder" FILTER html IF order %]">
<input type="hidden" name="cmdtype" value="doit">
<input type="hidden" name="remtype" value="asnamed">
<input type="hidden" name="token" value="[% issue_hash_token(['savedsearch']) FILTER html %]">
<input type="text" id="save_newqueryname" name="newqueryname" size="20"
- title="New query name" value="[% defaultsavename FILTER html %]">
- </form>
+ title="New query name" value="[% defaultsavename FILTER html %]">
+ </form>
</td>
- [% END %]
+ [% END %]
</tr>
</table>
<Seq>
[% FOREACH bug = bugs %]
<li>
-
+
<bz:bug rdf:about="[% urlbase FILTER xml %]show_bug.cgi?id=[% bug.bug_id %]">
-
+
<bz:id nc:parseType="Integer">[% bug.bug_id %]</bz:id>
-
+
[% FOREACH column = displaycolumns %]
<bz:[% column %]>[% bug.$column FILTER html %]</bz:[% column %]>
[% END %]
-
+
</bz:bug>
-
+
</li>
[% END %]
<p>
- [% terms.Bugzilla %] will pick a random quip for the headline on each
+ [% terms.Bugzilla %] will pick a random quip for the headline on each
[% terms.bug %] list.
</p>
<h2>Edit existing quips:</h2>
<p>
<strong>Note:</strong> Only approved quips will be shown.
- If the parameter 'quip_list_entry_control' is set to <q>open</q>,
+ If the parameter 'quip_list_entry_control' is set to <q>open</q>,
entered quips are automatically approved.
</p>
<form name="editform" method="post" action="quips.cgi">
[%# Initialization #%]
[%############################################################################%]
-[%# Don't display the table or do any processing if there are no bugs
+[%# Don't display the table or do any processing if there are no bugs
# to display %]
[% RETURN IF !bugs.size %]
[% field_descs.qa_contact_realname = field_descs.qa_contact %]
[%# Setting maxlength => 0 means no limit. We set it for performance reasons. %]
-[% abbrev =
+[% abbrev =
{
- "bug_severity" => { maxlength => 3 , title => "Sev" } ,
- "priority" => { maxlength => 7 , title => "Pri" } ,
- "rep_platform" => { maxlength => 3 , title => "Plt" } ,
- "bug_status" => { maxlength => 4 } ,
- "assigned_to" => { maxlength => 30 , ellipsis => "..." } ,
- "assigned_to_realname" => { maxlength => 20 , ellipsis => "..." } ,
- "reporter" => { maxlength => 30 , ellipsis => "..." } ,
- "reporter_realname" => { maxlength => 20 , ellipsis => "..." } ,
- "qa_contact" => { maxlength => 30 , ellipsis => "..." , title => "QAContact" } ,
- "qa_contact_realname" => { maxlength => 20 , ellipsis => "..." , title => "QAContact" } ,
- "resolution" => { maxlength => 4 } ,
+ "bug_severity" => { maxlength => 3 , title => "Sev" } ,
+ "priority" => { maxlength => 7 , title => "Pri" } ,
+ "rep_platform" => { maxlength => 3 , title => "Plt" } ,
+ "bug_status" => { maxlength => 4 } ,
+ "assigned_to" => { maxlength => 30 , ellipsis => "..." } ,
+ "assigned_to_realname" => { maxlength => 20 , ellipsis => "..." } ,
+ "reporter" => { maxlength => 30 , ellipsis => "..." } ,
+ "reporter_realname" => { maxlength => 20 , ellipsis => "..." } ,
+ "qa_contact" => { maxlength => 30 , ellipsis => "..." , title => "QAContact" } ,
+ "qa_contact_realname" => { maxlength => 20 , ellipsis => "..." , title => "QAContact" } ,
+ "resolution" => { maxlength => 4 } ,
"short_desc" => { maxlength => 0, wrap => 1 } ,
"short_short_desc" => { maxlength => 60 , ellipsis => "..." , wrap => 1 } ,
- "status_whiteboard" => { maxlength => 0, title => "Whiteboard" , wrap => 1 } ,
+ "status_whiteboard" => { maxlength => 0, title => "Whiteboard" , wrap => 1 } ,
"keywords" => { maxlength => 0, wrap => 1 } ,
"dependson" => { maxlength => 0, wrap => 1 } ,
"blocked" => { maxlength => 0, wrap => 1 } ,
"flagtypes.name" => { maxlength => 0, wrap => 1 } ,
- "component" => { maxlength => 8 , title => "Comp" } ,
- "product" => { maxlength => 8 } ,
- "version" => { maxlength => 5 , title => "Vers" } ,
- "op_sys" => { maxlength => 4 } ,
- "bug_file_loc" => { maxlength => 30 } ,
- "target_milestone" => { maxlength => 0, title => "TargetM" } ,
+ "component" => { maxlength => 8 , title => "Comp" } ,
+ "product" => { maxlength => 8 } ,
+ "version" => { maxlength => 5 , title => "Vers" } ,
+ "op_sys" => { maxlength => 4 } ,
+ "bug_file_loc" => { maxlength => 30 } ,
+ "target_milestone" => { maxlength => 0, title => "TargetM" } ,
"longdescs.count" => { maxlength => 0, title => "# Comments" },
- "percentage_complete" => { maxlength => 0, format_value => "%d %%" } ,
+ "percentage_complete" => { maxlength => 0, format_value => "%d %%" } ,
}
%]
[% tableheader = BLOCK %]
<table class="bz_buglist sortable" cellspacing="0" cellpadding="4" width="100%">
- <thead>
+ <thead>
<tr class="bz_buglist_header bz_first_buglist_header">
[% IF dotweak %]
<th class="sorttable_nosort"> </th>
[% IF col_abbrev.maxlength %]
<span title="[%- display_value(column, bug.$column) FILTER html %]">
[% END %]
- [% IF col_abbrev.format_value %]
- [%- bug.$column FILTER format(col_abbrev.format_value) FILTER html -%]
+ [% IF col_abbrev.format_value %]
+ [%- bug.$column FILTER format(col_abbrev.format_value) FILTER html -%]
[% ELSIF column == 'actual_time' ||
column == 'remaining_time' ||
column == 'estimated_time' %]
- [% PROCESS formattimeunit time_unit=bug.$column %]
+ [% PROCESS formattimeunit time_unit=bug.$column %]
[%# Display the login name of the user if their real name is empty. %]
[% ELSIF column.match('_realname$') && bug.$column == '' %]
[% SET login_column = column.remove('_realname$') %]
- [% bug.${login_column}.truncate(col_abbrev.maxlength,
+ [% bug.${login_column}.truncate(col_abbrev.maxlength,
col_abbrev.ellipsis) FILTER html %]
[% ELSIF column == 'short_desc' || column == "short_short_desc" %]
<a href="show_bug.cgi?id=[% bug.bug_id FILTER html %]">
[% INCLUDE global/header.html.tmpl title = "$terms.Bug Writing Guidelines" %]
- <p>Effective [% terms.bug %] reports are the most likely to be fixed.
+ <p>Effective [% terms.bug %] reports are the most likely to be fixed.
These guidelines explain how to write such reports.
<h3>Principles</h3>
<li>Be precise</li>
<li>Be clear - explain it so others can reproduce the [% terms.bug %]</li>
<li>One [% terms.bug %] per report</li>
- <li>No [% terms.bug %] is too trivial to report -
+ <li>No [% terms.bug %] is too trivial to report -
small [% terms.bugs %] may hide big [% terms.bugs %]</li>
<li>Clearly separate fact from speculation</li>
</ul>
software, to see whether it has already been fixed.
</li>
- <li><a href="query.cgi?format=specific">Search</a>
+ <li><a href="query.cgi?format=specific">Search</a>
[% terms.Bugzilla %], to see whether your [% terms.bug %] has
already been reported.</li>
</ol>
<h3>Reporting a New [% terms.Bug %]</h3>
-<p>If you have reproduced the [% terms.bug %] in a recent build and
+<p>If you have reproduced the [% terms.bug %] in a recent build and
no-one else appears to have reported it, then:</p>
<ol>
- <li>Choose
+ <li>Choose
"<a href="enter_bug.cgi">Enter a new [% terms.bug %]</a>"</li>
<li>Select the product in which you've found the [% terms.bug %]</li>
<li>Fill out the form. Here is some help understanding it:</li>
</ol>
<blockquote>
- <p><b>Component:</b> In which sub-part of the software does it
+ <p><b>Component:</b> In which sub-part of the software does it
exist?<br>
This field is required.
- Click the word "Component" to see a description of each
+ Click the word "Component" to see a description of each
component. If none seems appropriate, look for a "General" component.</p>
- <p><b>OS:</b> On which operating system (OS) did you find
+ <p><b>OS:</b> On which operating system (OS) did you find
it?
(e.g. Linux, Windows XP, Mac OS X.)<br>
- If you know the [% terms.bug %] happens on more than one type of
- operating system, choose <em>[% display_value("op_sys", "All") FILTER html %]</em>.
+ If you know the [% terms.bug %] happens on more than one type of
+ operating system, choose <em>[% display_value("op_sys", "All") FILTER html %]</em>.
If your OS isn't listed, choose <em>[% display_value("op_sys", "Other") FILTER html %]</em>.</p>
- <p><b>Summary:</b> How would you describe the [% terms.bug %], in
+ <p><b>Summary:</b> How would you describe the [% terms.bug %], in
approximately 60 or fewer characters?<br>
A good summary should <b>quickly and uniquely identify [% terms.abug %]
report</b>. It should explain the problem, not your suggested solution.<br>
<ul>
- <li>Good: "<tt>Cancelling a File Copy dialog crashes
+ <li>Good: "<tt>Cancelling a File Copy dialog crashes
File Manager</tt>"</li>
<li>Bad: "<tt>Software crashes</tt>"</li>
<li>Bad: "<tt>Browser should work with my web site</tt>"</li>
</ul>
-
+
<b>Description:</b>
The details of your problem report, including:</p>
<blockquote>
<pre>
-1) View any web page. (I used the default sample page,
+1) View any web page. (I used the default sample page,
resource:/res/samples/test0.html)
-2) Drag-select the page. (Specifically, while holding down
-the mouse button, drag the mouse pointer downwards from any
-point in the browser's content region to the bottom of the
+2) Drag-select the page. (Specifically, while holding down
+the mouse button, drag the mouse pointer downwards from any
+point in the browser's content region to the bottom of the
browser's content region.)
</pre>
</blockquote>
<blockquote>
<pre>
-The window should scroll downwards. Scrolled content should be selected.
+The window should scroll downwards. Scrolled content should be selected.
(Or, at least, the application should not crash.)
</pre>
</blockquote>
</pre>
</blockquote>
- <p><b>Additional Builds and Platforms:</b> Whether or not
- the [% terms.bug %] takes place on other platforms (or browsers,
+ <p><b>Additional Builds and Platforms:</b> Whether or not
+ the [% terms.bug %] takes place on other platforms (or browsers,
if applicable).</p>
<blockquote>
<li><b>Mac OS X:</b> Attach the "Crash Reporter" log that appears
upon crash.
- Only include the section directly below the crashing thread, usually
+ Only include the section directly below the crashing thread, usually
titled "Thread 0 Crashed". Please do not paste the entire log!</li>
</ul>
</blockquote>
<p>Double-check your report for errors and omissions, then press "Commit".
- Your [% terms.bug %] report will now be in
+ Your [% terms.bug %] report will now be in
the [% terms.Bugzilla %] database.<br>
</p>
</blockquote>
#%]
[% USE Bugzilla %]
<!ELEMENT [% "bugzilla" %] (bug+)>
-<!ATTLIST [% "bugzilla" %]
+<!ATTLIST [% "bugzilla" %]
version CDATA #REQUIRED
urlbase CDATA #REQUIRED
maintainer CDATA #REQUIRED
exporter CDATA #IMPLIED
>
-<!ELEMENT [% "bug" %] (bug_id,
- (alias?,
- creation_ts,
- short_desc,
- delta_ts,
- reporter_accessible,
- cclist_accessible,
- classification_id,
- classification,
- product,
- component,
- version,
- rep_platform,
- op_sys,
- bug_status,
- resolution?,
- dup_id?,
- see_also*,
- bug_file_loc?,
- status_whiteboard?,
- keywords*,
- priority,
- bug_severity,
- target_milestone?,
- dependson*,
- blocked*,
- everconfirmed,
- reporter,
- assigned_to,
- cc*,
- (estimated_time,
- remaining_time,
- actual_time,
- deadline?)?,
+<!ELEMENT [% "bug" %] (bug_id,
+ (alias?,
+ creation_ts,
+ short_desc,
+ delta_ts,
+ reporter_accessible,
+ cclist_accessible,
+ classification_id,
+ classification,
+ product,
+ component,
+ version,
+ rep_platform,
+ op_sys,
+ bug_status,
+ resolution?,
+ dup_id?,
+ see_also*,
+ bug_file_loc?,
+ status_whiteboard?,
+ keywords*,
+ priority,
+ bug_severity,
+ target_milestone?,
+ dependson*,
+ blocked*,
+ everconfirmed,
+ reporter,
+ assigned_to,
+ cc*,
+ (estimated_time,
+ remaining_time,
+ actual_time,
+ deadline?)?,
qa_contact?,
[% FOREACH field = Bugzilla.active_custom_fields %]
[%+ field.name FILTER xml -%]
- [%- IF field.type == constants.FIELD_TYPE_MULTI_SELECT %]*[% ELSE %]?[% END %],
+ [%- IF field.type == constants.FIELD_TYPE_MULTI_SELECT %]*[% ELSE %]?[% END %],
[% END %]
- votes?,
- token?,
- group*,
- flag*,
- long_desc*,
+ votes?,
+ token?,
+ group*,
+ flag*,
+ long_desc*,
attachment*)?)>
<!ATTLIST [% "bug" %]
error (NotFound | NotPermitted | InvalidBugId) #IMPLIED
<!ELEMENT version (#PCDATA)>
<!ELEMENT rep_platform (#PCDATA)>
<!ELEMENT assigned_to (#PCDATA)>
-<!ATTLIST assigned_to
+<!ATTLIST assigned_to
name CDATA #REQUIRED
>
<!ELEMENT delta_ts (#PCDATA)>
<!ATTLIST flag
name CDATA #REQUIRED
id CDATA #REQUIRED
- type_id CDATA #REQUIRED
+ type_id CDATA #REQUIRED
status CDATA #REQUIRED
setter CDATA #REQUIRED
requestee CDATA #IMPLIED
<hr>
<p>
- If you place it in <tt><pre></tt> tags,
+ If you place it in <tt><pre></tt> tags,
the text will end up looking like this:
</p>
[% INCLUDE global/header.html.tmpl
title = "$terms.Bugzilla QuickSearch",
- style_urls = ['skins/standard/page.css']
+ style_urls = ['skins/standard/page.css']
onload = 'document.forms[\'f\'].quicksearch.focus()'
%]
<h2 id="basics">The Basics</h2>
<ul class="qs_help">
- <li>If you just put a word or series of words in the search box,
- [%+ terms.Bugzilla %] will search the
+ <li>If you just put a word or series of words in the search box,
+ [%+ terms.Bugzilla %] will search the
[%+ field_descs.product FILTER html %],
- [%+ field_descs.component FILTER html %],
+ [%+ field_descs.component FILTER html %],
[%+ IF use_keywords %][%+ field_descs.keywords FILTER html %],[% END %]
[%+ IF Param('usebugaliases') %][% field_descs.alias FILTER html %],[% END %]
- [%+ field_descs.short_desc FILTER html %],
+ [%+ field_descs.short_desc FILTER html %],
[%+ IF Param('usestatuswhiteboard') %][% field_descs.status_whiteboard FILTER html %],[% END %]
and [% field_descs.longdesc FILTER html %] fields for your word or words.</li>
<li>Typing just a <strong>number</strong> in the search box will take
- you directly to the [% terms.bug %] with that ID.
+ you directly to the [% terms.bug %] with that ID.
[% IF Param('usebugaliases') %]
Also, just typing the <strong>alias</strong> of [% terms.abug %]
will take you to that [% terms.bug %].
</li>
<li>Adding more terms <strong>narrows down</strong> the search, it does not
- expand it. (In other words, [% terms.Bugzilla %] searches for
+ expand it. (In other words, [% terms.Bugzilla %] searches for
[%+ terms.bugs %] that match <em>all</em> your criteria, not
[%+ terms.bugs %] that match <em>any</em> of your criteria.)</li>
see the <a href="#shortcuts">Advanced Shortcuts</a> section.</li>
<li>If you want to search <strong>specific fields</strong>, you do it like
- <kbd>field:value</kbd>, where <kbd>field</kbd> is one of the
+ <kbd>field:value</kbd>, where <kbd>field</kbd> is one of the
<a href="#fields">field names</a> lower down in this
document and <kbd>value</kbd> is the value you want to search for
in that field. If you put commas in the <kbd>value</kbd>, then it is
<p>For custom fields, they can be used and abbreviated
based on the part of their name <em>after</em> the <kbd>cf_</kbd>
if you'd like, in addition to their standard name starting with
- <kbd>cf_</kbd>. So for example,
+ <kbd>cf_</kbd>. So for example,
<kbd>[% first_field.name FILTER html %]</kbd> can be
- referred to as
+ referred to as
<kbd>[% first_field.name.replace('^cf_') FILTER html %]</kbd>,
also. However, if this causes a conflict between the standard
[%+ terms.Bugzilla %] field names and the custom field names, the
<kbd>"NOT field:value"</kbd>.</li>
<li>You can use <strong>AND</strong>, <strong>NOT</strong>,
- and <strong>OR</strong> in searches.
+ and <strong>OR</strong> in searches.
You can also use <kbd>-</kbd> to mean "NOT", and <kbd>|</kbd> to mean "OR".
There is no special character for "AND", because by default any search
<ul>
<li>
<strong>NOT</strong>:<br>
- Use <kbd><strong>-</strong><em>summary:foo</em></kbd> to exclude
+ Use <kbd><strong>-</strong><em>summary:foo</em></kbd> to exclude
[%+ terms.bugs %] with <kbd>foo</kbd> in the summary.<br>
<kbd><em>NOT summary:foo</em></kbd> would have the same effect.
</li>
<p>OR has higher precedence than AND; AND is the top level operation.
For example:</p>
<p>Searching for <em><kbd>url|location bar|field -focus</kbd></em> means
- (<kbd>url</kbd> OR <kbd>location</kbd>) AND (<kbd>bar</kbd> OR
+ (<kbd>url</kbd> OR <kbd>location</kbd>) AND (<kbd>bar</kbd> OR
<kbd>field</kbd>) AND (NOT <kbd>focus</kbd>)</p>
</li>
<td class="field_name">[% field_descs.resolution FILTER html %]</td>
<td class="field_nickname">
Make the <strong>first word</strong> of your search the name of any
- resolution, or even an abbreviation of any resolution, and
+ resolution, or even an abbreviation of any resolution, and
[%+ terms.bugs %] with that resolution will be searched. For example,
making <kbd>FIX</kbd> the first word of your search will find all
[%+ terms.bugs %] with a resolution of <kbd>FIXED</kbd>.
<tr>
<td class="field_name">[% field_descs.priority FILTER html %]</td>
<td class="field_nickname">"<strong>P1</strong>" (as a word anywhere in
- the search) means "find [% terms.bugs %] with the highest priority.
+ the search) means "find [% terms.bugs %] with the highest priority.
"P2" means the second-highest priority, and so on.
<p>Searching for "<strong>P1-3</strong>" will find [% terms.bugs %] in
any of the three highest priorities, and so on.</p>
[% PROCESS global/variables.none.tmpl %]
[% SET title = "$terms.Bugzilla 4.2 Release Notes" %]
-[% INCLUDE global/header.html.tmpl
+[% INCLUDE global/header.html.tmpl
title = title
- style_urls = ['skins/standard/page.css']
+ style_urls = ['skins/standard/page.css']
%]
<h1>[% title FILTER html %]</h1>
dependencies is now much faster.</li>
<li><strong>Attachments:</strong> The encoding of text files can be automatically
detected when uploading them as attachments.</li>
- <li><strong>Attachments:</strong> Clickjacking could possibly occur in an attachment
- Details page if a user attached a specially formatted HTML file. To fix this
- potential problem, the Details page always displays the HTML source instead and
+ <li><strong>Attachments:</strong> Clickjacking could possibly occur in an attachment
+ Details page if a user attached a specially formatted HTML file. To fix this
+ potential problem, the Details page always displays the HTML source instead and
users can see rendered page by clicking on View.</li>
<li><strong>Flags:</strong> Changing the requestee of a flag no longer changes
the requester.</li>
<li><a href="#v40_feat">New Features and Improvements</a></li>
<li><a href="#v40_issues">Outstanding Issues</a></li>
<li><a href="#v40_upgrading">Notes On Upgrading From a Previous Version</a></li>
- <li><a href="#v40_code_changes">Code Changes Which May Affect
+ <li><a href="#v40_code_changes">Code Changes Which May Affect
Customizations and Extensions</a></li>
<li><a href="#v40_previous">Release Notes for Previous Versions</a></li>
</ul>
<p>If you're upgrading, make sure to read <a href="#v40_upgrading">Notes
On Upgrading From a Previous Version</a>. If you are upgrading from a release
- before 3.6, make sure to read the release notes for all the
+ before 3.6, make sure to read the release notes for all the
<a href="#v40_previous">previous versions</a> in between your version
and this one, <strong>particularly the Upgrading section of each
version's release notes</strong>.</p>
<p>(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=646578">[% terms.Bug %] 646578</a>)</p></li>
<li>The "Remember values as bookmarkable template" button on the
[%+ terms.bug %] entry page will now work even when some required fields
- are empty.
+ are empty.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=640719">[% terms.Bug %] 640719</a>)</li>
<li>Email notifications about dependencies and flags had the wrong
timestamp.
<li>You can now select "UTC" as a valid timezone in General Preferences.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=646209">[% terms.Bug %] 646209</a>)</li>
<li>Automatic duplicate detection now works on PostgreSQL (although
- it is not as high-quality as on other DB platforms).
+ it is not as high-quality as on other DB platforms).
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=634144">[% terms.Bug %] 634144</a>)</li>
<li>Autcomplete for users now works even if you are using the
"emailsuffix" option.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=644285">[% terms.Bug %] 644285</a>)</li>
<li>The "Show Votes" page now works, for installations using the Voting
extension.
- (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=652381">[% terms.Bug %] 652381</a>)</li>
+ (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=652381">[% terms.Bug %] 652381</a>)</li>
</ul>
<h2 id="v40_req">Minimum Requirements</h2>
another domain, inside of a web browser, thanks to support for
<a href="https://bob.ippoli.to/archives/2005/12/05/remote-json-jsonp/">JSONP</a>.
This will allow for web "mash-ups" to use [% terms.Bugzilla %] data.
- When using JSONP, you may only call functions that <em>get</em> data,
+ When using JSONP, you may only call functions that <em>get</em> data,
you may not call functions that <em>change</em> data.</p>
<p>For more details, see the
<h3 id="v40_feat_js_css_update">Users Get New CSS and Javascript
Automatically</h3>
-
+
<p>In past versions of [% terms.Bugzilla %], if you changed
[%+ terms.Bugzilla %]'s CSS or Javascript files, then every user of
[%+ terms.Bugzilla %] would have to clear their cache in order to get
<h3 id="v40_feat_apache_config">New Apache Configuration</h3>
<p>If you run [% terms.Bugzilla %] under Apache (as most people do),
- you most likely require a <strong>new Apache configuration</strong>
- for this version of [% terms.Bugzilla %]. See the
+ you most likely require a <strong>new Apache configuration</strong>
+ for this version of [% terms.Bugzilla %]. See the
<a href="#v40_upgrading">Notes On Upgrading From a Previous Version</a>
section for details.</p>
<li><strong>[% terms.Bugs %]:</strong> The box to "Add [% terms.Bug %] URLs"
in the See Also field is now hidden behind an "(add)" link that you
have to click to see the box.</li>
-
+
<li><strong>Searches:</strong> You can now properly search for field values
that have commas in their name, when using the Advanced Search form.</li>
<li><strong>Searches:</strong> The "URL" field can now be shown as a column
<li><strong>Searches:</strong> When using the Boolean Charts (now called
"Custom Search"), you can search for values "greater than or equal to"
or "less than or equal to" some value.</li>
-
+
<li><strong>Flags:</strong> If you hover your mouse over the name of
a flag setter when viewing [% terms.abug %], you can see that
flag setter's full name and complete username.</li>
that are restricted to certain groups now properly have the "padlock"
icon shown next to them to indicate that they may contain confidential
information.</li>
-
+
<li>When using the Reports interface, you can now choose many more fields
as the X, Y, or Z axis of a report, including custom fields.</li>
<li>[% terms.Bugzilla %] now prevents
<a href="https://developer.mozilla.org/docs/Web/HTTP/Headers/X-Frame-Options"><code>X-Frame-Options: SAMEORIGIN</code></a> header
with every page request in order to prevent "clickjacking" attacks. Note
that this prevents other domains from displaying [% terms.Bugzilla %]
- in an HTML frame.</li>
+ in an HTML frame.</li>
</ul>
<h4 id="v40_feat_ws_changes">WebService Changes</h4>
<ul>
<li>You can now call some JSON-RPC methods using HTTP GET, in addition to
- using HTTP POST. See the
+ using HTTP POST. See the
<a href="[% docs_urlbase FILTER html %]api/Bugzilla/WebService/Server/JSONRPC.html#Connecting_via_GET">JSON-RPC
documentation</a> for details.</li>
<li>You can now update existing [% terms.bugs %] using the
[%- terms.Bug %] 423439</a>: Tabs in comments will be converted
to four spaces, due to a b<!-- -->ug in Perl as of Perl 5.8.8.</li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=89822">
- [%- terms.Bug %] 89822</a>: When changing multiple [% terms.bugs %] at
+ [%- terms.Bug %] 89822</a>: When changing multiple [% terms.bugs %] at
the same time, there is no "mid-air collision" protection.</li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=276230">
- [%- terms.Bug %] 276230</a>: The support for restricting access to
- particular Categories of New Charts is not complete. You should treat
+ [%- terms.Bug %] 276230</a>: The support for restricting access to
+ particular Categories of New Charts is not complete. You should treat
the 'chartgroup' Param as the only access mechanism available.<br>
- However, charts migrated from Old Charts will be restricted to
+ However, charts migrated from Old Charts will be restricted to
the groups that are marked MANDATORY for the corresponding Product.
- There is currently no way to change this restriction, and the
+ There is currently no way to change this restriction, and the
groupings will not be updated if the group configuration
for the Product changes.</li>
</ul>
<p>If you run [% terms.Bugzilla %] under mod_cgi (this is the most common
configuration, involving a <Directory> block in your Apache config
- file), you will need to update the configuration of Apache for
+ file), you will need to update the configuration of Apache for
[%+ terms.Bugzilla %]. In particular, this line in the [% terms.Bugzilla %]
<kbd><Directory></kbd> block:</p>
<p>needs to become:</p>
<blockquote><code>AllowOverride Limit FileInfo Indexes</code></blockquote>
-
+
<p>For full details on how to configure Apache for [% terms.Bugzilla %],
see the
<a href="[% docs_urlbase FILTER html %]configuration.html#http-apache">Configuration</a>
<p>If your [% terms.Bugzilla %] runs under mod_perl, the required Apache
configuration is now simpler. The line that used to look like:</p>
-<blockquote><code>PerlSwitches -w -T -I/var/www/html/bugzilla
+<blockquote><code>PerlSwitches -w -T -I/var/www/html/bugzilla
-I/var/www/html/bugzilla/lib</code></blockquote>
<p>Now should be only:</p>
[% '</span>' IF db_new %]
</li>
<li><strong>perl module:</strong>
- [%+ m.dbd.module FILTER html %]
+ [%+ m.dbd.module FILTER html %]
[% '<span class="req_new">' IF dbd_new %]v[% m.dbd.version FILTER html %]
[% '</span>' IF dbd_new %]</li>
</ul>
[% FOREACH req = reqs %]
<tr>
<td [% ' class="req_new"' IF new.contains(req.package) %]>
- [%- req.module FILTER html %]</td>
- <td [% ' class="req_new"' IF updated.contains(req.package)
+ [%- req.module FILTER html %]</td>
+ <td [% ' class="req_new"' IF updated.contains(req.package)
OR new.contains(req.package) %]>
[%- IF req.version == 0 %]
(Any)
[%- req.version FILTER html %]
[% END %]
</td>
- [% IF include_feature %]
+ [% IF include_feature %]
<td>[% req.feature.join(', ') FILTER html %]</td>
[% END %]
</tr>
[% PROCESS global/variables.none.tmpl %]
[% SET title = "$terms.Bugzilla 3.6 Release Notes" %]
-[% INCLUDE global/header.html.tmpl
+[% INCLUDE global/header.html.tmpl
title = title
- style_urls = ['skins/standard/page.css']
+ style_urls = ['skins/standard/page.css']
%]
<h3>Release Notes For Newer Versions</h3>
<li><a href="#v36_feat">New Features and Improvements</a></li>
<li><a href="#v36_issues">Outstanding Issues</a></li>
<li><a href="#v36_upgrading">Notes On Upgrading From a Previous Version</a></li>
- <li><a href="#v36_code_changes">Code Changes Which May Affect
+ <li><a href="#v36_code_changes">Code Changes Which May Affect
Customizations</a></li>
<li><a href="#v36_previous">Release Notes for Previous Versions</a></li>
</ul>
<p>If you're upgrading, make sure to read <a href="#v36_upgrading">Notes
On Upgrading From a Previous Version</a>. If you are upgrading from a release
- before 3.4, make sure to read the release notes for all the
+ before 3.4, make sure to read the release notes for all the
<a href="#v36_previous">previous versions</a> in between your version
and this one, <strong>particularly the Upgrading section of each
version's release notes</strong>.</p>
<p>We would like to thank <a href="https://www.canonical.com/">Canonical
Ltd.</a>, <a href="https://www.itasoftware.com/">ITA Software</a>,
the <a href="https://www.ibm.com/linux/ltc/">IBM Linux Technology Center</a>,
- <a href="https://www.redhat.com/">Red Hat</a>, and
+ <a href="https://www.redhat.com/">Red Hat</a>, and
<a href="https://www.novell.com/">Novell</a> for funding the development
of various features and improvements in this release of
[%+ terms.Bugzilla %].</p>
editing a product's components.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=576911">[% terms.Bug %] 576911</a>)
</li>
- <li>The updating of bugs_fulltext that happens during
+ <li>The updating of bugs_fulltext that happens during
<kbd>checksetup.pl</kbd> for upgrades to 3.6 should now be MUCH faster.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=577754">[% terms.Bug %] 577754</a>)
</li>
<li><a href="#v36_req_optional_mod">Optional Perl Modules</a></li>
</ul>
-<h3 id="v36_req_perl">Perl</h3>
-
+<h3 id="v36_req_perl">Perl</h3>
+
<p>Perl v5.8.1</p>
-<h3 id="v36_req_mysql">For MySQL Users</h3>
-
- <ul>
+<h3 id="v36_req_mysql">For MySQL Users</h3>
+
+ <ul>
<li>MySQL
v4.1.2
- </li>
- <li><strong>perl module:</strong>
- DBD::mysql v4.00</li>
+ </li>
+ <li><strong>perl module:</strong>
+ DBD::mysql v4.00</li>
</ul>
-
-<h3 id="v36_req_pg">For PostgreSQL Users</h3>
-
- <ul>
+
+<h3 id="v36_req_pg">For PostgreSQL Users</h3>
+
+ <ul>
<li>PostgreSQL
v8.00.0000
- </li>
- <li><strong>perl module:</strong>
- DBD::Pg v1.45</li>
- </ul>
-<h3 id="v36_req_oracle">For Oracle Users</h3>
-
- <ul>
+ </li>
+ <li><strong>perl module:</strong>
+ DBD::Pg v1.45</li>
+ </ul>
+<h3 id="v36_req_oracle">For Oracle Users</h3>
+
+ <ul>
<li>Oracle
v10.02.0
- </li>
- <li><strong>perl module:</strong>
- DBD::Oracle v1.19</li>
- </ul>
-
+ </li>
+ <li><strong>perl module:</strong>
+ DBD::Oracle v1.19</li>
+ </ul>
+
<h3 id="v36_req_modules">Required Perl Modules</h3>
-<table class="req_table" border="0" cellspacing="0" cellpadding="0">
- <tr>
- <th>Module</th> <th>Version</th>
- </tr>
- <tr>
- <td >CGI</td>
+<table class="req_table" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <th>Module</th> <th>Version</th>
+ </tr>
+ <tr>
+ <td >CGI</td>
<td >3.21
- </td>
- </tr>
- <tr>
- <td >Digest::SHA</td>
- <td >
+ </td>
+ </tr>
+ <tr>
+ <td >Digest::SHA</td>
+ <td >
(Any)
- </td>
- </tr>
- <tr>
- <td >Date::Format</td>
+ </td>
+ </tr>
+ <tr>
+ <td >Date::Format</td>
<td >2.21
- </td>
- </tr>
- <tr>
- <td >DateTime</td>
+ </td>
+ </tr>
+ <tr>
+ <td >DateTime</td>
<td >0.28
- </td>
- </tr>
- <tr>
- <td >DateTime::TimeZone</td>
+ </td>
+ </tr>
+ <tr>
+ <td >DateTime::TimeZone</td>
<td >0.71
- </td>
- </tr>
- <tr>
- <td >DBI</td>
+ </td>
+ </tr>
+ <tr>
+ <td >DBI</td>
<td >1.41
- </td>
- </tr>
- <tr>
- <td >Template</td>
+ </td>
+ </tr>
+ <tr>
+ <td >Template</td>
<td >2.22
- </td>
- </tr>
- <tr>
- <td >Email::Send</td>
+ </td>
+ </tr>
+ <tr>
+ <td >Email::Send</td>
<td >2.00
- </td>
- </tr>
- <tr>
- <td >Email::MIME</td>
+ </td>
+ </tr>
+ <tr>
+ <td >Email::MIME</td>
<td >1.861
- </td>
- </tr>
- <tr>
- <td >Email::MIME::Encodings</td>
+ </td>
+ </tr>
+ <tr>
+ <td >Email::MIME::Encodings</td>
<td >1.313
- </td>
- </tr>
- <tr>
- <td >Email::MIME::Modifier</td>
+ </td>
+ </tr>
+ <tr>
+ <td >Email::MIME::Modifier</td>
<td >1.442
- </td>
- </tr>
- <tr>
- <td >URI</td>
- <td >
+ </td>
+ </tr>
+ <tr>
+ <td >URI</td>
+ <td >
(Any)
- </td>
- </tr>
-</table>
-
-<h3 id="v36_req_optional_mod">Optional Perl Modules</h3>
-
+ </td>
+ </tr>
+</table>
+
+<h3 id="v36_req_optional_mod">Optional Perl Modules</h3>
+
<p>The following perl modules, if installed, enable various
features of [% terms.Bugzilla %]:</p>
-<table class="req_table" border="0" cellspacing="0" cellpadding="0">
- <tr>
- <th>Module</th> <th>Version</th>
- <th>Enables Feature</th>
- </tr>
- <tr>
- <td >GD</td>
+<table class="req_table" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <th>Module</th> <th>Version</th>
+ <th>Enables Feature</th>
+ </tr>
+ <tr>
+ <td >GD</td>
<td >1.20
- </td>
- <td>Graphical Reports, New Charts, Old Charts</td>
- </tr>
- <tr>
- <td >Chart::Lines</td>
+ </td>
+ <td>Graphical Reports, New Charts, Old Charts</td>
+ </tr>
+ <tr>
+ <td >Chart::Lines</td>
<td class="req_new">2.1
- </td>
- <td>New Charts, Old Charts</td>
- </tr>
- <tr>
- <td >Template::Plugin::GD::Image</td>
- <td >
+ </td>
+ <td>New Charts, Old Charts</td>
+ </tr>
+ <tr>
+ <td >Template::Plugin::GD::Image</td>
+ <td >
(Any)
- </td>
- <td>Graphical Reports</td>
- </tr>
- <tr>
- <td >GD::Text</td>
- <td >
+ </td>
+ <td>Graphical Reports</td>
+ </tr>
+ <tr>
+ <td >GD::Text</td>
+ <td >
(Any)
- </td>
- <td>Graphical Reports</td>
- </tr>
- <tr>
- <td >GD::Graph</td>
- <td >
+ </td>
+ <td>Graphical Reports</td>
+ </tr>
+ <tr>
+ <td >GD::Graph</td>
+ <td >
(Any)
- </td>
- <td>Graphical Reports</td>
- </tr>
- <tr>
- <td >XML::Twig</td>
- <td >
+ </td>
+ <td>Graphical Reports</td>
+ </tr>
+ <tr>
+ <td >XML::Twig</td>
+ <td >
(Any)
- </td>
+ </td>
<td>Move [% terms.Bugs %] Between Installations,
- Automatic Update Notifications</td>
- </tr>
- <tr>
- <td >MIME::Parser</td>
+ Automatic Update Notifications</td>
+ </tr>
+ <tr>
+ <td >MIME::Parser</td>
<td >5.406
- </td>
- <td>Move [% terms.Bugs %] Between Installations</td>
- </tr>
- <tr>
- <td >LWP::UserAgent</td>
- <td >
+ </td>
+ <td>Move [% terms.Bugs %] Between Installations</td>
+ </tr>
+ <tr>
+ <td >LWP::UserAgent</td>
+ <td >
(Any)
- </td>
- <td>Automatic Update Notifications</td>
- </tr>
- <tr>
- <td >PatchReader</td>
+ </td>
+ <td>Automatic Update Notifications</td>
+ </tr>
+ <tr>
+ <td >PatchReader</td>
<td >0.9.4
- </td>
- <td>Patch Viewer</td>
- </tr>
- <tr>
- <td >Net::LDAP</td>
- <td >
+ </td>
+ <td>Patch Viewer</td>
+ </tr>
+ <tr>
+ <td >Net::LDAP</td>
+ <td >
(Any)
- </td>
- <td>LDAP Authentication</td>
- </tr>
- <tr>
- <td >Authen::SASL</td>
- <td >
+ </td>
+ <td>LDAP Authentication</td>
+ </tr>
+ <tr>
+ <td >Authen::SASL</td>
+ <td >
(Any)
- </td>
- <td>SMTP Authentication</td>
- </tr>
- <tr>
- <td >Authen::Radius</td>
- <td >
+ </td>
+ <td>SMTP Authentication</td>
+ </tr>
+ <tr>
+ <td >Authen::Radius</td>
+ <td >
(Any)
- </td>
- <td>RADIUS Authentication</td>
- </tr>
- <tr>
- <td >SOAP::Lite</td>
+ </td>
+ <td>RADIUS Authentication</td>
+ </tr>
+ <tr>
+ <td >SOAP::Lite</td>
<td >0.710.06
- </td>
- <td>XML-RPC Interface</td>
- </tr>
- <tr>
- <td class="req_new">JSON::RPC</td>
- <td class="req_new">
+ </td>
+ <td>XML-RPC Interface</td>
+ </tr>
+ <tr>
+ <td class="req_new">JSON::RPC</td>
+ <td class="req_new">
(Any)
- </td>
- <td>JSON-RPC Interface</td>
- </tr>
- <tr>
- <td class="req_new">Test::Taint</td>
- <td class="req_new">
+ </td>
+ <td>JSON-RPC Interface</td>
+ </tr>
+ <tr>
+ <td class="req_new">Test::Taint</td>
+ <td class="req_new">
(Any)
- </td>
- <td>JSON-RPC Interface, XML-RPC Interface</td>
- </tr>
- <tr>
- <td >HTML::Parser</td>
+ </td>
+ <td>JSON-RPC Interface, XML-RPC Interface</td>
+ </tr>
+ <tr>
+ <td >HTML::Parser</td>
<td >3.40
- </td>
- <td>More HTML in Product/Group Descriptions</td>
- </tr>
- <tr>
- <td >HTML::Scrubber</td>
- <td >
+ </td>
+ <td>More HTML in Product/Group Descriptions</td>
+ </tr>
+ <tr>
+ <td >HTML::Scrubber</td>
+ <td >
(Any)
- </td>
- <td>More HTML in Product/Group Descriptions</td>
- </tr>
- <tr>
- <td >Email::MIME::Attachment::Stripper</td>
- <td >
+ </td>
+ <td>More HTML in Product/Group Descriptions</td>
+ </tr>
+ <tr>
+ <td >Email::MIME::Attachment::Stripper</td>
+ <td >
(Any)
- </td>
- <td>Inbound Email</td>
- </tr>
- <tr>
- <td >Email::Reply</td>
- <td >
+ </td>
+ <td>Inbound Email</td>
+ </tr>
+ <tr>
+ <td >Email::Reply</td>
+ <td >
(Any)
- </td>
- <td>Inbound Email</td>
- </tr>
- <tr>
- <td >TheSchwartz</td>
- <td >
+ </td>
+ <td>Inbound Email</td>
+ </tr>
+ <tr>
+ <td >TheSchwartz</td>
+ <td >
(Any)
- </td>
- <td>Mail Queueing</td>
- </tr>
- <tr>
- <td >Daemon::Generic</td>
- <td >
+ </td>
+ <td>Mail Queueing</td>
+ </tr>
+ <tr>
+ <td >Daemon::Generic</td>
+ <td >
(Any)
- </td>
- <td>Mail Queueing</td>
- </tr>
- <tr>
- <td >mod_perl2</td>
+ </td>
+ <td>Mail Queueing</td>
+ </tr>
+ <tr>
+ <td >mod_perl2</td>
<td >1.999022
- </td>
- <td>mod_perl</td>
- </tr>
-</table>
+ </td>
+ <td>mod_perl</td>
+ </tr>
+</table>
<h2 id="v36_feat">New Features and Improvements</h2>
<ul>
<li><a href="#v36_feat_usability">General Usability Improvements</a></li>
- <li><a href="#v36_feat_extensions">New Extensions System</a></li>
+ <li><a href="#v36_feat_extensions">New Extensions System</a></li>
<li><a href="#v36_feat_qs">Improved Quicksearch</a></li>
<li><a href="#v36_feat_browse">Simple "Browse" Interface</a></li>
<li><a href="#v36_feat_suexec">SUExec Support</a></li>
mandatory.</li>
<li><b>[% terms.Bug %] Filing:</b> "Bookmarkable templates" now
support the "alias" and "estimated hours" fields.</li>
-
+
<li><b>[% terms.Bug %] Editing:</b> In previous versions of
[%+ terms.Bugzilla %], if you added a private comment to [% terms.abug %],
then <em>none</em> of the changes that you made at that time were
<li><b>Attachments:</b> When you click on an "attachment 12345" link
in a comment, if the attachment is a patch, you will now see the
formatted "Diff" view instead of the raw patch.</li>
- <li><b>Attachments</b>: For text attachments, we now let the browser
+ <li><b>Attachments</b>: For text attachments, we now let the browser
auto-detect the character encoding, instead of forcing the browser to
always assume the attachment is in UTF-8.</li>
-
+
<li><b>Search:</b> You can now display [% terms.bug %] flags as a column
in search results.</li>
<li><b>Search:</b> When viewing search results, you can see which columns are
<kbd>buglist.cgi</kbd> now accepts nearly every valid field in
[%+ terms.Bugzilla %] as a direct URL parameter, like
<kbd>&field=value</kbd>.</li>
-
+
<li><b>Requests:</b> When viewing the "My Requests" page, you can now
see the lists as a normal search result by clicking a link at the
bottom of each table.</li>
if there are no [% terms.bugs %] that match your searches.</li>
<li>The arrows in dependency graphs now point the other way, so that
[%+ terms.bugs %] point at their dependencies.</li>
-
+
<li><b>New Charts:</b> You can now convert an existing Saved Search
into a data series for New Charts.</li>
<li><b>New Charts:</b> There is now an interface that allows you to
the <kbd>lib/</kbd> dir. If you would rather use the CGI.pm from your
global Perl installation, you can delete <kbd>CGI.pm</kbd> and the
<kbd>CGI</kbd> directory from the <kbd>lib/</kbd> directory.</li>
-
+
<li>When editing a group, you can now specify that members of a group
are allowed to grant others membership in that group itself.</li>
<li>The ability to compress BMP attachments to PNGs is now an Extension.
the numeric id of each comment, whether an attachment is a URL,
the modification time of an attachment, the numeric id of a flag,
and the numeric id of a flag's type.</li>
-
+
<li><b>Parameters:</b> Parameters that aren't actually required are no longer
in the "Required" section of the Parameters page. Instead, some are in the
new "General" section, and some are in the new "Advanced" section.</li>
header sent from that proxy, and correctly use the X-Forwarded-For
as the end user's IP, instead of believing that all traffic is coming
from the proxy.</li>
-
+
<li><b>Removed Parameter:</b> The <kbd>loginnetmask</kbd> parameter has
been removed. Since [% terms.Bugzilla %] sends secure cookies, it's no
longer necessary to always restrict logins to a specific IP or block
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=69621">
[%- terms.Bug %] 69621</a>: If you rename or remove a keyword that is
in use on [% terms.bugs %], you will need to rebuild the "keyword cache"
- by running <a href="sanitycheck.cgi">sanitycheck.cgi</a> and choosing
- the option to rebuild the cache when it asks. Otherwise keywords may
+ by running <a href="sanitycheck.cgi">sanitycheck.cgi</a> and choosing
+ the option to rebuild the cache when it asks. Otherwise keywords may
not show up properly in search results.</li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=89822">
- [%- terms.Bug %] 89822</a>: When changing multiple [% terms.bugs %] at
+ [%- terms.Bug %] 89822</a>: When changing multiple [% terms.bugs %] at
the same time, there is no "mid-air collision" protection.</li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=276230">
- [%- terms.Bug %] 276230</a>: The support for restricting access to
- particular Categories of New Charts is not complete. You should treat
+ [%- terms.Bug %] 276230</a>: The support for restricting access to
+ particular Categories of New Charts is not complete. You should treat
the 'chartgroup' Param as the only access mechanism available.<br>
- However, charts migrated from Old Charts will be restricted to
+ However, charts migrated from Old Charts will be restricted to
the groups that are marked MANDATORY for the corresponding Product.
- There is currently no way to change this restriction, and the
+ There is currently no way to change this restriction, and the
groupings will not be updated if the group configuration
for the Product changes.</li>
</ul>
you can always delete the database records which contain the bad values by
logging in to your database and running the following command:</p>
-<p><code>DELETE FROM <var>table</var> WHERE <var>column</var> IN
+<p><code>DELETE FROM <var>table</var> WHERE <var>column</var> IN
(<var>1, 2, 3, 4</var>)</code></p>
-<p>Just replace "table" and "column" with the name of the table
+<p>Just replace "table" and "column" with the name of the table
and column that <kbd>checksetup.pl</kbd> mentions, and "1, 2, 3, 4"
with the invalid values that <kbd>checksetup.pl</kbd> prints out.</p>
<li><a href="#v34_feat">New Features and Improvements</a></li>
<li><a href="#v34_issues">Outstanding Issues</a></li>
<li><a href="#v34_upgrading">Notes On Upgrading From a Previous Version</a></li>
- <li><a href="#v34_code_changes">Code Changes Which May Affect
+ <li><a href="#v34_code_changes">Code Changes Which May Affect
Customizations</a></li>
<li><a href="#v34_previous">Release Notes for Previous Versions</a></li>
</ul>
<p>If you're upgrading, make sure to read <a href="#v34_upgrading">Notes
On Upgrading From a Previous Version</a>. If you are upgrading from a release
- before 3.2, make sure to read the release notes for all the
+ before 3.2, make sure to read the release notes for all the
<a href="#v34_previous">previous versions</a> in between your version
and this one, <strong>particularly the Upgrading section of each
version's release notes</strong>.</p>
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=533018">[% terms.Bug %] 533018</a>)
</li>
<li>If you tried to do a search with too many terms (resulting in a URL
- that was longer than about 7000 characters), Apache would return a
+ that was longer than about 7000 characters), Apache would return a
500 error instead of your search results.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=513989">[% terms.Bug %] 513989</a>)
</li>
<li>The Assignee field was empty in Whine mails.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=511216">[% terms.Bug %] 511216</a>)
</li>
- <li>Administrators can now successfully create user accounts using
+ <li>Administrators can now successfully create user accounts using
editusers.cgi when using the "Env" authentication method.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=483987">[% terms.Bug %] 483987</a>)
</li>
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=517793">[% terms.Bug %] 517793</a>)
</li>
<li>Attachments with Unicode characters in their names were being downloaded
- with mangled names.
+ with mangled names.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=328628">[% terms.Bug %] 328628</a>)
</li>
<li>Creating custom fields with Unicode in their database column name
is now no longer allowed, as it would break [% terms.Bugzilla %]. If you
- created such a custom field, you should delete it by first marking it
+ created such a custom field, you should delete it by first marking it
obsolete and then clicking "Delete" in the custom field list, using
<a href="editfields.cgi">editfields.cgi</a>.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=525025">[% terms.Bug %] 525025</a>)
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=509152">[% terms.Bug %] 509152</a>)
</li>
<li>You can now do <kbd>./install-module.pl --shell</kbd> to get a CPAN
- shell using the configuration of
+ shell using the configuration of
<a href="[% docs_urlbase FILTER html %]api/install-module.html">install-module.pl</a>,
which allows you to do more advanced Perl module installation tasks.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=445875">[% terms.Bug %] 445875</a>)
<h3>3.4.2</h3>
<p>This release contains fixes for multiple security issues, one of which
- is highly critical. See the
+ is highly critical. See the
<a href="https://www.bugzilla.org/security/3.0.8/">Security Advisory</a>
for details.</p>
this release:</p>
<ul>
- <li>Upgrades from older releases were sometimes failing during UTF-8
- conversion with a foreign key error.
+ <li>Upgrades from older releases were sometimes failing during UTF-8
+ conversion with a foreign key error.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=508181">[% terms.Bug %] 508181</a>)
</li>
<li>Sorting [% terms.bug %] lists on certain fields would result in an error.
</li>
<li>For users of RHEL, CentOS, Fedora, etc. jobqueue.pl can now automatically
be installed as a daemon by running <kbd>./jobqueue.pl install</kbd>
- as root.
+ as root.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=475403">[% terms.Bug %] 475403</a>)
</li>
<li>XML-RPC interface responses had an incorrect Content-Length header
<p>Perl v5.8.1</p>
-<h3 id="v34_req_mysql">For MySQL Users</h3>
-
-<ul>
- <li>MySQL v4.1.2</li>
- <li><strong>perl module:</strong> DBD::mysql v4.00</li>
+<h3 id="v34_req_mysql">For MySQL Users</h3>
+
+<ul>
+ <li>MySQL v4.1.2</li>
+ <li><strong>perl module:</strong> DBD::mysql v4.00</li>
</ul>
-<h3 id="v34_req_pg">For PostgreSQL Users</h3>
-
-<ul>
+<h3 id="v34_req_pg">For PostgreSQL Users</h3>
+
+<ul>
<li>PostgreSQL v8.00.0000</li>
<li><strong>perl module:</strong> DBD::Pg v1.45</li>
</ul>
<h3 id="v34_req_oracle">For Oracle Users</h3>
-
-<ul>
+
+<ul>
<li>Oracle v10.02.0</li>
<li><strong>perl module:</strong> DBD::Oracle v1.19</li>
-</ul>
-
+</ul>
+
<h3 id="v34_req_modules">Required Perl Modules</h3>
-<table class="req_table" border="0" cellspacing="0" cellpadding="0">
- <tr>
- <th>Module</th> <th>Version</th>
- </tr>
- <tr>
- <td>CGI</td>
- <td>3.21</td>
- </tr>
- <tr>
- <td class="req_new">Digest::SHA</td>
- <td class="req_new"> (Any)</td>
- </tr>
- <tr>
- <td>Date::Format</td>
- <td>2.21</td>
- </tr>
- <tr>
- <td class="req_new">DateTime</td>
- <td class="req_new">0.28</td>
- </tr>
- <tr>
- <td class="req_new">DateTime::TimeZone</td>
- <td class="req_new">0.71</td>
- </tr>
- <tr>
- <td>DBI</td>
- <td>1.41</td>
- </tr>
- <tr>
- <td>Template</td>
- <td class="req_new">2.22</td>
+<table class="req_table" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <th>Module</th> <th>Version</th>
+ </tr>
+ <tr>
+ <td>CGI</td>
+ <td>3.21</td>
+ </tr>
+ <tr>
+ <td class="req_new">Digest::SHA</td>
+ <td class="req_new"> (Any)</td>
+ </tr>
+ <tr>
+ <td>Date::Format</td>
+ <td>2.21</td>
+ </tr>
+ <tr>
+ <td class="req_new">DateTime</td>
+ <td class="req_new">0.28</td>
+ </tr>
+ <tr>
+ <td class="req_new">DateTime::TimeZone</td>
+ <td class="req_new">0.71</td>
+ </tr>
+ <tr>
+ <td>DBI</td>
+ <td>1.41</td>
+ </tr>
+ <tr>
+ <td>Template</td>
+ <td class="req_new">2.22</td>
+ </tr>
+ <tr>
+ <td>Email::Send</td>
+ <td>2.00</td>
+ </tr>
+ <tr>
+ <td>Email::MIME</td>
+ <td>1.861</td>
+ </tr>
+ <tr>
+ <td>Email::MIME::Encodings</td>
+ <td>1.313</td>
</tr>
<tr>
- <td>Email::Send</td>
- <td>2.00</td>
- </tr>
- <tr>
- <td>Email::MIME</td>
- <td>1.861</td>
- </tr>
- <tr>
- <td>Email::MIME::Encodings</td>
- <td>1.313</td>
- </tr>
- <tr>
- <td>Email::MIME::Modifier</td>
- <td>1.442</td>
- </tr>
- <tr>
- <td class="req_new">URI</td>
- <td class="req_new">(Any)</td>
- </tr>
-</table>
-
-<h3 id="v34_req_optional_mod">Optional Perl Modules</h3>
-
+ <td>Email::MIME::Modifier</td>
+ <td>1.442</td>
+ </tr>
+ <tr>
+ <td class="req_new">URI</td>
+ <td class="req_new">(Any)</td>
+ </tr>
+</table>
+
+<h3 id="v34_req_optional_mod">Optional Perl Modules</h3>
+
<p>The following perl modules, if installed, enable various
features of [% terms.Bugzilla %]:</p>
-<table class="req_table" border="0" cellspacing="0" cellpadding="0">
- <tr>
+<table class="req_table" border="0" cellspacing="0" cellpadding="0">
+ <tr>
<th>Module</th>
- <th>Version</th>
- <th>Enables Feature</th>
- </tr>
- <tr>
- <td>LWP::UserAgent</td>
- <td>(Any)</td>
- <td>Automatic Update Notifications</td>
- </tr>
- <tr>
- <td>Template::Plugin::GD::Image</td>
- <td>(Any)</td>
- <td>Graphical Reports</td>
- </tr>
- <tr>
- <td>GD::Text</td>
- <td>(Any)</td>
- <td>Graphical Reports</td>
- </tr>
- <tr>
- <td>GD::Graph</td>
- <td>(Any)</td>
- <td>Graphical Reports</td>
- </tr>
- <tr>
- <td>GD</td>
- <td>1.20</td>
- <td>Graphical Reports, New Charts, Old Charts</td>
- </tr>
- <tr>
- <td>Email::MIME::Attachment::Stripper</td>
- <td>(Any)</td>
- <td>Inbound Email</td>
- </tr>
- <tr>
- <td>Email::Reply</td>
- <td>(Any)</td>
- <td>Inbound Email</td>
- </tr>
- <tr>
- <td>Net::LDAP</td>
- <td>(Any)</td>
- <td>LDAP Authentication</td>
- </tr>
- <tr>
- <td class="req_new">TheSchwartz</td>
- <td class="req_new">(Any)</td>
- <td>Mail Queueing</td>
- </tr>
- <tr>
- <td class="req_new">Daemon::Generic</td>
- <td class="req_new">(Any)</td>
- <td>Mail Queueing</td>
- </tr>
- <tr>
- <td>HTML::Parser</td>
- <td>3.40</td>
- <td>More HTML in Product/Group Descriptions</td>
- </tr>
- <tr>
- <td>HTML::Scrubber</td>
- <td>(Any)</td>
- <td>More HTML in Product/Group Descriptions</td>
- </tr>
- <tr>
- <td>XML::Twig</td>
- <td>(Any)</td>
- <td>Move [% terms.Bugs %] Between Installations</td>
- </tr>
- <tr>
- <td>MIME::Parser</td>
- <td>5.406</td>
- <td>Move [% terms.Bugs %] Between Installations</td>
- </tr>
- <tr>
- <td>Chart::Base</td>
- <td>1.0</td>
- <td>New Charts, Old Charts</td>
- </tr>
- <tr>
- <td>Image::Magick</td>
- <td>(Any)</td>
- <td>Optionally Convert BMP Attachments to PNGs</td>
- </tr>
- <tr>
- <td>PatchReader</td>
- <td>0.9.4</td>
- <td>Patch Viewer</td>
- </tr>
- <tr>
- <td>Authen::Radius</td>
- <td>(Any)</td>
- <td>RADIUS Authentication</td>
- </tr>
- <tr>
- <td>Authen::SASL</td>
- <td>(Any)</td>
- <td>SMTP Authentication</td>
- </tr>
- <tr>
- <td>SOAP::Lite</td>
- <td>0.710.06</td>
- <td>XML-RPC Interface</td>
- </tr>
- <tr>
- <td>mod_perl2</td>
- <td>1.999022</td>
- <td>mod_perl</td>
- </tr>
-</table>
+ <th>Version</th>
+ <th>Enables Feature</th>
+ </tr>
+ <tr>
+ <td>LWP::UserAgent</td>
+ <td>(Any)</td>
+ <td>Automatic Update Notifications</td>
+ </tr>
+ <tr>
+ <td>Template::Plugin::GD::Image</td>
+ <td>(Any)</td>
+ <td>Graphical Reports</td>
+ </tr>
+ <tr>
+ <td>GD::Text</td>
+ <td>(Any)</td>
+ <td>Graphical Reports</td>
+ </tr>
+ <tr>
+ <td>GD::Graph</td>
+ <td>(Any)</td>
+ <td>Graphical Reports</td>
+ </tr>
+ <tr>
+ <td>GD</td>
+ <td>1.20</td>
+ <td>Graphical Reports, New Charts, Old Charts</td>
+ </tr>
+ <tr>
+ <td>Email::MIME::Attachment::Stripper</td>
+ <td>(Any)</td>
+ <td>Inbound Email</td>
+ </tr>
+ <tr>
+ <td>Email::Reply</td>
+ <td>(Any)</td>
+ <td>Inbound Email</td>
+ </tr>
+ <tr>
+ <td>Net::LDAP</td>
+ <td>(Any)</td>
+ <td>LDAP Authentication</td>
+ </tr>
+ <tr>
+ <td class="req_new">TheSchwartz</td>
+ <td class="req_new">(Any)</td>
+ <td>Mail Queueing</td>
+ </tr>
+ <tr>
+ <td class="req_new">Daemon::Generic</td>
+ <td class="req_new">(Any)</td>
+ <td>Mail Queueing</td>
+ </tr>
+ <tr>
+ <td>HTML::Parser</td>
+ <td>3.40</td>
+ <td>More HTML in Product/Group Descriptions</td>
+ </tr>
+ <tr>
+ <td>HTML::Scrubber</td>
+ <td>(Any)</td>
+ <td>More HTML in Product/Group Descriptions</td>
+ </tr>
+ <tr>
+ <td>XML::Twig</td>
+ <td>(Any)</td>
+ <td>Move [% terms.Bugs %] Between Installations</td>
+ </tr>
+ <tr>
+ <td>MIME::Parser</td>
+ <td>5.406</td>
+ <td>Move [% terms.Bugs %] Between Installations</td>
+ </tr>
+ <tr>
+ <td>Chart::Base</td>
+ <td>1.0</td>
+ <td>New Charts, Old Charts</td>
+ </tr>
+ <tr>
+ <td>Image::Magick</td>
+ <td>(Any)</td>
+ <td>Optionally Convert BMP Attachments to PNGs</td>
+ </tr>
+ <tr>
+ <td>PatchReader</td>
+ <td>0.9.4</td>
+ <td>Patch Viewer</td>
+ </tr>
+ <tr>
+ <td>Authen::Radius</td>
+ <td>(Any)</td>
+ <td>RADIUS Authentication</td>
+ </tr>
+ <tr>
+ <td>Authen::SASL</td>
+ <td>(Any)</td>
+ <td>SMTP Authentication</td>
+ </tr>
+ <tr>
+ <td>SOAP::Lite</td>
+ <td>0.710.06</td>
+ <td>XML-RPC Interface</td>
+ </tr>
+ <tr>
+ <td>mod_perl2</td>
+ <td>1.999022</td>
+ <td>mod_perl</td>
+ </tr>
+</table>
<h2 id="v34_feat">New Features and Improvements</h2>
<ul>
<li><a href="#v34_feat_enter">Simple [% terms.Bug %] Filing</a></li>
<li><a href="#v34_feat_index">New Home Page</a></li>
- <li><a href="#v34_feat_spam">Email Addresses Hidden From Logged-Out
+ <li><a href="#v34_feat_spam">Email Addresses Hidden From Logged-Out
Users</a></li>
<li><a href="#v34_feat_urls">Shorter Search URLs</a></li>
<li><a href="#v34_feat_async">Asynchronous Email Sending</a></li>
Another Field Has a Particular Value</a></li>
<li><a href="#v34_feat_vals">Custom Fields Whose List of Values
Change Depending on the Value of Another Field</a></li>
- <li><a href="#v34_feat_bugid">New Custom Field Type:
+ <li><a href="#v34_feat_bugid">New Custom Field Type:
[%+ terms.Bug %] ID</a></li>
<li><a href="#v34_feat_see">"See Also" Field</a></li>
<li><a href="#v34_feat_cols">Re-order Columns in Search Results</a></li>
<h3 id="v34_feat_enter">Simple [% terms.Bug %] Filing</h3>
<p>When entering a new [% terms.bug %], the vast majority of fields are
- now hidden by default, which enormously simplifies the bug-filing form.
+ now hidden by default, which enormously simplifies the bug-filing form.
You can click "Show Advanced Fields" to show all the fields, if you want
them. [%+ terms.Bugzilla %] remembers whether you last used the "Advanced"
or "Simple" version of the [% terms.bug %]-entry form, and will display the
<p>Here's an example: Let's say that we create a field called "Colors",
and we make the Product field "control the values" for Colors. Then we
add Blue, Red, Black, and Yellow as legal values for the "Colors" field.
- Now we can say that "Blue" and "Red" only appear as valid choices in
+ Now we can say that "Blue" and "Red" only appear as valid choices in
Product A, "Yellow" only appears in Product B, but "Black" <em>always</em>
appears.</p>
<h3 id="v34_feat_see">"See Also" Field</h3>
-<p>We have added a new standard field called "See Also" to
- [%+ terms.Bugzilla %]. In this field, you can put URLs to multiple
+<p>We have added a new standard field called "See Also" to
+ [%+ terms.Bugzilla %]. In this field, you can put URLs to multiple
[%+ terms.bugs %] in any [% terms.Bugzilla %] installation, to indicate
that those [% terms.bugs %] are related to this one. It also supports
- adding URLs to [% terms.bugs %] in
+ adding URLs to [% terms.bugs %] in
<a href="https://launchpad.net/">Launchpad</a>.</p>
<p>Right now, the field just validates the URLs and then displays them, but
hidden from the attachment list by default. You can show them
by clicking "Show Obsolete" at the bottom of the attachment list.</li>
<li>In the Email Preferences, you can now choose to get email when
- a new [% terms.bug %] report is filed and you have a particular
+ a new [% terms.bug %] report is filed and you have a particular
role on it.</li>
<li>When resolving a mid-air collision, you can now choose to submit
only your comment.</li>
<li>You can now set the Blocks and Depends On field on the "Change
Several [% terms.Bugs %] At Once" page.</li>
<li>If your installation uses the "insidergroup" feature, you can now add
- private comments on the "Change Several [% terms.Bugs %] At Once"
+ private comments on the "Change Several [% terms.Bugs %] At Once"
page.</li>
<li>When viewing a search result, you can now hover over any abbreviated
field to see its full value.</li>
what security groups the [% terms.bug %] has been restricted to.</li>
<li>You can now use any custom drop-down field as an axis for a tabular
or graphical report.</li>
- <li>The <kbd>X-Bugzilla-Type</kbd> header in emails sent by
+ <li>The <kbd>X-Bugzilla-Type</kbd> header in emails sent by
[%+ terms.Bugzilla %] is now "new" for [% terms.bug %]mail sent for
newly-filed [% terms.bugs %], and "changed" for emails having to do
with updated [% terms.bugs %].</li>
<h4>Enhancements for Administrators and Developers</h4>
<ul>
- <li>[% terms.Bugzilla %] now uses the SHA-256 algorithm (a variant of
+ <li>[% terms.Bugzilla %] now uses the SHA-256 algorithm (a variant of
SHA-2) to encrypt passwords in the database, instead of using Unix's
"crypt" function. This allows passwords longer than eight characters
to actually be effective. Each user's password will be converted to
- SHA-256 the first time they log in after you upgrade to
+ SHA-256 the first time they log in after you upgrade to
[%+ terms.Bugzilla %] 3.4 or later.</li>
<li>If you are using database replication with [% terms.Bugzilla %],
- many more scripts now take advantage of the read-only slave (the
+ many more scripts now take advantage of the read-only slave (the
"shadowdb"). It may be safe to open up <kbd>show_bug.cgi</kbd>
to search-engine indexing by editing your <kbd>robots.txt</kbd> file,
now, if your [% terms.Bugzilla %] is on fast-enough hardware.</li>
<li>The database now uses foreign keys to enforce the validity of
- relationships between tables. Not every single table has all its
+ relationships between tables. Not every single table has all its
foreign keys yet, but most do.</li>
<li>Various parameters have been removed, in an effort to de-clutter
the parameter interface and simplify [% terms.Bugzilla %]'s code.
maxpatchsize, commentonclearresolution, commentonreassignbycomponent,
showallproducts. They have all been replaced with sensible default
behaviors. (For example, user watching is now always enabled.)</li>
- <li>When adding <code>&debug=1</code> to the end of a
+ <li>When adding <code>&debug=1</code> to the end of a
<kbd>buglist.cgi</kbd> URL, [% terms.Bugzilla %] will now also do an
EXPLAIN on the query, to help debug performance issues.</li>
<li>When editing flag types in the administrative interface, you can now
and <a href="[% docs_urlbase FILTER html %]api/Bugzilla/WebService/Bugzilla.html#time">B[% %]ugzilla.time</a>
(<kbd>B[% %]ugzilla.timezone</kbd> is now deprecated).
</li>
- <li>For network efficiency, you can now limit which fields are returned
+ <li>For network efficiency, you can now limit which fields are returned
from certain WebService functions, like <kbd>User.get</kbd>.</li>
<li>There is now a "permissive" argument for the <kbd>B[% %]ug.get</kbd>
WebService function, which causes it not to throw an error when you
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=69621">
[%- terms.Bug %] 69621</a>: If you rename or remove a keyword that is
in use on [% terms.bugs %], you will need to rebuild the "keyword cache"
- by running <a href="sanitycheck.cgi">sanitycheck.cgi</a> and choosing
- the option to rebuild the cache when it asks. Otherwise keywords may
+ by running <a href="sanitycheck.cgi">sanitycheck.cgi</a> and choosing
+ the option to rebuild the cache when it asks. Otherwise keywords may
not show up properly in search results.</li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=89822">
- [%- terms.Bug %] 89822</a>: When changing multiple [% terms.bugs %] at
+ [%- terms.Bug %] 89822</a>: When changing multiple [% terms.bugs %] at
the same time, there is no "mid-air collision" protection.</li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=276230">
- [%- terms.Bug %] 276230</a>: The support for restricting access to
- particular Categories of New Charts is not complete. You should treat
+ [%- terms.Bug %] 276230</a>: The support for restricting access to
+ particular Categories of New Charts is not complete. You should treat
the 'chartgroup' Param as the only access mechanism available.<br>
- However, charts migrated from Old Charts will be restricted to
+ However, charts migrated from Old Charts will be restricted to
the groups that are marked MANDATORY for the corresponding Product.
- There is currently no way to change this restriction, and the
+ There is currently no way to change this restriction, and the
groupings will not be updated if the group configuration
for the Product changes.</li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=370370">
you can always delete the database records which contain the bad values by
logging in to your database and running the following command:</p>
-<p><code>DELETE FROM <var>table</var> WHERE <var>column</var> IN
+<p><code>DELETE FROM <var>table</var> WHERE <var>column</var> IN
(<var>1, 2, 3, 4</var>)</code></p>
-<p>Just replace "table" and "column" with the name of the table
+<p>Just replace "table" and "column" with the name of the table
and column that <kbd>checksetup.pl</kbd> mentions, and "1, 2, 3, 4"
with the invalid values that <kbd>checksetup.pl</kbd> prints out.</p>
are any), but moving any unexpected variables into a file called
<kbd>localconfig.old</kbd>. If you want to continue having custom
varibles in <kbd>localconfig</kbd>, you will have to add them to
- the <code>LOCALCONFIG_VARS</code> constant in
+ the <code>LOCALCONFIG_VARS</code> constant in
<kbd>Bugzilla::Install::Localconfig</kbd>.</li>
<li><kbd>Bugzilla::Object->update()</kbd> now returns something different
in list context than it does in scalar context.</li>
search results are now defined in a subroutine called <code>COLUMNS</code>
in <kbd>Bugzilla::Search</kbd>. The data now mostly comes from the
<kbd>fielddefs</kbd> table in the database. Search.pm now takes a list
- of column names from fielddefs for its <kbd>fields</kbd> argument instead
+ of column names from fielddefs for its <kbd>fields</kbd> argument instead
of literal SQL columns.</li>
<li><kbd>Bugzilla::Field->legal_values</kbd> now returns an array of
<a href="[% docs_urlbase FILTER html %]api/Bugzilla/Field/Choice.html">Bugzilla::Field::Choice</a>
objects instead of an array of strings. Bugzilla::Field::Choice will be used
in more places, in the future.</li>
- <li>We now use <kbd>Bugzilla::Bug->check()</kbd> instead of
+ <li>We now use <kbd>Bugzilla::Bug->check()</kbd> instead of
<kbd>ValidateBugId</kbd>.</li>
- <li>The <kbd>groups</kbd> and <kbd>bless_groups</kbd> methods in
- <kbd>Bugzilla::User</kbd> now return an arrayref of
+ <li>The <kbd>groups</kbd> and <kbd>bless_groups</kbd> methods in
+ <kbd>Bugzilla::User</kbd> now return an arrayref of
<kbd>Bugzilla::Group</kbd> objects instead of a hashref with
group ids and group names.</li>
<li>Standard [% terms.Bugzilla %] drop-down fields now have their type
set to <kbd>FIELD_TYPE_SINGLE_SELECT</kbd> in the fielddefs table.</li>
- <li><kbd>Bugzilla->usage_mode</kbd> now defaults to
+ <li><kbd>Bugzilla->usage_mode</kbd> now defaults to
<kbd>USAGE_MODE_CMDLINE</kbd> if we are not running inside a web
server.</li>
<li>We no longer delete environment variables like <kbd>$ENV{PATH}</kbd>
<li><a href="#v32_feat">New Features and Improvements</a></li>
<li><a href="#v32_issues">Outstanding Issues</a></li>
<li><a href="#v32_upgrading">How to Upgrade From An Older Version</a></li>
- <li><a href="#v32_code_changes">Code Changes Which May Affect
+ <li><a href="#v32_code_changes">Code Changes Which May Affect
Customizations</a></li>
<li><a href="#v32_previous">Release Notes for Previous Versions</a></li>
</ul>
<p>If you're upgrading, make sure to read <a href="#v32_upgrading">How to
Upgrade From An Older Version</a>. If you are upgrading from a release
- before 3.0, make sure to read the release notes for all the
+ before 3.0, make sure to read the release notes for all the
<a href="#v32_previous">previous versions</a> in between your version
and this one, <strong>particularly the "Notes For Upgraders" section of each
version's release notes</strong>.</p>
releases of [% terms.Bugzilla %] after 3.2. We only list the
most important fixes in each release. If you want a detailed list of
<em>everything</em> that's changed in each version, you should use our
- <a href="https://www.bugzilla.org/status/changes.html">Change Log
+ <a href="https://www.bugzilla.org/status/changes.html">Change Log
Page</a>.</p>
<h3>3.2.3</h3>
<li>[% terms.Bugzilla %] is now compatible with MySQL 5.1.x versions 5.1.31
and greater.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=480001">[% terms.Bug %] 480001</a>)</li>
- <li>On Windows, [% terms.Bugzilla %] sometimes would send mangled emails
+ <li>On Windows, [% terms.Bugzilla %] sometimes would send mangled emails
(that would often fail to send).
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=467920">[% terms.Bug %] 467920</a>)</li>
<li><code>recode.pl</code> would sometimes crash when trying to convert
again (the [% terms.bug %] XML format now contains a "token" element that
can be used when updating [% terms.abug %]).
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=476678">[% terms.Bug %] 476678</a>)</li>
- <li>For installations using the <code>shadowdb</code> parameter,
+ <li>For installations using the <code>shadowdb</code> parameter,
[%+ terms.Bugzilla %] was accidentally writing to the "tokens" table
in the shadow database (instead of the master database) when using the
"Change Several [% terms.Bugs %] at Once" page.
<h3>3.2.2</h3>
<p>This release fixes one security issue that is critical for installations
- running 3.2.1 under mod_perl. See the
+ running 3.2.1 under mod_perl. See the
<a href="https://www.bugzilla.org/security/3.0.7/">Security Advisory</a>
for details.</p>
<li>If you were using the <code>PROJECT</code> environment variable
to have multiple [% terms.Bugzilla %] installations using one codebase,
- project-specific templates were being ignored.
+ project-specific templates were being ignored.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=467324">[% terms.Bug %] 467324</a>)</li>
<li>Some versions of the SOAP::Lite Perl module had a b[% %]ug that caused
- [%+ terms.Bugzilla %]'s XML-RPC service to break.
- <kbd>checksetup.pl</kbd> now checks for these bad versions and
+ [%+ terms.Bugzilla %]'s XML-RPC service to break.
+ <kbd>checksetup.pl</kbd> now checks for these bad versions and
will reject them.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=468009">[% terms.Bug %] 468009</a>)</li>
<h3>3.2.2</h3>
<p>This release fixes one security issue that is critical for installations
- running 3.2.1 under mod_perl. See the
- <a href="https://www.bugzilla.org/security/3.0.7/">Security Advisory</a>
+ running 3.2.1 under mod_perl. See the
+ <a href="https://www.bugzilla.org/security/3.0.7/">Security Advisory</a>
for details.</p>
<h3>3.2.1</h3>
<p>This release contains several security fixes. One fix may break any
automated scripts you have that are loading <kbd>process_bug.cgi</kbd>
- directly. We recommend that you read the entire
+ directly. We recommend that you read the entire
<a href="https://www.bugzilla.org/security/2.22.6/">Security Advisory</a>
for this release.</p>
<table class="req_table" border="0" cellpadding="0" cellspacing="0">
<tr> <th>Module</th> <th>Version</th> </tr>
-<tr> <td>CGI</td> <td class="req_new">3.21 (on Perl 5.8.x)
+<tr> <td>CGI</td> <td class="req_new">3.21 (on Perl 5.8.x)
or 3.33 (on Perl 5.10.x)</td> </tr>
<tr> <td>Date::Format</td> <td>2.21</td> </tr>
<tr> <td>File::Spec</td> <td>0.84</td> </tr>
<tr> <td>Template</td> <td class="req_new">2.15</td> </tr>
<tr> <td>Email::Send</td> <td>2.00</td> </tr>
<tr> <td>Email::MIME</td> <td class="req_new">1.861</td> </tr>
-<tr>
- <td class="req_new">Email::MIME::Encodings</td>
+<tr>
+ <td class="req_new">Email::MIME::Encodings</td>
<td class="req_new">1.313</td>
</tr>
<tr>
- <td>Email::MIME::Modifier</td>
+ <td>Email::MIME::Modifier</td>
<td class="req_new">1.442</td>
</tr>
</table>
features of [% terms.Bugzilla %]:</p>
<table class="req_table" border="0" cellpadding="0" cellspacing="0">
-<tr>
+<tr>
<th>Module</th>
<th>Version</th>
<th>Enables Feature</th>
<td>Automatic Update Notifications</td>
</tr>
<tr>
- <td>Template::Plugin::GD::Image</td>
- <td>(Any)</td>
+ <td>Template::Plugin::GD::Image</td>
+ <td>(Any)</td>
<td>Graphical Reports</td>
</tr>
<tr>
- <td>GD::Text</td>
- <td>(Any)</td>
+ <td>GD::Text</td>
+ <td>(Any)</td>
<td>Graphical Reports</td>
</tr>
<tr>
- <td>GD::Graph</td>
- <td>(Any)</td>
+ <td>GD::Graph</td>
+ <td>(Any)</td>
<td>Graphical Reports</td>
</tr>
<tr>
- <td>GD</td>
- <td>1.20</td>
+ <td>GD</td>
+ <td>1.20</td>
<td>Graphical Reports, New Charts, Old Charts</td>
</tr>
<tr>
- <td>Email::MIME::Attachment::Stripper</td>
- <td>(Any)</td>
+ <td>Email::MIME::Attachment::Stripper</td>
+ <td>(Any)</td>
<td>Inbound Email</td>
</tr>
<tr>
- <td>Email::Reply</td>
- <td>(Any)</td>
+ <td>Email::Reply</td>
+ <td>(Any)</td>
<td>Inbound Email</td>
</tr>
<tr>
- <td>Net::LDAP</td>
- <td>(Any)</td>
+ <td>Net::LDAP</td>
+ <td>(Any)</td>
<td>LDAP Authentication</td>
</tr>
<tr>
- <td>HTML::Parser</td>
- <td>3.40</td>
+ <td>HTML::Parser</td>
+ <td>3.40</td>
<td>More HTML in Product/Group Descriptions</td>
</tr>
<tr>
- <td>HTML::Scrubber</td>
- <td>(Any)</td>
+ <td>HTML::Scrubber</td>
+ <td>(Any)</td>
<td>More HTML in Product/Group Descriptions</td>
</tr>
<tr>
- <td>XML::Twig</td>
- <td>(Any)</td>
+ <td>XML::Twig</td>
+ <td>(Any)</td>
<td>Move [% terms.Bugs %] Between Installations</td>
</tr>
<tr>
- <td>MIME::Parser</td>
- <td>5.406</td>
+ <td>MIME::Parser</td>
+ <td>5.406</td>
<td>Move [% terms.Bugs %] Between Installations</td>
</tr>
<tr>
- <td>Chart::Base</td>
- <td>1.0</td>
+ <td>Chart::Base</td>
+ <td>1.0</td>
<td>New Charts, Old Charts</td>
</tr>
<tr>
- <td>Image::Magick</td>
- <td>(Any)</td>
+ <td>Image::Magick</td>
+ <td>(Any)</td>
<td>Optionally Convert BMP Attachments to PNGs</td>
</tr>
<tr>
- <td>PatchReader</td>
- <td>0.9.4</td>
+ <td>PatchReader</td>
+ <td>0.9.4</td>
<td>Patch Viewer</td>
</tr>
<tr>
- <td class="req_new">Authen::Radius</td>
- <td class="req_new">(Any)</td>
+ <td class="req_new">Authen::Radius</td>
+ <td class="req_new">(Any)</td>
<td>RADIUS Authentication</td>
</tr>
<tr>
- <td class="req_new">Authen::SASL</td>
- <td class="req_new">(Any)</td>
+ <td class="req_new">Authen::SASL</td>
+ <td class="req_new">(Any)</td>
<td>SMTP Authentication</td>
</tr>
<tr>
- <td>SOAP::Lite</td>
- <td>(Any)</td>
+ <td>SOAP::Lite</td>
+ <td>(Any)</td>
<td>XML-RPC Interface</td>
</tr>
<tr>
- <td>mod_perl2</td>
- <td>1.999022</td>
+ <td>mod_perl2</td>
+ <td>1.999022</td>
<td>mod_perl</td>
</tr>
</table>
<h3 id="v32_feat_ui">Major UI Improvements</h3>
<p>[% terms.Bugzilla %] 3.2 has had some UI assistance from the NASA
- Human-Computer Interaction department and the new
+ Human-Computer Interaction department and the new
<a href="https://wiki.mozilla.org/Bugzilla:UE">[% terms.Bugzilla %]
User Interface Team</a>.</p>
<p>[% terms.Bugzilla %] 3.2 now ships with a skin called "Dusk" that is
a bit more colorful than old default "Classic" skin.</p>
-<p>Upgrading installations will still default to the "Classic"
+<p>Upgrading installations will still default to the "Classic"
skin--administrators can change the default in the Default Preferences
control panel. Users can also choose to use the old skin in their
Preferences (or using the View :: Page Style menu in Firefox).</p>
<h3 id="v32_feat_install">Easier Installation</h3>
-<p>[% terms.Bugzilla %] now comes with a script called
+<p>[% terms.Bugzilla %] now comes with a script called
<kbd>install-module.pl</kbd> that can automatically download
and install all of the required Perl modules for [% terms.Bugzilla %].
It stores them in a directory inside your [% terms.Bugzilla %]
<h3 id="v32_feat_oracle">Experimental Oracle Support</h3>
-<p>[% terms.Bugzilla %] 3.2 contains experimental support for using
- Oracle as its database. Some features of [% terms.Bugzilla %] are known
+<p>[% terms.Bugzilla %] 3.2 contains experimental support for using
+ Oracle as its database. Some features of [% terms.Bugzilla %] are known
to be broken on Oracle, but hopefully will be working by our next major
release.</p>
you to use [% terms.Bugzilla %]!</p>
<p>The [% terms.Bugzilla %] Project thanks Oracle Corp. for their extensive
- development contributions to [% terms.Bugzilla %] which allowed this to
+ development contributions to [% terms.Bugzilla %] which allowed this to
happen!</p>
<h3 id="v32_feat_utf8">Improved UTF-8 Support</h3>
<p>Administrators can now specify that users who are in certain groups
should have an icon appear next to their name whenever they comment.
- This is particularly useful for distinguishing developers from
+ This is particularly useful for distinguishing developers from
[%+ terms.bug %] reporters.</p>
<h3 id="v32_feat_other">Other Enhancements and Changes</h3>
<ul>
<li><strong>[% terms.Bugs %]</strong>: You can now reassign
[%+ terms.abug %] at the same time as you are changing its status.</li>
- <li><strong>[% terms.Bugs %]</strong>: When entering [% terms.abug %],
+ <li><strong>[% terms.Bugs %]</strong>: When entering [% terms.abug %],
you will now see the description of a component when you select it.</li>
- <li><strong>[% terms.Bugs %]</strong>: The [% terms.bug %] view now
+ <li><strong>[% terms.Bugs %]</strong>: The [% terms.bug %] view now
contains some <a href="http://microformats.org/about/">Microformats</a>,
most notably for users' names and email addresses.</li>
<li><strong>[% terms.Bugs %]</strong>: You can now remove a QA Contact
from [% terms.abug %] simply by clearing the QA Contact field.</li>
- <li><strong>[% terms.Bugs %]</strong>: There is now a user preference
- that will allow you to exclude the quoted text when replying
+ <li><strong>[% terms.Bugs %]</strong>: There is now a user preference
+ that will allow you to exclude the quoted text when replying
to comments.</li>
<li><strong>[% terms.Bugs %]</strong>: You can now expand or collapse
individual comments in the [% terms.bug %] view.</li>
- <li><strong>Attachments</strong>: There is now "mid-air collision"
+ <li><strong>Attachments</strong>: There is now "mid-air collision"
protection when editing attachments.</li>
- <li><strong>Attachments</strong>: Patches in the Diff Viewer now show
+ <li><strong>Attachments</strong>: Patches in the Diff Viewer now show
line numbers (<a href="https://bugzilla.mozilla.org/attachment.cgi?id=327546">Example</a>).</li>
<li><strong>Attachments</strong>: After creating or updating an attachment,
you will be immediately shown the [% terms.bug %] that the attachment
is on.</li>
- <li><strong>Search</strong>: You can now reverse the sort of
+ <li><strong>Search</strong>: You can now reverse the sort of
[%+ terms.abug %] list by clicking on a column header again.</li>
<li><strong>Search</strong>: Atom feeds of [% terms.bug %] lists now
contain more fields.</li>
<li><strong>Search</strong>: QuickSearch now supports searching flags
and groups. It also now includes the OS field in the list of fields
it searches by default.</li>
- <li><strong>Search</strong>: "Help" text can now appear on query.cgi
+ <li><strong>Search</strong>: "Help" text can now appear on query.cgi
for Internet Explorer and other non-Firefox browsers. (It always
could appear for Firefox.)</li>
up next to the URL in most browsers. If you want to replace it,
it's in <kbd>images/favicon.ico</kbd>.</li>
- <li>You can now set the Deadline when using "Change Several
+ <li>You can now set the Deadline when using "Change Several
[%+ terms.Bugs %] At Once"</li>
- <li><strong>Saved Searches</strong> now save their column list, so if
- you customize the list of columns and save your search, it will
+ <li><strong>Saved Searches</strong> now save their column list, so if
+ you customize the list of columns and save your search, it will
always contain those columns.</li>
<li><strong>Saved Searches</strong>: When you share a search, you can
- now see how many users have subscribed to it, on
+ now see how many users have subscribed to it, on
<kbd>userprefs.cgi</kbd>.</li>
- <li><strong>Saved Searches</strong>: You can now see what group a
+ <li><strong>Saved Searches</strong>: You can now see what group a
shared search was shared to, on the list of available shared searches
in <kbd>userprefs.cgi</kbd>.</li>
- <li><strong>Flags</strong>: If your installation uses drop-down user
- lists, the flag requestee box will now contain only users who are
+ <li><strong>Flags</strong>: If your installation uses drop-down user
+ lists, the flag requestee box will now contain only users who are
actually allowed to take requests.</li>
<li><strong>Flags</strong>: If somebody makes a request to you, and you
change the requestee to somebody else, the requester is no longer set
<li>When using <kbd>email_in.pl</kbd>, you can now add users to the CC
list by just using <kbd>@cc</kbd> as the field name.</li>
<li>Many pages (particularly administrative pages) now contain links to
- the relevant section of the [% terms.Bugzilla %] Guide, so you can read
+ the relevant section of the [% terms.Bugzilla %] Guide, so you can read
the documentation for that page.</li>
<li>Dependency Graphs should render more quickly, as they now (by default)
only include the same [% terms.bugs %] that you'd see in the dependency
<h4>Enhancements For Administrators</h4>
<ul>
- <li><strong>Admin UI</strong>: Instead of having the Administration
- Control Panel links in the footer, there is now just one link called
+ <li><strong>Admin UI</strong>: Instead of having the Administration
+ Control Panel links in the footer, there is now just one link called
"Administration" that takes you to a page that links to all the
administrative controls for [% terms.Bugzilla %].</li>
<li><strong>Admin UI</strong>: Administrative pages no longer display
- confirmation pages, instead they redirect you to some useful page
+ confirmation pages, instead they redirect you to some useful page
and display a message about what changed.</li>
- <li><strong>Admin UI</strong>: The interface for editing group
+ <li><strong>Admin UI</strong>: The interface for editing group
inheritance in <kbd>editgroups.cgi</kbd> is much clearer now.</li>
- <li><strong>Admin UI</strong>: When editing a user, you can now see
+ <li><strong>Admin UI</strong>: When editing a user, you can now see
all the components where that user is the Default Assignee or Default
QA Contact.</li>
- <li><strong>Email</strong>: For installations that use SMTP to send
+ <li><strong>Email</strong>: For installations that use SMTP to send
mail (as opposed to Sendmail), [%+ terms.Bugzilla %] now supports
- SMTP Authentication, so that it can log in to your mail server
+ SMTP Authentication, so that it can log in to your mail server
before sending messages.</li>
<li><strong>Email</strong>: Using the "Test" mail delivery method now
creates a valid mbox file to make testing easier.</li>
- <li><strong>Authentication</strong>: [% terms.Bugzilla %] now correctly
+ <li><strong>Authentication</strong>: [% terms.Bugzilla %] now correctly
handles LDAP records which contain multiple email addresses. (The first
- email address in the list that is a valid [% terms.Bugzilla %] account
- will be used, or if this is a new user, the first email address in
+ email address in the list that is a valid [% terms.Bugzilla %] account
+ will be used, or if this is a new user, the first email address in
the list will be used.)</li>
- <li><strong>Authentication</strong>: [% terms.Bugzilla %] can now take
+ <li><strong>Authentication</strong>: [% terms.Bugzilla %] can now take
a list of LDAP servers to try in order until it gets a successful
connection.</li>
- <li><strong>Authentication</strong>: [% terms.Bugzilla %] now supports
+ <li><strong>Authentication</strong>: [% terms.Bugzilla %] now supports
RADIUS authentication.</li>
- <li><strong>Security</strong>: The login cookie is now created as
- "HTTPOnly" so that it can't be read by possibly malicious scripts.
+ <li><strong>Security</strong>: The login cookie is now created as
+ "HTTPOnly" so that it can't be read by possibly malicious scripts.
Also, if SSL is enabled on your installation, the login cookie is
now only sent over SSL connections.</li>
<li><strong>Security</strong>: The <code>ssl</code> parameter now protects
Also, SSL is now enforced appropriately in the WebServices interface when
the parameter is set.</li>
- <li><strong>Database</strong>: [% terms.Bugzilla %] now uses transactions in
+ <li><strong>Database</strong>: [% terms.Bugzilla %] now uses transactions in
the database instead of table locks. This should generally improve
performance with many concurrent users. It also means if there is
an unexpected error in the middle of a page, all database changes made
during that page will be rolled back.</li>
- <li><strong>Database</strong>: You no longer have to set
+ <li><strong>Database</strong>: You no longer have to set
<code>max_packet_size</code> in MySQL to add large attachments. However,
you may need to set it manually if you restore a mysqldump into your
database.</li>
<li>You can now delete custom fields, but only if they have never been
set on any [% terms.bug %].</li>
- <li>There is now a <kbd>--reset-password</kbd> argument to
+ <li>There is now a <kbd>--reset-password</kbd> argument to
<kbd>checksetup.pl</kbd> that allows you to reset a user's password
from the command line.</li>
<li>There is now a script called <kbd>sanitycheck.pl</kbd> that you can
<li>The voting system is off by default in new installs. This is to
prepare for the fact that it will be moved into an extension at
some point in the future.</li>
- <li>The <code>shutdownhtml</code> parameter now works even when
+ <li>The <code>shutdownhtml</code> parameter now works even when
[%+ terms.Bugzilla %]'s database server is down.</li>
</ul>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=69621">
[%- terms.Bug %] 69621</a>: If you rename or remove a keyword that is
in use on [% terms.bugs %], you will need to rebuild the "keyword cache"
- by running <a href="sanitycheck.cgi">sanitycheck.cgi</a> and choosing
- the option to rebuild the cache when it asks. Otherwise keywords may
+ by running <a href="sanitycheck.cgi">sanitycheck.cgi</a> and choosing
+ the option to rebuild the cache when it asks. Otherwise keywords may
not show up properly in search results.</li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=89822">
- [%- terms.Bug %] 89822</a>: When changing multiple [% terms.bugs %] at
+ [%- terms.Bug %] 89822</a>: When changing multiple [% terms.bugs %] at
the same time, there is no "mid-air collision" protection.</li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=276230">
- [%- terms.Bug %] 276230</a>: The support for restricting access to
- particular Categories of New Charts is not complete. You should treat
+ [%- terms.Bug %] 276230</a>: The support for restricting access to
+ particular Categories of New Charts is not complete. You should treat
the 'chartgroup' Param as the only access mechanism available.<br>
- However, charts migrated from Old Charts will be restricted to
+ However, charts migrated from Old Charts will be restricted to
the groups that are marked MANDATORY for the corresponding Product.
- There is currently no way to change this restriction, and the
+ There is currently no way to change this restriction, and the
groupings will not be updated if the group configuration
for the Product changes.</li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=370370">
<h3 id="v32_upgrading_notes">Notes For Upgraders</h3>
<ul>
- <li>If you upgrade by CVS, the <kbd>extensions</kbd> and
+ <li>If you upgrade by CVS, the <kbd>extensions</kbd> and
<kbd>skins/contrib</kbd> directories are now in CVS instead of
being created by <kbd>checksetup.pl</kbd> If you do a <kbd>cvs update</kbd>
from 3.0, you will be told that your directories are "in the way" and
the upgrade will not be able to complete (and <kbd>checksetup.pl</kbd>
will tell you so).</li>
- <li><strong>You should also read the
+ <li><strong>You should also read the
<a href="#v30_upgrading_notes">[% terms.Bugzilla %] 3.0 Notes For Upgraders
- section</a> of the
+ section</a> of the
<a href="#v32_previous">previous release notes</a> if you are upgrading
from a version before 3.0.</strong></li>
</ul>
<h3>Steps For Upgrading</h3>
<p>Once you have read the notes above, see the
- <a href="[% docs_urlbase FILTER html %]upgrade.html">Upgrading
+ <a href="[% docs_urlbase FILTER html %]upgrade.html">Upgrading
documentation</a> for instructions on how to upgrade.</p>
<h2 id="v32_code_changes">Code Changes Which May Affect Customizations</h2>
<li><a href="#v30_issues">Outstanding Issues</a></li>
<li><a href="#v30_security">Security Fixes In This Release</a></li>
<li><a href="#v30_upgrading">How to Upgrade From An Older Version</a></li>
- <li><a href="#v30_code_changes">Code Changes Which May Affect
+ <li><a href="#v30_code_changes">Code Changes Which May Affect
Customizations</a></li>
<li><a href="#v30_previous">Release Notes for Previous Versions</a></li>
</ul>
<p>If you're upgrading, make sure to read <a href="#v30_upgrading">How to
Upgrade From An Older Version</a>. If you are upgrading from a release
- before 2.22, make sure to read the release notes for all the
- <a href="#v30_previous">previous versions</a> in between your version
+ before 2.22, make sure to read the release notes for all the
+ <a href="#v30_previous">previous versions</a> in between your version
and this one.</p>
<h2 id="v30_point">Updates in this 3.0.x Release</h2>
closing its connections to the database since 3.0.3, and so sometimes
the DB would run out of connections.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=441592">[% terms.Bug %] 441592</a>)</li>
- <li>The installation script is now clear about exactly which
+ <li>The installation script is now clear about exactly which
<code>Email::</code> modules are required in Perl, thus avoiding the
- problem where emails show up with a body like
+ problem where emails show up with a body like
<samp>SCALAR(0xBF126795)</samp>.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=441541">[% terms.Bug %] 441541</a>)</li>
<li><a href="[% docs_urlbase FILTER html %]api/email_in.html">email_in.pl</a>
<li>Better threading of [% terms.bug %]mail in some email clients.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=376453">[% terms.Bug %] 376453</a>)</li>
- <li>There were many fixes to the Inbound Email Interface
+ <li>There were many fixes to the Inbound Email Interface
(<kbd>email_in.pl</kbd>).
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=92274">[% terms.Bug %] 92274</a>,
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=377025">[% terms.Bug %] 377025</a>,
<ul>
<li>mod_perl no longer compiles [% terms.Bugzilla %]'s code for each Apache
process individually. It now compiles code only once and shares it among
- each Apache process. This greatly improves performance and highly
+ each Apache process. This greatly improves performance and highly
decreases the memory footprint.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=398241">[% terms.Bug %] 398241</a>)</li>
<li>You can now search for '---' (without quotes) in versions and milestones.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=362436">[% terms.Bug %] 362436</a>)</li>
- <li>[% terms.Bugzilla %] should no longer break lines unnecessarily in
+ <li>[% terms.Bugzilla %] should no longer break lines unnecessarily in
email subjects. This was causing trouble with some email clients.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=374424">[% terms.Bug %] 374424</a>)</li>
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=394796">[% terms.Bug %] 394796</a>)</li>
<li>Deleting a user account no longer deletes whines from another user who
- has the deleted account as addressee. The schedule is simply removed,
+ has the deleted account as addressee. The schedule is simply removed,
but the whine itself is left intact.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=395924">[% terms.Bug %] 395924</a>)</li>
fields when merging two user accounts.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=400160">[% terms.Bug %] 400160</a>)</li>
- <li>[% terms.Bugzilla %] no longer requires Apache::DBI to run under
+ <li>[% terms.Bugzilla %] no longer requires Apache::DBI to run under
mod_perl. It caused troubles such as lost connections with the DB and
didn't give any important performance gain.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=408766">[% terms.Bug %] 408766</a>)</li>
<code>specific_search_allow_empty_words</code>.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=385910">[% terms.Bug %] 385910</a>)</li>
<li>If you attach a file that has a MIME-type of <code>text/x-patch</code>
- or <code>text/x-diff</code>, it will automatically be treated as a
+ or <code>text/x-diff</code>, it will automatically be treated as a
patch by [% terms.Bugzilla %].
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=365756">[% terms.Bug %] 365756</a>)</li>
<li>Dependency Graphs now work correctly on all mod_perl installations.
<li>PostgreSQL users: New Charts were failing to collect data over time.
They will now start collecting data correctly.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=257351">[% terms.Bug %] 257351</a>)</li>
- <li>Some flag mails didn't specify who the requestee was.
+ <li>Some flag mails didn't specify who the requestee was.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=379787">[% terms.Bug %] 379787</a>)</li>
<li>Instead of throwing real errors, <kbd>collectstats.pl</kbd> would
just say that it couldn't find <code>ThrowUserError</code>.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=380709">[% terms.Bug %] 380709</a>)</li>
<li>Logging into [% terms.Bugzilla %] from the home page works again
- with IIS5.
+ with IIS5.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=364008">[% terms.Bug %] 364008</a>)</li>
<li>If you were using SMTP for sending email, sometimes emails would
be missing the <code>Date</code> header.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=304999">[% terms.Bug %] 304999</a>).</li>
<li>In the XML-RPC WebService, <code>B<!-- -->ug.legal_values</code> now
- correctly returns values for custom fields if you request values
+ correctly returns values for custom fields if you request values
for custom fields.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=381737">[% terms.Bug %] 381737</a>)</li>
<li>The "[% terms.Bug %]-Writing Guidelines" page has been shortened
every SMTP session to your web server's error log, to help with
debugging issues with SMTP.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=384497">[% terms.Bug %] 384497</a>)</li>
- <li>If you are a "global watcher" (you get all mails from every
+ <li>If you are a "global watcher" (you get all mails from every
[%+ terms.bug %]), you can now see that in your Email Preferences.
(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=365302">[% terms.Bug %] 365302</a>)</li>
<li>The Status and Resolution of [% terms.bugs %] are now correctly
<h3 id="v30_req_perl">Perl</h3>
<ul>
- <li>Perl <span class="req_new">v<strong>5.8.0</strong></span> (non-Windows
+ <li>Perl <span class="req_new">v<strong>5.8.0</strong></span> (non-Windows
platforms)</li>
<li>Perl v<strong>5.8.1</strong> (Windows platforms)</li>
</ul>
<td>Date::Format</td> <td>2.21</td>
</tr>
<tr>
- <td>DBI</td>
+ <td>DBI</td>
<td class="req_new">1.41</td>
</tr>
<tr>
<td>Template</td> <td>2.12</td>
</tr>
<tr>
- <td class="req_new">Email::Send</td>
+ <td class="req_new">Email::Send</td>
<td class="req_new">2.00</td>
</tr>
<tr>
- <td>Email::MIME</td>
+ <td>Email::MIME</td>
<td>1.861</td>
</tr>
<tr>
- <td class="req_new">Email::MIME::Modifier</td>
+ <td class="req_new">Email::MIME::Modifier</td>
<td class="req_new">1.442</td>
</tr>
</table>
<th>Enables Feature</th>
</tr>
<tr>
- <td class="req_new">LWP::UserAgent</td>
- <td class="req_new">(Any)</td>
+ <td class="req_new">LWP::UserAgent</td>
+ <td class="req_new">(Any)</td>
<td>Automatic Update Notifications</td>
</tr>
<tr>
- <td>Template::Plugin::GD::Image</td>
- <td>(Any)</td>
+ <td>Template::Plugin::GD::Image</td>
+ <td>(Any)</td>
<td>Graphical Reports</td>
</tr>
<tr>
- <td>GD::Graph</td>
- <td>(Any)</td>
+ <td>GD::Graph</td>
+ <td>(Any)</td>
<td>Graphical Reports</td>
</tr>
<tr>
- <td>GD::Text</td>
- <td>(Any)</td>
+ <td>GD::Text</td>
+ <td>(Any)</td>
<td>Graphical Reports</td>
</tr>
<tr>
- <td>GD</td>
- <td>1.20</td>
+ <td>GD</td>
+ <td>1.20</td>
<td>Graphical Reports, New Charts, Old Charts</td>
</tr>
<tr>
- <td class="req_new">Email::MIME::Attachment::Stripper</td>
- <td class="req_new">(Any)</td>
+ <td class="req_new">Email::MIME::Attachment::Stripper</td>
+ <td class="req_new">(Any)</td>
<td>Inbound Email</td>
</tr>
<tr>
- <td class="req_new">Email::Reply</td>
- <td class="req_new">(Any)</td>
+ <td class="req_new">Email::Reply</td>
+ <td class="req_new">(Any)</td>
<td>Inbound Email</td>
</tr>
<tr>
- <td>Net::LDAP</td>
- <td>(Any)</td>
+ <td>Net::LDAP</td>
+ <td>(Any)</td>
<td>LDAP Authentication</td>
</tr>
<tr>
- <td>HTML::Parser</td>
- <td>3.40</td>
+ <td>HTML::Parser</td>
+ <td>3.40</td>
<td>More HTML in Product/Group Descriptions</td>
</tr>
<tr>
- <td>HTML::Scrubber</td>
- <td>(Any)</td>
+ <td>HTML::Scrubber</td>
+ <td>(Any)</td>
<td>More HTML in Product/Group Descriptions</td>
</tr>
<tr>
- <td>XML::Twig</td>
- <td>(Any)</td>
+ <td>XML::Twig</td>
+ <td>(Any)</td>
<td>Move [% terms.Bugs %] Between Installations</td>
</tr>
<tr>
- <td>MIME::Parser</td>
- <td>5.406</td>
+ <td>MIME::Parser</td>
+ <td>5.406</td>
<td>Move [% terms.Bugs %] Between Installations</td>
</tr>
<tr>
- <td>Chart::Base</td>
- <td>1.0</td>
+ <td>Chart::Base</td>
+ <td>1.0</td>
<td>New Charts, Old Charts</td>
</tr>
<tr>
- <td>Image::Magick</td>
- <td>(Any)</td>
+ <td>Image::Magick</td>
+ <td>(Any)</td>
<td>Optionally Convert BMP Attachments to PNGs</td>
</tr>
<tr>
- <td>PatchReader</td>
- <td>0.9.4</td>
+ <td>PatchReader</td>
+ <td>0.9.4</td>
<td>Patch Viewer</td>
</tr>
<tr>
- <td class="req_new">SOAP::Lite</td>
- <td class="req_new">(Any)</td>
+ <td class="req_new">SOAP::Lite</td>
+ <td class="req_new">(Any)</td>
<td>XML-RPC Interface</td>
</tr>
<tr>
- <td class="req_new">mod_perl2</td>
- <td class="req_new">1.999022</td>
+ <td class="req_new">mod_perl2</td>
+ <td class="req_new">1.999022</td>
<td>mod_perl</td>
</tr>
<tr>
- <td> CGI</td>
- <td>3.11</td>
+ <td> CGI</td>
+ <td>3.11</td>
<td>mod_perl</td>
</tr>
</table>
<li><a href="#v30_feat_ui">User Interface Improvements</a></li>
<li><a href="#v30_feat_xml">XML-RPC Interface</a></li>
<li><a href="#v30_feat_skin">Skins</a></li>
- <li><a href="#v30_feat_sbu">Unchangeable Fields Appear
+ <li><a href="#v30_feat_sbu">Unchangeable Fields Appear
Unchangeable</a></li>
<li><a href="#v30_feat_et">All Emails in Templates</a></li>
<li><a href="#v30_feat_df">No More Double-Filed [% terms.Bugs %]</a></li>
<li><a href="#v30_feat_cc">Default CC List for Components</a></li>
<li><a href="#v30_feat_emi">File/Modify [% terms.Bugs %] By Email</a></li>
- <li><a href="#v30_feat_gw">Users Who Get All [% terms.Bug %]
+ <li><a href="#v30_feat_gw">Users Who Get All [% terms.Bug %]
Notifications</a></li>
<li><a href="#v30_feat_utf8">Improved UTF-8 Support</a></li>
<li><a href="#v30_feat_upda">Automatic Update Notification</a></li>
<h3 id="v30_feat_sq">Shared Saved Searches</h3>
<p>Users can now choose to "share" their saved searches
- with a certain group. That group will then be able to
+ with a certain group. That group will then be able to
"subscribe" to those searches, and have them appear
in their footer.</p>
unsubscribe from any particular search, if they want.)</p>
<p>In order to allow a user to share their queries, they also
- have to be a member of the group specified in the
+ have to be a member of the group specified in the
<code>querysharegroup</code> parameter.</p>
<p>Users can control their shared and subscribed queries from
<h3 id="v30_feat_afn">Attachments and Flags on New [% terms.Bugs %]</h3>
-<p>You can now add an attachment while you are filing a new
+<p>You can now add an attachment while you are filing a new
[%+ terms.bug %].</p>
<p>You can also set flags on the [% terms.bug %] and on attachments, while
<ul>
<li>There is now navigation and a search box a the <em>top</em> of
each page, in addition to the bar at the bottom of the page.</li>
- <li>A re-designed "Format for Printing" page for
+ <li>A re-designed "Format for Printing" page for
[%+ terms.bugs %].</li>
- <li>The layout of <kbd>show_bug.cgi</kbd> (the [% terms.bug %] editing
+ <li>The layout of <kbd>show_bug.cgi</kbd> (the [% terms.bug %] editing
page) has been changed, and the attachment table has been redesigned.</li>
</ul>
protocol. It can be accessed by external applications by going
to the <kbd>xmlrpc.cgi</kbd> on your installation.</p>
-<p>Documentation can be found in the
- <a href="[% docs_urlbase FILTER html %]api/">[% terms.Bugzilla %]
+<p>Documentation can be found in the
+ <a href="[% docs_urlbase FILTER html %]api/">[% terms.Bugzilla %]
API Docs</a>, in the various <kbd>Bugzilla::WebService</kbd> modules.</p>
<h3 id="v30_feat_skin">Skins</h3>
<h3 id="v30_feat_sbu">Unchangeable Fields Appear Unchangeable</h3>
-<p>As long as you are logged in, when viewing [% terms.abug %], if you
- cannot change a field, it will not look like you can change it. That
+<p>As long as you are logged in, when viewing [% terms.abug %], if you
+ cannot change a field, it will not look like you can change it. That
is, the value will just appear as plain text.</p>
<h3 id="v30_feat_et">All Emails in Templates</h3>
<h3 id="v30_feat_df">No More Double-Filed [% terms.Bugs %]</h3>
-<p>Users of [% terms.Bugzilla %] will sometimes accidentally submit
- [%+ terms.abug %] twice, either by going back in their web browser,
- or just by refreshing a page. In the past, this could file the same
- [%+ terms.bug %] twice (or even three times) in a row, irritating
+<p>Users of [% terms.Bugzilla %] will sometimes accidentally submit
+ [%+ terms.abug %] twice, either by going back in their web browser,
+ or just by refreshing a page. In the past, this could file the same
+ [%+ terms.bug %] twice (or even three times) in a row, irritating
developers and confusing users.</p>
-<p>Now, if you try to submit [% terms.abug %] twice from the same screen
- (by going back or by refreshing the page), [% terms.Bugzilla %] will warn
+<p>Now, if you try to submit [% terms.abug %] twice from the same screen
+ (by going back or by refreshing the page), [% terms.Bugzilla %] will warn
you about what you're doing, before it actually submits the duplicate
[%+ terms.bug %].</p>
when you log in if there is a new release of [% terms.Bugzilla %]
available to download.</p>
-<p>You can control these notifications by changing the
+<p>You can control these notifications by changing the
<kbd>upgrade_notification</kbd> parameter.</p>
<p>If your [% terms.Bugzilla %] installation is on a machine that needs to go
<p>Firefox 2 users and Internet Explorer 7 users will be presented
with the option to add [% terms.Bugzilla %] to their search bar.
- This uses the
+ This uses the
<a href="page.cgi?id=quicksearch.html">QuickSearch syntax</a>.</p>
<h3 id="v30_feat_other">Other Enhancements and Changes</h3>
<li>In comments, quoted text (lines that start with <kbd>></kbd>)
will be a different color from normal text.</li>
<li>There is now a user preference that will add you to the CC list
- of any [% terms.bug %] you modify. Note that it's <strong>on</strong>
+ of any [% terms.bug %] you modify. Note that it's <strong>on</strong>
by default.</li>
- <li>[% terms.Bugs %] can now be filed with an initial state of
+ <li>[% terms.Bugs %] can now be filed with an initial state of
<kbd>ASSIGNED</kbd>, if you are in the <kbd>editbugs</kbd> group.</li>
<li>By default, comment fields will zoom large when you are typing in them,
and become small when you move out of them. You can disable this
in your user preferences.</li>
<li>You can hide obsolete attachments on [% terms.abug %] by clicking
"Hide Obsolete" at the bottom of the attachment table.</li>
- <li>If [% terms.abug %] has flags set, and you move it to a different
- product that has flags with the same name, the flags will be
+ <li>If [% terms.abug %] has flags set, and you move it to a different
+ product that has flags with the same name, the flags will be
preserved.</li>
<li>You now can't request a flag to be set by somebody who can't set it
([% terms.Bugzilla %] will throw an error if you try).</li>
<li>Many new headers have been added to outbound [% terms.Bugzilla %]
[%+ terms.bug %] emails: <code>X-Bugzilla-Status</code>,
<code>X-Bugzilla-Priority</code>, <code>X-Bugzilla-Assigned-To</code>,
- <code>X-Bugzilla-Target-Milestone</code>, and
+ <code>X-Bugzilla-Target-Milestone</code>, and
<code>X-Bugzilla-Changed-Fields</code>, <code>X-Bugzilla-Who</code>.
You can look at an email to get an idea of what they contain.</li>
<li>In addition to the old <code>X-Bugzilla-Reason</code> email header
which tells you why you got an email, if you got an email because
- you were watching somebody, there is now an
+ you were watching somebody, there is now an
<code>X-Bugzilla-Watch-Reason</code> header that tells you who you
were watching and what role they had.</li>
- <li>If you hover your mouse over a full URL (like
- <code>http://bugs.mycompany.com/show_bug.cgi?id=1212</code>) that
- links to [% terms.abug %], you will see the title of the
+ <li>If you hover your mouse over a full URL (like
+ <code>http://bugs.mycompany.com/show_bug.cgi?id=1212</code>) that
+ links to [% terms.abug %], you will see the title of the
[%+ terms.bug %]. Of course, this only works for [% terms.bugs %] in your
[%+ terms.Bugzilla %] installation.</li>
<li>If your installation has user watching enabled, you will now see
the users that you can remove from your watch-list as a multi-select
box, much like the current CC list. (Previously it was just a text
box.)</li>
- <li>When a user creates their own account in [% terms.Bugzilla %], the
+ <li>When a user creates their own account in [% terms.Bugzilla %], the
account is now not actually created until they verify their email
address by clicking on a link that is emailed to them.</li>
<li>You can change [% terms.abug %]'s resolution without reopening it.</li>
- <li>When you view the dependency tree on [% terms.abug %], resolved
+ <li>When you view the dependency tree on [% terms.abug %], resolved
[%+ terms.bugs %] will be hidden by default. (In previous versions,
resolved [% terms.bugs %] were shown by default.)</li>
- <li>When viewing [% terms.bug %] activity, fields that hold [% terms.bug %]
+ <li>When viewing [% terms.bug %] activity, fields that hold [% terms.bug %]
numbers (such as "Blocks") will have the [% terms.bug %] numbers
displayed as links to those [% terms.bugs %].</li>
<li>When viewing the "Keywords" field in [% terms.abug %] list,
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=69621">
[%- terms.Bug %] 69621</a>: If you rename or remove a keyword that is
in use on [% terms.bugs %], you will need to rebuild the "keyword cache"
- by running <a href="sanitycheck.cgi">sanitycheck.cgi</a> and choosing
- the option to rebuild the cache when it asks. Otherwise keywords may
+ by running <a href="sanitycheck.cgi">sanitycheck.cgi</a> and choosing
+ the option to rebuild the cache when it asks. Otherwise keywords may
not show up properly in search results.</li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=99215">
- [%- terms.Bug %] 99215</a>: Flags are not protected by "mid-air
+ [%- terms.Bug %] 99215</a>: Flags are not protected by "mid-air
collision" detection. Nor are any attachment changes.</li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=89822">
- [%- terms.Bug %] 89822</a>: When changing multiple [% terms.bugs %] at
+ [%- terms.Bug %] 89822</a>: When changing multiple [% terms.bugs %] at
the same time, there is no "mid-air collision" protection.</li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=276230">
- [%- terms.Bug %] 276230</a>: The support for restricting access to
- particular Categories of New Charts is not complete. You should treat
+ [%- terms.Bug %] 276230</a>: The support for restricting access to
+ particular Categories of New Charts is not complete. You should treat
the 'chartgroup' Param as the only access mechanism available.<br>
- However, charts migrated from Old Charts will be restricted to
+ However, charts migrated from Old Charts will be restricted to
the groups that are marked MANDATORY for the corresponding Product.
- There is currently no way to change this restriction, and the
+ There is currently no way to change this restriction, and the
groupings will not be updated if the group configuration
for the Product changes.</li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=370370">
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=361149">
[%- terms.Bug %] 361149</a>: If you are using Perl 5.8.0, you may
get a lot of warnings in your Apache error_log about "deprecated
- pseudo-hashes." These are harmless--they are a b[%# fool test %]ug in
+ pseudo-hashes." These are harmless--they are a b[%# fool test %]ug in
Perl 5.8.0. Perl 5.8.1 and later do not have this problem.</li>
- <li>[% terms.Bugzilla %] 3.0rc1 allowed custom field column names in
+ <li>[% terms.Bugzilla %] 3.0rc1 allowed custom field column names in
the database to be mixed-case. [% terms.Bugzilla %] 3.0 only allows
lowercase column names. It will fix any column names that you have
made mixed-case, but if you have custom fields that previously were
<h3>3.0.5</h3>
-<p>[% terms.Bugzilla %] contains one security fix for
+<p>[% terms.Bugzilla %] contains one security fix for
<a href="[% docs_urlbase FILTER html %]api/importxml.html">importxml.pl</a>.
- For details, see the
+ For details, see the
<a href="https://www.bugzilla.org/security/2.22.4/">Security Advisory</a>.</p>
<h3>3.0.4</h3>
<p>[% terms.Bugzilla %] 3.0 had three security issues that have been
fixed in this release: one minor information leak, one hole only
exploitable by an admin or using <code>email_in.pl</code>, and one in an
- uncommonly-used template. For details, see the
+ uncommonly-used template. For details, see the
<a href="https://www.bugzilla.org/security/2.20.4/">Security Advisory</a>.</p>
<h2 id="v30_upgrading">How to Upgrade From An Older Version</h2>
<ul>
<li>If you upgrade by CVS, there are several .cvsignore files
- that are now in CVS instead of being locally created by
+ that are now in CVS instead of being locally created by
<kbd>checksetup.pl</kbd>. This means that you will have to
delete those files when CVS tells you there's a conflict, and
then run <kbd>cvs update</kbd> again.</li>
<h3>Steps For Upgrading</h3>
-<p>Once you have read the notes above, see the
- <a href="[% docs_urlbase FILTER html %]upgrade.html">Upgrading
+<p>Once you have read the notes above, see the
+ <a href="[% docs_urlbase FILTER html %]upgrade.html">Upgrading
documentation</a> for instructions on how to upgrade.</p>
<h2 id="v30_code_changes">Code Changes Which May Affect Customizations</h2>
<h3 id="v30_code_hooks">Hooks!</h3>
-<p>[% terms.Bugzilla %] now supports a code hook mechanism. See the
- documentation for
+<p>[% terms.Bugzilla %] now supports a code hook mechanism. See the
+ documentation for
<a href="[% docs_urlbase FILTER html %]api/Bugzilla/Hook.html">Bugzilla::Hook</a>
for more details.</p>
written! Let us know on the <a href="https://lists.bugzilla.org/cgi-bin/mj_wwwusr?func=lists-long-full&extra=developers">developers@bugzilla.org</a>
mailing list if you write a plugin.</p>
-<p>If you need more hooks, please
+<p>If you need more hooks, please
<a href="https://www.bugzilla.org/developers/reporting_bugs.html">File a b<!-- -->ug</a>!</p>
<h3 id="v30_code_api">API Documentation</h3>
Its code is now in various modules. Each function went to the module
that was appropriate for it.</p>
-<p>Usually we filed [% terms.abug %] in
+<p>Usually we filed [% terms.abug %] in
<a href="https://bugzilla.mozilla.org">bugzilla.mozilla.org</a> for
each function we moved. You can search there for the old name of
the function, and that should get you the information about what
<strong>gone</strong>. Instead, we now use DBI for all database
interaction.</p>
-<p>For more information about how to use
- <a href="http://search.cpan.org/perldoc?DBI">DBI</a> with
- [%+ terms.Bugzilla %], see the
+<p>For more information about how to use
+ <a href="http://search.cpan.org/perldoc?DBI">DBI</a> with
+ [%+ terms.Bugzilla %], see the
<a href="https://www.bugzilla.org/docs/developer.html#sql-sendreceive">Developer's
Guide Section About DBI</a></p>
<p>The <kbd>Bugzilla::Auth</kbd> family of modules have been completely
re-written. For details on how the new structure of authentication,
- read the
+ read the
<a href="[% docs_urlbase FILTER html %]api/Bugzilla/Auth.html">Bugzilla::Auth
API docs</a>.</p>
<h3 id="v30_code_obj">Bugzilla::Object</h3>
-<p>There is a new base class for most of our objects,
+<p>There is a new base class for most of our objects,
<a href="[% docs_urlbase FILTER html %]api/Bugzilla/Object.html">Bugzilla::Object</a>.
- It makes it really easy to create new objects based on things that are
+ It makes it really easy to create new objects based on things that are
in the database.</p>
<h3 id="v30_code_req">Bugzilla->request-cache</h3>
<a href="[% docs_urlbase FILTER html %]api/checksetup.html">checksetup
documentation</a> and <a href="https://bugzilla.mozilla.org/showdependencytree.cgi?id=277502&hide_resolved=0">[% terms.Bugzilla %]
[%+ terms.bug %] 277502</a> for details.</li>
- <li>Instead of <kbd>UserInGroup()</kbd>, all of [% terms.Bugzilla %] now
+ <li>Instead of <kbd>UserInGroup()</kbd>, all of [% terms.Bugzilla %] now
uses <kbd>Bugzilla->user->in_group</kbd></li>
<li>mod_perl doesn't like dependency loops in modules, so we now have
a test for that detects dependency loops in modules when you run
<li><kbd>Bugzilla::BugMail::MessageToMTA()</kbd> has moved into its
own module, along with other mail-handling code, called
<kbd>Bugzilla::Mailer</kbd></li>
- <li>The <kbd>CheckCanChangeField()</kbd> subroutine in
+ <li>The <kbd>CheckCanChangeField()</kbd> subroutine in
<kbd>process_bug.cgi</kbd> has been moved to <kbd>Bugzilla::Bug</kbd>,
and is now a method of [% terms.abug %] object.</li>
<li>The code that used to be in the <kbd>global/banner.html.tmpl</kbd>
<h2 id="v30_previous">Release Notes For Previous Versions</h2>
<p>Release notes for versions of [% terms.Bugzilla %] for versions
- prior to 3.0 are only available in text format:
+ prior to 3.0 are only available in text format:
<a href="[% docs_urlbase FILTER remove('html/$') FILTER html %]rel_notes.txt">Release Notes for [% terms.Bugzilla %] 2.22
and Earlier</a>.</p>
[% '</span>' IF db_new %]
</li>
<li><strong>perl module:</strong>
- [%+ m.dbd.module FILTER html %]
+ [%+ m.dbd.module FILTER html %]
[% '<span class="req_new">' IF dbd_new %]v[% m.dbd.version FILTER html %]
[% '</span>' IF dbd_new %]</li>
</ul>
[% FOREACH req = reqs %]
<tr>
<td [% ' class="req_new"' IF new.contains(req.package) %]>
- [%- req.module FILTER html %]</td>
- <td [% ' class="req_new"' IF updated.contains(req.package)
+ [%- req.module FILTER html %]</td>
+ <td [% ' class="req_new"' IF updated.contains(req.package)
OR new.contains(req.package) %]>
[%- IF req.version == 0 %]
(Any)
[%- req.version FILTER html %]
[% END %]
</td>
- [% IF include_feature %]
+ [% IF include_feature %]
<td>[% req.feature.join(', ') FILTER html %]</td>
[% END %]
</tr>
[% INCLUDE global/header.html.tmpl title = "sudo: User Impersonation" %]
<p>
- [%+ terms.Bugzilla %] includes the ability to have one user impersonate
-another, in something called a <i>sudo session</i>, so long as the person
+ [%+ terms.Bugzilla %] includes the ability to have one user impersonate
+another, in something called a <i>sudo session</i>, so long as the person
doing the impersonating has the appropriate privileges.
</p>
<p>
- While a session is in progress, [% terms.Bugzilla %] will act as if the
+ While a session is in progress, [% terms.Bugzilla %] will act as if the
impersonated user is doing everything. This is especially useful for testing,
- and for doing critical work when the impersonated user is unavailable. The
- impersonated user will receive an email from [% terms.Bugzilla %] when the
+ and for doing critical work when the impersonated user is unavailable. The
+ impersonated user will receive an email from [% terms.Bugzilla %] when the
session begins; they will not be told anything else.
</p>
<p>
- To use this feature, you must be a member of the appropriate group. The group
- includes all administrators by default. Other users, and members of other
- groups, can be given access to this feature on a case-by-case basis. To
- request access, contact the maintainer of this installation:
+ To use this feature, you must be a member of the appropriate group. The group
+ includes all administrators by default. Other users, and members of other
+ groups, can be given access to this feature on a case-by-case basis. To
+ request access, contact the maintainer of this installation:
<a href="mailto:[% Param("maintainer") %]">
[%- Param("maintainer") %]</a>.
</p>
<p>
- If you would like to be protected from impersonation, you should contact the
- maintainer of this installation to see if that is possible. People with
+ If you would like to be protected from impersonation, you should contact the
+ maintainer of this installation to see if that is possible. People with
access to this feature are protected automatically.
</p>
<p id="message">
[% IF user.in_group('bz_sudoers') %]
- You are a member of the <b>bz_sudoers</b> group. You may use this
+ You are a member of the <b>bz_sudoers</b> group. You may use this
feature to impersonate others.
[% ELSE %]
- You are not a member of an appropriate group. You may not use this
+ You are not a member of an appropriate group. You may not use this
feature.
[% END %]
[% IF user.in_group('bz_sudo_protect') %]
<br>
- You are a member of the <b>bz_sudo_protect</b> group. Other people will
+ You are a member of the <b>bz_sudo_protect</b> group. Other people will
not be able to use this feature to impersonate you.
[% END %]
</p>
[% colsepchar %][% label FILTER csv %]
[% END %]
[%# The data, which is in the correct format for GD, is conceptually the wrong
- # way round for CSV output. So, we need to invert it here, which is why
+ # way round for CSV output. So, we need to invert it here, which is why
# these loops aren't just plain FOREACH.
#%]
[% i = 0 %]
[% j = j + 1 %]
[% END %]
[% i = i + 1 %]
-
-[% END %]
+
+[% END %]
#
# Contributor(s): Gervase Markham <gerv@gerv.net>
#%]
-
+
[%# INTERFACE:
#%]
[% DEFAULT width = 600
- height = 350
+ height = 350
%]
[% time = time FILTER time('%Y-%m-%d %H:%M:%S') FILTER html %]
-[% PROCESS global/header.html.tmpl
+[% PROCESS global/header.html.tmpl
title = "Chart"
%]
<a href="[% sizeurl %]&width=[% width %]&height=
[% height + 100 %]">Taller</a><br>
<a href="[% sizeurl %]&width=[% width - 100 %]&height=
- [% height %]">Thinner</a> *
+ [% height %]">Thinner</a> *
<a href="[% sizeurl %]&width=[% width + 100 %]&height=
[% height %]">Fatter</a> <br>
<a href="[% sizeurl %]&width=[% width %]&height=
[% height - 100 %]">Shorter</a><br>
</p>
-
+
<p>
<a href="chart.cgi?
[% imagebase FILTER html %]&ctype=csv&action=plot">CSV</a> |
- <a href="chart.cgi?[% imagebase FILTER html %]&action=assemble">Edit
+ <a href="chart.cgi?[% imagebase FILTER html %]&action=assemble">Edit
this chart</a>
</p>
-
+
</div>
[% PROCESS global/footer.html.tmpl %]
[% FILTER null;
x_label_skip = (30 * chart.data.0.size / width);
-
+
graph.set(x_label => x_label,
y_label => y_label,
- y_tick_number => 8,
+ y_tick_number => 8,
y_max_value => chart.y_max_value,
x_label_position => 0.5,
x_labels_vertical => 1,
line_width => 2,
dclrs => ["lred", "lgreen", "lblue", "lyellow",
"lpurple", "lorange", "black", "green",
- "blue", "dpink", "lbrown", "gray",
+ "blue", "dpink", "lbrown", "gray",
"red", "dpurple", "gold", "marine"]);
-
- # Workaround for the fact that set_legend won't take chart.labels directly,
+
+ # Workaround for the fact that set_legend won't take chart.labels directly,
# because chart.labels is an array reference rather than an array.
graph.set_legend(chart.labels.0, chart.labels.1, chart.labels.2,
chart.labels.3, chart.labels.4, chart.labels.5,
chart.labels.9, chart.labels.10, chart.labels.11,
chart.labels.12, chart.labels.13, chart.labels.14,
chart.labels.15);
-
+
graph.plot(chart.data).png | stdout(1);
END;
-%]
# series. Contains details of all series the user can see.
#%]
-[% PROCESS global/header.html.tmpl
+[% PROCESS global/header.html.tmpl
title = "Create Chart"
%]
-[% PROCESS "reports/series-common.html.tmpl"
- donames = 1
+[% PROCESS "reports/series-common.html.tmpl"
+ donames = 1
%]
<script [% script_nonce FILTER none %]>
var cat = document.chartform.category.value;
var subcat = document.chartform.subcategory.value;
var names = series[cat][subcat];
-
+
var namewidget = document.chartform.name;
namewidget.options.length = 0;
namewidget.disabled = false;
namewidget.options[0].selected = true;
-
+
checkNewState();
}
document.addEventListener("DOMContentLoaded", function(event) {
});
});
</script>
-
+
[% gttext = "Grand Total" %]
-<form method="get" action="chart.cgi" name="chartform">
-
+<form method="get" action="chart.cgi" name="chartform">
+
<table cellpadding="2" cellspacing="2" border="0">
[% IF NOT category OR category.size == 0 %]
<tr>
id="action-assemble2">
</noscript>
</td>
-
+
[% PROCESS series_select sel = { name => 'name',
size => 5,
multiple => 1,
# not its name.
value_in_hash => 1 } %]
- <td align="center" valign="middle">
+ <td align="center" valign="middle">
<input type="submit" name="action-add" value="Add To List"
id="action-add"><br>
</td>
<th>Data Set</th>
<th></th>
</tr>
-
+
[%# The external loop has two counters; one which keeps track of where we
# are in the old labels array, and one which keeps track of the new
# indexes for the form elements. They are different if chart.lines has
- # empty slots in it.
+ # empty slots in it.
#%]
[% labelidx = 0 %]
[% newidx = 0 %]
-
+
[% FOREACH line = chart.lines %]
[% IF NOT line %]
[%# chart.lines has an empty slot, so chart.labels will too. We
[% labelidx = labelidx + 1 %]
[% NEXT %]
[% END %]
-
+
[% FOREACH series = line %]
<tr>
[% IF loop.first %]
</td>
<td rowspan="[% line.size %]">
<input type="text" size="20" name="label[% newidx %]"
- value="[% (chart.labels.$labelidx OR series.name)
+ value="[% (chart.labels.$labelidx OR series.name)
FILTER html %]">
</td>
[% END %]
</td>
<td>
- [% series.category FILTER html %] /
+ [% series.category FILTER html %] /
[%+ series.subcategory FILTER html %] /
[%+ series.name FILTER html %]
- <input type="hidden" name="line[% newidx %]"
+ <input type="hidden" name="line[% newidx %]"
value="[% series.series_id %]">
</td>
[% series.subcategory FILTER uri %]%20/%20
[% series.name FILTER uri -%]&series_id=
[% series.series_id %]&remaction=runseries">Run Search</a>
- </td>
+ </td>
</tr>
[% END %]
[% labelidx = labelidx + 1 %]
<tr>
<td valign="bottom" style="text-align: center;">
- <input type="submit" name="action-sum" value="Sum"
+ <input type="submit" name="action-sum" value="Sum"
style="width: 5em;" id="action-sum"><br>
<input type="submit" name="action-remove" value="Remove"
style="width: 5em;" id="action-remove">
</table>
[% ELSE %]
<p><i>None</i></p>
- [% END %]
+ [% END %]
</form>
[% IF user.in_group('editbugs') %]
</select>
<input id="submit_create" type="submit" value="Create a new data set">
</form>
-[% END %]
+[% END %]
[% PROCESS global/footer.html.tmpl %]
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
- # Contributor(s):
+ # Contributor(s):
# Gervase Markham <gerv@gerv.net>
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
[% SET base_args = [] %]
[% FOREACH param = ['maxrows', 'openonly', 'format', 'sortvisible',
- 'changedsince', 'product']
+ 'changedsince', 'product']
%]
[% NEXT IF NOT ${param}.defined %]
[% FOREACH value = ${param} %]
<tr>
[% FOREACH column = columns %]
[% IF column.name == sortby %]
- [%# We add this to the column object so it doesn't affect future
+ [%# We add this to the column object so it doesn't affect future
# iterations of the loop.
#%]
[% column.reverse_sort = reverse ? 0 : 1 %]
[%- display_value('op_sys', bug.op_sys) FILTER html %]
</td>
<td class="target_milestone">
- [% display_value('target_milestone',
+ [% display_value('target_milestone',
bug.target_milestone) FILTER html %]
</td>
<td class="short_desc">[% bug.short_desc FILTER html %]</td>
[% IF product.size %]
[% title = BLOCK %]
- Most Frequently Reported [% terms.Bugs %] for
+ Most Frequently Reported [% terms.Bugs %] for
[%+ product.join(', ') FILTER html %]
[% END %]
[% ELSE %]
<tr>
<td><label for="maxrows">Max rows:</label></td>
<td>
- <input size="4" name="maxrows" id="maxrows"
+ <input size="4" name="maxrows" id="maxrows"
value="[% maxrows FILTER html %]">
</td>
</tr>
<form method="post" action="buglist.cgi" data-no-csrf>
<input type="hidden" name="bug_id" value="[% bug_ids_string FILTER html %]">
- Or just give this to me as a <input type="submit" id="list"
+ Or just give this to me as a <input type="submit" id="list"
value="[% terms.bug %] list">.
(Note: the order may not be the same.)
</form>
</h3>
<p>
- The Most Frequent [% terms.Bugs %] page lists the known open
+ The Most Frequent [% terms.Bugs %] page lists the known open
[%+ terms.bugs %] which are reported most frequently,
counting the number of direct and indirect duplicates of [% terms.bugs %].
This information is provided in order to assist in minimizing
that has already been filed.</li>
<li>If you find your [% terms.bug %] in [% terms.Bugzilla %],
feel free to comment with any new or additional data you may have.</li>
- <li>If you cannot find your problem already documented in
+ <li>If you cannot find your problem already documented in
[%+ terms.Bugzilla %],
<a href="enter_bug.cgi">file a new [% terms.bug %]</a>.</li>
</ul>
[% title = "Edit Series" %]
[% subheader = BLOCK %]
- [% default.category FILTER html %] /
+ [% default.category FILTER html %] /
[%+ default.subcategory FILTER html %] /
[%+ default.name FILTER html %]
[% END %]
[% END %]
<form method="get" action="chart.cgi" name="chartform">
-
- [% PROCESS reports/series.html.tmpl
+
+ [% PROCESS reports/series.html.tmpl
button_name = "Change Data Set" %]
<input type="hidden" name="action" value="alter">
<input type="hidden" name="token"
value="[% issue_hash_token([default.id, default.name]) FILTER html %]">
-
+
[% IF default.series_id %]
<input type="hidden" name="series_id" value="[% default.series_id %]">
[% END %]
</form>
<p>
- <b>Creator</b>:
+ <b>Creator</b>:
[% IF default.creator %]
<a href="mailto:[% default.creator.email FILTER html %]">
[% default.creator.email FILTER html %]</a>
</p>
<p>
- <a href="query.cgi?[% default.query FILTER html %]">View
+ <a href="query.cgi?[% default.query FILTER html %]">View
series search parameters</a> |
<a href="buglist.cgi?cmdtype=dorem&namedcmd=
[% default.category FILTER uri %]-
line_width => 2,
dclrs => ["lred", "lgreen", "lblue", "lyellow",
"lpurple", "lorange", "black", "green",
- "blue", "dpink", "lbrown", "gray",
+ "blue", "dpink", "lbrown", "gray",
"red", "dpurple", "gold", "marine"]);
# Workaround for the fact that set_legend won't take row_names directly,
[% FILTER null;
USE graph = GD.Graph.pie(width, height);
-
+
graph.set(title => col_field_disp,
pie_height => 20,
suppress_angle => 2,
start_angle => 180);
-
+
graph.plot(data.0).png | stdout(1);
END;
-%]
# tbl_field: string. Name of the field being plotted as tables.
# col_names: array. List of values for the field being plotted as columns.
# row_names: array. List of values for the field being plotted as rows.
- # data: <depends on format>. Data to plot. Only data.$tbl is accessed.
+ # data: <depends on format>. Data to plot. Only data.$tbl is accessed.
# tbl: Name of a hash in data which is the table to be plotted.
#%]
]
};
this.myDataTable = new YAHOO.widget.DataTable("tabular_report_container_
- [% tbl FILTER js %]", myColumnDefs, this.myDataSource,
+ [% tbl FILTER js %]", myColumnDefs, this.myDataSource,
{formatRow: totalRowFormatter});
});
</script>
[% FOREACH col = col_names %]
[% col_totals.$col = 0 %]
[% NEXT IF col == "" %]
-
+
[% col_idx = 1 - col_idx %]
<th class="[% classes.$row_idx.$col_idx %]">
[% PROCESS value_display value = col field = col_field %]
<tbody>
[% FOREACH row = row_names %]
[% row_total = 0 %]
-
+
[% row_idx = 1 - row_idx %]
<tr>
<td class="[% classes.$row_idx.$col_idx %]" align="right">
[% row_total = row_total + data.$tbl.$col.$row %]
[% NEXT IF col == "" %]
[% col_totals.$col = (col_totals.$col || 0) + data.$tbl.$col.$row %]
-
+
[% col_idx = 1 - col_idx %]
<td class="[% classes.$row_idx.$col_idx %]" align="center">
[% IF data.$tbl.$col.$row AND data.$tbl.$col.$row > 0 %]
.
[% END %]
</td>
- [% END %]
+ [% END %]
<td class="ttotal" align="right">
<a href="[% urlbase %]&
[% row_field FILTER uri %]=[% row FILTER uri %]
</td>
[% FOREACH col = col_names %]
[% NEXT IF col == "" %]
-
+
<td class="ttotal" align="center">
<a href="[% urlbase %]&
[% col_field FILTER uri %]=[% col FILTER uri %]
</tbody>
</table>
</div>
-
+
</td>
</tr>
</table>
[% disp_value = value FILTER email %]
[% END %]
[% disp_value FILTER html FILTER replace('^ $',' ') %]
-[% END %]
+[% END %]
#%]
[% PROCESS "global/field-descs.none.tmpl" %]
[% FOREACH tbl = tbl_names %]
- [% PROCESS "reports/report-table.csv.tmpl" %]
+ [% PROCESS "reports/report-table.csv.tmpl" %]
-[% END %]
+[% END %]
#
# Contributor(s): Gervase Markham <gerv@gerv.net>
#%]
-
+
[%# INTERFACE:
# col_field: string. Name of the field being plotted as columns.
# row_field: string. Name of the field being plotted as rows.
# tbl_field: string. Name of the field being plotted as tables.
# tbl_names: array. List of values for the field being plotted as tables.
# time: integer. Seconds since the epoch.
- # data: <depends on format>. Data to plot.
+ # data: <depends on format>. Data to plot.
# format: string. Format of the individual reports.
# width: integer. For image charts, height of the image.
# height: integer. For image charts, width of the image.
#%]
[% DEFAULT width = 600
- height = 350
+ height = 350
%]
[% IF min_width AND width < min_width %]
[% switchbase = switchbase FILTER html %]
[% title = BLOCK %]
- Report:
+ Report:
[% IF tbl_field %]
[% tbl_field_disp FILTER html %]
[% END %]
[% time = time FILTER time('%Y-%m-%d %H:%M:%S') FILTER html %]
-[% PROCESS global/header.html.tmpl
+[% PROCESS global/header.html.tmpl
style = "
.t1 { background-color: #ffffff } /* white */
.t2 { background-color: #dfefff } /* light blue */
<div align="center">
- [% FOREACH tbl = tbl_names %]
+ [% FOREACH tbl = tbl_names %]
[% IF tbl == "-total-" %]
[% tbl_disp = "Total" %]
[% ELSE %]
[% IF tbl %]
<h2>[% tbl_disp FILTER email FILTER html %]</h2>
[% END %]
-
+
[% imageurl = BLOCK %]report.cgi?[% imagebase FILTER html %]&format=
[% format FILTER uri %]&ctype=png&action=plot&
[% IF tbl_field %]
[% END %]
[% END %]
[% END %]
- [% END %]width=[% width %]&height=[% height %]
+ [% END %]width=[% width %]&height=[% height %]
[% END %]
-
+
<img alt="Graphical report results" src="[% imageurl %]"
width="[% width %]" height="[% height %]">
[% END %]
<br>
- [% END %]
+ [% END %]
<table>
<tr>
{ name => "line", description => "Line" },
{ name => "table", description => "Table" } ] %]
- [% formaturl = "report.cgi?$switchbase&width=$width" _
+ [% formaturl = "report.cgi?$switchbase&width=$width" _
"&height=$height&action=wrap" %]
[% FOREACH other_format = formats %]
[% NEXT IF other_format.name == "pie" AND row_field AND col_field %]
<a href="[% formaturl %]&format=[% other_format.name %]">
[% END %]
[% other_format.description FILTER html %]
- [% "</a>" UNLESS other_format.name == format %] |
+ [% "</a>" UNLESS other_format.name == format %] |
[% END %]
- <a href="[% formaturl %]&ctype=csv&format=table">CSV</a>
+ <a href="[% formaturl %]&ctype=csv&format=table">CSV</a>
</td>
-
+
[% IF format != "table" %]
<td>
<a href="[% sizeurl %]&width=[% width %]&height=
[% height + 100 %]">Taller</a><br>
<a href="[% sizeurl %]&width=[% width - 100 %]&height=
- [% height %]">Thinner</a> *
+ [% height %]">Thinner</a> *
<a href="[% sizeurl %]&width=[% width + 100 %]&height=
[% height %]">Fatter</a> <br>
<a href="[% sizeurl %]&width=[% width %]&height=
<p>
[% IF format == "table" %]
- <a href="query.cgi?[% switchbase %]&format=report-table">Edit
+ <a href="query.cgi?[% switchbase %]&format=report-table">Edit
this report</a>
[% ELSE %]
<a href="query.cgi?[% switchbase %]&chart_format=
</a>
[% END %]
</p>
-
+
</div>
[% PROCESS global/footer.html.tmpl %]
[%# INTERFACE:
# donames: boolean. True if we have a multi-select for names as well as
- # categories and subcategories.
+ # categories and subcategories.
# category: hash (keyed by category) of hashes (keyed by subcategory) of
# hashes (keyed by name), with value being the series_id of the
# series. Contains details of all series the user can see.
"[%+ s FILTER js %]" : {
[% IF donames %]
[% FOREACH n = category.$c.$s.keys.sort %]
- "[% n FILTER js %]":
+ "[% n FILTER js %]":
[% category.$c.$s.$n FILTER js %][% ", " UNLESS loop.last %]
[% END %]
[% END %]
}[% ", " UNLESS loop.last %]
[% END %]
}[% ", " UNLESS loop.last %]
-[% END %]
+[% END %]
};
[%# This function takes necessary action on selection of a category %]
function catSelected() {
var cat = document.chartform.category.value;
var subcats = series[cat];
-
+
var subcatwidget = document.chartform.subcategory;
-
+
subcatwidget.options.length = 0;
var i = 0;
-
+
for (x in subcats) {
subcatwidget.options[i] = new Option(x, x);
i++;
}
-
+
[% IF newtext %]
subcatwidget.options[i] = new Option("[% newtext FILTER js %]", "");
- [% END %]
+ [% END %]
subcatwidget.disabled = false;
subcatwidget.options[0].selected = true;
-
+
if (document.chartform.action[1]) {
[%# On the query form, select the right radio button. %]
document.chartform.action[1].checked = true;
}
-
- checkNewState();
+
+ checkNewState();
}
[%# This function updates the disabled state of the two "new" textboxes %]
function checkNewState() {
var fm = document.chartform;
if (fm.newcategory) {
- fm.newcategory.disabled =
- (fm.category.value != "" ||
+ fm.newcategory.disabled =
+ (fm.category.value != "" ||
fm.action[1] && fm.action[1].checked == false);
- fm.newsubcategory.disabled =
- (fm.subcategory.value != "" ||
+ fm.newsubcategory.disabled =
+ (fm.subcategory.value != "" ||
fm.action[1] && fm.action[1].checked == false);
}
}
[%# INTERFACE:
# default: hash. Defaults for category, subcategory, name etc.
- # button_name: string. What the button will say.
+ # button_name: string. What the button will say.
# category: hash (keyed by category) of hashes (keyed by subcategory) of
# hashes (keyed by name), with value being the series_id of the
# series. Contains details of all series the user can see.
#%]
[% PROCESS "reports/series-common.html.tmpl"
- newtext = "New (name below)"
+ newtext = "New (name below)"
%]
<script [% script_nonce FILTER none %]>
size => 5 } %]
<td valign="top" name="name">
- <input type="text" name="name" maxlength="64"
+ <input type="text" name="name" maxlength="64"
value="[% default.name.0 FILTER html %]" size="25">
</td>
<span style="font-weight: bold;"> day(s)</span><br>
[%# Change 'admin' here and in Series.pm, or remove the check
completely, if you want to change who can make series public. %]
- [% IF user.in_group('admin') %]
+ [% IF user.in_group('admin') %]
<input type="checkbox" name="public"
[%+ "checked='checked'" IF default.public.0 %]>
<span style="font-weight: bold;">Visible to all<br>
- (within group restrictions)</span>
+ (within group restrictions)</span>
[% END %]
</td>
</tr>
<tr>
<td>
- <input type="text" style="width: 100%" name="newcategory"
+ <input type="text" style="width: 100%" name="newcategory"
maxlength="64" value="[% default.newcategory.0 FILTER html %]">
</td>
<td></td>
<td>
<input type="text" style="width: 100%" name="newsubcategory"
- maxlength="64"
+ maxlength="64"
value="[% default.newsubcategory.0 FILTER html %]">
</td>
<td></td>
<tr>
<th></th>
<td>
- <label><input type="radio" name="do_union" value="0"
+ <label><input type="radio" name="do_union" value="0"
[% 'checked="checked"' IF !cgi.param('do_union') %]>AND *</label>
- <label><input type="radio" name="do_union" value="1"
+ <label><input type="radio" name="do_union" value="1"
[% 'checked="checked"' IF cgi.param('do_union') %]>OR *</label>
</td>
<td colspan="3"></td>
</tr>
</table>
- <p>(* The logical conjunction/disjunction between the requester
+ <p>(* The logical conjunction/disjunction between the requester
and the requestee)</p>
</form>
[% BLOCK start_new_table %]
[% buglist = {} %]
- <h3>[% column_headers.$group_field %]:
+ <h3>[% column_headers.$group_field %]:
[%+ (request.$group_field || "None") FILTER email FILTER html %]</h3>
<table class="requests" cellspacing="0" cellpadding="4" border="1">
<tr>
# type_selected: used by the free text to indicate which type of text
# search was selected for a particular field
#%]
-
+
[% SWITCH field.type %]
[% CASE [ constants.FIELD_TYPE_FREETEXT,
- constants.FIELD_TYPE_TEXTAREA,
+ constants.FIELD_TYPE_TEXTAREA,
constants.FIELD_TYPE_UNKNOWN ] %]
[% INCLUDE "bug/field-label.html.tmpl"
field = field
%]
[% INCLUDE "search/type-select.html.tmpl"
name = field.name _ "_type",
- types = types,
+ types = types,
selected = type_selected
- %]
- <input name="[% field.name FILTER html %]"
+ %]
+ <input name="[% field.name FILTER html %]"
id="[% field.name FILTER html %]" size="40"
[% IF autofocus %] autofocus[% END %]
[% IF onchange %] onchange="[% onchange FILTER html %]"[% END %]
- value="[% value FILTER html %]">
+ value="[% value FILTER html %]">
[% CASE constants.FIELD_TYPE_KEYWORDS %]
[% INCLUDE "bug/field-label.html.tmpl"
field = field
%]
[% INCLUDE "search/type-select.html.tmpl"
name = field.name _ "_type",
- types = types,
+ types = types,
selected = type_selected
%]
<input name="[% field.name FILTER html %]"
tag_name = "span"
editable = 1
%]
- from <input name="[% field.name FILTER html %]from"
- id="[% field.name FILTER html %]"
+ from <input name="[% field.name FILTER html %]from"
+ id="[% field.name FILTER html %]"
size="10" maxlength="10"
- value="[% value.0 FILTER html %]"
+ value="[% value.0 FILTER html %]"
onchange="updateCalendarFromField(this);[% onchange FILTER html %]">
<button type="button" class="calendar_button"
id="button_calendar_[% field.name FILTER html %]"
onclick="showCalendar('[% field.name FILTER js %]')">
<span>Calendar</span>
</button>
- <span id="con_calendar_[% field.name FILTER html %]"></span>
- to <input name="[% field.name FILTER html %]to"
+ <span id="con_calendar_[% field.name FILTER html %]"></span>
+ to <input name="[% field.name FILTER html %]to"
id="[% field.name FILTER html %]to" size="10" maxlength="10"
- value="[% value.1 FILTER html %]"
+ value="[% value.1 FILTER html %]"
onchange="updateCalendarFromField(this);[% onchange FILTER html %]">
<button type="button" class="calendar_button"
id="button_calendar_[% field.name FILTER html %]to"
<span>Calendar</span>
</button>
<small>(YYYY-MM-DD or relative dates)</small>
-
+
<span id="con_calendar_[% field.name FILTER html %]to"></span>
<script [% script_nonce FILTER none %]>
createCalendar('[% field.name FILTER js %]');
createCalendar('[% field.name FILTER js %]to');
</script>
- [% CASE [ constants.FIELD_TYPE_SINGLE_SELECT,
+ [% CASE [ constants.FIELD_TYPE_SINGLE_SELECT,
constants.FIELD_TYPE_MULTI_SELECT ] %]
- <div id="container_[% field.name FILTER html %]" class="search_field_grid">
+ <div id="container_[% field.name FILTER html %]" class="search_field_grid">
[% INCLUDE "bug/field-label.html.tmpl"
field = field
editable = 1
tag_name = "span"
%]
- <select name="[% field.name FILTER html%]"
- id="[% field.name FILTER html %]"
+ <select name="[% field.name FILTER html%]"
+ id="[% field.name FILTER html %]"
[% IF onchange %] onchange="[% onchange FILTER html %]"[% END %]
multiple="multiple" size="9">
[% legal_values = ${field.name} %]
[% END %]
[% FOREACH current_value = legal_values %]
[% IF current_value.id %]
- [%# current_value is a hash instead of a value which
+ [%# current_value is a hash instead of a value which
only applies for Resolution really, everywhere else current_value
is just the value %]
[% v = current_value.name OR '---' -%]
[%- FOREACH item = user.get_selectable_products(c.id) -%]
[%- IF item.components.size -%]
[%- sep FILTER js %]'[% item.name FILTER js %]'
- [%- sep = ',' -%]
+ [%- sep = ',' -%]
[%- END -%]
[%- END -%] ];
[% nclass = nclass+1 %]
[% END %]
/*
- * doOnSelectProduct determines which selection should get updated
+ * doOnSelectProduct determines which selection should get updated
*
* - selectmode = 0 - init
* selectmode = 1 - classification selected
*/
function doOnSelectProduct(selectmode) {
var f = document.forms[queryform];
- var milestone = (typeof(f.target_milestone) == "undefined" ?
+ var milestone = (typeof(f.target_milestone) == "undefined" ?
null : f.target_milestone);
if (selectmode == 0) {
// If there is no classification selected, give us a chance to fill
// Hide the Advanced Fields by default, unless the user has a cookie
// that specifies otherwise.
-// ▸ and ▾ are both utf8 escaped characters for right
+// ▸ and ▾ are both utf8 escaped characters for right
// and down facing arrows respectivly.
TUI_alternates['history_query'] = '►';
TUI_alternates['people_query'] = '►';
field = bug_fields.short_desc
types = query_types
value = default.short_desc.0
- type_selected = default.short_desc_type.0
+ type_selected = default.short_desc_type.0
accesskey = "s"
autofocus = 1
%]
</div>
[%# *** Classification Product Component *** %]
-
+
[% Hook.process('before_selects_top') %]
[% IF Param('useclassification') %]
[% fake_classfication = { name => bug_fields.classification.name,
type => constants.FIELD_TYPE_SINGLE_SELECT } %]
- [% INCLUDE "search/field.html.tmpl"
+ [% INCLUDE "search/field.html.tmpl"
field => fake_classfication
accesskey => "c"
- onchange => "doOnSelectProduct(1);"
+ onchange => "doOnSelectProduct(1);"
value => default.classification
- %]
+ %]
[% END %]
-[% INCLUDE "search/field.html.tmpl"
+[% INCLUDE "search/field.html.tmpl"
field => bug_fields.product
accesskey => "p"
- onchange => "doOnSelectProduct(2);"
+ onchange => "doOnSelectProduct(2);"
value => default.product
%]
-[% INCLUDE "search/field.html.tmpl"
+[% INCLUDE "search/field.html.tmpl"
field => bug_fields.component
accesskey => "m"
value => default.component
%]
-[% INCLUDE "search/field.html.tmpl"
+[% INCLUDE "search/field.html.tmpl"
field => bug_fields.bug_status
accesskey => "a"
value => default.bug_status
%]
-[% INCLUDE "search/field.html.tmpl"
+[% INCLUDE "search/field.html.tmpl"
field => bug_fields.resolution
- accesskey => "r"
+ accesskey => "r"
value => default.resolution
%]
<a href="javascript:TUI_toggle_class('information_query')">
Detailed [% terms.Bug %] Information
</a>
- <span class="section_help">Narrow results by the following fields:
- [%+ field_descs.longdesc FILTER html %]s, [%+ field_descs.bug_file_loc FILTER html %],
+ <span class="section_help">Narrow results by the following fields:
+ [%+ field_descs.longdesc FILTER html %]s, [%+ field_descs.bug_file_loc FILTER html %],
[% IF Param('usestatuswhiteboard') %] [%+ field_descs.status_whiteboard FILTER html %], [%+ END %]
[% IF use_keywords %] [%+ field_descs.keywords FILTER html %], [%+ END %]
[% IF user.is_timetracker %] [%+ field_descs.deadline FILTER html %], [%+ END %]
- [% terms.Bug %] Numbers, [%+ field_descs.version FILTER html %],
+ [% terms.Bug %] Numbers, [%+ field_descs.version FILTER html %],
[% IF Param('usetargetmilestone') %] [%+ field_descs.target_milestone FILTER html %], [%+ END %]
- [% field_descs.bug_severity FILTER html %], [%+ field_descs.priority FILTER html %], [%+ field_descs.rep_platform FILTER html %],
+ [% field_descs.bug_severity FILTER html %], [%+ field_descs.priority FILTER html %], [%+ field_descs.rep_platform FILTER html %],
[%+ field_descs.op_sys FILTER html %]
</span>
</div>
{ field => bug_fields.longdesc, accesskey => 'c' },
{ field => bug_fields.bug_file_loc, accesskey => 'u' },
{ field => bug_fields.status_whiteboard, accesskey => 'w' },
- { field => bug_fields.keywords, accesskey => 'k',
- qtypes => ['allwords', 'anywords', 'nowords', 'regexp', 'notregexp'] }
+ { field => bug_fields.keywords, accesskey => 'k',
+ qtypes => ['allwords', 'anywords', 'nowords', 'regexp', 'notregexp'] }
] %]
[% Hook.process('before_freetext_fields') %]
-
+
[%# loop through a bunch of free text fields and print out their text stuff %]
[% FOREACH field_container = freetext_fields %]
- [% NEXT IF field_container.field.name == 'status_whiteboard'
- AND NOT Param('usestatuswhiteboard')
+ [% NEXT IF field_container.field.name == 'status_whiteboard'
+ AND NOT Param('usestatuswhiteboard')
%]
- [% NEXT IF field_container.field.name == 'keywords'
+ [% NEXT IF field_container.field.name == 'keywords'
AND NOT use_keywords
%]
<div class="search_field_row">
[% type = field_container.field.name _ "_type" %]
- [% INCLUDE "search/field.html.tmpl"
+ [% INCLUDE "search/field.html.tmpl"
field => field_container.field
types => field_container.qtypes || query_types
accesskey => field_container.accesskey
[%# Deadline %]
[% IF user.is_timetracker %]
<div class="search_field_row">
- [% INCLUDE "search/field.html.tmpl"
- field = bug_fields.deadline
+ [% INCLUDE "search/field.html.tmpl"
+ field = bug_fields.deadline
accesskey = "l"
value = [ default.deadlinefrom.0, default.deadlineto.0 ]
%]
value="[% default.bug_id.0 FILTER html %]" size="20">
<div class="field_help">(comma-separated list)</div>
</div>
- should be
+ should be
<select name="bug_id_type" id="bug_id_type">
<option value="anyexact"[% " selected" IF default.bug_id_type.0 == "anyexact" %]>only included in</option>
<option value="nowords"[% " selected" IF default.bug_id_type.0 == "nowords" %]>excluded from</option>
</div>
[% Hook.process('after_freetext_fields') %]
-
+
[%# *** Status Resolution Severity Priority Hardware OS *** %]
<div>
[% Hook.process('before_selects_bottom') %]
[% fake_version_field = { name => bug_fields.version.name,
type => constants.FIELD_TYPE_SINGLE_SELECT }%]
- [% INCLUDE "search/field.html.tmpl"
+ [% INCLUDE "search/field.html.tmpl"
field => fake_version_field
value => default.version
- %]
+ %]
[% IF Param('usetargetmilestone') %]
- [% fake_target_milestone_field = { name => bug_fields.target_milestone.name ,
+ [% fake_target_milestone_field = { name => bug_fields.target_milestone.name ,
type => constants.FIELD_TYPE_SINGLE_SELECT } %]
- [% INCLUDE "search/field.html.tmpl"
+ [% INCLUDE "search/field.html.tmpl"
field => fake_target_milestone_field
value => default.target_milestone
%]
[% END %]
- [% INCLUDE "search/field.html.tmpl"
+ [% INCLUDE "search/field.html.tmpl"
field => bug_fields.bug_severity
- accesskey=> "v"
+ accesskey=> "v"
value => default.bug_severity
%]
- [% INCLUDE "search/field.html.tmpl"
+ [% INCLUDE "search/field.html.tmpl"
field => bug_fields.priority
accesskey => "i"
value => default.priority
- %]
- [% INCLUDE "search/field.html.tmpl"
- field => bug_fields.rep_platform
+ %]
+ [% INCLUDE "search/field.html.tmpl"
+ field => bug_fields.rep_platform
accesskey =>"h"
value => default.rep_platform
- %]
- [% INCLUDE "search/field.html.tmpl"
- field => bug_fields.op_sys
+ %]
+ [% INCLUDE "search/field.html.tmpl"
+ field => bug_fields.op_sys
accesskey =>"o"
value => default.op_sys
- %]
+ %]
[% Hook.process('after_selects_bottom') %]
</div>
</div>
[% PROCESS role_types field = { count => n, name => "emailassigned_to",
label=> "the ${terms.Bug} ${field_descs.assigned_to}" } %]
[% PROCESS role_types field = { count => n, name => "emailreporter",
- label=> "the ${field_descs.reporter}" } %]
+ label=> "the ${field_descs.reporter}" } %]
[% IF Param('useqacontact') %]
- [% PROCESS role_types field = { count => n, name => "emailqa_contact",
+ [% PROCESS role_types field = { count => n, name => "emailqa_contact",
label=> "the ${field_descs.qa_contact}" } %]
[% END %]
- [% PROCESS role_types field = { count => n, name => "emailcc",
+ [% PROCESS role_types field = { count => n, name => "emailcc",
label=> "a ${field_descs.cc} list member" } %]
- [% PROCESS role_types field = { count => n, name => "emaillongdesc",
+ [% PROCESS role_types field = { count => n, name => "emaillongdesc",
label=> " a ${field_descs.commenter}" } %]
[% PROCESS role_types field = { count => n, name => "emailbug_mentor",
label => " a ${field_descs.bug_mentor}" } %]
</li>
<li>
<label for="chfieldfrom">between:</label>
- <input name="chfieldfrom" id="chfieldfrom" size="10"
- value="[% default.chfieldfrom.0 FILTER html %]" onchange="updateCalendarFromField(this)">
+ <input name="chfieldfrom" id="chfieldfrom" size="10"
+ value="[% default.chfieldfrom.0 FILTER html %]" onchange="updateCalendarFromField(this)">
<button type="button" class="calendar_button"
id="button_calendar_chfieldfrom"
onclick="showCalendar('chfieldfrom')"><span>Calendar</span></button>
- and
+ and
<div id="con_calendar_chfieldfrom"></div>
- <input name="chfieldto" size="10" id="chfieldto"
- value="[% default.chfieldto.0 || "Now" FILTER html %]"
+ <input name="chfieldto" size="10" id="chfieldto"
+ value="[% default.chfieldto.0 || "Now" FILTER html %]"
onchange="updateCalendarFromField(this)">
<button type="button" class="calendar_button"
id="button_calendar_chfieldto"
createCalendar('chfieldfrom');
createCalendar('chfieldto');
</script>
- </li>
+ </li>
</ul>
[%############################################################################%]
[%# INTERFACE:
# (incomplete!)
# ...
- # known_name: string. Possibly known stored name for the query being
+ # known_name: string. Possibly known stored name for the query being
# edited. This value is just passed through in a
# hidden field.
#%]
-
-
+
+
[% PROCESS global/variables.none.tmpl %]
[%# This is not necessary for English templates, but useful for localizers. %]
</select>
</p>
-<p>
+<p>
<input type="submit" id="[% button_name FILTER html %]"
value="[% button_name FILTER html %]">
[% IF known_name %]
</label>
</p>
[% END %]
-
+
[% IF userdefaultquery %]
<p>
<a href="query.cgi?nukedefaultquery=1&token=
var queryform = "chartform";
[% END %]
-[% PROCESS global/header.html.tmpl
+[% PROCESS global/header.html.tmpl
title = "Create New Data Set"
generate_api_token = 1
onload = "doOnSelectProduct(0);"
- javascript = js_data
+ javascript = js_data
javascript_urls = [ "js/util.js", "js/productform.js", "js/TUI.js", "js/field.js" ]
style_urls = [ "skins/standard/search_form.css" ]
doc_section = "reporting.html#charts-new-series"
%]
<form method="get" action="chart.cgi" name="chartform">
-
+
[% PROCESS search/form.html.tmpl %]
<p>
<input type="submit" id="action-search" name="action-search" value="Run Search">
to see which [% terms.bugs %] would be included in this data set.
</p>
-
+
<h3>Data Set Parameters</h3>
-
-[% PROCESS reports/series.html.tmpl
+
+[% PROCESS reports/series.html.tmpl
button_name = "Create Data Set" %]
<input type="hidden" name="action" value="create">
<input type="hidden" name="token" value="[% issue_hash_token(['create-series']) FILTER html %]">
catSelected();
checkNewState();
</script>
-
+
<hr>
[% PROCESS "search/boolean-charts.html.tmpl" %]
[% PROCESS global/variables.none.tmpl %]
-[% PROCESS global/header.html.tmpl
+[% PROCESS global/header.html.tmpl
title = "Instant Search"
generate_api_token = 1
javascript_urls = [ 'extensions/GuidedBugEntry/web/js/products.js',
[% PROCESS "search/search-report-select.html.tmpl" %]
<p>
- Choose one or more fields as your axes, and then refine your set of
+ Choose one or more fields as your axes, and then refine your set of
[% terms.bugs %] using the rest of the form.
</p>
<select name="[% name FILTER html %]">
<option value=""><none></option>
-
+
[% FOREACH field = report_columns.keys.sort %]
[% NEXT IF field == "classification" AND !Param('useclassification') %]
[% NEXT IF field == "target_milestone" AND !Param('usetargetmilestone') %]
[% NEXT IF field == "qa_contact" AND !Param('useqacontact') %]
- <option value="[% field FILTER html %]"
+ <option value="[% field FILTER html %]"
[% " selected" IF default.$name.0 == field %]>
[% field_descs.$field || field FILTER html %]</option>
[% END %]
[% PROCESS "search/search-report-select.html.tmpl" %]
<p>
- Choose one or more fields as your axes, and then refine your set of
+ Choose one or more fields as your axes, and then refine your set of
[% terms.bugs %] using the rest of the form.
</p>
[% PROCESS global/variables.none.tmpl %]
-[% PROCESS global/header.html.tmpl
+[% PROCESS global/header.html.tmpl
title = "Simple Search"
style_urls = [ "skins/standard/search_form.css" ]
%]
[% WRAPPER search/tabs.html.tmpl %]
<p>
-Find a specific [% terms.bug %] by entering words that describe it.
+Find a specific [% terms.bug %] by entering words that describe it.
[% terms.Bugzilla %] will search [% terms.bug %] descriptions and comments
for those words and return a list of matching [% terms.bugs %] sorted
by relevance.
{ name = 'closed', label = "Closed" },
{ name = 'all', label = "All" } ] %]
[% FOREACH status = statuses %]
- <option value="__[% status.name %]__"
+ <option value="__[% status.name %]__"
[% " selected" IF default.bug_status.0 == "__${status.name}__" %]>
[% status.label FILTER html %]
</option>
<tr>
<td></td>
<td>
-
+
[% IF Param('search_allow_no_criteria') %]
<input type="submit" id="search" value="Search">
[% ELSE %]
{ name => 'specific', label => "Simple Search",
link => "query.cgi?format=specific" },
{ name => 'advanced', label => "Advanced Search",
- link => "query.cgi?format=advanced" },
- { name => 'google', label => 'Google Search',
+ link => "query.cgi?format=advanced" },
+ { name => 'google', label => 'Google Search',
link => "query.cgi?format=google" } ]
current_tab_name = query_format || format || "advanced"
%]
# University Foundation. Portions created by the Initial Developer are
# Copyright (C) 2008 the Initial Developer. All Rights Reserved.
#
- # Contributor(s):
+ # Contributor(s):
# Max Kanat-Alexander <mkanat@bugzilla.org>
#%]
[% PROCESS "global/field-descs.none.tmpl" %]
-
+
<select name="[% name FILTER html %]" title="Search type"
class="[% class FILTER css_class_quote %]">
[% FOREACH type = types %]
<tr>
<th align="left">ID</th>
<th align="left">Sev</th>
- <th align="left">Pri</th>
+ <th align="left">Pri</th>
<th align="left">Plt</th>
<th align="left">Assignee</th>
<th align="left">Status</th>
%]
[% FOREACH option = options %]
- <option value="[% option.0 %]"
+ <option value="[% option.0 %]"
[%- IF val == option.0 +%] selected[% END %]>
[%- option.1 -%]
</option>
%]
[% FOREACH option = options %]
- <option value="[% option.0 %]"
+ <option value="[% option.0 %]"
[%- IF val == option.0 +%] selected[% END %]>
[%- option.1 -%]
</option>
#!/bin/bash
-#
+#
# bugzilla-push This starts, stops, and restarts the Bugzilla push
# daemon, which manages syncronising bugzilla.mozilla.org and
# third party bugzilla installs.
# specify it here.
OPTIONS=""
-# You can also override the configuration by creating a
+# You can also override the configuration by creating a
# /etc/sysconfig/bugzilla-queue file so that you don't
-# have to edit this script.
+# have to edit this script.
if [ -r /etc/sysconfig/$NAME ]; then
. /etc/sysconfig/$NAME
fi
#default_privs = nobody
# INTERNET HOST AND DOMAIN NAMES
-#
+#
# The myhostname parameter specifies the internet hostname of this
# mail system. The default is to use the fully-qualified domain name
# from gethostname(). $myhostname is used as a default value for many
#mydomain = domain.tld
# SENDING MAIL
-#
+#
# The myorigin parameter specifies the domain that locally-posted
# mail appears to come from. The default is to append $myhostname,
# which is fine for small sites. If you run a domain with multiple
#
# - You define $mydestination domain recipients in files other than
# /etc/passwd, /etc/aliases, or the $virtual_alias_maps files.
-# For example, you define $mydestination domain recipients in
+# For example, you define $mydestination domain recipients in
# the $virtual_mailbox_maps files.
#
# - You redefine the local delivery agent in master.cf.
# The right-hand side of the lookup tables is conveniently ignored.
# In the left-hand side, specify a bare username, an @domain.tld
# wild-card, or specify a user@domain.tld address.
-#
+#
#local_recipient_maps = unix:passwd.byname $alias_maps
#local_recipient_maps = proxy:unix:passwd.byname $alias_maps
#local_recipient_maps =
# clients in the same IP subnetworks as the local machine.
# On Linux, this does works correctly only with interfaces specified
# with the "ifconfig" command.
-#
+#
# Specify "mynetworks_style = class" when Postfix should "trust" SMTP
# clients in the same IP class A/B/C networks as the local machine.
# Don't do this with a dialup site - it would cause Postfix to "trust"
# your entire provider's network. Instead, specify an explicit
# mynetworks list by hand, as described below.
-#
+#
# Specify "mynetworks_style = host" when Postfix should "trust"
# only the local machine.
-#
+#
#mynetworks_style = class
#mynetworks_style = subnet
#mynetworks_style = host
# - from "untrusted" clients to destinations that match $relay_domains or
# subdomains thereof, except addresses with sender-specified routing.
# The default relay_domains value is $mydestination.
-#
+#
# In addition to the above, the Postfix SMTP server by default accepts mail
# that Postfix is final destination for:
# - destinations that match $inet_interfaces or $proxy_interfaces,
# - destinations that match $virtual_alias_domains,
# - destinations that match $virtual_mailbox_domains.
# These destinations do not need to be listed in $relay_domains.
-#
+#
# Specify a list of hosts or domains, /file/name patterns or type:name
# lookup tables, separated by commas and/or whitespace. Continue
# long lines by starting the next line with whitespace. A file name
# The right-hand side of the lookup tables is conveniently ignored.
# In the left-hand side, specify an @domain.tld wild-card, or specify
# a user@domain.tld address.
-#
+#
#relay_recipient_maps = hash:/etc/postfix/relay_recipients
# INPUT RATE CONTROL
# flow control. This feature is turned on by default, although it
# still needs further development (it's disabled on SCO UNIX due
# to an SCO bug).
-#
+#
# A Postfix process will pause for $in_flow_delay seconds before
# accepting a new message, when the message arrival rate exceeds the
# message delivery rate. With the default 100 SMTP server process
# limit, this limits the mail inflow to 100 messages a second more
# than the number of messages delivered per second.
-#
+#
# Specify 0 to disable the feature. Valid delays are 0..10.
-#
+#
#in_flow_delay = 1s
# ADDRESS REWRITING
# On systems with NIS, the default is to search the local alias
# database, then the NIS alias database. See aliases(5) for syntax
# details.
-#
+#
# If you change the alias database, run "postalias /etc/aliases" (or
# wherever your system stores the mail alias file), or simply run
# "newaliases" to build the necessary DBM or DB file.
#
#home_mailbox = Mailbox
#home_mailbox = Maildir/
-
+
# The mail_spool_directory parameter specifies the directory where
# UNIX-style mailboxes are kept. The default setting depends on the
# system type.
#
# NOTE: if you use this feature for accounts not in the UNIX password
# file, then you must update the "local_recipient_maps" setting in
-# the main.cf file, otherwise the SMTP server will reject mail for
+# the main.cf file, otherwise the SMTP server will reject mail for
# non-UNIX accounts with "User unknown in local recipient table".
#
#mailbox_transport = lmtp:unix:/var/lib/imap/socket/lmtp
# can be used to take advantage of the single instance message store
# capability of Cyrus. The concurrency limit can be used to control
# how many simultaneous LMTP sessions will be permitted to the Cyrus
-# message store.
+# message store.
#
# To use the old cyrus deliver program you have to set:
#mailbox_transport = cyrus
#
# NOTE: if you use this feature for accounts not in the UNIX password
# file, then you must update the "local_recipient_maps" setting in
-# the main.cf file, otherwise the SMTP server will reject mail for
+# the main.cf file, otherwise the SMTP server will reject mail for
# non-UNIX accounts with "User unknown in local recipient table".
#
#fallback_transport = lmtp:unix:/var/lib/imap/socket/lmtp
#
# NOTE: if you use this feature for accounts not in the UNIX password
# file, then you must specify "local_recipient_maps =" (i.e. empty) in
-# the main.cf file, otherwise the SMTP server will reject mail for
+# the main.cf file, otherwise the SMTP server will reject mail for
# non-UNIX accounts with "User unknown in local recipient table".
#
#luser_relay = $user@other.host
#luser_relay = $local@other.host
#luser_relay = admin+$local
-
+
# JUNK MAIL CONTROLS
-#
+#
# The controls listed here are only a very small subset. The file
# SMTPD_ACCESS_README provides an overview.
# deferred mail, so that mail can be flushed quickly with the SMTP
# "ETRN domain.tld" command, or by executing "sendmail -qRdomain.tld".
# See the ETRN_README document for a detailed description.
-#
+#
# The fast_flush_domains parameter controls what destinations are
# eligible for this service. By default, they are all domains that
# this server is willing to relay mail to.
-#
+#
#fast_flush_domains = $relay_domains
# SHOW SOFTWARE VERSION OR NOT
# too many are run at the same time. With SMTP deliveries, 10
# simultaneous connections to the same domain could be sufficient to
# raise eyebrows.
-#
+#
# Each message delivery transport has its XXX_destination_concurrency_limit
# parameter. The default is $default_destination_concurrency_limit for
# most delivery transports. For the local delivery agent the default is 2.
# INSTALL-TIME CONFIGURATION INFORMATION
#
# The following parameters are used when installing a new Postfix version.
-#
+#
# sendmail_path: The full pathname of the Postfix sendmail command.
# This is the Sendmail-compatible mail posting interface.
-#
+#
sendmail_path = /usr/sbin/sendmail.postfix
# newaliases_path: The full pathname of the Postfix newaliases command.
# mailq_path: The full pathname of the Postfix mailq command. This
# is the Sendmail-compatible mail queue listing command.
-#
+#
mailq_path = /usr/bin/mailq.postfix
# setgid_group: The group for mail submission and queue management