| [%# This Source Code Form is subject to the terms of the Mozilla Public |
| # License, v. 2.0. If a copy of the MPL was not distributed with this |
| # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| # |
| # This Source Code Form is "Incompatible With Secondary Licenses", as |
| # defined by the Mozilla Public License, v. 2.0. |
| #%] |
| |
| [%# INTERFACE: |
| # events: hash, keyed by event_id number. Values are anonymous hashes of: |
| # schedule: array of hashes containing schedule info: |
| # day: value in day column |
| # time: value selected in time column |
| # mailto_type: 0=user 1=group |
| # mailto: recipient's id (profile or group) |
| # queries: as with schedule, an anonymous array containing hashes of: |
| # name: the named query's name |
| # title: title to be displayed on the results |
| # sort: integer that sets execution order on named queries |
| #%] |
| |
| [% title = "Set up whining" %] |
| [% PROCESS global/header.html.tmpl |
| title = title |
| style_urls = ['skins/standard/admin.css'] |
| doc_section = "using/index.html" |
| %] |
| |
| <p> |
| "Whining" is when Bugzilla executes a saved search at a regular interval |
| and sends the resulting list of [% terms.bugs %] via email. |
| </p> |
| |
| <p> |
| To set up a new whine event, click "Add a new event." Enter a subject line |
| for the message that will be sent, along with a block of text that will |
| accompany the [% terms.bug %] list in the body of the message. |
| </p> |
| |
| <p> |
| Schedules are added to an event by clicking on "Add a new schedule." A schedule |
| consists of a day, a time of day or interval of times |
| (e.g., every 15 minutes), and a target email address that may or may not be |
| alterable, depending on your privileges. Events may have more than one schedule |
| in order to run at multiple times or for different users. |
| </p> |
| |
| <p> |
| Searches come from saved searches, which are created by executing a <a |
| href="query.cgi">search</a>, then telling Bugzilla to remember |
| the search under a particular name. Add a search by clicking "Add a |
| search", and select the desired saved search name under "Search" and add a |
| title for the [% terms.bug %] table. The optional number entered under |
| "Sort" will determine the execution order (lowest to highest) if multiple |
| queries are listed. If you check "One message per [% terms.bug %]," each [% |
| terms.bug %] that matches the search will be sent in its own email message. |
| </p> |
| |
| <p> |
| All times are server local time ([% local_timezone FILTER html %]). |
| </p> |
| |
| <form method="post" action="editwhines.cgi"> |
| [%# This hidden submit button must be here to set default behavior when |
| the user presses return on a form input field #%] |
| <input type="submit" value="Update / Commit" id="commit" name="commit" |
| class="bz_default_hidden"> |
| <input type="hidden" name="update" value="1"> |
| <input type="hidden" name="token" value="[% token FILTER html %]"> |
| |
| [% FOREACH event = events %] |
| |
| <table class="whining_list"> |
| <tr> |
| <th class="subtitle">Event:</th> |
| <th colspan="2"> |
| <input type="submit" value="Remove Event" |
| name="remove_event_[% event.key %]" |
| id="remove_event_[% event.key %]"> |
| </th> |
| </tr> |
| |
| <tr> |
| <th>Email subject line:</th> |
| <td colspan="2"> |
| <input type="text" name="event_[% event.key %]_subject" |
| size="60" maxlength="128" value=" |
| [%- event.value.subject FILTER html %]"> |
| </td> |
| </tr> |
| |
| <tr> |
| <th>Descriptive text sent within whine message:</th> |
| <td colspan="2"> |
| [% INCLUDE global/textarea.html.tmpl |
| name = "event_${event.key}_body" |
| minrows = 3 |
| maxrows = 10 |
| defaultrows = 5 |
| cols = 80 |
| defaultcontent = event.value.body |
| %] |
| </td> |
| </tr> |
| |
| <tr> |
| <th>Send a message even if there are no [% terms.bugs %] in the search result:</th> |
| <td colspan="2"> |
| <input type="checkbox" name="event_[% event.key %]_mailifnobugs" |
| [%- IF event.value.mailifnobugs == 1 %] checked [% END %]> |
| </td> |
| </tr> |
| |
| [% IF event.value.schedule.size == 0 %] |
| |
| <tr> |
| <th>Schedule:</th> |
| <td class="unset" colspan="2"> |
| Not scheduled to run<br> |
| <input type="submit" value="Add a new schedule" |
| name="add_schedule_[% event.key %]" |
| id="add_schedule_[% event.key %]"> |
| </td> |
| </tr> |
| |
| [% ELSE %] |
| |
| <tr> |
| <th>Schedule:</th> |
| <td class="set" colspan="2"> |
| |
| <table class="schedule_list"> |
| <tr> |
| <th>Interval</th> |
| <th> |
| [% IF mail_others %] |
| Mail to |
| [% END %] |
| </th> |
| <th></th> |
| </tr> |
| |
| [% FOREACH schedule = event.value.schedule %] |
| <tr> |
| <td> |
| [%# these hidden fields allow us to compare old values instead |
| of reading the database to tell if a field has changed %] |
| |
| <input type="hidden" value="[% schedule.day FILTER html %]" |
| name="orig_day_[% schedule.id %]"> |
| <input type="hidden" value="[% schedule.time FILTER html %]" |
| name="orig_time_[% schedule.id %]"> |
| [% PROCESS day_field val=schedule.day %] |
| [% PROCESS time_field val=schedule.time %] |
| </td> |
| <td> |
| [% IF mail_others %] |
| <input type="hidden" name="orig_mailto_type_[% schedule.id %]" |
| value="[% schedule.mailto_type FILTER html %]"> |
| <select name="mailto_type_[% schedule.id %]"> |
| <option value="0" [% IF schedule.mailto_type == 0 %] |
| selected |
| [% END %]>User</option> |
| <option value="1" [% IF schedule.mailto_type == 1 %] |
| selected |
| [% END %]>Group</option> |
| </select> |
| <input type="hidden" name="orig_mailto_[% schedule.id %]" |
| value="[% schedule.mailto FILTER html %]"> |
| <input type="text" name="mailto_[% schedule.id %]" |
| value="[% schedule.mailto FILTER html %]" size="30"> |
| [% END %] |
| </td> |
| <td> |
| <input type="submit" value="Remove" |
| name="remove_schedule_[% schedule.id %]" |
| id="remove_schedule_[% schedule.id %]"> |
| </td> |
| </tr> |
| [% END %] |
| |
| <tr> |
| <td colspan="3"> |
| <input type="submit" value="Add a new schedule" |
| name="add_schedule_[% event.key %]" |
| id="add_schedule_[% event.key %]"> |
| </td> |
| </tr> |
| </table> |
| |
| </td> |
| </tr> |
| |
| [% END %] |
| |
| [% IF event.value.queries.size == 0 %] |
| |
| <tr> |
| <th>Searches:</th> |
| <td> |
| No searches <br> |
| <input type="submit" value="Add a search" |
| name="add_query_[% event.key %]" |
| id="add_query_[% event.key %]"> |
| </td> |
| <td class="right"> |
| <input type="submit" value="Update / Commit" name="commit" id="update"> |
| </td> |
| </tr> |
| |
| [% ELSE %] |
| |
| <tr> |
| <th>Searches:</th> |
| <td colspan="2"> |
| |
| <table class="search_list"> |
| <tr> |
| <th>Sort</th> |
| <th>Search</th> |
| <th>Title</th> |
| <th colspan="2"></th> |
| </tr> |
| |
| [% FOREACH query = event.value.queries %] |
| |
| <tr> |
| <td> |
| <input type="text" name="query_sort_[% query.id %]" |
| size="3" value="[% query.sort %]"> |
| <input type="hidden" value="[% query.sort %]" |
| name="orig_query_sort_[% query.id %]"> |
| </td> |
| <td> |
| <input type="hidden" value="[% query.name FILTER html %]" |
| name="orig_query_name_[% query.id %]"> |
| [% PROCESS query_field thisquery=query.name %] |
| </td> |
| <td> |
| <input type="hidden" value="[% query.title FILTER html %]" |
| name="orig_query_title_[% query.id %]"> |
| <input type="text" name="query_title_[% query.id %]" |
| size="50" value="[% query.title FILTER html %]" |
| maxlength="64"> |
| </td> |
| <td> |
| <input type="hidden" value="[% query.onemailperbug FILTER html %]" |
| name="orig_query_onemailperbug_[% query.id %]"> |
| <input type="checkbox" [% IF query.onemailperbug == 1 %] checked [% END %] |
| id="query_onemailperbug_[% query.id %]" |
| name="query_onemailperbug_[% query.id %]"> |
| <label for="query_onemailperbug_[% query.id %]">One message per [% terms.bug %]</label> |
| </td> |
| <td> |
| <input type="submit" value="Remove" |
| name="remove_query_[% query.id %]" |
| id="remove_query_[% query.id %]"> |
| </td> |
| </tr> |
| |
| [% END %] |
| |
| <tr> |
| <td colspan="3"> |
| <input type="submit" value="Add a search" |
| name="add_query_[% event.key %]" |
| id="add_query_[% event.key %]"> |
| </td> |
| <td colspan="2" class="right"> |
| <input type="submit" value="Update / Commit" name="commit" id="update"> |
| </td> |
| </tr> |
| </table> |
| |
| </td> |
| </tr> |
| |
| [% END %] |
| |
| </table> |
| |
| [% END %] |
| |
| <p> |
| <input type="submit" value="Add a new event" name="add_event" id="add_event"> |
| </p> |
| |
| </form> |
| |
| [% PROCESS global/footer.html.tmpl %] |
| |
| [% BLOCK query_field +%] |
| |
| [% IF available_queries.size > 0 %] |
| |
| <select name="query_name_[% query.id %]"> |
| [% FOREACH q = available_queries %] |
| <option [% "selected" IF q == thisquery %] value="[% q FILTER html %]"> |
| [% q FILTER html %] |
| </option> |
| [% END %] |
| </select> |
| |
| [% ELSE %] |
| Please visit the <a href="query.cgi">Search</a> page and save a search |
| [% END %] |
| |
| [%+ END %] |
| |
| [% BLOCK day_field +%] |
| <select name="day_[% schedule.id %]"> |
| [% |
| options = [ |
| ['All', 'Each day', ], |
| ['MF', 'Monday through Friday', ], |
| ['Sun', 'Sunday', ], |
| ['Mon', 'Monday', ], |
| ['Tue', 'Tuesday', ], |
| ['Wed', 'Wednesday', ], |
| ['Thu', 'Thursday', ], |
| ['Fri', 'Friday', ], |
| ['Sat', 'Saturday', ], |
| ['1', 'On the 1st of the month', ], |
| ['2', 'On the 2nd of the month', ], |
| ['3', 'On the 3rd of the month', ], |
| ['4', 'On the 4th of the month', ], |
| ['5', 'On the 5th of the month', ], |
| ['6', 'On the 6th of the month', ], |
| ['7', 'On the 7th of the month', ], |
| ['8', 'On the 8th of the month', ], |
| ['9', 'On the 9th of the month', ], |
| ['10', 'On the 10th of the month', ], |
| ['11', 'On the 11th of the month', ], |
| ['12', 'On the 12th of the month', ], |
| ['13', 'On the 13th of the month', ], |
| ['14', 'On the 14th of the month', ], |
| ['15', 'On the 15th of the month', ], |
| ['16', 'On the 16th of the month', ], |
| ['17', 'On the 17th of the month', ], |
| ['18', 'On the 18th of the month', ], |
| ['19', 'On the 19th of the month', ], |
| ['20', 'On the 20th of the month', ], |
| ['21', 'On the 21st of the month', ], |
| ['22', 'On the 22nd of the month', ], |
| ['23', 'On the 23rd of the month', ], |
| ['24', 'On the 24th of the month', ], |
| ['25', 'On the 25th of the month', ], |
| ['26', 'On the 26th of the month', ], |
| ['27', 'On the 27th of the month', ], |
| ['28', 'On the 28th of the month', ], |
| ['29', 'On the 29th of the month', ], |
| ['30', 'On the 30th of the month', ], |
| ['31', 'On the 31st of the month', ], |
| ['last', 'Last day of the month', ], |
| ] |
| %] |
| |
| [% FOREACH option = options %] |
| <option value="[% option.0 %]" |
| [%- IF val == option.0 +%] selected[% END %]> |
| [%- option.1 -%] |
| </option> |
| [% END %] |
| |
| </select> |
| [%+ END %] |
| |
| [% BLOCK time_field +%] |
| <select name="time_[% schedule.id %]"> |
| |
| [% |
| options = [ |
| [ '0', 'at midnight', ], |
| [ '1', 'at 01:00', ], |
| [ '2', 'at 02:00', ], |
| [ '3', 'at 03:00', ], |
| [ '4', 'at 04:00', ], |
| [ '5', 'at 05:00', ], |
| [ '6', 'at 06:00', ], |
| [ '7', 'at 07:00', ], |
| [ '8', 'at 08:00', ], |
| [ '9', 'at 09:00', ], |
| [ '10', 'at 10:00', ], |
| [ '11', 'at 11:00', ], |
| [ '12', 'at 12:00', ], |
| [ '13', 'at 13:00', ], |
| [ '14', 'at 14:00', ], |
| [ '15', 'at 15:00', ], |
| [ '16', 'at 16:00', ], |
| [ '17', 'at 17:00', ], |
| [ '18', 'at 18:00', ], |
| [ '19', 'at 19:00', ], |
| [ '20', 'at 20:00', ], |
| [ '21', 'at 21:00', ], |
| [ '22', 'at 22:00', ], |
| [ '23', 'at 23:00', ], |
| [ '60min', 'every hour', ], |
| [ '30min', 'every 30 minutes', ], |
| [ '15min', 'every 15 minutes', ], |
| ] |
| %] |
| |
| [% FOREACH option = options %] |
| <option value="[% option.0 %]" |
| [%- IF val == option.0 +%] selected[% END %]> |
| [%- option.1 -%] |
| </option> |
| [% END %] |
| |
| </select> |
| |
| [%+ END %] |