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  # events: hash, keyed by event_id number.  Values are anonymous hashes of:
11  #     schedule: array of hashes containing schedule info:
12  #         day:    value in day column
13  #         time:   value selected in time column
14  #         mailto_type: 0=user 1=group
15  #         mailto: recipient's id (profile or group)
16  #     queries:  as with schedule, an anonymous array containing hashes of:
17  #         name:  the named query's name
18  #         title: title to be displayed on the results
19  #         sort:  integer that sets execution order on named queries
20  #%]
21
22[% title = "whine の設定" %]
23[% PROCESS global/header.html.tmpl
24  title = title
25  style_urls = ['skins/standard/admin.css']
26  doc_section = "using/index.html"
27%]
28
29<p>
30  "Whine" は Bugzilla が保存された検索をある指定された間隔で実行し、
31  その結果の [% terms.bugs %] リストをメールで送信するものです。
32</p>
33
34<p>
35  新規の whine を設定するには、"新規追加" をクリックしてください。
36  送信されるメッセージのタイトルを設定し、
37  メッセージの本文の [% terms.bug %] リストに追加される文章を入力してください。
38</p>
39
40<p>
41  "新規追加" をクリックするとイベントに設定されます。
42  whine スケジュールには、日付、時間もしくは時間間隔 (15 分おきなど)、
43  あなたの権限によりますが変更可能・不可が選択可能な送信先メールアドレスの設定が可能です。
44  異なる検索や異なるユーザに対して実行するために、
45  ひとつ以上のスケジュールがイベントに設定可能です。
46</p>
47
48<p>
49  <a href="query.cgi">検索</a> から作成可能な保存された検索を利用する場合、
50  Bugzilla に特定の名称の検索を利用するように設定することになります。
51  "新規追加" をクリックして、保存された検索を "検索" で選択し、[% terms.bug %]
52  の表にタイトルをつけます。"ソート" に入力された番号 (オプション) は、
53  複数の検索が登録されているときに実行する順序 (小さいものから大きいもの) を指定します。
54  もし、"ひとつの [% terms.bug %] にひとつのメール" オプションを選択した場合、
55  検索に合致する [% terms.bug %] が、それぞれひとつのメールとして送信されます。
56</p>
57
58<p>
59  すべての時刻はサーバのロケール ([% local_timezone FILTER html %]) での表示です。
60</p>
61
62<form method="post" action="editwhines.cgi">
63[%# This hidden submit button must be here to set default behavior when
64    the user presses return on a form input field #%]
65<input type="submit" value="更新 / 追加" id="commit" name="commit"
66       class="bz_default_hidden">
67<input type="hidden" name="update" value="1">
68<input type="hidden" name="token" value="[% token FILTER html %]">
69
70[% FOREACH event = events %]
71
72<table class="whining_list">
73  <tr>
74    <th class="subtitle">イベント:</th>
75    <th colspan="2">
76      <input type="submit" value="イベントの削除"
77             name="remove_event_[% event.key %]"
78             id="remove_event_[% event.key %]">
79    </th>
80  </tr>
81
82  <tr>
83    <th>メールのタイトル:</th>
84    <td colspan="2">
85      <input type="text" name="event_[% event.key %]_subject"
86             size="60" maxlength="128" value="
87             [%- event.value.subject FILTER html %]">
88    </td>
89  </tr>
90
91  <tr>
92    <th>whine メッセージに付ける説明の文章:</td>
93    <td colspan="2">
94      [% INCLUDE global/textarea.html.tmpl
95         name           = "event_${event.key}_body"
96         minrows        = 3
97         maxrows        = 10
98         defaultrows    = 5
99         cols           = 80
100         defaultcontent = event.value.body
101       %]
102    </td>
103  </tr>
104
105  <tr>
106    <th>検索結果に該当する [% terms.bugs %] が存在しないときもメッセージを送信する:</th>
107    <td colspan="2">
108      <input type="checkbox" name="event_[% event.key %]_mailifnobugs"
109        [%- IF event.value.mailifnobugs == 1 %] checked [% END %]>
110    </td>
111  </tr>
112
113  [% IF event.value.schedule.size == 0 %]
114
115    <tr>
116      <td valign="top" align="right">
117        スケジュール:
118      </td>
119      <td class="unset" colspan="2">
120        指定済みのスケジュールがありません<br>
121        <input type="submit" value="スケジュールの追加"
122               name="add_schedule_[% event.key %]"
123               id="add_schedule_[% event.key %]">
124      </td>
125    </tr>
126
127  [% ELSE %]
128
129    <tr>
130      <th>スケジュール:</th>
131      <td align="left" bgcolor="#EEFFEE">
132
133        <table class="schedule_list">
134          <tr>
135            <th>
136              間隔
137            </th>
138            <th>
139              [% IF mail_others %]
140                メール送信先
141              [% END %]
142            </th>
143            <th>
144            </th>
145          </tr>
146          [% FOREACH schedule = event.value.schedule %]
147            <tr>
148              <td>
149
150                [%# these hidden fields allow us to compare old values instead
151                    of reading the database to tell if a field has changed %]
152
153                <input type="hidden" value="[% schedule.day FILTER html %]"
154                       name="orig_day_[% schedule.id %]">
155                <input type="hidden" value="[% schedule.time FILTER html %]"
156                       name="orig_time_[% schedule.id %]">
157                [% PROCESS day_field val=schedule.day %]
158                [% PROCESS time_field val=schedule.time %]
159              </td>
160              <td>
161                [% IF mail_others %]
162                  <input type="hidden" name="orig_mailto_type_[% schedule.id %]"
163                         value="[% schedule.mailto_type FILTER html %]">
164                  <select name="mailto_type_[% schedule.id %]">
165                    <option value="0" [% IF schedule.mailto_type == 0 %]
166                                        selected
167                                      [% END %]>ユーザ</option>
168                    <option value="1" [% IF schedule.mailto_type == 1 %]
169                                        selected
170                                      [% END %]>グループ</option>
171                  </select>
172                  <input type="hidden" name="orig_mailto_[% schedule.id %]"
173                         value="[% schedule.mailto FILTER html %]">
174                  <input type="text" name="mailto_[% schedule.id %]"
175                         value="[% schedule.mailto FILTER html %]" size="30">
176                [% END %]
177              </td>
178              <td>
179                <input type="submit" value="削除"
180                       name="remove_schedule_[% schedule.id %]"
181                       id="remove_schedule_[% schedule.id %]">
182              </td>
183            </tr>
184          [% END %]
185
186        <tr>
187          <td colspan="3">
188            <input type="submit" value="新規スケジュール追加"
189                   name="add_schedule_[% event.key %]"
190                   id="add_schedule_[% event.key %]">
191          </td>
192        </tr>
193
194        </table>
195
196      </td>
197    </tr>
198
199  [% END %]
200
201  [% IF event.value.queries.size == 0 %]
202
203    <tr>
204      <th>検索:</th>
205      <td>
206        指定済みの検索がありません <br>
207        <input type="submit" value="検索の追加"
208               name="add_query_[% event.key %]"
209               id="add_query_[% event.key %]">
210      </td>
211      <td class="right">
212        <input type="submit" value="更新 / 追加" name="commit" id="update">
213      </td>
214    </tr>
215
216  [% ELSE %]
217
218    <tr>
219      <th>検索:</th>
220      <td colspan="2">
221
222        <table class="search_list">
223          <tr>
224            <th>ソート</th>
225            <th>検索</th>
226            <th>タイトル</th>
227            <th colspan="2"></th>
228          </tr>
229
230          [% FOREACH query = event.value.queries %]
231
232            <tr>
233              <td>
234                <input type="text" name="query_sort_[% query.id %]"
235                       size="3" value="[% query.sort %]">
236                <input type="hidden" value="[% query.sort %]"
237                       name="orig_query_sort_[% query.id %]">
238              </td>
239              <td>
240                <input type="hidden" value="[% query.name FILTER html %]"
241                       name="orig_query_name_[% query.id %]">
242                [% PROCESS query_field thisquery=query.name %]
243              </td>
244              <td>
245                <input type="hidden" value="[% query.title FILTER html %]"
246                       name="orig_query_title_[% query.id %]">
247                <input type="text" name="query_title_[% query.id %]"
248                       size="50" value="[% query.title FILTER html %]"
249                       maxlength="64">
250              </td>
251              <td>
252                <input type="hidden" value="[% query.onemailperbug FILTER html %]"
253                       name="orig_query_onemailperbug_[% query.id %]">
254                <input type="checkbox" [% IF query.onemailperbug == 1 %] checked [% END %]
255                       id="query_onemailperbug_[% query.id %]"
256                       name="query_onemailperbug_[% query.id %]">
257                <label for="query_onemailperbug_[% query.id %]">[% terms.bug %] ごとにメール</label>
258              </td>
259              <td>
260                <input type="submit" value="削除"
261                       name="remove_query_[% query.id %]"
262                       id="remove_query_[% query.id %]">
263              </td>
264            </tr>
265
266          [% END %]
267
268          <tr>
269            <td colspan="3">
270              <input type="submit" value="新規検索の追加"
271                     name="add_query_[% event.key %]"
272                     id="add_query_[% event.key %]">
273            </td>
274            <td colspan="2" class="right">
275              <input type="submit" value="更新 / 追加" name="commit" id="update">
276            </td>
277          </tr>
278        </table>
279
280      </td>
281    </tr>
282
283  [% END %]
284
285</table>
286
287[% END %]
288
289<p>
290  <input type="submit" value="新規追加" name="add_event" id="add_event">
291</p>
292
293</form>
294
295[% PROCESS global/footer.html.tmpl %]
296
297[% BLOCK query_field +%]
298
299  [% IF available_queries.size > 0 %]
300
301    <select name="query_name_[% query.id %]">
302      [% FOREACH q = available_queries %]
303        <option [% "selected" IF q == thisquery %] value="[% q FILTER html %]">
304            [% q FILTER html %]
305        </option>
306      [% END %]
307    </select>
308
309  [% ELSE %]
310    <a href="query.cgi">検索</a> ページから検索条件を保存してください
311  [% END %]
312
313[%+ END %]
314
315[% BLOCK day_field +%]
316  <select name="day_[% schedule.id %]">
317      [%
318        options = [
319            ['All',  '毎日',                 ],
320            ['MF',   '月から金',    ],
321            ['Sun',  '日',                   ],
322            ['Mon',  '月',                   ],
323            ['Tue',  '火',                  ],
324            ['Wed',  '水',                ],
325            ['Thu',  '木',                 ],
326            ['Fri',  '金',                   ],
327            ['Sat',  '土',                 ],
328            ['1',    '毎月 1 日',  ],
329            ['2',    '毎月 2 日',  ],
330            ['3',    '毎月 3 日',  ],
331            ['4',    '毎月 4 日',  ],
332            ['5',    '毎月 5 日',  ],
333            ['6',    '毎月 6 日',  ],
334            ['7',    '毎月 7 日',  ],
335            ['8',    '毎月 8 日',  ],
336            ['9',    '毎月 9 日',  ],
337            ['10',   '毎月 10 日', ],
338            ['11',   '毎月 11 日', ],
339            ['12',   '毎月 12 日', ],
340            ['13',   '毎月 13 日', ],
341            ['14',   '毎月 14 日', ],
342            ['15',   '毎月 15 日', ],
343            ['16',   '毎月 16 日', ],
344            ['17',   '毎月 17 日', ],
345            ['18',   '毎月 18 日', ],
346            ['19',   '毎月 19 日', ],
347            ['20',   '毎月 20 日', ],
348            ['21',   '毎月 21 日', ],
349            ['22',   '毎月 22 日', ],
350            ['23',   '毎月 23 日', ],
351            ['24',   '毎月 24 日', ],
352            ['25',   '毎月 25 日', ],
353            ['26',   '毎月 26 日', ],
354            ['27',   '毎月 27 日', ],
355            ['28',   '毎月 28 日', ],
356            ['29',   '毎月 29 日', ],
357            ['30',   '毎月 30 日', ],
358            ['31',   '毎月 31 日', ],
359            ['last', '毎月最終日',    ],
360        ]
361      %]
362
363      [% FOREACH option = options %]
364        <option value="[% option.0 %]"
365                [%- IF val == option.0 +%] selected[% END %]>
366                [%- option.1 -%]
367        </option>
368      [% END %]
369
370  </select>
371[%+ END %]
372
373[% BLOCK time_field +%]
374<select name="time_[% schedule.id %]">
375
376  [%
377    options = [
378        [ '0',     'at 00:00',      ],
379        [ '1',     'at 01:00',         ],
380        [ '2',     'at 02:00',         ],
381        [ '3',     'at 03:00',         ],
382        [ '4',     'at 04:00',         ],
383        [ '5',     'at 05:00',         ],
384        [ '6',     'at 06:00',         ],
385        [ '7',     'at 07:00',         ],
386        [ '8',     'at 08:00',         ],
387        [ '9',     'at 09:00',         ],
388        [ '10',    'at 10:00',         ],
389        [ '11',    'at 11:00',         ],
390        [ '12',    'at 12:00',         ],
391        [ '13',    'at 13:00',         ],
392        [ '14',    'at 14:00',         ],
393        [ '15',    'at 15:00',         ],
394        [ '16',    'at 16:00',         ],
395        [ '17',    'at 17:00',         ],
396        [ '18',    'at 18:00',         ],
397        [ '19',    'at 19:00',         ],
398        [ '20',    'at 20:00',         ],
399        [ '21',    'at 21:00',         ],
400        [ '22',    'at 22:00',         ],
401        [ '23',    'at 23:00',         ],
402        [ '60min', '毎時',       ],
403        [ '30min', '30 分ごと', ],
404        [ '15min', '15 分ごと', ],
405    ]
406  %]
407
408      [% FOREACH option = options %]
409        <option value="[% option.0 %]"
410                [%- IF val == option.0 +%] selected[% END %]>
411                [%- option.1 -%]
412        </option>
413      [% END %]
414
415</select>
416
417[%+ END %]
418
419