Midair with product change while adding an attachment silently clears flags - Patch by Tiago R. Mello <timello@gmail.com> r/a=LpSolit
git-svn-id: svn://10.0.0.236/trunk@237452 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
parent
683f53e25e
commit
d4fc24bcbd
@ -484,7 +484,7 @@ sub _validate_data {
|
||||
my $imgdata = $img->ImageToBlob();
|
||||
$data = $imgdata;
|
||||
$cgi->param('contenttype', 'image/png');
|
||||
$$hr_vars->{'convertedbmp'} = 1;
|
||||
$hr_vars->{'convertedbmp'} = 1;
|
||||
}
|
||||
|
||||
# Make sure the attachment does not exceed the maximum permitted size
|
||||
@ -810,12 +810,12 @@ sub insert_attachment_for_bug {
|
||||
'^requestee(_type)?-(\d+)$' => { 'type' => 'multi' },
|
||||
}, MATCH_SKIP_CONFIRM);
|
||||
|
||||
$$hr_vars->{'match_field'} = 'requestee';
|
||||
$hr_vars->{'match_field'} = 'requestee';
|
||||
if ($match_status == USER_MATCH_FAILED) {
|
||||
$$hr_vars->{'message'} = 'user_match_failed';
|
||||
$hr_vars->{'message'} = 'user_match_failed';
|
||||
}
|
||||
elsif ($match_status == USER_MATCH_MULTIPLE) {
|
||||
$$hr_vars->{'message'} = 'user_match_multiple';
|
||||
$hr_vars->{'message'} = 'user_match_multiple';
|
||||
}
|
||||
|
||||
# Escape characters in strings that will be used in SQL statements.
|
||||
@ -902,12 +902,12 @@ sub insert_attachment_for_bug {
|
||||
Bugzilla->error_mode(ERROR_MODE_DIE);
|
||||
eval {
|
||||
Bugzilla::Flag::validate($cgi, $bug->bug_id, -1, SKIP_REQUESTEE_ON_ERROR);
|
||||
Bugzilla::Flag::process($bug, $attachment, $timestamp, $cgi);
|
||||
Bugzilla::Flag::process($bug, $attachment, $timestamp, $cgi, $hr_vars);
|
||||
};
|
||||
Bugzilla->error_mode($error_mode_cache);
|
||||
if ($@) {
|
||||
$$hr_vars->{'message'} = 'flag_creation_failed';
|
||||
$$hr_vars->{'flag_creation_error'} = $@;
|
||||
$hr_vars->{'message'} = 'flag_creation_failed';
|
||||
$hr_vars->{'flag_creation_error'} = $@;
|
||||
}
|
||||
|
||||
# Return the new attachment object.
|
||||
|
||||
@ -502,7 +502,7 @@ sub snapshot {
|
||||
|
||||
=over
|
||||
|
||||
=item C<process($bug, $attachment, $timestamp, $cgi)>
|
||||
=item C<process($bug, $attachment, $timestamp, $cgi, $hr_vars)>
|
||||
|
||||
Processes changes to flags.
|
||||
|
||||
@ -516,7 +516,7 @@ object used to obtain the flag fields that the user submitted.
|
||||
=cut
|
||||
|
||||
sub process {
|
||||
my ($bug, $attachment, $timestamp, $cgi) = @_;
|
||||
my ($bug, $attachment, $timestamp, $cgi, $hr_vars) = @_;
|
||||
my $dbh = Bugzilla->dbh;
|
||||
|
||||
# Make sure the bug (and attachment, if given) exists and is accessible
|
||||
@ -540,7 +540,7 @@ sub process {
|
||||
}
|
||||
|
||||
# Create new flags and update existing flags.
|
||||
my $new_flags = FormToNewFlags($bug, $attachment, $cgi);
|
||||
my $new_flags = FormToNewFlags($bug, $attachment, $cgi, $hr_vars);
|
||||
foreach my $flag (@$new_flags) { create($flag, $bug, $attachment, $timestamp) }
|
||||
modify($bug, $attachment, $cgi, $timestamp);
|
||||
|
||||
@ -562,7 +562,10 @@ sub process {
|
||||
my $flags = Bugzilla::Flag->new_from_list($flag_ids);
|
||||
foreach my $flag (@$flags) {
|
||||
my $is_retargetted = retarget($flag, $bug);
|
||||
clear($flag, $bug, $flag->attachment) unless $is_retargetted;
|
||||
unless ($is_retargetted) {
|
||||
clear($flag, $bug, $flag->attachment);
|
||||
$hr_vars->{'message'} = 'flag_cleared';
|
||||
}
|
||||
}
|
||||
|
||||
$flag_ids = $dbh->selectcol_arrayref(
|
||||
@ -939,7 +942,7 @@ sub clear {
|
||||
|
||||
=over
|
||||
|
||||
=item C<FormToNewFlags($bug, $attachment, $cgi)>
|
||||
=item C<FormToNewFlags($bug, $attachment, $cgi, $hr_vars)>
|
||||
|
||||
Checks whether or not there are new flags to create and returns an
|
||||
array of flag objects. This array is then passed to Flag::create().
|
||||
@ -949,7 +952,7 @@ array of flag objects. This array is then passed to Flag::create().
|
||||
=cut
|
||||
|
||||
sub FormToNewFlags {
|
||||
my ($bug, $attachment, $cgi) = @_;
|
||||
my ($bug, $attachment, $cgi, $hr_vars) = @_;
|
||||
my $dbh = Bugzilla->dbh;
|
||||
my $setter = Bugzilla->user;
|
||||
|
||||
@ -966,6 +969,14 @@ sub FormToNewFlags {
|
||||
'component_id' => $bug->{'component_id'},
|
||||
'is_active' => 1 });
|
||||
|
||||
foreach my $type_id (@type_ids) {
|
||||
# Checks if there are unexpected flags for the product/component.
|
||||
if (!scalar(grep { $_->id == $type_id } @$flag_types)) {
|
||||
$hr_vars->{'message'} = 'unexpected_flag_types';
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
my @flags;
|
||||
foreach my $flag_type (@$flag_types) {
|
||||
my $type_id = $flag_type->id;
|
||||
|
||||
@ -348,7 +348,7 @@ sub insert {
|
||||
my $bug = new Bugzilla::Bug($bugid);
|
||||
my $attachment =
|
||||
Bugzilla::Attachment->insert_attachment_for_bug(THROW_ERROR, $bug, $user,
|
||||
$timestamp, \$vars);
|
||||
$timestamp, $vars);
|
||||
|
||||
# Insert a comment about the new attachment into the database.
|
||||
my $comment = "Created an attachment (id=" . $attachment->id . ")\n" .
|
||||
@ -508,7 +508,7 @@ sub update {
|
||||
# to attachments so that we can delete pending requests if the user
|
||||
# is obsoleting this attachment without deleting any requests
|
||||
# the user submits at the same time.
|
||||
Bugzilla::Flag::process($bug, $attachment, $timestamp, $cgi);
|
||||
Bugzilla::Flag::process($bug, $attachment, $timestamp, $cgi, $vars);
|
||||
|
||||
# Update the attachment record in the database.
|
||||
$dbh->do("UPDATE attachments
|
||||
|
||||
@ -191,7 +191,7 @@ if (defined $cgi->param('version')) {
|
||||
if (defined($cgi->upload('data')) || $cgi->param('attachurl')) {
|
||||
$cgi->param('isprivate', $cgi->param('commentprivacy'));
|
||||
my $attachment = Bugzilla::Attachment->insert_attachment_for_bug(!THROW_ERROR,
|
||||
$bug, $user, $timestamp, \$vars);
|
||||
$bug, $user, $timestamp, $vars);
|
||||
|
||||
if ($attachment) {
|
||||
# Update the comment to include the new attachment ID.
|
||||
@ -227,7 +227,7 @@ my $error_mode_cache = Bugzilla->error_mode;
|
||||
Bugzilla->error_mode(ERROR_MODE_DIE);
|
||||
eval {
|
||||
Bugzilla::Flag::validate($cgi, $id, undef, SKIP_REQUESTEE_ON_ERROR);
|
||||
Bugzilla::Flag::process($bug, undef, $timestamp, $cgi);
|
||||
Bugzilla::Flag::process($bug, undef, $timestamp, $cgi, $vars);
|
||||
};
|
||||
Bugzilla->error_mode($error_mode_cache);
|
||||
if ($@) {
|
||||
|
||||
@ -1140,7 +1140,7 @@ foreach my $id (@idlist) {
|
||||
}
|
||||
}
|
||||
# Set and update flags.
|
||||
Bugzilla::Flag::process($new_bug_obj, undef, $timestamp, $cgi);
|
||||
Bugzilla::Flag::process($new_bug_obj, undef, $timestamp, $cgi, $vars);
|
||||
|
||||
if ($bug_changed) {
|
||||
$dbh->do(q{UPDATE bugs SET delta_ts = ? WHERE bug_id = ?},
|
||||
|
||||
@ -201,6 +201,10 @@
|
||||
[%+ new_email FILTER html %] has been canceled.
|
||||
Your old account settings have been reinstated.
|
||||
|
||||
[% ELSIF message_tag == "flag_cleared" %]
|
||||
Some flags didn't apply in the new product/component
|
||||
and have been cleared.
|
||||
|
||||
[% ELSIF message_tag == "flag_creation_failed" %]
|
||||
[% title = "Flag Creation Failure" %]
|
||||
An error occured while validating flags:
|
||||
@ -481,6 +485,9 @@
|
||||
[% ELSIF message_tag == "term" %]
|
||||
[% terms.$term FILTER html %]
|
||||
|
||||
[% ELSIF message_tag == "unexpected_flag_types" %]
|
||||
Some flags could not be set. Please check your changes.
|
||||
|
||||
[% ELSIF message_tag == "user_match_failed" %]
|
||||
You entered a username that did not match any known
|
||||
[% terms.Bugzilla %] users, so we have instead left
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user