Bug 68921, Bug 61728
git-svn-id: svn://svn.office.custis.ru/3rdparty/bugzilla.org/trunk@1212 6955db30-a419-402b-8a0d-67ecbb4d7f56master
parent
c7ae2bbeac
commit
1780fc75ca
|
@ -94,6 +94,12 @@ sub get_param_list
|
|||
type => 't',
|
||||
default => 'mailto:',
|
||||
},
|
||||
|
||||
{
|
||||
name => 'ext_disable_refresh_views',
|
||||
type => 'b',
|
||||
default => 0,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
# что было совместимо со стандартной системой хуков Bugzilla, которую убрали в 3.6.
|
||||
|
||||
use strict;
|
||||
use Bugzilla;
|
||||
use Bugzilla::Hook;
|
||||
use Bugzilla::Extension;
|
||||
|
||||
|
|
|
@ -125,7 +125,7 @@ sub db_schema_abstract_schema
|
|||
query_id => {TYPE => 'INT3', NOTNULL => 1, REFERENCES => {TABLE => 'namedqueries', COLUMN => 'id'}},
|
||||
user_id => {TYPE => 'INT3', REFERENCES => {TABLE => 'profiles', COLUMN => 'userid'}},
|
||||
flags => {TYPE => 'INT2', NOTNULL => 1, DEFAULT => 0},
|
||||
message => {TYPE => 'varchar(255)', NOTNULL => 1},
|
||||
message => {TYPE => 'LONGTEXT', NOTNULL => 1},
|
||||
sql_code => {TYPE => 'LONGTEXT'},
|
||||
except_fields => {TYPE => 'LONGBLOB'},
|
||||
],
|
||||
|
@ -380,6 +380,12 @@ sub install_update_fielddefs
|
|||
# Bug 70605 - Делаем вид, что изменили какое-то поле, чтобы при checksetup автоматически сбросился кэш
|
||||
$dbh->do('UPDATE fielddefs SET delta_ts=NOW() WHERE name=\'delta_ts\'');
|
||||
|
||||
# Bug 69481 - Длина описания проверок
|
||||
if ($dbh->bz_column_info('checkers', 'message')->{TYPE} ne 'LONGTEXT')
|
||||
{
|
||||
$dbh->bz_alter_column('checkers', message => {TYPE => 'LONGTEXT', NOTNULL => 1});
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -17,23 +17,31 @@ sub refresh_views
|
|||
return 1;
|
||||
}
|
||||
|
||||
# Refresh views, optionally only for $users = [ 'username@domain.org', ... ]
|
||||
sub refresh_some_views
|
||||
{
|
||||
my ($users) = @_;
|
||||
my %u = ( map { $_ => 1 } @{ $users || [] } );
|
||||
my $dbh = Bugzilla->dbh;
|
||||
my $r = $dbh->real_table_list('view$%$bugs', 'VIEW');
|
||||
# Save current user
|
||||
my $old_user = Bugzilla->user;
|
||||
for (@$r)
|
||||
{
|
||||
# Determine user
|
||||
my (undef, $user, $query) = split /\$/, $_, -1;
|
||||
!%u || $u{$user} or next;
|
||||
my ($userid) = $dbh->selectrow_array('SELECT userid FROM profiles WHERE login_name LIKE ? ORDER BY userid LIMIT 1', undef, $user.'@%');
|
||||
$userid or next;
|
||||
my $userobj = Bugzilla::User->new($userid) or next;
|
||||
# Modify current user (hack)
|
||||
Bugzilla->request_cache->user = $userobj;
|
||||
# Determine saved search
|
||||
my $q = $query;
|
||||
$q =~ tr/_/ /;
|
||||
my $storedquery = Bugzilla::Search::LookupNamedQuery($q, $userid, undef, 0) or next;
|
||||
my $cgi = new Bugzilla::CGI($storedquery);
|
||||
# get SQL code
|
||||
my $search = new Bugzilla::Search(
|
||||
params => $cgi,
|
||||
fields => [ 'bug_id', grep { $_ ne 'bug_id' } split /[ ,]+/, $cgi->param('columnlist') ],
|
||||
|
@ -41,6 +49,7 @@ sub refresh_some_views
|
|||
) or next;
|
||||
my $sqlquery = $search->getSQL();
|
||||
$sqlquery =~ s/ORDER\s+BY\s+bugs.bug_id//so;
|
||||
# Recreate views
|
||||
$dbh->do('DROP VIEW IF EXISTS view$'.$user.'$'.$query.'$longdescs');
|
||||
$dbh->do('DROP VIEW IF EXISTS view$'.$user.'$'.$query.'$bugs_activity');
|
||||
$dbh->do('DROP VIEW IF EXISTS view$'.$user.'$'.$query.'$scrum_cards');
|
||||
|
@ -50,6 +59,8 @@ sub refresh_some_views
|
|||
$dbh->do('CREATE '.($dbh->isa('Bugzilla::DB::Mysql') ? 'SQL SECURITY DEFINER' : '').' VIEW view$'.$user.'$'.$query.'$bugs_activity AS SELECT a.bug_id, u.login_name, a.bug_when, f.name field_name, a.removed, a.added FROM bugs_activity a INNER JOIN view$'.$user.'$'.$query.'$bugs b ON b.bug_id=a.bug_id INNER JOIN profiles u ON u.userid=a.who INNER JOIN fielddefs f ON f.id=a.fieldid');
|
||||
$dbh->do('CREATE '.($dbh->isa('Bugzilla::DB::Mysql') ? 'SQL SECURITY DEFINER' : '').' VIEW view$'.$user.'$'.$query.'$scrum_cards AS SELECT s.* FROM scrum_cards s INNER JOIN view$'.$user.'$'.$query.'$bugs b ON b.bug_id=s.bug_id');
|
||||
}
|
||||
# Restore current user
|
||||
Bugzilla->request_cache->{user} = $old_user;
|
||||
}
|
||||
|
||||
# hooks:
|
||||
|
|
|
@ -40,5 +40,6 @@
|
|||
orwiki_url => "Mason Lodge ЦОР Wiki main page URL",
|
||||
rawiki_url => "RosAtom project Wiki main page URL",
|
||||
user_mailto => "Substitution for 'mailto:' (e.g. link to Plantime search)",
|
||||
ext_disable_refresh_views => "Disable automatic external DB views refreshing",
|
||||
}
|
||||
%]
|
||||
|
|
Loading…
Reference in New Issue