diff --git a/extensions/custis/lib/Checkers.pm b/extensions/custis/lib/Checkers.pm index 018ac3e6c..a6844461e 100644 --- a/extensions/custis/lib/Checkers.pm +++ b/extensions/custis/lib/Checkers.pm @@ -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; } } } diff --git a/extensions/custis/template/en/default/hook/global/user-error-errors.html.tmpl b/extensions/custis/template/en/default/hook/global/user-error-errors.html.tmpl index 6d94d8603..78d903f19 100644 --- a/extensions/custis/template/en/default/hook/global/user-error-errors.html.tmpl +++ b/extensions/custis/template/en/default/hook/global/user-error-errors.html.tmpl @@ -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 "[% value_obj.name | html %]" of field [% value_obj.field.description | html %] is unavailable for the selected value "[% controller | html %]" of diff --git a/extensions/custis/template/en/default/verify-checkers.html.tmpl b/extensions/custis/template/en/default/verify-checkers.html.tmpl new file mode 100644 index 000000000..a7ecf37ad --- /dev/null +++ b/extensions/custis/template/en/default/verify-checkers.html.tmpl @@ -0,0 +1,56 @@ +[% PROCESS "global/field-descs.none.tmpl" %] + +[% PROCESS global/header.html.tmpl + title = 'Изменения не удовлетворяют проверкам' %] + +
+ +[% PROCESS "failed-checkers.html.tmpl" f = failed %] + +[% IF allow_commit %] + +
+[% PROCESS "global/hidden-fields.html.tmpl" exclude = exclude_params_re %] + + +
+ +

+ Либо нажмите Назад + и внесите другие, корректные изменения. +

+ + + +[% ELSE %] + +

+ Изменения блокированы. Нажмите Назад + и внесите корректные изменения. +

+ +[% END %] + +
+ +[% PROCESS global/footer.html.tmpl %] diff --git a/process_bug.cgi b/process_bug.cgi index aa9f56cb9..56ee32c56 100755 --- a/process_bug.cgi +++ b/process_bug.cgi @@ -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; } }