]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 301656: Adds a preference to CC flag requestees to bugs
authorByron Jones <bjones@mozilla.com>
Wed, 30 Nov 2011 16:00:36 +0000 (00:00 +0800)
committerByron Jones <bjones@mozilla.com>
Wed, 30 Nov 2011 16:00:36 +0000 (00:00 +0800)
r=LpSolit, a=LpSolit

Bugzilla/Flag.pm
Bugzilla/Install.pm
template/en/default/global/setting-descs.none.tmpl

index f0c9399c0cc1d7ac569c404c0db0c67f8891bb59..76d950994cc2bd92060ad584406f4f779e89952c 100644 (file)
@@ -282,7 +282,7 @@ sub count {
 sub set_flag {
     my ($class, $obj, $params) = @_;
 
-    my ($bug, $attachment);
+    my ($bug, $attachment, $obj_flag, $requestee_changed);
     if (blessed($obj) && $obj->isa('Bugzilla::Attachment')) {
         $attachment = $obj;
         $bug = $attachment->bug;
@@ -320,13 +320,14 @@ sub set_flag {
             ($obj_flagtype) = grep { $_->id == $flag->type_id } @{$obj->flag_types};
             push(@{$obj_flagtype->{flags}}, $flag);
         }
-        my ($obj_flag) = grep { $_->id == $flag->id } @{$obj_flagtype->{flags}};
+        ($obj_flag) = grep { $_->id == $flag->id } @{$obj_flagtype->{flags}};
         # If the flag has the correct type but cannot be found above, this means
         # the flag is going to be removed (e.g. because this is a pending request
         # and the attachment is being marked as obsolete).
         return unless $obj_flag;
 
-        $class->_validate($obj_flag, $obj_flagtype, $params, $bug, $attachment);
+        ($obj_flag, $requestee_changed) =
+            $class->_validate($obj_flag, $obj_flagtype, $params, $bug, $attachment);
     }
     # Create a new flag.
     elsif ($params->{type_id}) {
@@ -358,12 +359,21 @@ sub set_flag {
             }
         }
 
-        $class->_validate(undef, $obj_flagtype, $params, $bug, $attachment);
+        ($obj_flag, $requestee_changed) =
+            $class->_validate(undef, $obj_flagtype, $params, $bug, $attachment);
     }
     else {
         ThrowCodeError('param_required', { function => $class . '->set_flag',
                                            param    => 'id/type_id' });
     }
+
+    if ($obj_flag
+        && $requestee_changed
+        && $obj_flag->requestee_id
+        && $obj_flag->requestee->setting('requestee_cc') eq 'on')
+    {
+        $bug->add_cc($obj_flag->requestee);
+    }
 }
 
 sub _validate {
@@ -383,23 +393,25 @@ sub _validate {
     $obj_flag->_set_status($params->{status});
     $obj_flag->_set_requestee($params->{requestee}, $attachment, $params->{skip_roe});
 
+    # The requestee ID can be undefined.
+    my $requestee_changed = ($obj_flag->requestee_id || 0) != ($old_requestee_id || 0);
+
     # The setter field MUST NOT be updated if neither the status
     # nor the requestee fields changed.
-    if (($obj_flag->status ne $old_status)
-        # The requestee ID can be undefined.
-        || (($obj_flag->requestee_id || 0) != ($old_requestee_id || 0)))
-    {
+    if (($obj_flag->status ne $old_status) || $requestee_changed) {
         $obj_flag->_set_setter($params->{setter});
     }
 
     # If the flag is deleted, remove it from the list.
     if ($obj_flag->status eq 'X') {
         @{$flag_type->{flags}} = grep { $_->id != $obj_flag->id } @{$flag_type->{flags}};
+        return;
     }
     # Add the newly created flag to the list.
     elsif (!$obj_flag->id) {
         push(@{$flag_type->{flags}}, $obj_flag);
     }
+    return wantarray ? ($obj_flag, $requestee_changed) : $obj_flag;
 }
 
 =pod
index 642165a43e3de9a15d66b7a00ef58c9865fb7405..d75d6ff48490955b1ed8836e204801eee2ea2595 100644 (file)
@@ -93,6 +93,8 @@ sub SETTINGS {
     # 2011-06-21 glob@mozilla.com -- Bug 589128
     email_format       => { options => ['html', 'text_only'],
                             default => 'html' },
+    # 2011-10-11 glob@mozilla.com -- Bug 301656
+    requestee_cc       => { options => ['on', 'off'], default => 'on' },
     }
 };
 
index 724e632062f4c7015f8accf0e621dd12ec92ae10..361d07a4a25db46b88cf1e47e192929741fe6494 100644 (file)
@@ -50,6 +50,7 @@
    "email_format"                     => "Preferred email format",
    "html"                             => "HTML",
    "text_only"                        => "Text Only",
+   "requestee_cc"                     => "Automatically add me to the CC list of $terms.bugs I am requested to review",
                    } 
 %]