summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Fearn <jfearn@redhat.com>2020-05-07 11:41:39 +1000
committerJeff Fearn <jfearn@redhat.com>2020-05-07 11:41:39 +1000
commit353af77714fd29aeab330255808636a9088eecc2 (patch)
treeecaadcb99519d2b53a96e7dfe9661b498156827a /post_bug.cgi
parentBumped version to 5.0.4 (diff)
downloadbugzilla-353af77714fd29aeab330255808636a9088eecc2.tar.gz
bugzilla-353af77714fd29aeab330255808636a9088eecc2.tar.bz2
bugzilla-353af77714fd29aeab330255808636a9088eecc2.zip
Bug 478886 - Open Source Red Hat BugzillaRelease-5.0.4-rh44
Import Red Hat Bugzilla changes.
Diffstat (limited to 'post_bug.cgi')
-rwxr-xr-xpost_bug.cgi254
1 files changed, 163 insertions, 91 deletions
diff --git a/post_bug.cgi b/post_bug.cgi
index ca029c01a..9a92b0398 100755
--- a/post_bug.cgi
+++ b/post_bug.cgi
@@ -28,10 +28,10 @@ use List::MoreUtils qw(uniq);
my $user = Bugzilla->login(LOGIN_REQUIRED);
-my $cgi = Bugzilla->cgi;
-my $dbh = Bugzilla->dbh;
+my $cgi = Bugzilla->cgi;
+my $dbh = Bugzilla->dbh;
my $template = Bugzilla->template;
-my $vars = {};
+my $vars = {};
######################################################################
# Main Script
@@ -39,8 +39,8 @@ my $vars = {};
# redirect to enter_bug if no field is passed.
unless ($cgi->param()) {
- print $cgi->redirect(correct_urlbase() . 'enter_bug.cgi');
- exit;
+ print $cgi->redirect(correct_urlbase() . 'enter_bug.cgi');
+ exit;
}
# Detect if the user already used the same form to submit a bug
@@ -48,45 +48,50 @@ my $token = trim($cgi->param('token'));
check_token_data($token, 'create_bug', 'index.cgi');
# do a match on the fields if applicable
-Bugzilla::User::match_field ({
- 'cc' => { 'type' => 'multi' },
- 'assigned_to' => { 'type' => 'single' },
- 'qa_contact' => { 'type' => 'single' },
+Bugzilla::User::match_field({
+ 'cc' => {'type' => 'multi'},
+ 'assigned_to' => {'type' => 'single'},
+ 'qa_contact' => {'type' => 'single'},
+ 'docs_contact' => {'type' => 'single'},
});
if (defined $cgi->param('maketemplate')) {
- $vars->{'url'} = $cgi->canonicalise_query('token');
- $vars->{'short_desc'} = $cgi->param('short_desc');
-
- print $cgi->header();
- $template->process("bug/create/make-template.html.tmpl", $vars)
- || ThrowTemplateError($template->error());
- exit;
+ $vars->{'url'} = $cgi->canonicalise_query('token');
+ $vars->{'short_desc'} = $cgi->param('short_desc');
+
+ print $cgi->header();
+ $template->process("bug/create/make-template.html.tmpl", $vars)
+ || ThrowTemplateError($template->error());
+ exit;
}
# The format of the initial comment can be structured by adding fields to the
# enter_bug template and then referencing them in the comment template.
my $comment;
-my $format = $template->get_format("bug/create/comment",
- scalar($cgi->param('format')), "txt");
+my $format
+ = $template->get_format("bug/create/comment", scalar($cgi->param('format')),
+ "txt");
$template->process($format->{'template'}, $vars, \$comment)
- || ThrowTemplateError($template->error());
+ || ThrowTemplateError($template->error());
# Include custom fields editable on bug creation.
-my @custom_bug_fields = grep {$_->type != FIELD_TYPE_MULTI_SELECT && $_->enter_bug}
- Bugzilla->active_custom_fields;
+my @custom_bug_fields
+ = grep { $_->type != FIELD_TYPE_MULTI_SELECT && $_->enter_bug }
+ Bugzilla->active_custom_fields;
# Undefined custom fields are ignored to ensure they will get their default
# value (e.g. "---" for custom single select fields).
my @bug_fields = grep { defined $cgi->param($_->name) } @custom_bug_fields;
@bug_fields = map { $_->name } @bug_fields;
-push(@bug_fields, qw(
+push(
+ @bug_fields, qw(
product
component
assigned_to
qa_contact
+ docs_contact
alias
blocked
@@ -102,29 +107,81 @@ push(@bug_fields, qw(
rep_platform
version
target_milestone
+ target_release
status_whiteboard
see_also
estimated_time
deadline
-));
+ )
+);
+
+## REDHAT EXTENSION START 406161
+# Allow extension to add additional fields
+# to load from CGI values
+Bugzilla::Hook::process('post_bug_fields', {bug_fields => \@bug_fields});
+## REDHAT EXTENSION END 406161
+
my %bug_params;
+## REDHAT EXTENSION BEGIN 1175096
+{
+ my @components = $cgi->param('component');
+ if (scalar(@components) > 1) {
+ $bug_params{component} = shift @components;
+ $bug_params{extra_components} = [@components];
+ }
+ my @versions = $cgi->param('version');
+ if (scalar(@versions) > 1) {
+ $bug_params{version} = shift @versions;
+ $bug_params{extra_versions} = [@versions];
+ }
+}
+## REDHAT EXTENSION END 1175096
foreach my $field (@bug_fields) {
- $bug_params{$field} = $cgi->param($field);
+ $bug_params{$field} = $cgi->param($field);
}
foreach my $field (qw(cc groups)) {
- next if !$cgi->should_set($field);
- $bug_params{$field} = [$cgi->param($field)];
+ next if !$cgi->should_set($field);
+ $bug_params{$field} = [$cgi->param($field)];
}
$bug_params{'comment'} = $comment;
-my @multi_selects = grep {$_->type == FIELD_TYPE_MULTI_SELECT && $_->enter_bug}
- Bugzilla->active_custom_fields;
+my @multi_selects
+ = grep { $_->type == FIELD_TYPE_MULTI_SELECT && $_->enter_bug }
+ Bugzilla->active_custom_fields;
+
+## REDHAT EXTENSION BEGIN
+push @multi_selects, Bugzilla::Field->new({name => 'target_release'});
+## REDHAT EXTENSION END
+
+## REDHAT EXTENSION BEGIN 1348443
+# FIXME should be in extension?
+$bug_params{dependent_products} = [$cgi->param('dependent_products')];
+## REDHAT EXTENSION END 1348443
foreach my $field (@multi_selects) {
- next if !$cgi->should_set($field->name);
- $bug_params{$field->name} = [$cgi->param($field->name)];
+ next if !$cgi->should_set($field->name);
+ $bug_params{$field->name} = [$cgi->param($field->name)];
+ ## REDHAT EXTENSIONS START 471033
+ if ($field->name eq 'cf_partner' && $cgi->param($field->name)) {
+ $bug_params{cf_verified} = ['Any'];
+ }
+ ## REDHAT EXTENSIONS END 471033
}
+## REDHAT EXTENSION 1188085 BEGIN
+my $product = Bugzilla::Product->check($bug_params{'product'});
+my $component_id
+ = Bugzilla::Component->check({
+ product => $product, name => $bug_params{'component'}
+ })->id;
+
+# Set bug flags.
+my (undef, $flag_data)
+ = Bugzilla::Flag->extract_flags_from_cgi($vars, SKIP_REQUESTEE_ON_ERROR,
+ {product_id => $product->id, component_id => $component_id});
+$bug_params{flags} = $flag_data;
+## REDHAT EXTENSION 1188085 END
+
my $bug = Bugzilla::Bug->create(\%bug_params);
# Get the bug ID back and delete the token used to create this bug.
@@ -133,15 +190,18 @@ delete_token($token);
# We do this directly from the DB because $bug->creation_ts has the seconds
# formatted out of it (which should be fixed some day).
-my $timestamp = $dbh->selectrow_array(
- 'SELECT creation_ts FROM bugs WHERE bug_id = ?', undef, $id);
+my $timestamp
+ = $dbh->selectrow_array('SELECT creation_ts FROM bugs WHERE bug_id = ?',
+ undef, $id);
# Set Version cookie, but only if the user actually selected
# a version on the page.
if (defined $cgi->param('version')) {
- $cgi->send_cookie(-name => "VERSION-" . $bug->product,
- -value => $bug->version,
- -expires => "Fri, 01-Jan-2038 00:00:00 GMT");
+ $cgi->send_cookie(
+ -name => "VERSION-" . $bug->product,
+ -value => $bug->version,
+ -expires => "Fri, 01-Jan-2038 00:00:00 GMT"
+ );
}
# We don't have to check if the user can see the bug, because a user filing
@@ -149,88 +209,100 @@ if (defined $cgi->param('version')) {
# after the bug is filed.
# Add an attachment if requested.
-my $data_fh = $cgi->upload('data');
+my $data_fh = $cgi->upload('data');
my $attach_text = $cgi->param('attach_text');
if ($data_fh || $attach_text) {
- $cgi->param('isprivate', $cgi->param('comment_is_private'));
-
- # Must be called before create() as it may alter $cgi->param('ispatch').
- my $content_type = Bugzilla::Attachment::get_content_type();
- my $attachment;
-
- # If the attachment cannot be successfully added to the bug,
- # we notify the user, but we don't interrupt the bug creation process.
- my $error_mode_cache = Bugzilla->error_mode;
- Bugzilla->error_mode(ERROR_MODE_DIE);
+ $cgi->param('isprivate', $cgi->param('comment_is_private'));
+
+ # Must be called before create() as it may alter $cgi->param('ispatch').
+ my $content_type = Bugzilla::Attachment::get_content_type();
+ my $attachment;
+
+ # If the attachment cannot be successfully added to the bug,
+ # we notify the user, but we don't interrupt the bug creation process.
+ my $error_mode_cache = Bugzilla->error_mode;
+ Bugzilla->error_mode(ERROR_MODE_DIE);
+ ## REDHAT EXTENSION 1409998 BEGIN
+ $dbh->bz_start_transaction;
+ eval {
+ $attachment = Bugzilla::Attachment->create({
+ bug => $bug,
+ creation_ts => $timestamp,
+ data => $attach_text || $data_fh,
+ description => scalar $cgi->param('description'),
+ filename => $attach_text ? "file_$id.txt" : $data_fh,
+ ispatch => scalar $cgi->param('ispatch'),
+ isprivate => scalar $cgi->param('isprivate'),
+ mimetype => $content_type,
+ });
+ };
+
+ if ($attachment) {
eval {
- $attachment = Bugzilla::Attachment->create(
- {bug => $bug,
- creation_ts => $timestamp,
- data => $attach_text || $data_fh,
- description => scalar $cgi->param('description'),
- filename => $attach_text ? "file_$id.txt" : $data_fh,
- ispatch => scalar $cgi->param('ispatch'),
- isprivate => scalar $cgi->param('isprivate'),
- mimetype => $content_type,
- });
+ # Set attachment flags.
+ my ($flags, $new_flags)
+ = Bugzilla::Flag->extract_flags_from_cgi($vars, SKIP_REQUESTEE_ON_ERROR,
+ {bug => $bug, attachment => $attachment});
+ $attachment->set_flags($flags, $new_flags);
+ $attachment->update($timestamp);
+ my $comment = $bug->comments->[0];
+ $comment->set_all(
+ {type => CMT_ATTACHMENT_CREATED, extra_data => $attachment->id});
+ $comment->update();
+ $dbh->bz_commit_transaction;
};
- Bugzilla->error_mode($error_mode_cache);
-
- if ($attachment) {
- # Set attachment flags.
- my ($flags, $new_flags) = Bugzilla::Flag->extract_flags_from_cgi(
- $bug, $attachment, $vars, SKIP_REQUESTEE_ON_ERROR);
- $attachment->set_flags($flags, $new_flags);
- $attachment->update($timestamp);
- my $comment = $bug->comments->[0];
- $comment->set_all({ type => CMT_ATTACHMENT_CREATED,
- extra_data => $attachment->id });
- $comment->update();
- }
- else {
- $vars->{'message'} = 'attachment_creation_failed';
+ if ($@) {
+ $dbh->bz_rollback_transaction();
+ $vars->{'message'} = 'attachment_creation_failed';
}
+ }
+ else {
+ $dbh->bz_rollback_transaction();
+ $vars->{'message'} = 'attachment_creation_failed';
+ }
+ Bugzilla->error_mode($error_mode_cache);
+ ## REDHAT EXTENSION 1409998 END
}
-# Set bug flags.
-my ($flags, $new_flags) = Bugzilla::Flag->extract_flags_from_cgi($bug, undef, $vars,
- SKIP_REQUESTEE_ON_ERROR);
-$bug->set_flags($flags, $new_flags);
-$bug->update($timestamp);
+Bugzilla::Hook::process('post_bug_end_of_create',
+ {bug => $bug, timestamp => $timestamp});
-$vars->{'id'} = $id;
+$vars->{'id'} = $id;
$vars->{'bug'} = $bug;
-Bugzilla::Hook::process('post_bug_after_creation', { vars => $vars });
+Bugzilla::Hook::process('post_bug_after_creation', {vars => $vars});
-my $recipients = { changer => $user };
-my $bug_sent = Bugzilla::BugMail::Send($id, $recipients);
+my $recipients = {changer => $user};
+my $bug_sent = Bugzilla::BugMail::Send($id, $recipients);
$bug_sent->{type} = 'created';
$bug_sent->{id} = $id;
my @all_mail_results = ($bug_sent);
foreach my $dep (@{$bug->dependson || []}, @{$bug->blocked || []}) {
- my $dep_sent = Bugzilla::BugMail::Send($dep, $recipients);
- $dep_sent->{type} = 'dep';
- $dep_sent->{id} = $dep;
- push(@all_mail_results, $dep_sent);
+ my $dep_sent = Bugzilla::BugMail::Send($dep, $recipients);
+ $dep_sent->{type} = 'dep';
+ $dep_sent->{id} = $dep;
+ push(@all_mail_results, $dep_sent);
}
# Sending emails for any referenced bugs.
-foreach my $ref_bug_id (uniq @{ $bug->{see_also_changes} || [] }) {
- my $ref_sent = Bugzilla::BugMail::Send($ref_bug_id, $recipients);
- $ref_sent->{id} = $ref_bug_id;
- push(@all_mail_results, $ref_sent);
+foreach my $ref_bug_id (uniq @{$bug->{see_also_changes} || []}) {
+ my $ref_sent = Bugzilla::BugMail::Send($ref_bug_id, $recipients);
+ $ref_sent->{id} = $ref_bug_id;
+ push(@all_mail_results, $ref_sent);
}
$vars->{sentmail} = \@all_mail_results;
+## REDHAT EXTENSION 1314103 BEGIN
+Bugzilla::Hook::process('bug_create_after_mail', {bug => $bug});
+## REDHAT EXTENSION 1314103 END
+
$format = $template->get_format("bug/create/created",
- scalar($cgi->param('created-format')),
- "html");
+ scalar($cgi->param('created-format')), "html");
print $cgi->header();
$template->process($format->{'template'}, $vars)
- || ThrowTemplateError($template->error());
+ || ThrowTemplateError($template->error());
1;