]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 526734: Allow localization of the "From update of attachment" string in comments
authormkanat%bugzilla.org <>
Sun, 13 Dec 2009 20:56:44 +0000 (20:56 +0000)
committermkanat%bugzilla.org <>
Sun, 13 Dec 2009 20:56:44 +0000 (20:56 +0000)
Patch by Max Kanat-Alexander <mkanat@bugzilla.org> r=LpSolit, a=LpSolit

Bugzilla/Comment.pm
Bugzilla/Constants.pm
Bugzilla/Install/DB.pm
attachment.cgi
template/en/default/bug/format_comment.txt.tmpl

index f0998542624bb6121e6605f250f3df54a228681b..e81819652398152f4588b24045c1027e5a51b7dc 100644 (file)
@@ -96,7 +96,8 @@ sub bug {
 
 sub is_about_attachment {
     my ($self) = @_;
-    return 1 if $self->type == CMT_ATTACHMENT_CREATED;
+    return 1 if ($self->type == CMT_ATTACHMENT_CREATED
+                 or $self->type == CMT_ATTACHMENT_UPDATED);
     return 0;
 }
 
@@ -160,7 +161,9 @@ sub _check_extra_data {
         if ($type == CMT_MOVED_TO) {
             $extra_data = Bugzilla::User->check($extra_data)->login;
         }
-        elsif ($type == CMT_ATTACHMENT_CREATED) {
+        elsif ($type == CMT_ATTACHMENT_CREATED 
+               or $type == CMT_ATTACHMENT_UPDATED) 
+        {
              my $attachment = Bugzilla::Attachment->check({ 
                  id => $extra_data });
              $extra_data = $attachment->id;
index e052d2ecbb758ead066fc61da43267629abcf22d..a9340543b90d6f1e374ee04e9b2ebfd50b85e5a8 100644 (file)
@@ -93,6 +93,7 @@ use File::Basename;
     CMT_POPULAR_VOTES
     CMT_MOVED_TO
     CMT_ATTACHMENT_CREATED
+    CMT_ATTACHMENT_UPDATED
 
     THROW_ERROR
     
@@ -282,6 +283,7 @@ use constant CMT_HAS_DUPE => 2;
 use constant CMT_POPULAR_VOTES => 3;
 use constant CMT_MOVED_TO => 4;
 use constant CMT_ATTACHMENT_CREATED => 5;
+use constant CMT_ATTACHMENT_UPDATED => 6;
 
 # Determine whether a validation routine should return 0 or throw
 # an error when the validation fails.
index bada40dad87873cb56a0924fc54cd7daf5748f6c..74668a3bb0fe436a0a9a2294ad2622c0d3497620 100644 (file)
@@ -586,7 +586,7 @@ sub update_table_definitions {
     # 2009-11-01 LpSolit@gmail.com - Bug 525025
     _fix_invalid_custom_field_names();
 
-    _move_attachment_creation_comments_into_comment_type();
+    _set_attachment_comment_types();
 
     ################################################################
     # New --TABLE-- changes should go *** A B O V E *** this point #
@@ -3253,53 +3253,77 @@ sub _fix_invalid_custom_field_names {
     }
 }
 
-sub _move_attachment_creation_comments_into_comment_type {
+sub _set_attachment_comment_type {
+    my ($type, $string) = @_;
     my $dbh = Bugzilla->dbh;
-    # We check if there are any CMT_ATTACHMENT_CREATED comments already,
-    # first, because this is faster than a full LIKE search on the comments,
+    # We check if there are any comments of this type already, first, 
+    # because this is faster than a full LIKE search on the comments,
     # and currently this will run every time we run checksetup.
     my $test = $dbh->selectrow_array(
-        'SELECT 1 FROM longdescs WHERE type = ' . CMT_ATTACHMENT_CREATED
-        . ' ' . $dbh->sql_limit(1));
-    return if $test;
+        "SELECT 1 FROM longdescs WHERE type = $type " . $dbh->sql_limit(1));
+    return [] if $test;
     my %comments = @{ $dbh->selectcol_arrayref(
         "SELECT comment_id, thetext FROM longdescs
-          WHERE thetext LIKE 'Created an attachment (id=%'", 
+          WHERE thetext LIKE '$string%'", 
         {Columns=>[1,2]}) };
     my @comment_ids = keys %comments;
-    return if !scalar @comment_ids;
-    print "Setting the type field on attachment creation comments...\n";
+    return [] if !scalar @comment_ids;
+    my $what = "update";
+    if ($type == CMT_ATTACHMENT_CREATED) {
+        $what = "creation";
+    }
+    print "Setting the type field on attachment $what comments...\n";
     my $sth = $dbh->prepare(
         'UPDATE longdescs SET thetext = ?, type = ?, extra_data = ?
           WHERE comment_id = ?');
     my $count = 0;
     my $total = scalar @comment_ids;
-    $dbh->bz_start_transaction();
     foreach my $id (@comment_ids) {
         $count++;
         my $text = $comments{$id};
-        next if $text !~ /attachment \(id=(\d+)/;
+        next if $text !~ /^\Q$string\E(\d+)/;
         my $attachment_id = $1;
-        # Now we have to remove the text up until we find a line that's
-        # just a single newline, because the old "Created an attachment"
-        # text included the attachment description underneath it, and in
-        # Bugzillas before 2.20, that could be wrapped into multiple lines,
-        # in the database.
         my @lines = split("\n", $text);
-        while (1) {
-            my $line = shift @lines;
-            last if (!defined $line or trim($line) eq '');
+        if ($type == CMT_ATTACHMENT_CREATED) {
+            # Now we have to remove the text up until we find a line that's
+            # just a single newline, because the old "Created an attachment"
+            # text included the attachment description underneath it, and in
+            # Bugzillas before 2.20, that could be wrapped into multiple lines,
+            # in the database.
+            while (1) {
+                my $line = shift @lines;
+                last if (!defined $line or trim($line) eq '');
+            }
+        }
+        else {
+            # However, the "From update of attachment" line is always just
+            # one line--the first line of the comment.
+            shift @lines;
         }
         $text = join("\n", @lines);
-        $sth->execute($text, CMT_ATTACHMENT_CREATED, $attachment_id, $id);
+        $sth->execute($text, $type, $attachment_id, $id);
         indicate_progress({ total => $total, current => $count, 
                             every => 25 });
     }
+    return \@comment_ids;
+}
+
+sub _set_attachment_comment_types {
+    my $dbh = Bugzilla->dbh;
+    $dbh->bz_start_transaction();
+    my $created_ids = _set_attachment_comment_type(
+        CMT_ATTACHMENT_CREATED, 'Created an attachment (id=');
+    my $updated_ids = _set_attachment_comment_type(
+        CMT_ATTACHMENT_UPDATED, '(From update of attachment ');
+    $dbh->bz_commit_transaction();
+    return unless (@$created_ids or @$updated_ids);
+
+    my @comment_ids = (@$created_ids, @$updated_ids);
+
     my $bug_ids = $dbh->selectcol_arrayref(
         'SELECT DISTINCT bug_id FROM longdescs WHERE '
         . $dbh->sql_in('comment_id', \@comment_ids));
     _populate_bugs_fulltext($bug_ids);
-    $dbh->bz_commit_transaction();
 }
 
 1;
index a89a46b991b1a51695ec46d2de19cb41a9d2c520..bc1cb90f7662e8a0a0d6182bb8be3f29716cb6ab 100755 (executable)
@@ -616,13 +616,11 @@ sub update {
 
     # If the user submitted a comment while editing the attachment,
     # add the comment to the bug. Do this after having validated isprivate!
-    if ($cgi->param('comment')) {
-        # Prepend a string to the comment to let users know that the comment came
-        # from the "edit attachment" screen.
-        my $comment = "(From update of attachment " . $attachment->id . ")\n" .
-                      $cgi->param('comment');
-
-        $bug->add_comment($comment, { isprivate => $attachment->isprivate });
+    my $comment = $cgi->param('comment');
+    if (trim($comment)) {
+        $bug->add_comment($comment, { isprivate => $attachment->isprivate,
+                                      type => CMT_ATTACHMENT_UPDATED,
+                                      extra_data => $attachment->id });
     }
 
     if ($can_edit) {
index 49ab95ad10990f0aedebade2560eee2663854e04..27b72a918df4a297282481684bfa7e12fb656302 100644 (file)
@@ -56,6 +56,14 @@ Created attachment [% comment.extra_data %]
 [% END %]
 [%+ comment.attachment.description %]
 
+[%+ comment.body %]
+[% ELSIF comment.type == constants.CMT_ATTACHMENT_UPDATED %]
+Comment on attachment [% comment.extra_data %]
+[% IF is_bugmail %]
+  --> [% urlbase _ "attachment.cgi?id=" _ comment.extra_data %]
+[% END %]
+[%+ comment.attachment.description %]
+
 [%+ comment.body %]
 [% ELSE %]
 X[% comment_body %]