diff options
-rwxr-xr-x | enter_bug.cgi | 26 | ||||
-rwxr-xr-x | post_bug.cgi | 14 | ||||
-rw-r--r-- | template/en/default/bug/create/create.html.tmpl | 53 |
3 files changed, 74 insertions, 19 deletions
diff --git a/enter_bug.cgi b/enter_bug.cgi index 0dca344ed..f51a1c076 100755 --- a/enter_bug.cgi +++ b/enter_bug.cgi @@ -310,19 +310,24 @@ elsif (1 == @{$::components{$product}}) { } my @components; -SendSQL("SELECT name, description, login_name, realname - FROM components, profiles - WHERE product_id = $product_id - AND initialowner=userid - ORDER BY name"); -while (MoreSQLData()) { - my ($name, $description, $login, $realname) = FetchSQLData(); +my $dbh = Bugzilla->dbh; +my $sth = $dbh->prepare( + q{SELECT name, description, p1.login_name, p2.login_name + FROM components + LEFT JOIN profiles p1 ON components.initialowner = p1.userid + LEFT JOIN profiles p2 ON components.initialqacontact = p2.userid + WHERE product_id = ? + ORDER BY name}); + +$sth->execute($product_id); +while (my ($name, $description, $owner, $qacontact) + = $sth->fetchrow_array()) { push @components, { name => $name, description => $description, - default_login => $login, - default_realname => $realname, + initialowner => $owner, + initialqacontact => $qacontact || '', }; } @@ -342,6 +347,9 @@ $vars->{'assigned_to'} = formvalue('assigned_to'); $vars->{'assigned_to_disabled'} = !UserInGroup('editbugs'); $vars->{'cc_disabled'} = 0; +$vars->{'qa_contact'} = formvalue('qa_contact'); +$vars->{'qa_contact_disabled'} = !UserInGroup('editbugs'); + $vars->{'cloned_bug_id'} = $cloned_bug_id; if ($cloned_bug_id) { diff --git a/post_bug.cgi b/post_bug.cgi index 4f545fbb2..6b52b447d 100755 --- a/post_bug.cgi +++ b/post_bug.cgi @@ -63,6 +63,7 @@ my $dbh = Bugzilla->dbh; &Bugzilla::User::match_field ({ 'cc' => { 'type' => 'multi' }, 'assigned_to' => { 'type' => 'single' }, + 'qa_contact' => { 'type' => 'single' }, }); # The format of the initial comment can be structured by adding fields to the @@ -142,10 +143,17 @@ my @bug_fields = ("version", "rep_platform", "bug_status", "bug_file_loc", "short_desc", "target_milestone", "status_whiteboard"); +# Retrieve the default QA contact if the field is empty if (Param("useqacontact")) { - SendSQL("SELECT initialqacontact FROM components " . - "WHERE id = $component_id"); - my $qa_contact = FetchOneColumn(); + my $qa_contact; + if (!UserInGroup("editbugs") || trim($::FORM{'qa_contact'}) eq "") { + SendSQL("SELECT initialqacontact FROM components " . + "WHERE id = $component_id"); + $qa_contact = FetchOneColumn(); + } else { + $qa_contact = DBNameToIdAndCheck(trim($::FORM{'qa_contact'})); + } + if (defined $qa_contact && $qa_contact != 0) { $::FORM{'qa_contact'} = $qa_contact; push(@bug_fields, "qa_contact"); diff --git a/template/en/default/bug/create/create.html.tmpl b/template/en/default/bug/create/create.html.tmpl index d5ea69bdb..ce5aaa922 100644 --- a/template/en/default/bug/create/create.html.tmpl +++ b/template/en/default/bug/create/create.html.tmpl @@ -34,20 +34,34 @@ <script type="text/javascript"> <!-- -var default_owners = new Array([% component_.size %]); +var initialowners = new Array([% component_.size %]); +var last_initialowner; var components = new Array([% component_.size %]); +[% IF Param("useqacontact") %] + var initialqacontacts = new Array([% component_.size %]); + var last_initialqacontact; +[% END %] [% count = 0 %] [%- FOREACH c = component_ %] components[[% count %]] = "[% c.name FILTER js %]"; - default_owners[[% count %]] = "[% c.default_login FILTER js %]"; + initialowners[[% count %]] = "[% c.initialowner FILTER js %]"; + [% IF Param("useqacontact") %] + initialqacontacts[[% count %]] = "[% c.initialqacontact FILTER js %]"; + [% END %] [% count = count + 1 %] [%- END %] -var last_default_owner; + function set_assign_to() { // Based on the selected component, fill the "Assign To:" field - // with the default component owner. + // with the default component owner, and the the "QA Contact:" field + // with the default QA Contact. var form = document.Create; var assigned_to = form.assigned_to.value; + +[% IF Param("useqacontact") %] + var qa_contact = form.qa_contact.value; +[% END %] + var index = -1; if (form.component.type == 'select-one') { index = form.component.selectedIndex; @@ -56,14 +70,23 @@ function set_assign_to() { index = 0; } if (index != -1) { - var owner = default_owners[index]; + var owner = initialowners[index]; var component = components[index]; - if (assigned_to == last_default_owner + if (assigned_to == last_initialowner || assigned_to == owner || assigned_to == '') { form.assigned_to.value = owner; - last_default_owner = owner; + last_initialowner = owner; } + [% IF Param("useqacontact") %] + var contact = initialqacontacts[index]; + if (qa_contact == last_initialqacontact + || qa_contact == contact + || qa_contact == '') { + form.qa_contact.value = contact; + last_initialqacontact = contact; + } + [% END %] } } --> @@ -203,6 +226,22 @@ function set_assign_to() { </td> </tr> +[% IF Param("useqacontact") %] + <tr> + <td align="right"><strong>QA Contact:</strong></td> + <td colspan="3"> + [% INCLUDE global/userselect.html.tmpl + name => "qa_contact" + value => qa_contact + disabled => qa_contact_disabled + size => 32 + emptyok => 1 + %] + <noscript>(Leave blank to assign to default qa contact)</noscript> + </td> + </tr> +[% END %] + <tr> <td align="right"><strong>Cc:</strong></td> <td colspan="3"> |