]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 526165: Make it impossible to set creation_ts via Bugzilla::Bug->create
authormkanat%bugzilla.org <>
Tue, 10 Nov 2009 21:21:52 +0000 (21:21 +0000)
committermkanat%bugzilla.org <>
Tue, 10 Nov 2009 21:21:52 +0000 (21:21 +0000)
Patch by Max Kanat-Alexander <mkanat@bugzilla.org> r=dkl, a=mkanat

Bugzilla/Bug.pm
Bugzilla/Migrate.pm
Bugzilla/WebService/Bug.pm
post_bug.cgi

index 1c8b8b9652753e2e7e048798e922fe0c079ead42..107b3f6af038657e6a89a0e2187bb04ea10fa769 100644 (file)
@@ -590,10 +590,10 @@ sub run_create_validators {
         $class->_check_qa_contact($params->{qa_contact}, $component);
     $params->{cc} = $class->_check_cc($component, $params->{cc});
 
-    # Callers cannot set Reporter, currently.
+    # Callers cannot set reporter, creation_ts, or delta_ts.
     $params->{reporter} = $class->_check_reporter();
-
-    $params->{creation_ts} ||= Bugzilla->dbh->selectrow_array('SELECT LOCALTIMESTAMP(0)');
+    $params->{creation_ts} = 
+        Bugzilla->dbh->selectrow_array('SELECT LOCALTIMESTAMP(0)');
     $params->{delta_ts} = $params->{creation_ts};
 
     if ($params->{estimated_time}) {
index c8f601521cff3884f3f60c6e9b070ebce1d7286c..40249bf50624d382aa262bed1fc4a303a9047cda 100644 (file)
@@ -767,7 +767,12 @@ sub insert_bugs {
         my $created = Bugzilla::Bug->create($bug);
         $self->debug('Created bug ' . $created->id);
         Bugzilla->set_user($super_user);
-        
+
+        if (defined $bug->{creation_ts}) {
+            $dbh->do('UPDATE bugs SET creation_ts = ?, delta_ts = ? 
+                       WHERE bug_id = ?', undef, $bug->{creation_ts},
+                     $bug->{creation_ts}, $created->id);
+        }
         if (defined $bug->{delta_ts}) {
             $dbh->do('UPDATE bugs SET delta_ts = ? WHERE bug_id = ?',
                      undef, $bug->{delta_ts}, $created->id);
index aea30cedbda24ff1464fa7f531efbc48055270b3..006fa0fee9fcc08f1162838579385508bea99b85 100644 (file)
@@ -282,17 +282,10 @@ sub search {
 
 sub create {
     my ($self, $params) = @_;
-
     Bugzilla->login(LOGIN_REQUIRED);
-
     $params = _map_fields($params);
-    # WebService users can't set the creation date of a bug.
-    delete $params->{'creation_ts'};
-
     my $bug = Bugzilla::Bug->create($params);
-
     Bugzilla::BugMail::Send($bug->bug_id, { changer => $bug->reporter->login });
-
     return { id => $self->type('int', $bug->bug_id) };
 }
 
index a482913cd0f46e1231b4a6132aa4b3fa2322fa54..ed483aec9bd1ff04f54005cacf4b82d2376fd870 100755 (executable)
@@ -103,9 +103,6 @@ if (defined $cgi->param('maketemplate')) {
 
 umask 0;
 
-# get current time
-my $timestamp = $dbh->selectrow_array('SELECT LOCALTIMESTAMP(0)');
-
 # Group Validation
 my @selected_groups;
 foreach my $group (grep(/^bit-\d+$/, $cgi->param())) {
@@ -160,7 +157,6 @@ my %bug_params;
 foreach my $field (@bug_fields) {
     $bug_params{$field} = $cgi->param($field);
 }
-$bug_params{'creation_ts'} = $timestamp;
 $bug_params{'cc'}          = [$cgi->param('cc')];
 $bug_params{'groups'}      = \@selected_groups;
 $bug_params{'comment'}     = $comment;
@@ -176,6 +172,10 @@ my $bug = Bugzilla::Bug->create(\%bug_params);
 
 # Get the bug ID back.
 my $id = $bug->bug_id;
+# We do this directly from the DB because $bug->creation_ts has the seconds
+# formatted out of it (which should be fixed some day).
+my $timestamp = $dbh->selectrow_array(
+    'SELECT creation_ts FROM bugs WHERE bug_id = ?', undef, $id);
 
 # Set Version cookie, but only if the user actually selected
 # a version on the page.