]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 346121: Creating an attachment upon new bug doesn't create attachment link in...
authorlpsolit%gmail.com <>
Sat, 30 Dec 2006 06:18:54 +0000 (06:18 +0000)
committerlpsolit%gmail.com <>
Sat, 30 Dec 2006 06:18:54 +0000 (06:18 +0000)
Bugzilla/Bug.pm
post_bug.cgi

index 469b6ff6066b09a3dc8f65f49e0573a5f9efc419..841b6f14f8f78f98e2ddcfcb91e149b4b7689194 100755 (executable)
@@ -1351,6 +1351,36 @@ sub AppendComment {
              undef, $timestamp, $bugid);
 }
 
+sub update_comment {
+    my ($self, $comment_id, $new_comment) = @_;
+
+    # Some validation checks.
+    if ($self->{'error'}) {
+        ThrowCodeError("bug_error", { bug => $self });
+    }
+    detaint_natural($comment_id)
+      || ThrowCodeError('bad_arg', {argument => 'comment_id', function => 'update_comment'});
+
+    # The comment ID must belong to this bug.
+    my @current_comment_obj = grep {$_->{'id'} == $comment_id} @{$self->longdescs};
+    scalar(@current_comment_obj)
+      || ThrowCodeError('bad_arg', {argument => 'comment_id', function => 'update_comment'});
+
+    # If the new comment is undefined, then there is nothing to update.
+    # To delete a comment, an empty string should be passed.
+    return unless defined $new_comment;
+    $new_comment =~ s/\s*$//s;    # Remove trailing whitespaces.
+    $new_comment =~ s/\r\n?/\n/g; # Handle Windows and Mac-style line endings.
+    trick_taint($new_comment);
+
+    # We assume ValidateComment() has already been called earlier.
+    Bugzilla->dbh->do('UPDATE longdescs SET thetext = ? WHERE comment_id = ?',
+                       undef, ($new_comment, $comment_id));
+
+    # Update the comment object with this new text.
+    $current_comment_obj[0]->{'body'} = $new_comment;
+}
+
 # Represents which fields from the bugs table are handled by process_bug.cgi.
 sub editable_bug_fields {
     my @fields = Bugzilla->dbh->bz_table_columns('bugs');
@@ -1416,7 +1446,8 @@ sub GetComments {
     my @comments;
     my @args = ($id);
 
-    my $query = 'SELECT profiles.realname AS name, profiles.login_name AS email, ' .
+    my $query = 'SELECT longdescs.comment_id AS id, profiles.realname AS name,
+                        profiles.login_name AS email, ' .
                         $dbh->sql_date_format('longdescs.bug_when', '%Y.%m.%d %H:%i:%s') .
                       ' AS time, longdescs.thetext AS body, longdescs.work_time,
                         isprivate, already_wrapped, type, extra_data
index 715437141afd1f73e3f0df616a7f4790c6a6f7fc..2c40a4441c5226b076ee8728789a5746fc4bb875 100755 (executable)
@@ -187,10 +187,26 @@ if (defined $cgi->param('version')) {
 # Add an attachment if requested.
 if (defined($cgi->upload('data')) || $cgi->param('attachurl')) {
     $cgi->param('isprivate', $cgi->param('commentprivacy'));
-    Bugzilla::Attachment->insert_attachment_for_bug(!THROW_ERROR,
-                                                    $bug, $user, $timestamp,
-                                                    \$vars)
-        || ($vars->{'message'} = 'attachment_creation_failed');
+    my $attach_id = Bugzilla::Attachment->insert_attachment_for_bug(!THROW_ERROR,
+                                                  $bug, $user, $timestamp, \$vars);
+
+    if ($attach_id) {
+        # Update the comment to include the new attachment ID.
+        # This string is hardcoded here because Template::quoteUrls()
+        # expects to find this exact string.
+        my $new_comment = "Created an attachment (id=$attach_id)\n" .
+                          $cgi->param('description') . "\n";
+        # We can use $bug->longdescs here because we are sure that the bug
+        # description is of type CMT_NORMAL. No need to include it if it's
+        # empty, though.
+        if ($bug->longdescs->[0]->{'body'} !~ /^\s+$/) {
+            $new_comment .= "\n" . $bug->longdescs->[0]->{'body'};
+        }
+        $bug->update_comment($bug->longdescs->[0]->{'id'}, $new_comment);
+    }
+    else {
+        $vars->{'message'} = 'attachment_creation_failed';
+    }
 
     # Determine if Patch Viewer is installed, for Diff link
     eval {