Bug 74070 - Warn before change for non-fatal checkers

git-svn-id: svn://svn.office.custis.ru/3rdparty/bugzilla.org/trunk@1252 6955db30-a419-402b-8a0d-67ecbb4d7f56
master
vfilippov 2011-04-21 14:03:48 +00:00
parent f2d4016217
commit 9afd15d535
4 changed files with 75 additions and 6 deletions

View File

@ -74,9 +74,18 @@ sub check
sub alert
{
my ($bug, $is_new) = @_;
if (my @fatals = grep { $_->is_fatal } @{$bug->{failed_checkers}})
my (@fatal, @warn);
map { $_->is_fatal ? push(@fatal, $_) : push(@warn, $_) } @{$bug->{failed_checkers}};
my $force = 1 && Bugzilla->cgi->param('force_checkers');
if (!@fatal && (!@warn || $force))
{
# фатальных нет, нефатальных либо тоже нет, либо пользователь сказал "DO WHAT I SAY"
$bug->{passed_checkers} = 1;
}
else
{
# откатываем изменения
$bug->{passed_checkers} = 0;
# bugs_fulltext нужно откатывать отдельно...
if ($is_new)
{
@ -90,7 +99,12 @@ sub alert
Bugzilla->dbh->bz_rollback_to_savepoint;
if ($THROW_ERROR)
{
ThrowUserError('checkers_failed', { failed => [ $bug ] });
Bugzilla->template->process("verify-checkers.html.tmpl", {
failed => [ $bug ],
allow_commit => !@fatal,
exclude_params_re => '^force_checkers$',
}) || ThrowTemplateError(Bugzilla->template->error);
exit;
}
}
}

View File

@ -12,8 +12,6 @@
[% END %]
[% ELSIF error == "import_fields_mandatory" %]
The following missing fields: [% fields.join(", ") | html %] are required to enter new bugs.
[% ELSIF error == "checkers_failed" %]
[% PROCESS "failed-checkers.html.tmpl" f = failed %]
[% ELSIF error == "invalid_field_value" %]
The value <b>"[% value_obj.name | html %]"</b> of field <b>[% value_obj.field.description | html %]</b>
is unavailable for the selected value "<b>[% controller | html %]</b>" of

View File

@ -0,0 +1,56 @@
[% PROCESS "global/field-descs.none.tmpl" %]
[% PROCESS global/header.html.tmpl
title = 'Изменения не удовлетворяют проверкам' %]
<div class="user-error-div">
[% PROCESS "failed-checkers.html.tmpl" f = failed %]
[% IF allow_commit %]
<form action="process_bug.cgi" method="post" style="margin-top: 1em">
[% PROCESS "global/hidden-fields.html.tmpl" exclude = exclude_params_re %]
<input type="hidden" name="force_checkers" value="1" />
<input type="submit" value="Я знаю, что делаю! Внести изменения!" id="forcesubmit" style="color: gray" disabled="disabled" /> <span id="countdown_span"></span>
</form>
<p style="margin-bottom: 0">
Либо нажмите <b><a href="javascript:history.back()">Назад</a></b>
и внесите другие, корректные изменения.
</p>
<script type="text/javascript">
var downcounter = 3;
function countdown()
{
var s = document.getElementById('forcesubmit');
var t = document.getElementById('countdown_span');
if (downcounter > 0)
{
t.innerHTML = downcounter + '...';
downcounter--;
setTimeout(countdown, 1000);
}
else
{
t.innerHTML = '';
s.style.color = '';
s.disabled = false;
}
}
countdown();
</script>
[% ELSE %]
<p style="margin-bottom: 0">
Изменения блокированы. Нажмите <b><a href="javascript:history.back()">Назад</a></b>
и внесите корректные изменения.
</p>
[% END %]
</div>
[% PROCESS global/footer.html.tmpl %]

View File

@ -575,9 +575,10 @@ foreach my $bug (@bug_objects) {
if ($bug->{failed_checkers} && @{$bug->{failed_checkers}})
{
push @$failed_checkers, $bug;
if (grep { $_->is_fatal } @{$bug->{failed_checkers}})
unless ($bug->{passed_checkers})
{
# When we are here, rollback_to_savepoint is already done in Checkers.pm
# This means update is blocked
# and rollback_to_savepoint is already done in Checkers.pm
next;
}
}