[%# Edit bug change predicates
  # License: Dual-license GPL 3.0+ or MPL 1.1+
  # Author: Vitaliy Filippov <vitalif@mail.ru>
  #%]

[%# FIXME Template is in russian %]
[%# FIXME And contains a link to CustisWiki %]

[% PROCESS global/header.html.tmpl
  title = "Правка предикатов корректности изменений"
%]

[% IF mode == "list" %]
<style>
.chkt { width: 70%; border-collapse: collapse; }
.chkt td, .chkt th { padding: 4px; border: 1px solid gray; }
</style>
 <h3>Редактирование предикатов корректности</h3>
 <h4><a href="?mode=edit&create=1">Добавить новый предикат.</a></h4>
 [% IF checkers.size %]
  <h4>Список определённых предикатов корректности:</h4>
  <table class="chkt">
  <tr style="background-color: #ccc">
   <th style="width: 10%">Название поиска</th>
   <th>Запрет</th>
   <th>Режим</th>
   <th title="Проверяются ли новые баги?">C</th>
   <th title="Проверяются ли обновления багов?">U</th>
   <th>Действия</th>
   <th>Сообщение</th>
  </tr>
  [% FOR c = checkers %]
  <tr>
   <td><a href="?mode=edit&id=[% c.id %]">[% c.name | html %]</a></td>
   [% IF c.triggers %]
   <td style="background-color: #ddf; text-align: center"
       title="Вообще не запрет, а триггер: при попадании под условия запроса в баг вносятся изменения" />
     Триггер
   </td>
   [% ELSIF c.is_fatal %]
   <td style="background-color: #fdd; text-align: center"
       title="Жёсткий запрет: При нарушении правила изменения блокируются и выдаётся ошибка" />
     Жёсткий
   </td>
   [% ELSE %]
   <td style="background-color: #ffd; text-align: center"
       title="Мягкий запрет: При нарушении правила выдаётся предупреждение, но изменение не блокируется">
     Мягкий
   </td>
   [% END %]
   <td style="background-color: [% c.is_freeze ? '#ddf' : '#fdd' %]; text-align: center" title="[% c.is_freeze
       ? 'Заморозка (защита от изменения)'
       : 'Проверка корректности новых значений' %]">
     [%+ IF c.is_freeze %]Заморозка[% ELSE %]Проверка[% END %]
   </td>
   <td style="background-color: [% c.on_create ? '#cfc" title="Проверяются новые баги"' : '#fdd" title="Новые баги не проверяются"' %]>[% c.on_create ? '+' : '&nbsp;' %]</td>
   <td style="background-color: [% c.on_update ? '#cfc" title="Проверяются изменения багов"' : '#fdd" title="Изменения багов не проверяются"' %]>[% c.on_update ? '+' : '&nbsp;' %]</td>
   <td style="text-align: center; white-space: nowrap">
    <a href="?mode=edit&id=[% c.id %]" title="править"><img src="images/edit.png" width="22" height="22" /></a>
    <a href="buglist.cgi?cmdtype=dorem&amp;remaction=run&amp;namedcmd=[% c.query.name | url_quote %]
     [% IF c.query.shared_with_group.id %]&amp;sharer_id=[% c.query.user.id %][% END %]" title="выполнить поиск"><img src="images/search.png" width="22" height="22" /></a>
    <a href="query.cgi?[% c.query.query %]&amp;known_name=[% c.query.name | url_quote %]" title="править поиск"><img src="images/editsearch.png" width="22" height="22" /></a>
    <a href="javascript:void(0)" title="удалить" onclick="if(confirm('Действительно удалить эту проверку?')){window.location.href='?save=1&delete=1&id=[% c.id %]';}"><img src="images/delete.png" width="22" height="22" /></a>
   </td>
   <td>[% c.message | html %]</td>
  </tr>
  [% END %]
  </table>
 [% ELSE %]
  <p>Ещё не определено ни одного предиката корректности.</p>
 [% END %]
[% ELSE %]
 [% IF create %]
  <h3>Добавление нового предиката</h3>
 [% ELSE %]
  <h3>Редактирование предиката [% checker.name | html %]</h3>
 [% END %]
 <form action="?save=1&edit=1" method="POST" onsubmit="return check_trigger()">
 <input type="hidden" name="token" value="[% token | html %]" />
 [% IF create %]
  <input type="hidden" name="create" value="1" />
 [% ELSE %]
  <input type="hidden" name="id" value="[% checker.id %]" />
 [% END %]
 <table>
  <tbody>
  <tr>
   <th>Сохранённый запрос:</th>
   <td><select name="query_id">
    [% FOREACH q = user.queries %]
     [% SET found = 1 IF checker.query_id == q.id %]
     <option value="[% q.id %]" [% " selected='selected'" IF checker.query_id == q.id %] >[% q.name | html %]</option>
    [% END %]
    [% IF checker.query_id AND !found %]
     <option value="[% checker.query_id %]" selected='selected'>(Чужой) [% checker.query.name | html %]</option>
    [% END %]
   </select></td>
  </tr>
  <tr>
   <td colspan="2" style="padding-left: 100px">
    <input type="radio" id="is_checker" name="is_trigger" value="0" onchange="switch_trigger()" [% " checked='checked'" IF !checker.triggers %] />
    <label for="is_checker">Проверка</label>
    <input type="radio" id="is_trigger" name="is_trigger" value="1" onchange="switch_trigger()" [% " checked='checked'" IF checker.triggers %] />
    <label for="is_trigger">Триггер</label>
   </td>
  </tr>
  <tr>
   <th>Описание проверки:</th>
   <td><textarea name="message" rows="8" cols="80">[% checker.message | html %]</textarea></td>
  </tr>
  <tr>
   <th>Момент проверки:</th>
   <td>
    <input type="checkbox" name="on_create" id="on_create" [% " checked='checked'" IF checker.on_create %] onclick="this.blur()" onblur="showhide_allowdeny()" />
    <label for="on_create" id="label_for_on_create">Проверять создание новых багов (требуется «Запрещать изменения всех полей»)</label><br />
    <input type="checkbox" name="on_update" id="on_update" [% " checked='checked'" IF checker.on_update %] onclick="this.blur()" onblur="showhide_allowdeny()" />
    <label for="on_update">Проверять изменения багов</label>
   </td>
  </tr>
  </tbody>
  <tbody id="tbody_checker" [% " style='display: none'" IF checker.triggers %]>
  <tr>
   <th>Параметры:</th>
   <td>
    <input type="checkbox" name="is_freeze" id="is_freeze" [% " checked='checked'" IF checker.is_freeze %] />
    <label for="is_freeze" id="label_for_is_freeze">Заморозка багов (защита от изменений, только для режима обновления)</label><br />
    <input type="checkbox" name="is_fatal" id="is_fatal" [% " checked='checked'" IF checker.is_fatal %] />
    <label for="is_fatal">Жёсткий запрет (если нет, то изменения не блокируются, а только даётся предупреждение)</label><br />
   </td>
  </tr>
  <tr><th style="text-align: left" colspan="2">Запреты изменений отдельных полей, действуют только при обновлении багов:</th></tr>
  <tr>
   <th style="background: #FFE0E0">Запрещать:</th>
   <td style="background: #FFE0E0">
    <input type="checkbox" name="deny_all" id="deny_all" onclick="this.blur(); return true;" onblur="showhide_allowdeny()" [% " checked='checked'" IF checker.deny_all %] />
    <label for="deny_all">Запрещать изменения всех полей</label>
   </td>
  </tr>
  <tr id="except_fields_tr" style="background: #FFE0E0">
   <th id="except_fields_title"></th>
   <td id="except_fields">
    <a href="javascript:void(0)" onclick="add_field()">Добавить отдельное поле</a>
   </td>
  </tr>
  <tr><td></td><td>
   <b>Подсказка:</b> в списке есть специальное поле "Backdated worktime", с помощью которого
   можно запретить вводить трудозатраты задним числом. Например, чтобы запретить
   вводить трудозатраты задним числом раньше 2010-09-01, нужно выбрать поле
   "Backdated worktime" и значение "2010-09-01". Пустое значение означает полный
   запрет ввода трудозатрат задним числом. Флажок "Запрещать изменения всех полей"
   должен быть <b>сброшен</b>.
  </td></tr>
 </tbody>
 <tbody id="tbody_trigger" [% " style='display: none'" IF !checker.triggers %]>
  <tr>
   <th>Добавить CC:</th>
   <td><input type="text" id="triggers_add_cc" name="triggers_add_cc" value="[% checker.triggers.add_cc | html %]" /></td>
  </tr>
 </tbody>
 <tbody>
  <tr><td></td><td><input type="submit" value=" Сохранить " /></td></tr>
 </tbody>
 </table>
 </form>
 <div id="one_field_copy" style="display:none">
  поле:&nbsp;<select name="except_field_X" id="except_field_X">
   <option value="">---</option>
  [% FOR f = my_fielddefs %]
   <option value="[% f.name | html %]">[% f.description | html %]</option>
  [% END %]
  </select> &nbsp;
  новое&nbsp;значение:&nbsp;<input type="text" name="except_field_X_value" id="except_field_X_value" value="" /> (пусто=любое)
 </div>
<script language="JavaScript">
var fieldids = { '':'' [% FOR f = my_fielddefs %],"[% f.name | js %]": [% loop.count %][% END %] };
var except_field_index = 0;
function showhide_allowdeny()
{
  var chk = document.getElementById('deny_all').checked;
  document.getElementById('except_fields_title').innerHTML = chk ? 'Но разрешать:' : '';
  document.getElementById('except_fields_tr').style.backgroundColor = chk ? '#E0FFE0' : '#FFE0E0';
}
function add_field(fld, val)
{
  var d = document.createElement('div');
  d.innerHTML = document.getElementById('one_field_copy').innerHTML.replace(/except_field_X/g, 'except_field_'+except_field_index);
  document.getElementById('except_fields').appendChild(d);
  if (fld && fieldids[fld])
  {
    document.getElementById('except_field_'+except_field_index).selectedIndex = fieldids[fld];
    if (val)
      document.getElementById('except_field_'+except_field_index+'_value').value = val;
  }
  except_field_index++;
}
function switch_trigger()
{
  var f = document.getElementById('is_trigger').checked;
  document.getElementById('tbody_checker').style.display = f ? 'none' : '';
  document.getElementById('tbody_trigger').style.display = f ? '' : 'none';
}
function check_trigger()
{
  var f = document.getElementById('is_trigger').checked;
  var cc = document.getElementById('triggers_add_cc');
  if (!f)
    cc.value = '';
  else if (!cc.value)
  {
    alert('Задайте действие триггера!');
    return false;
  }
  return true;
}
[%# Загружаем текущее состояние дел %]
showhide_allowdeny();
[% IF checker.except_fields %]
 [% FOR f = checker.except_fields.keys %]
add_field("[% f | js %]", "[% checker.except_fields.$f | js %]");
 [% END %]
[% ELSE %]
add_field();
[% END %]
</script>
[% END %]

<table style="border:5px solid #00A000;border-collapse:collapse;margin-top:1em"><tr>
<td style="border-right:5px solid #00A000;color:#00A000;background-color:white;padding:5px;font-size:200%">?</td>
<td style="padding:5px"><a href="http://wiki.office.custis.ru/wiki/Bugzilla:_проверки_изменений_багов">wiki:[[Bugzilla: проверки изменений багов]]</a></td>
</tr></table>

[% PROCESS global/footer.html.tmpl %]
