diff options
Diffstat (limited to 'template/en/default/bug')
-rw-r--r-- | template/en/default/bug/create/comment-guided.txt.tmpl | 52 | ||||
-rw-r--r-- | template/en/default/bug/edit.html.tmpl | 1188 |
2 files changed, 1240 insertions, 0 deletions
diff --git a/template/en/default/bug/create/comment-guided.txt.tmpl b/template/en/default/bug/create/comment-guided.txt.tmpl new file mode 100644 index 0000000..66220ec --- /dev/null +++ b/template/en/default/bug/create/comment-guided.txt.tmpl @@ -0,0 +1,52 @@ +[%# The contents of this file are subject to the Mozilla Public + # License Version 1.1 (the "License"); you may not use this file + # except in compliance with the License. You may obtain a copy of + # the License at http://www.mozilla.org/MPL/ + # + # Software distributed under the License is distributed on an "AS + # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + # implied. See the License for the specific language governing + # rights and limitations under the License. + # + # The Original Code is the Bugzilla Bug Tracking System. + # + # The Initial Developer of the Original Code is Netscape Communications + # Corporation. Portions created by Netscape are + # Copyright (C) 1998 Netscape Communications Corporation. All + # Rights Reserved. + # + # Contributor(s): Gervase Markham <gerv@gerv.net> + #%] +[%# INTERFACE: + # This template has no interface. + # + # Form variables from a bug submission (i.e. the fields on a template from + # enter_bug.cgi) can be access via Bugzilla.cgi.param. It can be used to + # pull out various custom fields and format an initial Description entry + # from them. + #%] +[% USE Bugzilla %] +[% cgi = Bugzilla.cgi %] + +[%+ cgi.param("comment") IF cgi.param("comment") %] + +[%+ IF cgi.param("reproducible") != "Choose one..." -%] +Reproducible: [%+ cgi.param("reproducible") %] +[% END %] + +[% IF !(cgi.param("reproduce_steps").match('^1\.\s*2\.\s*3\.\s*$') || cgi.param("reproduce_steps").match('^\s*$')) %] +Steps to Reproduce: +[%+ cgi.param("reproduce_steps") %] +[% END %] + +[% IF cgi.param("actual_results") -%] +Actual Results: +[%+ cgi.param("actual_results") %] +[% END %] + +[% IF cgi.param("expected_results") %] +Expected Results: +[%+ cgi.param("expected_results") %] +[% END %] + +[%+ cgi.param("additional_info") %] diff --git a/template/en/default/bug/edit.html.tmpl b/template/en/default/bug/edit.html.tmpl new file mode 100644 index 0000000..dbc23c8 --- /dev/null +++ b/template/en/default/bug/edit.html.tmpl @@ -0,0 +1,1188 @@ +[%# The contents of this file are subject to the Mozilla Public + # License Version 1.1 (the "License"); you may not use this file + # except in compliance with the License. You may obtain a copy of + # the License at http://www.mozilla.org/MPL/ + # + # Software distributed under the License is distributed on an "AS + # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + # implied. See the License for the specific language governing + # rights and limitations under the License. + # + # The Original Code is the Bugzilla Bug Tracking System. + # + # The Initial Developer of the Original Code is Netscape Communications + # Corporation. Portions created by Netscape are + # Copyright (C) 1998 Netscape Communications Corporation. All + # Rights Reserved. + # + # Contributor(s): Gervase Markham <gerv@gerv.net> + # Vaskin Kissoyan <vkissoyan@yahoo.com> + # Max Kanat-Alexander <mkanat@bugzilla.org> + # Frédéric Buclin <LpSolit@gmail.com> + # Olav Vitters <olav@bkor.dhs.org> + # Guy Pyrzak <guy.pyrzak@gmail.com> + # Elliotte Martin <emartin@everythingsolved.com> + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS "global/field-descs.none.tmpl" %] + +[% PROCESS bug/time.html.tmpl %] + + <script type="text/javascript"> + <!-- + + /* Outputs a link to call replyToComment(); used to reduce HTML output */ + function addReplyLink(id, real_id) { + /* XXX this should really be updated to use the DOM Core's + * createElement, but finding a container isn't trivial. + */ + [% IF user.settings.quote_replies.value != 'off' %] + document.write('[<a href="#add_comment" onclick="replyToComment(' + + id + ',' + real_id + '); return false;">reply<' + '/a>]'); + [% END %] + } + + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id) { + var prefix = "(In reply to comment #" + id + ")\n"; + var replytext = ""; + [% IF user.settings.quote_replies.value == 'quoted_reply' %] + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + + /* make sure we split on all newlines -- IE or Moz use \r and \n + * respectively. + */ + text = text.split(/\r|\n/); + + for (var i=0; i < text.length; i++) { + replytext += "> " + text[i] + "\n"; + } + + replytext = prefix + replytext + "\n"; + [% ELSIF user.settings.quote_replies.value == 'simple_reply' %] + replytext = prefix; + [% END %] + + [% IF user.is_insider %] + if (document.getElementById('isprivate_' + real_id).checked) { + document.getElementById('newcommentprivacy').checked = 'checked'; + updateCommentTagControl(document.getElementById('newcommentprivacy'), 'comment'); + } + [% END %] + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + textarea.value += replytext; + + textarea.focus(); + } + + if (typeof Node == 'undefined') { + /* MSIE doesn't define Node, so provide a compatibility object */ + window.Node = { + TEXT_NODE: 3, + ENTITY_REFERENCE_NODE: 5 + }; + } + + /* Concatenates all text from element's childNodes. This is used + * instead of innerHTML because we want the actual text (and + * innerText is non-standard). + */ + function getText(element) { + var child, text = ""; + for (var i=0; i < element.childNodes.length; i++) { + child = element.childNodes[i]; + var type = child.nodeType; + if (type == Node.TEXT_NODE || type == Node.ENTITY_REFERENCE_NODE) { + text += child.nodeValue; + } else { + /* recurse into nodes of other types */ + text += getText(child); + } + } + return text; + } + +[% IF user.is_timetracker %] + var fRemainingTime = [% bug.remaining_time %]; // holds the original value + function adjustRemainingTime() { + // subtracts time spent from remaining time + var new_time; + + // prevent negative values if work_time > fRemainingTime + new_time = + Math.max(fRemainingTime - document.changeform.work_time.value, 0.0); + // get upto 2 decimal places + document.changeform.remaining_time.value = + Math.round(new_time * 100)/100; + } + + function updateRemainingTime() { + // if the remaining time is changed manually, update fRemainingTime + fRemainingTime = document.changeform.remaining_time.value; + } + +[% END %] + + /* Index all classifications so we can keep track of the classification + * for the selected product, which could control field visibility. + */ + var all_classifications = new Array([% bug.choices.product.size %]); + [%- FOREACH product = bug.choices.product %] + all_classifications['[% product.name FILTER js %]'] = ' + [%- product.classification.name FILTER js %]'; + [%- END %] + + //--> + </script> + +<form name="changeform" id="changeform" method="post" action="process_bug.cgi"> + + <input type="hidden" name="delta_ts" value="[% bug.delta_ts %]"> + <input type="hidden" name="longdesclength" value="[% bug.comments.size %]"> + <input type="hidden" name="id" value="[% bug.bug_id %]"> + <input type="hidden" name="token" value="[% issue_hash_token([bug.id, bug.delta_ts]) FILTER html %]"> + + [% PROCESS section_title %] + <table class="edit_form"> + <tr> + [%# 1st Column %] + <td id="bz_show_bug_column_1" class="bz_show_bug_column"> + <table> + [%# *** ID, product, component, status, resolution, Hardware, and OS *** %] + [% PROCESS section_status %] + + [% PROCESS section_spacer %] + + [% PROCESS section_details1 %] + + [% PROCESS section_spacer %] + + [%# *** severity, priority, version and milestone *** %] + [% PROCESS section_details2 %] + + [%# *** assigned to and qa contact *** %] + [% PROCESS section_people %] + + [% PROCESS section_spacer %] + + [% PROCESS section_url_keyword_whiteboard %] + + [% PROCESS section_spacer %] + + [%# *** Dependencies *** %] + [% PROCESS section_dependson_blocks %] + + </table> + </td> + <td> + <div class="bz_column_spacer"> </div> + </td> + [%# 2nd Column %] + <td id="bz_show_bug_column_2" class="bz_show_bug_column"> + <table cellpadding="3" cellspacing="1"> + [%# *** Reported and modified dates *** %] + [% PROCESS section_dates %] + + [% PROCESS section_cclist %] + + [% PROCESS section_spacer %] + + [% PROCESS section_see_also %] + + [% PROCESS section_customfields %] + + [% PROCESS section_spacer %] + + [% Hook.process("after_custom_fields") %] + + [% PROCESS section_flags %] + + </table> + </td> + </tr> + <tr> + <td colspan="3"> + <hr id="bz_top_half_spacer"> + </td> + </tr> + </table> + + <table id="bz_big_form_parts" cellspacing="0" cellpadding="0"><tr> + <td> + [% IF user.is_timetracker %] + [% PROCESS section_timetracking %] + [% END %] + + [%# *** Attachments *** %] + + [% PROCESS attachment/list.html.tmpl + attachments = bug.attachments + bugid = bug.bug_id + num_attachment_flag_types = bug.num_attachment_flag_types + show_attachment_flags = bug.show_attachment_flags + %] + + [% IF user.settings.comment_box_position.value == 'before_comments' %] + [% PROCESS comment_box %] + [% END %] + </td> + <td> + [% PROCESS section_restrict_visibility %] + </td> + </tr></table> + + [%# *** Additional Comments *** %] + <div id="comments"> + [% PROCESS bug/comments.html.tmpl + comments = bug.comments + mode = user.id ? "edit" : "show" + %] + </div> + + [% IF user.settings.comment_box_position.value == 'after_comments' %] + <hr> + [% PROCESS comment_box %] + [% END %] + +</form> + +[%############################################################################%] +[%# Block for the Title (alias and short desc) #%] +[%############################################################################%] + +[% BLOCK section_title %] + [%# That's the main table, which contains all editable fields. %] + <div class="bz_alias_short_desc_container edit_form"> + [% PROCESS commit_button id="_top"%] + <a href="show_bug.cgi?id=[% bug.bug_id %]"> + [%-# %]<b>[% terms.Bug %] [% bug.bug_id FILTER html %]</b> + [%-# %]</a> -<span id="summary_alias_container" class="bz_default_hidden"> + [% IF Param("usebugaliases") %] + [% IF bug.alias != "" %] + (<span id="alias_nonedit_display">[% bug.alias FILTER html %]</span>) + [% END %] + [% END %] + <span id="short_desc_nonedit_display">[% bug.short_desc FILTER quoteUrls(bug) %]</span> + [% IF bug.check_can_change_field('short_desc', 0, 1) || + bug.check_can_change_field('alias', 0, 1) %] + <small class="editme">(<a href="#" id="editme_action">edit</a>)</small> + [% END %] + </span> + + + <div id="summary_alias_input"> + <table id="summary"> + [% IF Param("usebugaliases") %] + <tr> + [% IF bug.check_can_change_field('alias', 0, 1) %] + <td> + <label + for="alias" + title="a name for the + [% terms.bug %] that can be used in place of its ID number, + [%%] e.g. when adding it to a list of dependencies" + >Alias</label>:</td><td> + [% ELSIF bug.alias %] + <td colspan="2">( + [% ELSE %] + <td colspan="2"> + [% END %] + [% PROCESS input inputname => "alias" + size => "20" + maxlength => "20" + no_td => 1 + %][% ")" IF NOT bug.check_can_change_field('alias', 0, 1) + && bug.alias %] + </td> + </tr> + [% END %] + [%# *** Summary *** %] + <tr> + <td> + <label accesskey="s" for="short_desc"><u>S</u>ummary</label>: + </td> + <td> + [% PROCESS input inputname => "short_desc" size => "80" colspan => 2 + maxlength => 255 spellcheck => "true" no_td => 1 %] + </td> + </tr> + </table> + </div> + </div> + <script type="text/javascript"> + hideAliasAndSummary('[% bug.short_desc FILTER js %]', '[% bug.alias FILTER js %]'); + </script> +[% END %] + +[%############################################################################%] +[%# Block for the first table in the "Details" section #%] +[%############################################################################%] + +[% BLOCK section_details1 %] + + [%#############%] + [%# PRODUCT #%] + [%#############%] + <tr> + [% INCLUDE bug/field.html.tmpl + bug = bug, field = bug_fields.product, + override_legal_values = bug.choices.product + desc_url = 'describecomponents.cgi', value = bug.product + editable = bug.check_can_change_field('product', 0, 1) %] + </tr> + + [%# Classification is here so that it can be used in value controllers + # and visibility controllers. It comes after product because + # it uses some javascript that depends on the existence of the + # product field. + #%] + <tr class="bz_default_hidden"> + [% INCLUDE bug/field.html.tmpl + bug = bug field = bug_fields.classification + override_legal_values = bug.choices.classification + value = bug.classification + editable = bug.check_can_change_field('product', 0, 1) %] + </tr> + [%###############%] + [%# Component #%] + [%###############%] + <tr> + [% INCLUDE bug/field.html.tmpl + bug = bug, field = bug_fields.component, value = bug.component + override_legal_values = bug.choices.component + desc_url = "describecomponents.cgi?product=$bug.product" + editable = bug.check_can_change_field('component', 0, 1) + %] + </tr> + <tr> + <td class="field_label"> + <label for="version"><b>Version</b></label>: + </td> + + [% PROCESS select selname => "version" %] + </tr> + [%############%] + [%# PLATFORM #%] + [%############%] + <tr> + <td class="field_label"> + <label for="rep_platform" accesskey="h"><b>Platform</b></label>: + </td> + <td class="field_value"> + [% INCLUDE bug/field.html.tmpl + bug = bug, field = bug_fields.rep_platform, + no_tds = 1, value = bug.rep_platform + editable = bug.check_can_change_field('rep_platform', 0, 1) %] + [%+ INCLUDE bug/field.html.tmpl + bug = bug, field = bug_fields.op_sys, + no_tds = 1, value = bug.op_sys + editable = bug.check_can_change_field('op_sys', 0, 1) %] + <script type="text/javascript"> + assignToDefaultOnChange(['product', 'component']); + </script> + </td> + </tr> + + + +[% END %] + +[%############################################################################%] +[%# Block for the status section #%] +[%############################################################################%] + +[% BLOCK section_status %] + <tr> + <td class="field_label"> + <b><a href="page.cgi?id=fields.html#status">Status</a></b>: + </td> + <td id="bz_field_status"> + <span id="static_bug_status"> + [% display_value("bug_status", bug.bug_status) FILTER html %] + [% IF bug.resolution %] + [%+ display_value("resolution", bug.resolution) FILTER html %] + [% IF bug.dup_id %] + of [% "${terms.bug} ${bug.dup_id}" FILTER bug_link(bug.dup_id) FILTER none %] + [% END %] + [% END %] + [% IF bug.user.canedit || bug.user.isreporter %] + (<a href="#add_comment" + onclick="window.setTimeout(function() { document.getElementById('bug_status').focus(); }, 10)">edit</a>) + [% END %] + </span> + </td> + </tr> +[% END %] + +[%############################################################################%] +[%# Block for the second table in the "Details" section #%] +[%############################################################################%] + +[% BLOCK section_details2 %] + + [%###############################################################%] + [%# Importance (priority and severity) #%] + [%###############################################################%] + <tr> + <td class="field_label"> + <label for="priority" accesskey="i"> + <b><a href="page.cgi?id=fields.html#importance"><u>P</u>riority</a></b></label>: + </td> + <td> + [% INCLUDE bug/field.html.tmpl + bug = bug, field = bug_fields.priority, + no_tds = 1, value = bug.priority + editable = bug.check_can_change_field('priority', 0, 1) %] + <b><a href="page.cgi?id=fields.html#importance"><u>S</u>everity</a></b></label>: + [%+ INCLUDE bug/field.html.tmpl + bug = bug, field = bug_fields.bug_severity, + no_tds = 1, value = bug.bug_severity + editable = bug.check_can_change_field('bug_severity', 0, 1) %] + [% Hook.process('after_importance', 'bug/edit.html.tmpl') %] + </td> + </tr> + + [% IF Param("usetargetmilestone") && bug.target_milestone %] + <tr> + <td class="field_label"> + <label for="target_milestone"> + <a href="page.cgi?id=fields.html#target_milestone"> + Target Milestone</a></label>: + </td> + [% PROCESS select selname = "target_milestone" %] + </tr> + [% END %] + +[% END %] + +[%############################################################################%] +[%# Block for the table in the "People" section #%] +[%############################################################################%] + +[% BLOCK section_people %] + + <tr> + <td class="field_label"> + <b><a href="page.cgi?id=fields.html#assigned_to">Assigned To</a></b>: + </td> + <td> + [% IF bug.check_can_change_field("assigned_to", 0, 1) %] + <div id="bz_assignee_edit_container" class="bz_default_hidden"> + <span> + [% INCLUDE global/user.html.tmpl who = bug.assigned_to %] + (<a href="#" id="bz_assignee_edit_action">edit</a>) + </span> + </div> + <div id="bz_assignee_input"> + [% INCLUDE global/userselect.html.tmpl + id => "assigned_to" + name => "assigned_to" + value => bug.assigned_to.login + classes => ["bz_userfield"] + size => 30 + %] + <br> + <input type="checkbox" id="set_default_assignee" name="set_default_assignee" value="1"> + <label id="set_default_assignee_label" for="set_default_assignee">Reset Assignee to default</label> + </div> + <script type="text/javascript"> + hideEditableField('bz_assignee_edit_container', + 'bz_assignee_input', + 'bz_assignee_edit_action', + 'assigned_to', + '[% bug.assigned_to.login FILTER js %]' ); + initDefaultCheckbox('assignee'); + </script> + [% ELSE %] + [% INCLUDE global/user.html.tmpl who = bug.assigned_to %] + [% END %] + </td> + </tr> + + [% IF Param('useqacontact') %] + <tr> + <td class="field_label"> + <label for="qa_contact" accesskey="q"><b><u>Q</u>A Contact</b></label>: + </td> + <td> + [% IF bug.check_can_change_field("qa_contact", 0, 1) %] + [% IF bug.qa_contact != "" %] + <div id="bz_qa_contact_edit_container" class="bz_default_hidden"> + <span> + <span id="bz_qa_contact_edit_display"> + [% INCLUDE global/user.html.tmpl who = bug.qa_contact %]</span> + (<a href="#" id="bz_qa_contact_edit_action">edit</a>) + </span> + </div> + [% END %] + <div id="bz_qa_contact_input"> + [% INCLUDE global/userselect.html.tmpl + id => "qa_contact" + name => "qa_contact" + value => bug.qa_contact.login + size => 30 + classes => ["bz_userfield"] + emptyok => 1 + %] + <br> + <input type="checkbox" id="set_default_qa_contact" name="set_default_qa_contact" value="1"> + <label for="set_default_qa_contact" id="set_default_qa_contact_label">Reset QA Contact to default</label> + </div> + <script type="text/javascript"> + [% IF bug.qa_contact != "" %] + hideEditableField('bz_qa_contact_edit_container', + 'bz_qa_contact_input', + 'bz_qa_contact_edit_action', + 'qa_contact', + '[% bug.qa_contact.login FILTER js %]'); + [% END %] + initDefaultCheckbox('qa_contact'); + </script> + [% ELSE %] + [% INCLUDE global/user.html.tmpl who = bug.qa_contact %] + [% END %] + </td> + </tr> + [% END %] +[% END %] + +[%############################################################################%] +[%# Block for URL Keyword and Whiteboard #%] +[%############################################################################%] +[% BLOCK section_url_keyword_whiteboard %] +[%# *** URL Whiteboard Keywords *** %] +[% IF Param('useurl') %] + <tr> + <td class="field_label"> + <label for="bug_file_loc" accesskey="u"><b> + [% IF is_safe_url(bug.bug_file_loc) %] + <a href="[% bug.bug_file_loc FILTER html %]"><u>U</u>RL</a> + [% ELSE %] + <u>U</u>RL + [% END %] + [%%]</b></label>: + </td> + <td> + [% IF bug.check_can_change_field("bug_file_loc", 0, 1) %] + <span id="bz_url_edit_container" class="bz_default_hidden"> + [% IF is_safe_url(bug.bug_file_loc) %] + <a href="[% bug.bug_file_loc FILTER html %]" target="_blank" + title="[% bug.bug_file_loc FILTER html %]"> + [% bug.bug_file_loc FILTER truncate(40) FILTER html %]</a> + [% ELSE %] + [% bug.bug_file_loc FILTER html %] + [% END %] + (<a href="#" id="bz_url_edit_action">edit</a>)</span> + [% END %] + <span id="bz_url_input_area"> + [% url_output = PROCESS input no_td=1 inputname => "bug_file_loc" size => "40" colspan => 2 %] + [% IF NOT bug.check_can_change_field("bug_file_loc", 0, 1) + AND is_safe_url(bug.bug_file_loc) %] + <a href="[% bug.bug_file_loc FILTER html %]">[% url_output FILTER none %]</a> + [% ELSE %] + [% url_output FILTER none %] + [% END %] + </span> + [% IF bug.check_can_change_field("bug_file_loc", 0, 1) %] + <script type="text/javascript"> + hideEditableField('bz_url_edit_container', + 'bz_url_input_area', + 'bz_url_edit_action', + 'bug_file_loc', + "[% bug.bug_file_loc FILTER js %]"); + </script> + [% END %] + </td> + </tr> +[% END %] + + [% IF Param('usestatuswhiteboard') %] + <tr> + <td class="field_label"> + <label for="status_whiteboard" accesskey="w"><b><u>W</u>hiteboard</b></label>: + </td> + [% PROCESS input inputname => "status_whiteboard" size => "40" colspan => 2 %] + </tr> + [% END %] + + [% IF use_keywords %] + <tr> + <td class="field_label"> + <label for="keywords" accesskey="k"> + <b><a href="describekeywords.cgi"><u>K</u>eywords</a></b></label>: + </td> + <td class="field_value" colspan="2"> + [% INCLUDE bug/field.html.tmpl + bug = bug, field = bug_fields.keywords, value = bug.keywords + editable = bug.check_can_change_field("keywords", 0, 1), + no_tds = 1 + %] + </td> + </tr> + [% END %] +[% END %] + +[%############################################################################%] +[%# Block for Depends On / Blocks #%] +[%############################################################################%] +[% BLOCK section_dependson_blocks %] + <tr> + [% PROCESS dependencies + dep = { title => "Depends on", fieldname => "dependson" } %] + </tr> + + <tr> + [% PROCESS dependencies accesskey = "b" + dep = { title => "<u>B</u>locks", fieldname => "blocked" } %] + + <tr> + <th> </th> + + <td colspan="2" align="left" id="show_dependency_tree_or_graph"> + Show dependency <a href="showdependencytree.cgi?id=[% bug.bug_id %]&hide_resolved=1">tree</a> + + [% IF Param('webdotbase') %] + / <a href="showdependencygraph.cgi?id=[% bug.bug_id %]">graph</a> + [% END %] + </td> + </tr> +[% END %] + + +[%############################################################################%] +[%# Block for Restricting Visibility #%] +[%############################################################################%] + +[% BLOCK section_restrict_visibility %] + [% RETURN UNLESS bug.groups.size %] + + <div class="bz_group_visibility_section"> + [% inallgroups = 1 %] + [% inagroup = 0 %] + [% emitted_description = 0 %] + + [% FOREACH group = bug.groups %] + [% SET inallgroups = 0 IF NOT group.ingroup %] + [% SET inagroup = 1 IF group.ison %] + + [% NEXT IF group.mandatory %] + + [% IF NOT emitted_description %] + [% emitted_description = 1 %] + <div id="bz_restrict_group_visibility_help"> + <b>Only users in all of the selected groups can view this + [%+ terms.bug %]:</b> + <p class="instructions"> + Unchecking all boxes makes this a more public [% terms.bug %]. + </p> + </div> + [% END %] + + [% IF group.ingroup %] + <input type="hidden" name="defined_groups" + value="[% group.name FILTER html %]"> + [% END %] + + <input type="checkbox" value="[% group.name FILTER html %]" + name="groups" id="group_[% group.bit %]" + [% ' checked="checked"' IF group.ison %] + [% ' disabled="disabled"' IF NOT group.ingroup %]> + <label for="group_[% group.bit %]"> + [%- group.description FILTER html_light %]</label> + <br> + [% END %] + + [% IF emitted_description %] + [% IF NOT inallgroups %] + <p class="instructions">Only members of a group can change the + visibility of [% terms.abug %] for that group.</p> + [% END %] + [% END %] + + [% IF inagroup %] + <div id="bz_enable_role_visibility_help"> + <b>Users in the roles selected below can always view + this [% terms.bug %]:</b> + </div> + <div id="bz_enable_role_visibility"> + <div> + [% user_can_edit_accessible = + bug.check_can_change_field("reporter_accessible", 0, 1) + %] + [% IF user_can_edit_accessible %] + <input type="hidden" name="defined_reporter_accessible" value="1"> + [% END %] + <input type="checkbox" value="1" + name="reporter_accessible" id="reporter_accessible" + [% " checked" IF bug.reporter_accessible %] + [% " disabled=\"disabled\"" UNLESS user_can_edit_accessible %]> + <label for="reporter_accessible">Reporter</label> + </div> + <div> + [% user_can_edit_accessible = + bug.check_can_change_field("cclist_accessible", 0, 1) + %] + [% IF user_can_edit_accessible %] + <input type="hidden" name="defined_cclist_accessible" value="1"> + [% END %] + <input type="checkbox" value="1" + name="cclist_accessible" id="cclist_accessible" + [% " checked" IF bug.cclist_accessible %] + [% " disabled=\"disabled\"" UNLESS user_can_edit_accessible %]> + <label for="cclist_accessible">CC List</label> + </div> + <p class="instructions"> + The assignee + [% IF (Param('useqacontact')) %] + and QA contact + [% END %] + can always see [% terms.abug %], and this section does not + take effect unless the [% terms.bug %] is restricted to at + least one group. + </p> + </div> + [% END %] + </div> [%# bz_group_visibility_section %] +[% END %] + +[%############################################################################%] +[%# Block for Dates #%] +[%############################################################################%] + +[% BLOCK section_dates %] + <tr> + <td class="field_label"> + <b>Reported</b>: + </td> + <td> + [% bug.creation_ts FILTER time %] by [% INCLUDE global/user.html.tmpl who = bug.reporter %] + </td> + </tr> + + <tr> + <td class="field_label"> + <b> Modified</b>: + </td> + <td> + [% bug.delta_ts FILTER time FILTER replace(':\d\d$', '') FILTER replace(':\d\d ', ' ')%] + (<a href="show_activity.cgi?id=[% bug.bug_id %]">[%# terms.Bug %]History</a>) + </td> + + </tr> +[% END %] + +[%############################################################################%] +[%# Block for CC LIST #%] +[%############################################################################%] +[% BLOCK section_cclist %] + <tr> + <td class="field_label"> + <label for="newcc" accesskey="a"><b>CC List</b>:</label> + </td> + <td> + [% IF user.id %] + [% IF NOT bug.cc || NOT bug.cc.contains(user.login) %] + [% has_role = bug.user.isreporter + || bug.assigned_to.id == user.id + || (Param('useqacontact') + && bug.qa_contact + && bug.qa_contact.id == user.id) %] + <input type="checkbox" id="addselfcc" name="addselfcc" + [% " checked=\"checked\"" + IF user.settings.state_addselfcc.value == 'always' + || (!has_role + && user.settings.state_addselfcc.value == 'cc_unless_role') %]> + <label for="addselfcc">Add me to CC list</label> + <br> + [% END %] + [% END %] + [% bug.cc.size || 0 FILTER html %] + [% IF bug.cc.size == 1 %] + user + [% ELSE %] + users + [% END %] + [% IF user.id %] + [% IF bug.cc.contains( user.email ) %] + including you + [% END %] + [% END %] + [% IF user.id || bug.cc.size %] + <span id="cc_edit_area_showhide_container" class="bz_default_hidden"> + (<a href="#" id="cc_edit_area_showhide">[% IF user.id %]edit[% ELSE %]show[% END %]</a>) + </span> + [% END %] + <div id="cc_edit_area"> + <br> + [% IF user.id %] + <div> + <div><label for="cc"><b>Add</b></label></div> + [% INCLUDE global/userselect.html.tmpl + id => "newcc" + name => "newcc" + value => "" + size => 30 + classes => ["bz_userfield"] + multiple => 5 + %] + </div> + [% END %] + [% IF bug.cc %] + <select id="cc" name="cc" multiple="multiple" size="5"> + [% FOREACH c = bug.cc %] + <option value="[% c FILTER email FILTER html %]"> + [% c FILTER email FILTER html %]</option> + [% END %] + </select> + [% IF user.id %] + <br> + <input type="checkbox" id="removecc" name="removecc"> + [%%]<label for="removecc">Remove selected CCs</label> + <br> + [% END %] + [% END %] + </div> + [% IF user.id || bug.cc.size %] + <script type="text/javascript"> + hideEditableField( 'cc_edit_area_showhide_container', + 'cc_edit_area', + 'cc_edit_area_showhide', + '', + ''); + </script> + [% END %] + </td> + </tr> +[% END %] + +[%############################################################################%] +[%# Block for See Also #%] +[%############################################################################%] +[% BLOCK section_see_also %] + [% IF Param('use_see_also') || bug.see_also.size %] + <tr> + [% INCLUDE bug/field.html.tmpl + field = bug_fields.see_also + value = bug.see_also + editable = bug.check_can_change_field('see_also', 0, 1) + %] + </tr> + [% END %] +[% END %] + +[%############################################################################%] +[%# Block for FLAGS #%] +[%############################################################################%] + +[% BLOCK section_flags %] + [%# *** Flags *** %] + [% show_bug_flags = 0 %] + [% FOREACH type = bug.flag_types %] + [% IF (type.flags && type.flags.size > 0) || (user.id && type.is_active) %] + [% show_bug_flags = 1 %] + [% LAST %] + [% END %] + [% END %] + [% IF show_bug_flags %] + <tr> + <td class="field_label flags_label"> + <label><b>Flags:</b></label> + </td> + <td></td> + </tr> + <tr> + <td colspan="2"> + [% IF bug.flag_types.size > 0 %] + [% PROCESS "flag/list.html.tmpl" flag_no_header = 1 + flag_types = bug.flag_types + any_flags_requesteeble = bug.any_flags_requesteeble %] + [% END %] + </td> + </tr> + [% END %] +[% END %] + +[%############################################################################%] +[%# Block for Custom Fields #%] +[%############################################################################%] + +[% BLOCK section_customfields %] +[%# *** Custom Fields *** %] + [% USE Bugzilla %] + [% FOREACH field = Bugzilla.active_custom_fields %] + <tr> + [% PROCESS bug/field.html.tmpl value = bug.${field.name} + editable = bug.check_can_change_field(field.name, 0, 1) + value_span = 2 %] + </tr> + [% IF extra_field_item %] + <tr> + <th class="field_label">[% extra_field_item.header FILTER none %]</th> + <td>[% extra_field_item.data FILTER none %]</td> + </tr> + [% END %] + [% END %] +[% END %] + +[%############################################################################%] +[%# Block for Section Spacer #%] +[%############################################################################%] + +[% BLOCK section_spacer %] + <tr> + <td colspan="2" class="bz_section_spacer"></td> + </tr> +[% END %] + + + + +[%############################################################################%] +[%# Block for dependencies #%] +[%############################################################################%] + +[% BLOCK dependencies %] + + <th class="field_label"> + <label for="[% dep.fieldname %]"[% " accesskey=\"$accesskey\"" IF accesskey %]> + [% dep.title %]</label>: + </th> + <td> + <span id="[% dep.fieldname %]_input_area"> + [% IF bug.check_can_change_field(dep.fieldname, 0, 1) %] + <input name="[% dep.fieldname %]" id="[% dep.fieldname %]" + class="text_input" + value="[% bug.${dep.fieldname}.join(', ') %]"> + [% END %] + </span> + + [% FOREACH depbug = bug.${dep.fieldname} %] + [% depbug FILTER bug_link(depbug, use_alias => 1) FILTER none %][% " " %] + [% END %] + [% IF bug.check_can_change_field(dep.fieldname, 0, 1) %] + <span id="[% dep.fieldname %]_edit_container" class="edit_me bz_default_hidden" > + (<a href="#" id="[% dep.fieldname %]_edit_action">edit</a>) + </span> + <script type="text/javascript"> + hideEditableField('[% dep.fieldname %]_edit_container', + '[% dep.fieldname %]_input_area', + '[% dep.fieldname %]_edit_action', + '[% dep.fieldname %]', + "[% bug.${dep.fieldname}.join(', ') %]"); + </script> + [% END %] + </td> + + [% accesskey = undef %] + +[% END %] + +[%############################################################################%] +[%# Block for Time Tracking Group #%] +[%############################################################################%] + +[% BLOCK section_timetracking %] + <table class="bz_time_tracking_table"> + <tr> + <th> + <label for="estimated_time">Orig. Est.</label> + </th> + <th> + Current Est. + </th> + <th> + <label for="work_time">Hours Worked</label> + </th> + <th> + <label for="remaining_time">Hours Left</label> + </th> + <th> + %Complete + </th> + <th> + Gain + </th> + <th> + <label for="deadline">Deadline</label> + </th> + </tr> + <tr> + <td> + <input name="estimated_time" id="estimated_time" + value="[% PROCESS formattimeunit + time_unit=bug.estimated_time %]" + size="6" maxlength="6"> + </td> + <td> + [% PROCESS formattimeunit + time_unit=(bug.actual_time + bug.remaining_time) %] + </td> + <td> + [% PROCESS formattimeunit time_unit=bug.actual_time %] + + <input name="work_time" id="work_time" + value="0" size="3" maxlength="6" + onchange="adjustRemainingTime();"> + </td> + <td> + <input name="remaining_time" id="remaining_time" + value="[% PROCESS formattimeunit + time_unit=bug.remaining_time %]" + size="6" maxlength="6" onchange="updateRemainingTime();"> + </td> + <td> + [% PROCESS calculatepercentage act=bug.actual_time + rem=bug.remaining_time %] + </td> + <td> + [% PROCESS formattimeunit time_unit=bug.estimated_time - (bug.actual_time + bug.remaining_time) %] + </td> + <td> + [% INCLUDE bug/field.html.tmpl + field = bug_fields.deadline, value = bug.deadline, no_tds = 1 + editable = bug.check_can_change_field('deadline', 0, 1) %] + </td> + </tr> + <tr> + <td colspan="7" class="bz_summarize_time"> + <a href="summarize_time.cgi?id=[% bug.bug_id %]&do_depends=1"> + Summarize time (including time for [% terms.bugs %] + blocking this [% terms.bug %])</a> + </td> + </tr> + </table> +[% END %] + +[%############################################################################%] +[%# Block for the Additional Comments box #%] +[%############################################################################%] + +[% BLOCK comment_box %] + <div id="add_comment" class="bz_section_additional_comments"> + [% IF user.id %] + <label for="comment" accesskey="c"><b>Additional + <u>C</u>omments</b></label>: + + [% IF user.is_insider %] + <input type="checkbox" name="comment_is_private" value="1" + id="newcommentprivacy" + onClick="updateCommentTagControl(this, 'comment')"> + <label for="newcommentprivacy"> + Make comment private (visible only to members of the + <strong>[% Param('insidergroup') FILTER html %]</strong> group) + </label> + [% END %] + + <!-- This table keeps the submit button aligned with the box. --> + <table><tr><td> + [% INCLUDE global/textarea.html.tmpl + name = 'comment' + id = 'comment' + minrows = 10 + maxrows = 25 + cols = constants.COMMENT_COLS + %] + [% Hook.process("after_comment_textarea", 'bug/edit.html.tmpl') %] + <br> + [% PROCESS commit_button id=""%] + + <table id="bug_status_bottom" + class="status" cellspacing="0" cellpadding="0"> + <tr> + <td class="field_label"> + <b><a href="page.cgi?id=fields.html#status">Status</a></b>: + </td> + <td> + [% PROCESS bug/knob.html.tmpl %] + </td> + </tr> + </table> + </td></tr></table> + + [%# For logged-out users %] + [% ELSE %] + <table> + <tr> + <td> + <fieldset> + <legend>Note</legend> + You need to + <a href="show_bug.cgi?id= + [%- bug.bug_id %]&GoAheadAndLogIn=1">log in</a> + before you can comment on or make changes to this [% terms.bug %]. + </fieldset> + </td> + </tr> + </table> + [% END %] + </div> +[% END %] + +[%############################################################################%] +[%# Block for SELECT fields #%] +[%############################################################################%] + +[% BLOCK select %] + <td> + [% IF bug.check_can_change_field(selname, 0, 1) + AND bug.choices.${selname}.size > 1 %] + <select id="[% selname %]" name="[% selname %]"> + [% FOREACH x = bug.choices.${selname} %] + <option value="[% x.name FILTER html %]" + [% " selected" IF x.name == bug.${selname} %]> + [%- x.name FILTER html %] + </option> + [% END %] + </select> + [% ELSE %] + [% bug.${selname} FILTER html %] + [% END %] + </td> +[% END %] + +[%############################################################################%] +[%# Block for INPUT fields #%] +[%############################################################################%] + +[% BLOCK input %] + [% IF no_td != 1 %] + <td[% " colspan=\"$colspan\"" IF colspan %]> + [% END %] + [% val = value ? value : bug.$inputname %] + [% IF bug.check_can_change_field(inputname, 0, 1) %] + <input id="[% inputname %]" name="[% inputname %]" class="text_input" + value="[% val FILTER html %]"[% " size=\"$size\"" IF size %] + [% " maxlength=\"$maxlength\"" IF maxlength %] + [% " spellcheck=\"$spellcheck\"" IF spellcheck %]> + [% ELSE %] + [% IF size && val.length > size %] + <span title="[% val FILTER html %]"> + [% val FILTER truncate(size) FILTER html %] + </span> + [% ELSE %] + [% val FILTER html %] + [% END %] + [% END %] + [% IF no_td != 1 %] + </td> + [% END %] + [% no_td = 0 %] + [% maxlength = 0 %] + [% colspan = 0 %] + [% size = 0 %] + [% value = undef %] + [% spellcheck = undef %] +[% END %] +[% BLOCK commit_button %] + [% IF user.id %] + <div class="knob-buttons"> + <input type="submit" value="Save Changes" + id="commit[% id FILTER css_class_quote %]"> + </div> + [% END %] +[% END %] |