1[%# This Source Code Form is subject to the terms of the Mozilla Public
2  # License, v. 2.0. If a copy of the MPL was not distributed with this
3  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
4  #
5  # This Source Code Form is "Incompatible With Secondary Licenses", as
6  # defined by the Mozilla Public License, v. 2.0.
7  #%]
8
9[% PROCESS bug/time.html.tmpl %]
10
11<script type="text/javascript">
12<!--
13[% IF user.is_timetracker %]
14  var fRemainingTime = [% bug.remaining_time %]; // holds the original value
15  function adjustRemainingTime() {
16      // subtracts time spent from remaining time
17      var new_time;
18
19      // prevent negative values if work_time > fRemainingTime
20      new_time =
21          Math.max(fRemainingTime - document.changeform.work_time.value, 0.0);
22      // get upto 2 decimal places
23      document.changeform.remaining_time.value =
24          Math.round(new_time * 100)/100;
25  }
26
27  function updateRemainingTime() {
28      // if the remaining time is changed manually, update fRemainingTime
29      fRemainingTime = document.changeform.remaining_time.value;
30  }
31[% END %]
32
33[% IF user.id %]
34  /* Index all classifications so we can keep track of the classification
35   * for the selected product, which could control field visibility.
36   */
37  var all_classifications = new Array([% bug.choices.product.size %]);
38  [%- FOREACH product = bug.choices.product %]
39      all_classifications['[% product.name FILTER js %]'] = '
40          [%- product.classification.name FILTER js %]';
41  [%- END %]
42[% END %]
43//-->
44</script>
45
46<form name="changeform" id="changeform" method="post" action="process_bug.cgi">
47
48  <input type="hidden" name="delta_ts" value="[% bug.delta_ts %]">
49  <input type="hidden" name="longdesclength" value="[% bug.comments.size %]">
50  <input type="hidden" name="id" value="[% bug.bug_id %]">
51  <input type="hidden" name="token" value="[% issue_hash_token([bug.id, bug.delta_ts]) FILTER html %]">
52
53  [% PROCESS section_title %]
54  <table class="edit_form">
55    <tr>
56      [%# 1st Column %]
57      <td id="bz_show_bug_column_1" class="bz_show_bug_column">
58        <table>
59          [%# *** ID, product, component, status, resolution, Hardware, and  OS *** %]
60          [% PROCESS section_status %]
61
62          [% PROCESS section_spacer %]
63
64          [% PROCESS section_details1 %]
65
66          [% PROCESS section_spacer %]
67
68          [%# *** severity, priority, version and milestone *** %]
69          [% PROCESS section_details2 %]
70
71          [%# *** assigned to and qa contact *** %]
72          [% PROCESS section_people %]
73
74          [% PROCESS section_spacer %]
75
76          [% PROCESS section_url_keyword_whiteboard %]
77
78          [% PROCESS section_spacer %]
79
80          [%# *** Dependencies and duplicates *** %]
81          [% PROCESS section_duplicates %]
82
83          [% PROCESS section_dependson_blocks %]
84
85        </table>
86      </td>
87      <td>
88        <div class="bz_column_spacer">&nbsp;</div>
89      </td>
90      [%# 2nd Column %]
91      <td id="bz_show_bug_column_2" class="bz_show_bug_column">
92        <table cellpadding="3" cellspacing="1">
93        [%# *** Reported and modified dates *** %]
94         [% PROCESS section_dates %]
95
96         [% PROCESS section_cclist %]
97
98         [% PROCESS section_spacer %]
99
100         [% PROCESS section_see_also %]
101
102         [% PROCESS section_customfields %]
103
104         [% PROCESS section_spacer %]
105
106         [% Hook.process("after_custom_fields") %]
107
108         [% PROCESS section_flags %]
109
110        </table>
111      </td>
112    </tr>
113    <tr>
114      <td colspan="3">
115          <hr id="bz_top_half_spacer">
116      </td>
117    </tr>
118  </table>
119
120  <table id="bz_big_form_parts" cellspacing="0" cellpadding="0"><tr>
121  <td>
122    [% IF user.is_timetracker %]
123      [% PROCESS section_timetracking %]
124    [% END %]
125
126    [%# *** Attachments *** %]
127
128    [% PROCESS attachment/list.html.tmpl
129               attachments = bug.attachments
130               bugid       = bug.bug_id
131               num_attachment_flag_types = bug.num_attachment_flag_types
132               show_attachment_flags = bug.show_attachment_flags
133    %]
134
135    [% IF user.settings.comment_box_position.value == 'before_comments' %]
136      [% PROCESS comment_box %]
137    [% END %]
138  </td>
139  <td>
140    [% PROCESS section_restrict_visibility %]
141  </td>
142  </tr></table>
143
144  [%# *** Additional Comments *** %]
145  <div id="comments">
146    [% PROCESS bug/comments.html.tmpl
147      comments = bug.comments
148      mode = user.id ? "edit" : "show"
149    %]
150  </div>
151
152  [% IF user.settings.comment_box_position.value == 'after_comments' %]
153    <hr>
154    [% PROCESS comment_box %]
155  [% END %]
156
157</form>
158
159[%############################################################################%]
160[%# Block for the Title (alias and short desc)                               #%]
161[%############################################################################%]
162
163[% BLOCK section_title %]
164  [%# That's the main table, which contains all editable fields. %]
165  <div class="bz_alias_short_desc_container edit_form">
166      [% PROCESS commit_button id="_top"%]
167     <a href="show_bug.cgi?id=[% bug.bug_id %]">
168        [%-# %]<b>[% terms.Bug %]&nbsp;[% bug.bug_id FILTER html %]</b>
169     [%-# %]</a> –<span id="summary_alias_container" class="bz_default_hidden">
170      [% IF bug.alias != "" %]
171        (<span id="alias_nonedit_display">[% bug.alias FILTER html %]</span>)
172      [% END %]
173      <span id="short_desc_nonedit_display">[% bug.short_desc FILTER quoteUrls(bug) %]</span>
174      [% IF bug.check_can_change_field('short_desc', 0, 1) ||
175            bug.check_can_change_field('alias', 0, 1)  %]
176        <small class="editme">(<a href="#" id="editme_action">bearbeiten</a>)</small>
177      [% END %]
178     </span>
179
180
181    <div id="summary_alias_input">
182      <table id="summary">
183        <tr>
184          [% IF bug.check_can_change_field('alias', 0, 1) %]
185            [% INCLUDE "bug/field-label.html.tmpl"
186               field = bug_fields.alias
187               editable = 1
188            %]
189            <td>
190          [% ELSIF bug.alias %]
191            <td colspan="2">(
192          [% ELSE %]
193            <td colspan="2">
194          [% END %]
195          [% PROCESS input inputname => "alias"
196                     size => "20"
197                     maxlength => "20"
198                     no_td => 1
199                     %][% ")" IF NOT bug.check_can_change_field('alias', 0, 1)
200                                  && bug.alias %]
201          </td>
202        </tr>
203        [%# *** Summary *** %]
204        <tr>
205          [% INCLUDE "bug/field-label.html.tmpl"
206            field = bug_fields.short_desc
207            editable = 1
208            accesskey = "s"
209          %]
210          <td>
211            [% PROCESS input inputname => "short_desc" size => "80" colspan => 2
212                             maxlength => 255 spellcheck => "true" no_td => 1 %]
213          </td>
214        </tr>
215      </table>
216    </div>
217  </div>
218  <script type="text/javascript">
219    hideAliasAndSummary('[% bug.short_desc FILTER js %]', '[% bug.alias FILTER js %]');
220  </script>
221[% END %]
222
223[%############################################################################%]
224[%# Block for the first table in the "Details" section                       #%]
225[%############################################################################%]
226
227[% BLOCK section_details1 %]
228
229    [%#############%]
230    [%#  PRODUCT  #%]
231    [%#############%]
232    <tr>
233       [% INCLUDE bug/field.html.tmpl
234            bug = bug, field = bug_fields.product,
235            override_legal_values = bug.choices.product
236            desc_url = 'describecomponents.cgi', value = bug.product
237            editable = bug.check_can_change_field('product', 0, 1) %]
238    </tr>
239
240    [%# Classification is here so that it can be used in value controllers
241      # and visibility controllers. It comes after product because
242      # it uses some javascript that depends on the existence of the
243      # product field.
244      #%]
245    <tr class="bz_default_hidden">
246       [% INCLUDE bug/field.html.tmpl
247            bug = bug field = bug_fields.classification
248            override_legal_values = bug.choices.classification
249            value = bug.classification
250            editable = bug.check_can_change_field('product', 0, 1) %]
251    </tr>
252    [%###############%]
253    [%#  Component  #%]
254    [%###############%]
255    <tr>
256      [% INCLUDE bug/field.html.tmpl
257          bug = bug, field = bug_fields.component, value = bug.component
258          override_legal_values = bug.choices.component
259          desc_url = "describecomponents.cgi?product=$bug.product"
260          editable = bug.check_can_change_field('component', 0, 1)
261      %]
262    </tr>
263    <tr>
264      [% INCLUDE "bug/field-label.html.tmpl"
265        field = bug_fields.version editable = 1 %]
266
267      [% PROCESS select selname => "version" %]
268    </tr>
269    [%############%]
270    [%# PLATFORM #%]
271    [%############%]
272    <tr>
273      [% INCLUDE "bug/field-label.html.tmpl"
274           field = bug_fields.rep_platform, editable = 1, accesskey = "h" %]
275      <td class="field_value">
276       [% INCLUDE bug/field.html.tmpl
277            bug = bug, field = bug_fields.rep_platform,
278            no_tds = 1, value = bug.rep_platform
279            editable = bug.check_can_change_field('rep_platform', 0, 1) %]
280       [%+ INCLUDE bug/field.html.tmpl
281            bug = bug, field = bug_fields.op_sys,
282            no_tds = 1, value = bug.op_sys
283            editable = bug.check_can_change_field('op_sys', 0, 1) %]
284      </td>
285    </tr>
286
287
288
289[% END %]
290
291[%############################################################################%]
292[%# Block for the status section                                             #%]
293[%############################################################################%]
294
295[% BLOCK section_status %]
296  <tr>
297    <th class="field_label">
298      <a href="page.cgi?id=fields.html#bug_status">Status</a>:
299    </th>
300    <td id="bz_field_status">
301      <span id="static_bug_status">
302        [% display_value("bug_status", bug.bug_status) FILTER html %]
303        [% IF bug.resolution %]
304          [%+ display_value("resolution", bug.resolution) FILTER html %]
305          [% IF bug.dup_id %]
306            von [% "${terms.bug} ${bug.dup_id}" FILTER bug_link(bug.dup_id) FILTER none %]
307          [% END %]
308        [% END %]
309        [% IF bug.user.canedit || bug.user.isreporter %]
310          (<a href="#add_comment"
311              onclick="window.setTimeout(function() { document.getElementById('bug_status').focus(); }, 10)">bearbeiten</a>)
312        [% END %]
313      </span>
314    </td>
315  </tr>
316[% END %]
317
318[%############################################################################%]
319[%# Block for the second table in the "Details" section                      #%]
320[%############################################################################%]
321
322[% BLOCK section_details2 %]
323
324 [%###############################################################%]
325 [%# Importance (priority and severity) #%]
326 [%###############################################################%]
327    <tr>
328      <th class="field_label">
329        <label for="priority" accesskey="i">
330          <a href="page.cgi?id=fields.html#importance">W<u>i</u>chtigkeit</a></label>:
331      </th>
332      <td>
333       [% INCLUDE bug/field.html.tmpl
334            bug = bug, field = bug_fields.priority,
335            no_tds = 1, value = bug.priority
336            editable = bug.check_can_change_field('priority', 0, 1) %]
337       [%+ INCLUDE bug/field.html.tmpl
338            bug = bug, field = bug_fields.bug_severity,
339            no_tds = 1, value = bug.bug_severity
340            editable = bug.check_can_change_field('bug_severity', 0, 1) %]
341        [% Hook.process('after_importance', 'bug/edit.html.tmpl') %]
342      </td>
343    </tr>
344
345    [% IF Param("usetargetmilestone") && bug.target_milestone %]
346      <tr>
347        <th class="field_label">
348          <label for="target_milestone">
349            <a href="page.cgi?id=fields.html#target_milestone">
350            Ziel-Meilenstein</a></label>:
351        </th>
352        [% PROCESS select selname = "target_milestone" %]
353      </tr>
354    [% END %]
355
356[% END %]
357
358[%############################################################################%]
359[%# Block for the table in the "People" section                              #%]
360[%############################################################################%]
361
362[% BLOCK section_people %]
363
364    <tr>
365      <th class="field_label">
366        <a href="page.cgi?id=fields.html#assigned_to">Zuständiger</a>:
367      </th>
368      <td>
369        [% IF bug.check_can_change_field("assigned_to", 0, 1) %]
370          <div id="bz_assignee_edit_container" class="bz_default_hidden">
371            <span>
372              [% INCLUDE global/user.html.tmpl who = bug.assigned_to %]
373              (<a href="#" id="bz_assignee_edit_action">bearbeiten</a>)
374              [% IF bug.assigned_to.id != user.id %]
375                (<a title="Bearbeitungsverantwortung übernehmen"
376                    href="#" id="bz_assignee_take_action">übernehmen</a>)
377              [% END %]
378            </span>
379          </div>
380          <div id="bz_assignee_input">
381            [% INCLUDE global/userselect.html.tmpl
382                 id => "assigned_to"
383                 name => "assigned_to"
384                 value => bug.assigned_to.login
385                 classes => ["bz_userfield"]
386                 size => 30
387            %]
388            <br>
389            <input type="checkbox" id="set_default_assignee" name="set_default_assignee" value="1">
390            <label id="set_default_assignee_label" for="set_default_assignee">Dem
391              Standardzuständigen zuweisen</label>
392          </div>
393          <script type="text/javascript">
394           hideEditableField('bz_assignee_edit_container',
395                             'bz_assignee_input',
396                             'bz_assignee_edit_action',
397                             'assigned_to',
398                             '[% bug.assigned_to.login FILTER js %]' );
399           hideEditableField('bz_assignee_edit_container',
400                             'bz_assignee_input',
401                             'bz_assignee_take_action',
402                             'assigned_to',
403                             '[% bug.assigned_to.login FILTER js %]',
404                             '[% user.login FILTER js %]' );
405           initDefaultCheckbox('assignee');
406          </script>
407        [% ELSE %]
408          [% INCLUDE global/user.html.tmpl who = bug.assigned_to %]
409        [% END %]
410      </td>
411    </tr>
412
413    [% IF Param('useqacontact') %]
414    <tr>
415      [% INCLUDE "bug/field-label.html.tmpl"
416        field = bug_fields.qa_contact
417        editable = 1
418        accesskey = "q"
419      %]
420      <td>
421        [% IF bug.check_can_change_field("qa_contact", 0, 1) %]
422          <div id="bz_qa_contact_edit_container" class="bz_default_hidden">
423            <span>
424              [% INCLUDE global/user.html.tmpl who = bug.qa_contact %]
425              (<a href="#" id="bz_qa_contact_edit_action">bearbeiten</a>)
426              [% IF bug.qa_contact.id != user.id %]
427                (<a title="QS-Kontakt-Verantwortung übernehmen"
428                    href="#" id="bz_qa_contact_take_action">übernehmen</a>)
429              [% END %]
430            </span>
431          </div>
432          <div id="bz_qa_contact_input">
433            [% INCLUDE global/userselect.html.tmpl
434               id      => "qa_contact"
435               name    => "qa_contact"
436               value   => bug.qa_contact.login
437               size    => 30
438               classes => ["bz_userfield"]
439               emptyok => 1
440            %]
441            <br>
442            <input type="checkbox" id="set_default_qa_contact" name="set_default_qa_contact" value="1">
443            <label for="set_default_qa_contact" id="set_default_qa_contact_label">Dem
444              Standard-QS-Kontakt zuweisen</label>
445          </div>
446          <script type="text/javascript">
447            hideEditableField('bz_qa_contact_edit_container',
448                              'bz_qa_contact_input',
449                              'bz_qa_contact_edit_action',
450                              'qa_contact',
451                              '[% bug.qa_contact.login FILTER js %]');
452            hideEditableField('bz_qa_contact_edit_container',
453                              'bz_qa_contact_input',
454                              'bz_qa_contact_take_action',
455                              'qa_contact',
456                              '[% bug.qa_contact.login FILTER js %]',
457                              '[% user.login FILTER js %]');
458            initDefaultCheckbox('qa_contact');
459          </script>
460        [% ELSE %]
461          [% INCLUDE global/user.html.tmpl who = bug.qa_contact %]
462        [% END %]
463      </td>
464    </tr>
465    [% END %]
466    <script type="text/javascript">
467      assignToDefaultOnChange(['product', 'component'],
468        '[% bug.component_obj.default_assignee.login FILTER js %]',
469        '[% bug.component_obj.default_qa_contact.login FILTER js %]');
470    </script>
471[% END %]
472
473[%############################################################################%]
474[%# Block for URL Keyword and Whiteboard                                     #%]
475[%############################################################################%]
476[% BLOCK section_url_keyword_whiteboard %]
477  <tr>
478    [% INCLUDE "bug/field-label.html.tmpl"
479      field = bug_fields.bug_file_loc
480      editable = 1
481      accesskey = "u"
482    %]
483    <td>
484      [% IF bug.check_can_change_field("bug_file_loc", 0, 1) %]
485        <span id="bz_url_edit_container" class="bz_default_hidden">
486        [% IF is_safe_url(bug.bug_file_loc) %]
487           <a href="[% bug.bug_file_loc FILTER html %]" target="_blank"
488              title="[% bug.bug_file_loc FILTER html %]">
489             [% bug.bug_file_loc FILTER truncate(40) FILTER html %]</a>
490        [% ELSE %]
491          [% bug.bug_file_loc FILTER html %]
492        [% END %]
493        (<a href="#" id="bz_url_edit_action">bearbeiten</a>)</span>
494      [% END %]
495      <span id="bz_url_input_area">
496        [% url_output =  PROCESS input no_td=1 inputname => "bug_file_loc" size => "40" colspan => 2 %]
497        [% IF NOT bug.check_can_change_field("bug_file_loc", 0, 1)
498              AND is_safe_url(bug.bug_file_loc) %]
499          <a href="[% bug.bug_file_loc FILTER html %]">[% url_output FILTER none %]</a>
500        [% ELSE %]
501          [% url_output FILTER none %]
502        [% END %]
503      </span>
504      [% IF bug.check_can_change_field("bug_file_loc", 0, 1) %]
505        <script type="text/javascript">
506          hideEditableField('bz_url_edit_container',
507                            'bz_url_input_area',
508                            'bz_url_edit_action',
509                            'bug_file_loc',
510                            "[% bug.bug_file_loc FILTER js %]");
511        </script>
512      [% END %]
513    </td>
514  </tr>
515
516  [% IF Param('usestatuswhiteboard') %]
517    <tr>
518      [% INCLUDE "bug/field-label.html.tmpl"
519        field = bug_fields.status_whiteboard
520        editable = 1
521        accesskey = "w"
522      %]
523      [% PROCESS input inputname => "status_whiteboard" size => "40" colspan => 2 %]
524    </tr>
525  [% END %]
526
527  [% IF use_keywords %]
528    <tr>
529      <th class="field_label">
530        <label for="keywords" accesskey="k">
531          <a href="describekeywords.cgi">Schlüsselwörter</a></label>:
532      </th>
533      <td class="field_value" colspan="2">
534        [% INCLUDE bug/field.html.tmpl
535           bug = bug, field = bug_fields.keywords, value = bug.keywords
536           editable = bug.check_can_change_field("keywords", 0, 1),
537           no_tds = 1, possible_values = all_keywords
538        %]
539      </td>
540    </tr>
541  [% END %]
542
543  [% IF user.id %]
544    <tr>
545      [% INCLUDE bug/field.html.tmpl
546         bug = bug, field = bug_fields.tag, value = bug.tags.join(", "),
547         editable = 1, possible_values = user.tags.keys
548      %]
549    </tr>
550  [% END %]
551[% END %]
552
553[%############################################################################%]
554[%# Block for Duplicates                                                     #%]
555[%############################################################################%]
556
557[% BLOCK section_duplicates %]
558  [% RETURN UNLESS bug.duplicates.size %]
559  <tr>
560    <th class="field_label">
561      <label for="duplicates">Duplikate</label>:
562    </th>
563    <td class="field_value" colspan="2">
564      <span id="duplicates">
565        [% FOREACH dupe = bug.duplicates %]
566          [% dupe.id FILTER bug_link(dupe, use_alias => 1) FILTER none %][% " " %]
567        [% END %]
568      </span>
569      (<a href="buglist.cgi?bug_id=[% bug.duplicate_ids.join(",") FILTER html %]">
570       [%-%]als [% terms.bug %]liste zeigen</a>)
571    </td>
572  </tr>
573[% END %]
574
575[%############################################################################%]
576[%# Block for Depends On / Blocks                                            #%]
577[%############################################################################%]
578
579[% BLOCK section_dependson_blocks %]
580  <tr>
581    [% INCLUDE dependencies
582         field = bug_fields.dependson deps = bug.depends_on_obj %]
583  </tr>
584
585  <tr>
586    [% INCLUDE dependencies
587         field = bug_fields.blocked deps = bug.blocks_obj %]
588  </tr>
589
590  <tr>
591    <th>&nbsp;</th>
592
593    <td colspan="2" align="left" id="show_dependency_tree_or_graph">
594      Zeige Abhängigkeits<a href="showdependencytree.cgi?id=[% bug.bug_id %]&amp;hide_resolved=1">baum</a>
595
596      [% IF Param('webdotbase') %]
597        /&nbsp;<a href="showdependencygraph.cgi?id=[% bug.bug_id %]">-graf</a>
598      [% END %]
599    </td>
600  </tr>
601[% END %]
602
603
604[%############################################################################%]
605[%# Block for Restricting Visibility                                         #%]
606[%############################################################################%]
607
608[% BLOCK section_restrict_visibility %]
609  [% RETURN UNLESS bug.groups.size %]
610
611  <div class="bz_group_visibility_section">
612    [% inallgroups = 1 %]
613    [% inagroup = 0 %]
614    [% emitted_description = 0 %]
615
616    [% FOREACH group = bug.groups %]
617      [% SET inallgroups = 0 IF NOT group.ingroup %]
618      [% SET inagroup = 1 IF group.ison %]
619
620      [% NEXT IF group.mandatory %]
621
622      [% IF NOT emitted_description %]
623        [% emitted_description = 1 %]
624          <div id="bz_restrict_group_visibility_help">
625            <b>Nur Personen, die Mitglied <em>aller</em> hier ausgewählter
626              Gruppen sind, können diesen [% terms.bug %] sehen:</b>
627             <p class="instructions">
628               (Je weniger Sie hier auswählen, um so öffentlicher ist der
629               [%+ terms.bug %].)
630             </p>
631          </div>
632      [% END %]
633
634      [% IF group.ingroup %]
635        <input type="hidden" name="defined_groups"
636               value="[% group.name FILTER html %]">
637      [% END %]
638
639      <input type="checkbox" value="[% group.name FILTER html %]"
640             name="groups" id="group_[% group.bit %]"
641             [% ' checked="checked"' IF group.ison %]
642             [% ' disabled="disabled"' IF NOT group.ingroup %]>
643      <label for="group_[% group.bit %]">
644      [%- group.description FILTER html_light %]</label>
645      <br>
646    [% END %]
647
648    [% IF emitted_description %]
649      [% IF NOT inallgroups %]
650        <p class="instructions">Nur Gruppenmitglieder können die Sichtbarkeit
651          eines [% terms.bug_gen %] bezüglich der Gruppe ändern.</p>
652      [% END %]
653    [% END %]
654
655    [% IF inagroup %]
656      <div id="bz_enable_role_visibility_help">
657        <b>Benutzer mit den hier angegebenen Rollen können diesen
658          [%+ terms.bug %] unabhängig von ihrer Gruppenzugehörigkeit sehen:</b>
659      </div>
660      <div id="bz_enable_role_visibility">
661        <div>
662          [% user_can_edit_accessible =
663            bug.check_can_change_field("reporter_accessible", 0, 1)
664          %]
665          [% IF user_can_edit_accessible %]
666            <input type="hidden" name="defined_reporter_accessible" value="1">
667          [% END %]
668          <input type="checkbox" value="1"
669                 name="reporter_accessible" id="reporter_accessible"
670                 [% " checked" IF bug.reporter_accessible %]
671                 [% " disabled=\"disabled\"" UNLESS user_can_edit_accessible %]>
672          <label for="reporter_accessible">Berichterstatter</label>
673        </div>
674        <div>
675          [% user_can_edit_accessible =
676            bug.check_can_change_field("cclist_accessible", 0, 1)
677          %]
678          [% IF user_can_edit_accessible %]
679            <input type="hidden" name="defined_cclist_accessible" value="1">
680          [% END %]
681          <input type="checkbox" value="1"
682                 name="cclist_accessible" id="cclist_accessible"
683                 [% " checked" IF bug.cclist_accessible %]
684                 [% " disabled=\"disabled\"" UNLESS user_can_edit_accessible %]>
685          <label for="cclist_accessible">CC-Listen-Mitglieder</label>
686        </div>
687        <p class="instructions">
688          Der Zuständige
689          [% IF (Param('useqacontact')) %]
690             und der QS-Kontakt können
691          [% ELSE %]
692             kann
693          [% END %]
694          den [% terms.bug %] immer sehen, und dieser Abschnitt hat keine
695          Wirkung, solange der [% terms.bug %] nicht auf wenigstens eine
696          Gruppe eingeschränkt ist.
697        </p>
698      </div>
699    [% END %]
700  </div> [%# bz_group_visibility_section %]
701[% END %]
702
703[%############################################################################%]
704[%# Block for Dates                                                          #%]
705[%############################################################################%]
706
707[% BLOCK section_dates %]
708  <tr>
709    <th class="field_label">
710      Berichtet:
711    </th>
712    <td>
713     [% bug.creation_ts FILTER time('%d.%m.%Y, %H:%M %Z') %] von [% INCLUDE global/user.html.tmpl who = bug.reporter %]
714    </td>
715  </tr>
716
717  <tr>
718    <th class="field_label">
719      Letzte Änderung:
720    </th>
721    <td>
722      [% bug.delta_ts FILTER time('%d.%m.%Y, %H:%M %Z') %]
723      (<a href="show_activity.cgi?id=[% bug.bug_id %]">[%# terms.Bug %]Historie</a>)
724  </td>
725
726  </tr>
727[% END %]
728
729[%############################################################################%]
730[%# Block for CC LIST                                                        #%]
731[%############################################################################%]
732[% BLOCK section_cclist %]
733    <tr>
734      <th class="field_label">
735        <label for="newcc" accesskey="a">CC-Liste:</label>
736      </th>
737      <td>
738        [% IF user.id %]
739          [% IF NOT bug.cc.contains(user.login) %]
740            <input type="checkbox" id="addselfcc" name="addselfcc"
741              [% " checked=\"checked\""
742                   IF user.settings.state_addselfcc.value == 'always'
743                      || (!bug.user.has_any_role
744                          && user.settings.state_addselfcc.value == 'cc_unless_role') %]>
745            <label for="addselfcc">Füge mich zur CC-Liste hinzu</label>
746            <br>
747          [% END %]
748        [% END %]
749        [% bug.cc.size FILTER html %]&nbsp;Benutzer
750        [% IF user.id %]
751          [% IF bug.cc.contains( user.email ) %]
752            einschließlich Ihnen
753          [% END %]
754        [% END %]
755        [% IF user.id || bug.cc.size %]
756          <span id="cc_edit_area_showhide_container" class="bz_default_hidden">
757            (<a href="#" id="cc_edit_area_showhide">[% IF user.id %]bearbeiten[% ELSE %]zeigen[% END %]</a>)
758          </span>
759        [% END %]
760        <div id="cc_edit_area">
761          <br>
762          [% IF user.id %]
763            <div>
764              <div><label for="cc"><b>Hinzufügen</b></label></div>
765              [% INCLUDE global/userselect.html.tmpl
766                  id => "newcc"
767                  name => "newcc"
768                  value => ""
769                  size => 30
770                  classes => ["bz_userfield"]
771                  multiple => 5
772                %]
773            </div>
774          [% END %]
775          [% IF bug.cc.size %]
776            <select id="cc" multiple="multiple" size="5"
777              [% IF bug.user.canedit %]name="cc"[% END %]>
778              [% FOREACH c = bug.cc %]
779                <option value="[% c FILTER email FILTER html %]">
780                  [% c FILTER email FILTER html %]</option>
781              [% END %]
782            </select>
783            [% IF user.id && !bug.user.canedit %]
784              <input type="hidden" name="cc" value="[% user.login FILTER email FILTER html %]">
785            [% END %]
786            [% IF user.id AND (bug.user.canedit OR bug.cc.contains(user.login)) %]
787              <br>
788              <input type="checkbox" id="removecc" name="removecc">
789              <label for="removecc">
790                [% IF bug.user.canedit %]
791                  Gewählte CCs entfernen
792                [% ELSE %]
793                  Mich von der CC-Liste entfernen
794                [% END %]
795              </label>
796              <br>
797            [% END %]
798          [% END %]
799        </div>
800        [% IF user.id || bug.cc.size %]
801          <script type="text/javascript">
802            hideEditableField( 'cc_edit_area_showhide_container',
803                               'cc_edit_area',
804                               'cc_edit_area_showhide',
805                               '',
806                               '');
807          </script>
808        [% END %]
809      </td>
810    </tr>
811[% END %]
812
813[%############################################################################%]
814[%# Block for See Also                                                       #%]
815[%############################################################################%]
816[% BLOCK section_see_also %]
817  [% IF Param('use_see_also') || bug.see_also.size %]
818    <tr>
819      [% INCLUDE bug/field.html.tmpl
820           field    = bug_fields.see_also
821           value    = bug.see_also
822           editable = bug.check_can_change_field('see_also', 0, 1)
823      %]
824    </tr>
825  [% END %]
826[% END %]
827
828[%############################################################################%]
829[%# Block for FLAGS                                                          #%]
830[%############################################################################%]
831
832[% BLOCK section_flags %]
833  [%# *** Flags *** %]
834  [% show_bug_flags = 0 %]
835  [% bug_flags_set = 0 %]
836  [% show_more_flags = 0 %]
837  [% FOREACH type = bug.flag_types %]
838    [% IF type.flags.size || (user.id && type.is_active && user.can_request_flag(type)) %]
839      [% show_bug_flags = 1 %]
840    [% END %]
841    [% IF user.id && type.is_active && (!type.flags.size || type.is_multiplicable) %]
842      [% show_more_flags = 1 %]
843    [% END %]
844    [% IF type.flags.size %]
845      [% bug_flags_set = 1 %]
846    [% END %]
847    [% LAST IF show_bug_flags && show_more_flags && bug_flags_set %]
848  [% END %]
849  [% IF show_bug_flags %]
850    <tr>
851      <th class="field_label">
852        <label>Markierungen:</label>
853      </th>
854      <td>
855        [% IF bug.flag_types.size %]
856          [% PROCESS "flag/list.html.tmpl" flag_no_header = 1
857                                           flag_types = bug.flag_types
858                                           any_flags_requesteeble = bug.any_flags_requesteeble %]
859        [% END %]
860        [% IF show_more_flags %]
861          <span id="bz_flags_more_container" class="bz_default_hidden">
862            [% IF !bug_flags_set %]<em>Noch keine Markierungen</em>[% END %]
863            (<a href="#" id="bz_flags_more_action">[% IF bug_flags_set %]mehr [% END %]Markierungen setzen</a>)
864          </span>
865          <script type="text/javascript">
866            YAHOO.util.Dom.removeClass('bz_flags_more_container', 'bz_default_hidden');
867            var table = YAHOO.util.Dom.get("flags");
868            var rows = YAHOO.util.Dom.getElementsByClassName('bz_flag_type', 'tbody', table);
869            for (var i = 0; i < rows.length; i++) {
870                YAHOO.util.Dom.addClass(rows[i], 'bz_default_hidden');
871            }
872            YAHOO.util.Event.addListener('bz_flags_more_action', 'click', function (e) {
873                YAHOO.util.Dom.addClass('bz_flags_more_container', 'bz_default_hidden');
874                for (var i = 0; i < rows.length; i++) {
875                    YAHOO.util.Dom.removeClass(rows[i], 'bz_default_hidden');
876                }
877                YAHOO.util.Event.preventDefault(e);
878            });
879          </script>
880        [% END %]
881      </td>
882    </tr>
883  [% END %]
884[% END %]
885
886[%############################################################################%]
887[%# Block for Custom Fields                                                  #%]
888[%############################################################################%]
889
890[% BLOCK section_customfields %]
891[%# *** Custom Fields *** %]
892  [% USE Bugzilla %]
893  [% FOREACH field = Bugzilla.active_custom_fields %]
894    <tr>
895      [% PROCESS bug/field.html.tmpl value = bug.${field.name}
896                                     editable = bug.check_can_change_field(field.name, 0, 1)
897                                     value_span = 2 %]
898    </tr>
899    [% IF extra_field_item %]
900      <tr>
901        <th class="field_label">[% extra_field_item.header FILTER none %]</th>
902        <td>[% extra_field_item.data FILTER none %]</td>
903      </tr>
904    [% END %]
905  [% END %]
906[% END %]
907
908[%############################################################################%]
909[%# Block for Section Spacer                                                 #%]
910[%############################################################################%]
911
912[% BLOCK section_spacer %]
913  <tr>
914    <td colspan="2" class="bz_section_spacer"></td>
915  </tr>
916[% END %]
917
918
919
920
921[%############################################################################%]
922[%# Block for dependencies                                                   #%]
923[%############################################################################%]
924
925[% BLOCK dependencies %]
926
927  [% INCLUDE "bug/field-label.html.tmpl" %]
928
929  <td>
930    <span id="[% field.name FILTER html %]_input_area">
931      [% IF bug.check_can_change_field(field.name, 0, 1) %]
932        <input name="[% field.name FILTER html %]"
933               id="[% field.name FILTER html %]" class="text_input"
934               value="[% bug.${field.name}.join(', ') FILTER html %]">
935      [% END %]
936    </span>
937
938    [% FOREACH dep_bug = deps %]
939      [% dep_bug.id FILTER bug_link(dep_bug, use_alias => 1)
940                    FILTER none %][% " " %]
941    [% END %]
942    [% IF bug.check_can_change_field(field.name, 0, 1) %]
943      <span id="[% field.name FILTER html %]_edit_container"
944            class="edit_me bz_default_hidden">
945        (<a href="#" id="[% field.name FILTER html %]_edit_action">bearbeiten</a>)
946      </span>
947      <script type="text/javascript">
948        hideEditableField('[% field.name FILTER js %]_edit_container',
949                          '[% field.name FILTER js %]_input_area',
950                          '[% field.name FILTER js %]_edit_action',
951                          '[% field.name FILTER js %]',
952                          '[% bug.${field.name}.join(', ') FILTER js %]');
953      </script>
954    [% END %]
955  </td>
956
957[% END %]
958
959[%############################################################################%]
960[%# Block for Time Tracking Group                                            #%]
961[%############################################################################%]
962
963[% BLOCK section_timetracking %]
964  <table class="bz_time_tracking_table">
965    <tr>
966      [% INCLUDE "bug/field-label.html.tmpl"
967         field = bug_fields.estimated_time, editable = 1
968      %]
969      <th>
970        Akt. Schätzg.&nbsp;(h):
971      </th>
972      [% INCLUDE "bug/field-label.html.tmpl"
973         field = bug_fields.work_time, editable = 1
974      %]
975      [% INCLUDE "bug/field-label.html.tmpl"
976         field = bug_fields.remaining_time, editable = 1
977      %]
978      [% INCLUDE "bug/field-label.html.tmpl"
979         field = bug_fields.percentage_complete, editable = 1
980      %]
981      <th>
982        Fortschritt&nbsp;(h):
983      </th>
984      [% INCLUDE "bug/field-label.html.tmpl"
985         field = bug_fields.deadline, editable = 1
986      %]
987    </tr>
988    <tr>
989      <td>
990        <input name="estimated_time" id="estimated_time"
991               value="[% PROCESS formattimeunit
992                                 time_unit=bug.estimated_time %]"
993               size="6" maxlength="6">
994      </td>
995      <td>
996        [% PROCESS formattimeunit
997                   time_unit=(bug.actual_time + bug.remaining_time) %]
998      </td>
999      <td>
1000        [% PROCESS formattimeunit time_unit=bug.actual_time %] +
1001        <input name="work_time" id="work_time"
1002               value="0" size="3" maxlength="6"
1003               onchange="adjustRemainingTime();">
1004      </td>
1005      <td>
1006        <input name="remaining_time" id="remaining_time"
1007               value="[% PROCESS formattimeunit
1008                                 time_unit=bug.remaining_time %]"
1009               size="6" maxlength="6" onchange="updateRemainingTime();">
1010      </td>
1011      <td>
1012        [% PROCESS calculatepercentage act=bug.actual_time
1013                                       rem=bug.remaining_time %]
1014      </td>
1015      <td>
1016        [% PROCESS formattimeunit time_unit=bug.estimated_time - (bug.actual_time + bug.remaining_time) %]
1017      </td>
1018       <td>
1019         [% INCLUDE bug/field.html.tmpl
1020           field = bug_fields.deadline, value = bug.deadline, no_tds = 1
1021           editable = bug.check_can_change_field('deadline', 0, 1) %]
1022      </td>
1023    </tr>
1024    <tr>
1025      <td colspan="7" class="bz_summarize_time">
1026        <a href="summarize_time.cgi?id=[% bug.bug_id %]&amp;do_depends=1">
1027        Zusammenfassung der Aufwände (einschließlich von Aufwänden von
1028        [%+ terms.bugs_dat %], die diesen [% terms.bug %] blockieren)</a>
1029      </td>
1030    </tr>
1031  </table>
1032[% END %]
1033
1034[%############################################################################%]
1035[%# Block for the Additional Comments box                                    #%]
1036[%############################################################################%]
1037
1038[% BLOCK comment_box %]
1039  <div id="add_comment" class="bz_section_additional_comments">
1040    [% IF user.id %]
1041      <label for="comment" accesskey="c"><b>Zusätzli<u>c</u>her
1042        Kommentar</b></label>:
1043
1044      [% IF user.is_insider && bug.check_can_change_field('longdesc', 0, 1) %]
1045        <input type="checkbox" name="comment_is_private" value="1"
1046               id="newcommentprivacy"
1047               onClick="updateCommentTagControl(this, 'comment')">
1048        <label for="newcommentprivacy">
1049          Den Kommentar als vertraulich kennzeichnen (wodurch er nur
1050          Mitgliedern der Gruppe
1051          <strong>[% Param('insidergroup') FILTER html %]</strong> sichtbar
1052          ist)
1053        </label>
1054      [% END %]
1055
1056      <!-- This table keeps the submit button aligned with the box. -->
1057      <table><tr><td>
1058        [% IF bug.check_can_change_field('longdesc', 0, 1) %]
1059          [% INCLUDE global/textarea.html.tmpl
1060                     name      = 'comment'
1061                     id        = 'comment'
1062                     minrows   = 10
1063                     maxrows   = 25
1064                     cols      = constants.COMMENT_COLS
1065          %]
1066          [% IF user.is_insider %]
1067            <script>
1068               updateCommentTagControl(document.getElementById('newcommentprivacy'), 'comment');
1069            </script>
1070          [% END %]
1071          [% Hook.process("after_comment_textarea", 'bug/edit.html.tmpl') %]
1072        [% ELSE %]
1073          Sie dürfen dem [% terms.bug_dat %] keinen zusätzlichen Kommentar
1074          hinzufügen.
1075        [% END %]
1076        <br>
1077        [% PROCESS commit_button id=""%]
1078
1079        <table id="bug_status_bottom"
1080               class="status" cellspacing="0" cellpadding="0">
1081          <tr>
1082            <th class="field_label">
1083              <a href="page.cgi?id=fields.html#bug_status">Status</a>:
1084            </th>
1085            <td>
1086              [% PROCESS bug/knob.html.tmpl %]
1087            </td>
1088          </tr>
1089        </table>
1090      </td></tr></table>
1091
1092    [%# For logged-out users %]
1093    [% ELSE %]
1094      <table>
1095        <tr>
1096          <td>
1097            <fieldset>
1098              <legend>Hinweis</legend>
1099              Sie müssen sich
1100              <a href="show_bug.cgi?id=
1101                      [%- bug.bug_id %]&amp;GoAheadAndLogIn=1">anmelden</a>,
1102              um Änderungen an diesem [% terms.bug_dat %] vorzunehmen oder
1103              einen Kommentar zu hinterlassen.
1104            </fieldset>
1105          </td>
1106        </tr>
1107      </table>
1108    [% END %]
1109  </div>
1110[% END %]
1111
1112[%############################################################################%]
1113[%# Block for SELECT fields                                                  #%]
1114[%############################################################################%]
1115
1116[% BLOCK select %]
1117  <td>
1118    [% IF bug.check_can_change_field(selname, 0, 1)
1119          AND bug.choices.${selname}.size > 1 %]
1120      <input type="hidden" id="[% selname %]_dirty">
1121      <select id="[% selname %]" name="[% selname %]">
1122        [% FOREACH x = bug.choices.${selname} %]
1123          [% NEXT IF NOT x.is_active AND x.name != bug.${selname} %]
1124          <option value="[% x.name FILTER html %]"
1125            [% " selected" IF x.name == bug.${selname} %]>
1126            [%- x.name FILTER html %]
1127          </option>
1128        [% END %]
1129      </select>
1130    [% ELSE %]
1131      [% bug.${selname} FILTER html %]
1132    [% END %]
1133  </td>
1134[% END %]
1135
1136[%############################################################################%]
1137[%# Block for INPUT fields                                                   #%]
1138[%############################################################################%]
1139
1140[% BLOCK input %]
1141  [% IF no_td != 1 %]
1142  <td[% " colspan=\"$colspan\"" IF colspan %]>
1143  [% END %]
1144    [% val = value ? value : bug.$inputname %]
1145    [% IF bug.check_can_change_field(inputname, 0, 1) %]
1146       <input id="[% inputname %]" name="[% inputname %]" class="text_input"
1147              value="[% val FILTER html %]"[% " size=\"$size\"" IF size %]
1148              [% " maxlength=\"$maxlength\"" IF maxlength %]
1149              [% " spellcheck=\"$spellcheck\"" IF spellcheck %]>
1150    [% ELSE %]
1151      [% IF size && val.length > size %]
1152        <span title="[% val FILTER html %]">
1153          [% val FILTER truncate(size) FILTER html %]
1154        </span>
1155      [% ELSE %]
1156        [% val FILTER html %]
1157      [% END %]
1158    [% END %]
1159  [% IF no_td != 1 %]
1160  </td>
1161  [% END %]
1162  [% no_td = 0 %]
1163  [% maxlength = 0 %]
1164  [% colspan = 0 %]
1165  [% size = 0 %]
1166  [% value = undef %]
1167  [% spellcheck = undef %]
1168[% END %]
1169[% BLOCK commit_button %]
1170  [% IF user.id %]
1171    <div class="knob-buttons">
1172      <input type="submit" value="Änderungen übernehmen"
1173             id="commit[% id FILTER css_class_quote %]">
1174    </div>
1175  [% END %]
1176[% END %]
1177