]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 487769: checksetup.pl can no longer create versions in TestProduct due to insuffi...
authorlpsolit%gmail.com <>
Sat, 11 Apr 2009 23:33:24 +0000 (23:33 +0000)
committerlpsolit%gmail.com <>
Sat, 11 Apr 2009 23:33:24 +0000 (23:33 +0000)
Bugzilla/Component.pm
Bugzilla/Constants.pm
Bugzilla/Install.pm
Bugzilla/User.pm
checksetup.pl
editcomponents.cgi
template/en/default/admin/products/create.html.tmpl

index f5719e82c5c9c3359aa8ef09108cdb4d1f2e41f2..194a3957c78fdf4cbaa84777024250f592e0ce48 100644 (file)
@@ -60,6 +60,7 @@ use constant UPDATE_COLUMNS => qw(
 );
 
 use constant VALIDATORS => {
+    create_series    => \&Bugzilla::Object::check_boolean,
     product          => \&_check_product,
     initialowner     => \&_check_initialowner,
     initialqacontact => \&_check_initialqacontact,
@@ -114,14 +115,15 @@ sub create {
     $class->check_required_create_fields(@_);
     my $params = $class->run_create_validators(@_);
     my $cc_list = delete $params->{initial_cc};
+    my $create_series = delete $params->{create_series};
 
     my $component = $class->insert_create_data($params);
 
     # We still have to fill the component_cc table.
-    $component->_update_cc_list($cc_list);
+    $component->_update_cc_list($cc_list) if $cc_list;
 
     # Create series for the new component.
-    $component->_create_series();
+    $component->_create_series() if $create_series;
 
     $dbh->bz_commit_transaction();
     return $component;
index 91a97b7a2e3c05e1e2367d52e1ecf542e46499ac..294d03491631e20ea6b56b873ec7dd9bc3ae030c 100644 (file)
@@ -79,6 +79,7 @@ use File::Basename;
 
     DEFAULT_COLUMN_LIST
     DEFAULT_QUERY_NAME
+    DEFAULT_MILESTONE
 
     QUERY_LIST
     LIST_OF_BUGS
@@ -257,6 +258,9 @@ use constant DEFAULT_COLUMN_LIST => (
 # for the default settings.
 use constant DEFAULT_QUERY_NAME => '(Default query)';
 
+# The default "defaultmilestone" created for products.
+use constant DEFAULT_MILESTONE => '---';
+
 # The possible types for saved searches.
 use constant QUERY_LIST => 0;
 use constant LIST_OF_BUGS => 1;
index 8365f41824c4de3149c2fabcc9e9fbbc859c825d..65e19412cc981ca5b1dff961b28bb21aeecd0748 100644 (file)
@@ -26,6 +26,7 @@ package Bugzilla::Install;
 
 use strict;
 
+use Bugzilla::Component;
 use Bugzilla::Constants;
 use Bugzilla::Error;
 use Bugzilla::Group;
@@ -126,7 +127,10 @@ use constant DEFAULT_PRODUCT => {
     name => 'TestProduct',
     description => 'This is a test product.'
         . ' This ought to be blown away and replaced with real stuff in a'
-        . ' finished installation of bugzilla.'
+        . ' finished installation of bugzilla.',
+    version => Bugzilla::Version::DEFAULT_VERSION,
+    classification => 'Unclassified',
+    defaultmilestone => DEFAULT_MILESTONE,
 };
 
 use constant DEFAULT_COMPONENT => {
@@ -216,54 +220,33 @@ sub update_system_groups {
 # This function should be called only after creating the admin user.
 sub create_default_product {
     my $dbh = Bugzilla->dbh;
-
     # Make the default Classification if it doesn't already exist.
     if (!$dbh->selectrow_array('SELECT 1 FROM classifications')) {
-        my $class = DEFAULT_CLASSIFICATION;
         print get_text('install_default_classification', 
-                       { name => $class->{name} }) . "\n";
-        $dbh->do('INSERT INTO classifications (name, description)
-                       VALUES (?, ?)',
-                 undef, $class->{name}, $class->{description});
+                       { name => DEFAULT_CLASSIFICATION->{name} }) . "\n";
+        Bugzilla::Classification->create(DEFAULT_CLASSIFICATION);
     }
 
     # And same for the default product/component.
     if (!$dbh->selectrow_array('SELECT 1 FROM products')) {
-        my $default_prod = DEFAULT_PRODUCT;
         print get_text('install_default_product', 
-                       { name => $default_prod->{name} }) . "\n";
-
-        $dbh->do(q{INSERT INTO products (name, description)
-                        VALUES (?,?)}, 
-                 undef, $default_prod->{name}, $default_prod->{description});
-
-        my $product = new Bugzilla::Product({name => $default_prod->{name}});
+                       { name => DEFAULT_PRODUCT->{name} }) . "\n";
 
-        # The default version.
-        Bugzilla::Version->create({name => Bugzilla::Version::DEFAULT_VERSION,
-                                   product => $product});
+        my $product = Bugzilla::Product->create(DEFAULT_PRODUCT);
 
-        # And we automatically insert the default milestone.
-        $dbh->do(q{INSERT INTO milestones (product_id, value, sortkey)
-                        SELECT id, defaultmilestone, 0
-                          FROM products});
-
-        # Get the user who will be the owner of the Product.
-        # We pick the admin with the lowest id, or we insert
-        # an invalid "0" into the database, just so that we can
-        # create the component.
+        # Get the user who will be the owner of the Component.
+        # We pick the admin with the lowest id, which is probably the
+        # admin checksetup.pl just created.
         my $admin_group = new Bugzilla::Group({name => 'admin'});
         my ($admin_id)  = $dbh->selectrow_array(
             'SELECT user_id FROM user_group_map WHERE group_id = ?
            ORDER BY user_id ' . $dbh->sql_limit(1),
-            undef, $admin_group->id) || 0;
-        my $default_comp = DEFAULT_COMPONENT;
-
-        $dbh->do("INSERT INTO components (name, product_id, description,
-                                          initialowner)
-                       VALUES (?, ?, ?, ?)", undef, $default_comp->{name},
-                 $product->id, $default_comp->{description}, $admin_id);
+            undef, $admin_group->id);
+        my $admin = Bugzilla::User->new($admin_id);
+
+        Bugzilla::Component->create({
+            %{ DEFAULT_COMPONENT() }, product => $product,
+            initialowner => $admin->login });
     }
 
 }
index 2a616a145f604bbd42c5b909eeb262a41160ac89..661d2f167faa8e7e446b123b33fb7c74ae19db51 100644 (file)
@@ -50,8 +50,9 @@ use Bugzilla::Classification;
 use Bugzilla::Field;
 use Bugzilla::Group;
 
-use Scalar::Util qw(blessed);
 use DateTime::TimeZone;
+use Scalar::Util qw(blessed);
+use Storable qw(dclone);
 
 use base qw(Bugzilla::Object Exporter);
 @Bugzilla::User::EXPORT = qw(is_available_username
@@ -135,6 +136,18 @@ sub new {
     return $class->SUPER::new(@_);
 }
 
+sub super_user {
+    my $invocant = shift;
+    my $class = ref($invocant) || $invocant;
+    my ($param) = @_;
+
+    my $user = dclone(DEFAULT_USER);
+    $user->{groups} = [Bugzilla::Group->get_all];
+    $user->{bless_groups} = [Bugzilla::Group->get_all];
+    bless $user, $class;
+    return $user;
+}
+
 sub update {
     my $self = shift;
     my $changes = $self->SUPER::update(@_);
@@ -1762,6 +1775,18 @@ confirmation screen.
 
 =head1 METHODS
 
+=head2 Constructors
+
+=over
+
+=item C<super_user>
+
+Returns a user who is in all groups, but who does not really exist in the
+database. Used for non-web scripts like L<checksetup> that need to make 
+database changes and so on.
+
+=back
+
 =head2 Saved and Shared Queries
 
 =over
index da368a822cc7db06baac87c92731adb8e765c65a..53a709ebf37ba9a0c8fb9a0738318fc3b46929e9 100755 (executable)
@@ -96,6 +96,7 @@ exit if $switch{'check-modules'};
 # get a cryptic perl error about the missing module.
 
 require Bugzilla;
+require Bugzilla::User;
 
 require Bugzilla::Config;
 import Bugzilla::Config qw(:admin);
@@ -196,6 +197,9 @@ Bugzilla::Install::DB::update_table_definitions(\%old_params);
 
 Bugzilla::Install::update_system_groups();
 
+# "Log In" as the fake superuser who can do everything.
+Bugzilla->set_user(Bugzilla::User->super_user);
+
 ###########################################################################
 # Create --SETTINGS-- users can adjust
 ###########################################################################
index 7623be591212bcffd9916b29037942b22c106ac3..c550f0d8c358d70f1254f7c497d420908facbbd0 100755 (executable)
@@ -129,13 +129,17 @@ if ($action eq 'new') {
     my $description        = trim($cgi->param('description')      || '');
     my @initial_cc         = $cgi->param('initialcc');
 
-    my $component =
-      Bugzilla::Component->create({ name             => $comp_name,
-                                    product          => $product,
-                                    description      => $description,
-                                    initialowner     => $default_assignee,
-                                    initialqacontact => $default_qa_contact,
-                                    initial_cc       => \@initial_cc });
+    my $component = Bugzilla::Component->create({
+        name             => $comp_name,
+        product          => $product,
+        description      => $description,
+        initialowner     => $default_assignee,
+        initialqacontact => $default_qa_contact,
+        initial_cc       => \@initial_cc,
+        # XXX We should not be creating series for products that we
+        # didn't create series for.
+        create_series    => 1,
+   });
 
     $vars->{'message'} = 'component_created';
     $vars->{'comp'} = $component;
index 49c4ca71f3ee6e4a4f36df4df62776559aac80bf..08da684c2f6247d4d69d6dc7df34e2d26caa15f4 100644 (file)
@@ -32,7 +32,7 @@
   product.maxvotesperbug  = "10000",
   product.votestoconfirm = "0",
   version = "unspecified",
-  product.defaultmilestone = "---"
+  product.defaultmilestone = constants.DEFAULT_MILESTONE
 %]
 
 <form method="post" action="editproducts.cgi">