Bug 68921 - Multiple checkers on same query
git-svn-id: svn://svn.office.custis.ru/3rdparty/bugzilla.org/trunk@1037 6955db30-a419-402b-8a0d-67ecbb4d7f56master
parent
ff239fbf1e
commit
a076b36558
|
@ -24,7 +24,7 @@ $user->in_group('bz_editcheckers')
|
|||
action => 'modify',
|
||||
object => 'checkers'});
|
||||
|
||||
my $id = $params->{query_id};
|
||||
my $id = $params->{id};
|
||||
defined($id) && detaint_natural($id);
|
||||
if ($params->{save})
|
||||
{
|
||||
|
@ -72,6 +72,7 @@ if ($params->{save})
|
|||
else
|
||||
{
|
||||
$ch = Bugzilla::Checker->check({ id => $id });
|
||||
$ch->set_query_id($params->{query_id});
|
||||
$ch->set_message($params->{message});
|
||||
$ch->set_flags($flags);
|
||||
$ch->set_except_fields($except);
|
||||
|
@ -81,7 +82,7 @@ if ($params->{save})
|
|||
}
|
||||
elsif ($params->{delete})
|
||||
{
|
||||
Bugzilla->dbh->do('DELETE FROM checkers WHERE query_id=?', undef, $id);
|
||||
Bugzilla->dbh->do('DELETE FROM checkers WHERE id=?', undef, $id);
|
||||
}
|
||||
print $cgi->redirect(-location => 'editcheckers.cgi');
|
||||
exit;
|
||||
|
|
|
@ -22,6 +22,7 @@ use constant {
|
|||
our @EXPORT = qw(CF_FREEZE CF_FATAL CF_CREATE CF_UPDATE CF_DENY);
|
||||
|
||||
use constant DB_COLUMNS => (
|
||||
'id',
|
||||
# <Это состояние> задаётся соответствием запросу поиска.
|
||||
'query_id',
|
||||
# Кто создал
|
||||
|
@ -38,7 +39,7 @@ use constant DB_COLUMNS => (
|
|||
'except_fields',
|
||||
);
|
||||
use constant NAME_FIELD => 'message';
|
||||
use constant ID_FIELD => 'query_id';
|
||||
use constant ID_FIELD => 'id';
|
||||
use constant LIST_ORDER => NAME_FIELD;
|
||||
|
||||
use constant REQUIRED_CREATE_FIELDS => qw(query_id message);
|
||||
|
@ -49,6 +50,7 @@ use constant VALIDATORS => {
|
|||
};
|
||||
|
||||
use constant UPDATE_COLUMNS => (
|
||||
'query_id',
|
||||
'flags',
|
||||
'message',
|
||||
'sql_code',
|
||||
|
@ -90,9 +92,8 @@ sub create
|
|||
{
|
||||
$params->{except_fields} = encode_json($params->{except_fields});
|
||||
}
|
||||
Bugzilla::Object::create($class, $params);
|
||||
my $self = $class->new($params->{query_id});
|
||||
$self->update if $self;
|
||||
my $self = Bugzilla::Object::create($class, $params);
|
||||
$self->update;
|
||||
return $self;
|
||||
}
|
||||
|
||||
|
@ -142,6 +143,7 @@ sub _check_flags
|
|||
return $value;
|
||||
}
|
||||
|
||||
sub id { $_[0]->{id} }
|
||||
sub query_id { $_[0]->{query_id} }
|
||||
sub user_id { $_[0]->{user_id} }
|
||||
sub message { $_[0]->{message} }
|
||||
|
|
|
@ -19,8 +19,8 @@ sub refresh_checker
|
|||
{
|
||||
my ($query) = @_;
|
||||
my $dbh = Bugzilla->dbh;
|
||||
my $chk = Bugzilla::Checker->new($query->id) || return;
|
||||
$chk->update;
|
||||
my ($chk) = @{ Bugzilla::Checker->match({ query_id => $query->id }) };
|
||||
$chk && $chk->update;
|
||||
}
|
||||
|
||||
sub all
|
||||
|
@ -54,7 +54,7 @@ sub check
|
|||
{
|
||||
$s = $_->sql_code;
|
||||
$i = $_->id;
|
||||
$s =~ s/^(.*)(GROUP\s+BY)/SELECT $i query_id FROM $1 AND bugs.bug_id=$bug_id $2/iso;
|
||||
$s =~ s/^(.*)(GROUP\s+BY)/SELECT $i id FROM $1 AND bugs.bug_id=$bug_id $2/iso;
|
||||
push @$sql, $s;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -114,6 +114,7 @@ sub db_schema_abstract_schema
|
|||
# Bug 68921 - Предикаты корректности из запросов поиска
|
||||
$schema->{checkers} = {
|
||||
FIELDS => [
|
||||
id => {TYPE => 'MEDIUMSERIAL', NOTNULL => 1, PRIMARYKEY => 1},
|
||||
query_id => {TYPE => 'INT3', NOTNULL => 1, REFERENCES => {TABLE => 'namedqueries', COLUMN => 'id'}},
|
||||
user_id => {TYPE => 'INT3', REFERENCES => {TABLE => 'profiles', COLUMN => 'userid'}},
|
||||
is_freeze => {TYPE => 'BOOLEAN'},
|
||||
|
@ -123,7 +124,7 @@ sub db_schema_abstract_schema
|
|||
except_fields => {TYPE => 'BLOB'},
|
||||
],
|
||||
INDEXES => [
|
||||
checkers_primary_idx => { FIELDS => ['query_id'], TYPE => 'UNIQUE' },
|
||||
checkers_query_id_idx => { FIELDS => ['query_id'] },
|
||||
],
|
||||
};
|
||||
return 1;
|
||||
|
@ -312,25 +313,12 @@ sub install_update_db
|
|||
}
|
||||
|
||||
# Временное, можно удалить
|
||||
if ($dbh->bz_column_info('checkers', 'is_freeze'))
|
||||
if (!$dbh->bz_column_info('checkers', 'id'))
|
||||
{
|
||||
use Bugzilla::Checker;
|
||||
use JSON;
|
||||
$dbh->bz_add_column('checkers', flags => {TYPE => 'INT2', NOTNULL => 1, DEFAULT => 1});
|
||||
my $rows = $dbh->selectall_arrayref('SELECT * FROM checkers', {Slice=>{}});
|
||||
for (@$rows)
|
||||
{
|
||||
$_->{except_fields} = $_->{except_fields} ? decode_json($_->{except_fields}) : {};
|
||||
$dbh->do('UPDATE checkers SET flags=?, except_fields=? WHERE query_id=?', undef,
|
||||
($_->{is_freeze} ? 1 : 0) * CF_FREEZE |
|
||||
($_->{is_fatal} ? 1 : 0) * CF_FATAL |
|
||||
($_->{except_fields}->{deny_all} ? 1 : 0) * CF_DENY |
|
||||
CF_CREATE | CF_UPDATE,
|
||||
$_->{except_fields}->{except_fields} ? encode_json($_->{except_fields}->{except_fields}) : undef,
|
||||
$_->{query_id});
|
||||
}
|
||||
$dbh->bz_drop_column('checkers', 'is_freeze');
|
||||
$dbh->bz_drop_column('checkers', 'is_fatal');
|
||||
$dbh->bz_add_index('checkers', checkers_query_id_idx => { FIELDS => ['query_id'] });
|
||||
$dbh->bz_drop_index('checkers', 'checkers_primary_idx');
|
||||
$dbh->bz_drop_index_raw('checkers', 'checkers_primary_idx');
|
||||
$dbh->bz_add_column('checkers', id => {TYPE => 'MEDIUMSERIAL', NOTNULL => 1, PRIMARYKEY => 1});
|
||||
}
|
||||
|
||||
return 1;
|
||||
|
|
|
@ -9,9 +9,10 @@
|
|||
<dl>
|
||||
[% FOR c = checkers %]
|
||||
<dt>
|
||||
[% c.name | html %]:
|
||||
<a href="?mode=edit&query_id=[% c.query_id %]">править</a>,
|
||||
<a href="javascript:void(0)" onclick="if(confirm('Действительно удалить эту проверку?')){window.location.href='?save=1&delete=1&query_id=[% c.query_id %]';}">удалить</a>
|
||||
<a href="buglist.cgi?cmdtype=dorem&remaction=run&namedcmd=[% c.query.name | url_quote %]
|
||||
[% IF c.query.shared_with_group.id %]&sharer_id=[% c.query.user.id %][% END %]">[% c.name | html %]</a>:
|
||||
<a href="?mode=edit&id=[% c.id %]">править</a>,
|
||||
<a href="javascript:void(0)" onclick="if(confirm('Действительно удалить эту проверку?')){window.location.href='?save=1&delete=1&id=[% c.id %]';}">удалить</a>
|
||||
</dt>
|
||||
<dd>
|
||||
[% c.message | html %]
|
||||
|
@ -35,17 +36,21 @@
|
|||
<table>
|
||||
[% IF create %]
|
||||
<input type="hidden" name="create" value="1" />
|
||||
<tr>
|
||||
<th>Сохранённый запрос:</th>
|
||||
<td><select name="query_id">
|
||||
[% FOREACH q = user.queries %]
|
||||
<option value="[% q.id %]" [% " selected='selected'" IF checker.query_id == q.id %] >[% q.name | html %]</option>
|
||||
[% END %]
|
||||
</select></td>
|
||||
</tr>
|
||||
[% ELSE %]
|
||||
<input type="hidden" name="query_id" value="[% checker.query_id %]" />
|
||||
<input type="hidden" name="id" value="[% checker.id %]" />
|
||||
[% END %]
|
||||
<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>
|
||||
<th>Сообщение об ошибке:</th>
|
||||
<td><textarea name="message" rows="8" cols="80">[% checker.message | html %]</textarea></td>
|
||||
|
|
Loading…
Reference in New Issue