bugzilla-4intranet/template/en/default/admin/edit-checkers.html.tmpl

254 lines
12 KiB
Cheetah
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

[%# 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.user.login | html %]) [% 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>Группа:</th>
<td>
<select name="bypass_group_id" id="bypass_group_id">
<option value="">&mdash; (не разрешать)</option>
[% FOR g = all_groups %]
<option value="[% g.id %]" [% " selected=\"selected\"" IF checker.bypass_group_id == g.id %]>[% g.name | html %]</option>
[% END %]
</select>
</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>
<tr>
<th>Снять флаги (через ,):</th>
<td><input type="text" id="triggers_clear_flags" name="triggers_clear_flags" value="[% checker.triggers.clear_flags | 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 type="text/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');
var fl = document.getElementById('triggers_clear_flags');
if (!f)
cc.value = fl.value = '';
else if (!cc.value && !fl.value)
{
alert('Задайте действие триггера!');
return false;
}
return true;
}
[%# Загружаем текущее состояние дел %]
showhide_allowdeny();
[% IF checker.except_fields %]
[% FOR f = checker.except_fields.keys %]
[% FOR v = checker.except_fields.$f %]
add_field("[% f | js %]", "[% v | js %]");
[% END %]
[% 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 %]