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[%# INTERFACE:
10  # searchtype: string. Type of search - either "series", "saved" or undef.
11  # ...
12  # defaultsavename: string. The default name for saving the query.
13  #%]
14
15[%############################################################################%]
16[%# Template Initialization                                                  #%]
17[%############################################################################%]
18
19[% PROCESS "global/field-descs.none.tmpl" %]
20
21[% USE Bugzilla %]
22[% cgi = Bugzilla.cgi %]
23
24[% unfiltered_title = "Список ${terms.bugs_gen}" %]
25[% IF searchname || defaultsavename %]
26  [% unfiltered_title = unfiltered_title _ ": " _ (searchname OR defaultsavename) %]
27[% END %]
28[% title = unfiltered_title FILTER html %]
29
30[% qorder = order FILTER uri IF order %]
31
32[% javascript =  BLOCK %]
33  [% IF quicksearch %]
34    [% new_param = BLOCK ~%]
35      quicksearch=[% quicksearch FILTER uri %]
36      [%~ IF cgi.param('list_id') ~%]
37        &list_id=[% cgi.param('list_id') FILTER uri %]
38      [%~ END %]
39    [% END %]
40  [% ELSIF cgi.param('token') != '' %]
41    [% new_param = cgi.canonicalise_query('token', 'cmdtype', 'remtype') %]
42  [% ELSE %]
43    [% new_param = cgi.canonicalise_query %]
44  [% END %]
45
46  [% IF new_param.length + 12 < constants.CGI_URI_LIMIT %]
47    if (history && history.replaceState) {
48      history.replaceState(null, "[% unfiltered_title FILTER js %]",
49                           "buglist.cgi?[% new_param FILTER js %]");
50      document.title = "[% unfiltered_title FILTER js %]";
51    }
52  [% END %]
53  [% javascript FILTER none %]
54[% END %]
55
56[%############################################################################%]
57[%# Page Header                                                              #%]
58[%############################################################################%]
59
60[% PROCESS global/header.html.tmpl
61  title = title
62  style = style
63  atomlink = "buglist.cgi?$urlquerypart&title=$title&ctype=atom"
64  yui = [ 'autocomplete', 'calendar' ]
65  javascript_urls = [ "js/util.js", "js/field.js", "js/TUI.js" ]
66  style_urls = [ "skins/standard/buglist.css" ]
67  doc_section = "query.html#list"
68%]
69
70<div class="bz_query_head">
71  <span class="bz_query_timestamp">
72    [% currenttime FILTER time('%a %b %e %Y %T %Z') FILTER html %]<br>
73  </span>
74
75  [% IF debug %]
76    <div class="bz_query_debug">
77      <p>Полное время выполнения: [% query_time FILTER html %] сек.</p>
78      [% FOREACH query = queries %]
79        <p>[% query.sql FILTER html %]</p>
80        <p>Время выполнения: [% query.time FILTER html %] сек</p>
81        [% IF query.explain %]
82          <pre>[% query.explain FILTER html %]</pre>
83        [% END %]
84      [% END %]
85    </div>
86  [% END %]
87
88  [% IF user.settings.display_quips.value == 'on' %]
89    [% DEFAULT quip = "$terms.Bugzilla добавляет сюда произвольную цитату, но увы, сейчас сборник цитат пуст!" %]
90    <span class="bz_quip">
91      <a href="quips.cgi"><em>[% quip FILTER html %]</em></a>
92    </span>
93  [% END %]
94
95</div>
96
97[% IF toolong %]
98  <h2 class="bz_smallminded">
99    Размер списка слишком велик для [% terms.Bugzilla %]; кнопки навигации
100    на страницах отдельных [% terms.bugs_gen %] отключены.
101  </h2>
102[% END %]
103
104[% SET shown_types = [
105  'notequals', 'regexp', 'notregexp', 'lessthan', 'lessthaneq',
106  'greaterthan', 'greaterthaneq', 'changedbefore', 'changedafter',
107  'changedfrom', 'changedto', 'changedby', 'notsubstring', 'nowords',
108  'nowordssubstr', 'notmatches',
109] %]
110<a id="search_description_controller" class="bz_default_hidden"
111   href="javascript:TUI_toggle_class('search_description')">Скрыть описание поиска</a>
112[%# Show the link if the browser supports JS %]
113<script type="text/javascript">
114  TUI_alternates['search_description'] = 'Показать описание поиска';
115  YAHOO.util.Dom.removeClass('search_description_controller',
116                             'bz_default_hidden');
117</script>
118
119<ul class="search_description">
120[% FOREACH desc_item = search_description %]
121  <li>
122    <strong>[% field_descs.${desc_item.field} FILTER html %]:</strong>
123    [% IF shown_types.contains(desc_item.type) || debug %]
124      ([% search_descs.${desc_item.type} FILTER html %])
125    [% END %]
126    [% FOREACH val IN desc_item.value.split(',') %]
127      [%+ display_value(desc_item.field, val) FILTER html %][% ',' UNLESS loop.last %]
128    [% END %]
129    [% IF debug %]
130      (<code>[% desc_item.term FILTER html %]</code>)
131   [% END %]
132  </li>
133[% END %]
134</ul>
135
136<hr>
137
138[%############################################################################%]
139[%# Preceding Status Line                                                    #%]
140[%############################################################################%]
141
142[% IF bugs.size > 9 %]
143  [% PROCESS num_results %]
144[% END %]
145
146[%############################################################################%]
147[%# Start of Change Form                                                     #%]
148[%############################################################################%]
149
150[% IF dotweak %]
151  <form name="changeform" method="post" action="process_bug.cgi">
152[% END %]
153
154[%############################################################################%]
155[%# Bug Table                                                                #%]
156[%############################################################################%]
157
158[% PROCESS list/table.html.tmpl %]
159
160[%############################################################################%]
161[%# Succeeding Status Line                                                   #%]
162[%############################################################################%]
163
164[% PROCESS num_results %]
165
166[% IF bugs.size == 0 %]
167  <ul class="zero_result_links">
168    <li>[% PROCESS enter_bug_link %]</li>
169    [% IF one_product.defined %]
170      <li><a href="enter_bug.cgi">Зарегистрировать новую [% terms.bug_acc %] в
171        другом продукте</a></li>
172    [% END %]
173    <li><a href="[% PROCESS edit_search_url %]">Изменить условия поиска</a></li>
174    <li><a href="query.cgi">Начать поиск заново</a></li>
175  </ul>
176[% END %]
177
178<br>
179
180[%############################################################################%]
181[%# Rest of Change Form                                                      #%]
182[%############################################################################%]
183
184[% IF dotweak %]
185  [% PROCESS "list/edit-multiple.html.tmpl" %]
186  </form>
187  <hr>
188[% END %]
189
190[%############################################################################%]
191[%# Navigation Bar                                                           #%]
192[%############################################################################%]
193
194<table>
195  <tr>
196    [% IF bugs.size > 0 %]
197      <td valign="middle" class="bz_query_buttons">
198        <form method="post" action="show_bug.cgi">
199          [% id = buglist.join(",") %]
200          <input type="hidden" name="id" value="[% id FILTER html %]">
201          <input type="hidden" name="format" value="multiple">
202          <input type="submit" id="long_format" value="Подробно">
203        </form>
204        <form method="post" action="show_bug.cgi">
205            <input type="hidden" name="ctype" value="xml">
206          [% FOREACH id = buglist %]
207            <input type="hidden" name="id" value="[% id FILTER html %]">
208          [% END %]
209            <input type="hidden" name="excludefield" value="attachmentdata">
210            <input type="submit" value="XML" id="xml">
211        </form>
212
213        [% IF user.is_timetracker %]
214          <form method="post" action="summarize_time.cgi">
215            <input type="hidden" name="id" value="[% buglist_joined FILTER html %]">
216            <input type="submit" id="timesummary" value="Сводка времени">
217          </form>
218          [% IF time_summary_limited %]
219            <small>
220              Сводка времени включает в себя только показанные выше [% terms.bugs %]. Чтобы
221              просмотреть сводку времени для всех [% terms.bugs_gen %], найденных поиском, вы можете
222              <a href="buglist.cgi?[% urlquerypart FILTER html %]
223                       [%- "&order=$qorder" FILTER html IF order %]&limit=0">
224                Отобразить все результаты поиска</a>.</small>
225          [% END %]
226        [% END %]
227      </td>
228
229      <td>&nbsp;</td>
230
231      <td valign="middle" class="bz_query_links">
232        <a href="buglist.cgi?
233        [% urlquerypart FILTER html %]&amp;ctype=csv&amp;human=1">CSV</a> |
234        <a href="buglist.cgi?
235        [% urlquerypart FILTER html %]&amp;title=
236        [%- title FILTER html %]&amp;ctype=atom">RSS</a> |
237        <a href="buglist.cgi?
238        [% urlquerypart FILTER html %]&amp;ctype=ics">iCalendar</a> |
239        <a href="colchange.cgi?
240        [% urlquerypart FILTER html %]&amp;query_based_on=
241          [% defaultsavename OR searchname FILTER uri %]">Формат&nbsp;вывода</a> |
242
243        [% IF bugs.size > 1 && caneditbugs && !dotweak %]
244          <a href="buglist.cgi?[% urlquerypart FILTER html %]
245            [%- "&order=$qorder" FILTER html IF order %]&amp;tweak=1"
246            >Групповое&nbsp;редактирование&nbsp;[% terms.bugs_gen %]</a>
247          |
248        [% END %]
249
250        [% IF bugowners && user.id %]
251          <a href="mailto:
252            [% bugowners FILTER html %]">Отправить&nbsp;сообщения&nbsp;исполнителям&nbsp;[% terms.bugs_gen %]</a> |
253        [% END %]
254
255        [%# Links to more things users can do with this bug list. %]
256        [% Hook.process("links") %]
257      </td>
258    [% END %]
259
260    <td valign="middle" class="bz_query_edit">
261      <a href="[% PROCESS edit_search_url %]">Изменить&nbsp;отбор</a>
262    </td>
263
264    [% IF searchtype == "saved" %]
265      <td valign="middle" nowrap="nowrap" class="bz_query_forget">
266        |
267        <a href="buglist.cgi?cmdtype=dorem&amp;remaction=forget&amp;namedcmd=
268                [% searchname FILTER uri %]&amp;token=
269                [% issue_hash_token([search_id, searchname]) FILTER uri %]">
270          Удалить&nbsp;отбор&nbsp;'[% searchname FILTER html %]'</a>
271      </td>
272    [% ELSE %]
273      <td>&nbsp;</td>
274
275      <td valign="middle" class="bz_query_remember">
276        <form method="get" action="buglist.cgi">
277          <input type="submit" id="remember" value="Сохранить условия отбора"> как
278          <input type="hidden" name="newquery"
279                 value="[% urlquerypart FILTER html %][% "&order=$qorder" FILTER html IF order %]">
280          <input type="hidden" name="cmdtype" value="doit">
281          <input type="hidden" name="remtype" value="asnamed">
282          <input type="hidden" name="token" value="[% issue_hash_token(['savedsearch']) FILTER html %]">
283          <input type="text" id="save_newqueryname" name="newqueryname" size="20"
284                 title="Имя нового запроса" value="[% defaultsavename FILTER html %]">
285        </form>
286      </td>
287    [% END %]
288  </tr>
289</table>
290
291[% IF one_product.defined && bugs.size %]
292  <p class="bz_query_single_product">
293    [% PROCESS enter_bug_link %]
294  </p>
295[% END %]
296
297[%############################################################################%]
298[%# Page Footer                                                              #%]
299[%############################################################################%]
300
301[% PROCESS global/footer.html.tmpl %]
302
303[%##########%]
304[%# Blocks #%]
305[%##########%]
306
307[% BLOCK edit_search_url %]
308  [% editqueryname = searchname OR defaultsavename OR '' %]
309  query.cgi?[% urlquerypart FILTER html %]
310    [%- IF editqueryname != '' %]&amp;known_name=
311      [%- editqueryname FILTER uri %]
312    [% END %]
313[% END %]
314
315[% BLOCK enter_bug_link %]
316  <a href="enter_bug.cgi
317           [%- IF one_product.defined %]?product=
318             [%- one_product.name FILTER uri %][% END %]">Зарегистрировать
319    новую [% terms.bug_acc %]
320   [% IF one_product.defined %]
321     для продукта "[% one_product.name FILTER html %]"
322   [% END %]</a>
323[% END %]
324
325[% BLOCK num_results %]
326  <span class="bz_result_count">
327    [% IF bugs.size == 0 %]
328      <span class="zero_results">[% terms.zeroSearchResults %].</span>
329    [% ELSIF default_limited AND bugs.size >= Param('default_search_limit') %]
330      Этот результат был ограничен [% Param('default_search_limit') FILTER html %]
331      [%+ terms.bugs_abl %].
332      <a href="buglist.cgi?[% urlquerypart FILTER html %]
333              [%- "&order=$qorder" FILTER html IF order %]&limit=0">Отобразить
334        все результаты поиска для этого запроса</a>.
335      [% time_summary_limited = 1 %]
336    [% ELSIF bugs.size == 1 %]
337      Найдена одна [% terms.bug %].
338    [% ELSE %]
339      Найдено [% bugs.size %] [%+ terms.bugs_gen %].
340    [% END %]
341  </span>
342[% END %]
343