]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Midair with product change while adding an attachment silently clears flags - Patch...
authorlpsolit%gmail.com <>
Tue, 9 Oct 2007 18:05:58 +0000 (18:05 +0000)
committerlpsolit%gmail.com <>
Tue, 9 Oct 2007 18:05:58 +0000 (18:05 +0000)
Bugzilla/Attachment.pm
Bugzilla/Flag.pm
attachment.cgi
post_bug.cgi
process_bug.cgi
template/en/default/global/messages.html.tmpl

index 736959b2fe50fe839a8cfeb20da5aa75d17297fe..cc3e168934f4b8d6d205580cf371df7587c3701e 100644 (file)
@@ -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.
index a6914a6618410ba1d192d485a110adad906216d1..3a4d03df609ba7397ce5c24e58ef65e580f062fe 100644 (file)
@@ -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;
index d9521b5914fb688265b23eb8b83151f5b70fcdcb..82f650f3c60f2da5fe65184052fc6a1a2575fb62 100755 (executable)
@@ -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 
index 759c9c250048b697118c52a817c6bdbd3405e52d..8ce7f07234f6cd4f2f8c4bb78fbab58e9824c174 100755 (executable)
@@ -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 ($@) {
index 3e1246e755e519d9fb75ddc55cc580564270f46c..56931c2938d4b4c7527efc511afca2ec0a418c89 100755 (executable)
@@ -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 = ?},
index 6db207dd4ce8f1a8c8a3bc57b7209e3c24255462..b9b423ca6a2241f44bcf8200c8cd69f6a09b2fbb 100644 (file)
     [%+ 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:
   [% 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