116 lines
4.7 KiB
Plaintext
116 lines
4.7 KiB
Plaintext
=== modified file 'Bugzilla/Error.pm'
|
|
--- Bugzilla/Error.pm 2010-07-07 21:34:25 +0000
|
|
+++ Bugzilla/Error.pm 2011-03-05 07:36:18 +0000
|
|
@@ -35,6 +35,7 @@
|
|
use Carp;
|
|
use Data::Dumper;
|
|
use Date::Format;
|
|
+use JSON;
|
|
|
|
# We cannot use $^S to detect if we are in an eval(), because mod_perl
|
|
# already eval'uates everything, so $^S = 1 in all cases under mod_perl!
|
|
@@ -150,6 +151,17 @@
|
|
$server->response($server->error_response_header);
|
|
}
|
|
}
|
|
+ # ERROR_MODE_AJAX = 5, but we cannot use ERROR_MODE_AJAX from here.
|
|
+ elsif (Bugzilla->error_mode == 5) {
|
|
+ # JSON can't handle strings across lines.
|
|
+ $message =~ s/\n/ /gm;
|
|
+ my $err;
|
|
+ $err->{'success'} = JSON::false;
|
|
+ $err->{'error'} = $error;
|
|
+ $err->{'message'} = $message;
|
|
+ my $json = new JSON;
|
|
+ print $json->encode($err);
|
|
+ }
|
|
}
|
|
exit;
|
|
}
|
|
|
|
=== modified file 'Bugzilla/Search.pm'
|
|
--- Bugzilla/Search.pm 2011-03-01 13:43:24 +0000
|
|
+++ Bugzilla/Search.pm 2011-03-09 05:26:36 +0000
|
|
@@ -510,6 +510,13 @@
|
|
push(@supptables, "LEFT JOIN keyworddefs ON keyworddefs.id = keywords.keywordid");
|
|
}
|
|
|
|
+ ### Testopia ###
|
|
+ if (grep($_ eq 'test_cases', @fields)){
|
|
+ push(@supptables, "LEFT JOIN test_case_bugs AS tcb " .
|
|
+ "ON bugs.bug_id = tcb.bug_id ");
|
|
+ }
|
|
+ ### end Testopia ###
|
|
+
|
|
# If the user has selected all of either status or resolution, change to
|
|
# selecting none. This is functionally equivalent, but quite a lot faster.
|
|
# Also, if the status is __open__ or __closed__, translate those
|
|
|
|
=== modified file 'Bugzilla/User.pm'
|
|
--- Bugzilla/User.pm 2011-02-14 21:55:29 +0000
|
|
+++ Bugzilla/User.pm 2011-03-05 07:36:18 +0000
|
|
@@ -844,16 +854,23 @@
|
|
my $class_restricted = Bugzilla->params->{'useclassification'} && $class_id;
|
|
|
|
if (!defined $self->{selectable_products}) {
|
|
- my $query = "SELECT id " .
|
|
+ my $query = "(SELECT id, name AS pname " .
|
|
" FROM products " .
|
|
"LEFT JOIN group_control_map " .
|
|
"ON group_control_map.product_id = products.id " .
|
|
" AND group_control_map.membercontrol = " . CONTROLMAPMANDATORY .
|
|
" AND group_id NOT IN(" . $self->groups_as_string . ") " .
|
|
- " WHERE group_id IS NULL " .
|
|
- "ORDER BY name";
|
|
-
|
|
- my $prod_ids = Bugzilla->dbh->selectcol_arrayref($query);
|
|
+ " WHERE group_id IS NULL) " ;
|
|
+
|
|
+ $query .= "UNION (SELECT id, tr_products.name AS pname FROM products AS tr_products ".
|
|
+ "INNER JOIN test_plans ON tr_products.id = test_plans.product_id ".
|
|
+ "INNER JOIN test_plan_permissions ON test_plan_permissions.plan_id = test_plans.plan_id ".
|
|
+ "WHERE test_plan_permissions.userid = ?)";
|
|
+
|
|
+ $query .= " ORDER BY pname ";
|
|
+
|
|
+ my $prod_ids = Bugzilla->dbh->selectcol_arrayref($query,undef,$self->id);
|
|
+
|
|
$self->{selectable_products} = Bugzilla::Product->new_from_list($prod_ids);
|
|
}
|
|
|
|
@@ -1145,6 +1162,33 @@
|
|
$group_delete->execute($id, $group, GRANT_REGEXP) if $present;
|
|
}
|
|
}
|
|
+ # Now do the same for Testopia test plans.
|
|
+ $sth = $dbh->prepare("SELECT test_plan_permissions_regexp.plan_id,
|
|
+ user_regexp, test_plan_permissions_regexp.permissions,
|
|
+ test_plan_permissions.plan_id
|
|
+ FROM test_plan_permissions_regexp
|
|
+ LEFT JOIN test_plan_permissions
|
|
+ ON test_plan_permissions_regexp.plan_id = test_plan_permissions.plan_id
|
|
+ AND test_plan_permissions.userid = ?
|
|
+ AND test_plan_permissions.grant_type = ?");
|
|
+
|
|
+ $sth->execute($id, GRANT_REGEXP);
|
|
+ my $plan_insert = $dbh->prepare(q{INSERT INTO test_plan_permissions
|
|
+ (userid, plan_id, permissions, grant_type)
|
|
+ VALUES (?, ?, ?, ?)});
|
|
+ my $plan_delete = $dbh->prepare(q{DELETE FROM test_plan_permissions
|
|
+ WHERE userid = ?
|
|
+ AND plan_id = ?
|
|
+ AND grant_type = ?});
|
|
+
|
|
+ while (my ($planid, $regexp, $perms, $present) = $sth->fetchrow_array()) {
|
|
+ if (($regexp ne '') && ($self->{login} =~ m/$regexp/i)) {
|
|
+ $plan_insert->execute($id, $planid, $perms, GRANT_REGEXP) unless $present;
|
|
+ } else {
|
|
+ $plan_delete->execute($id, $planid, GRANT_REGEXP) if $present;
|
|
+ }
|
|
+ }
|
|
+
|
|
}
|
|
|
|
sub product_responsibilities {
|
|
|