]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 922549: Bugzilla::Migrate.pm should provide hook in load function. r=gerv.
authorrojanu <aliustek@gmail.com>
Fri, 15 Jan 2016 14:40:10 +0000 (14:40 +0000)
committerGervase Markham <gerv@mozilla.org>
Fri, 15 Jan 2016 14:40:10 +0000 (14:40 +0000)
Bugzilla/Hook.pm
Bugzilla/Migrate.pm
extensions/Example/Extension.pm
extensions/Example/lib/Migrate/ImportBugs.pm [new file with mode: 0644]

index f711907d13f69ff21e15289f43f516ee2c9a50eb..6f85885c3f3b042f144c27708a8b0b62690aceaa 100644 (file)
@@ -1083,6 +1083,34 @@ A hashref. The set of named parameters passed to C<create>.
 =back
 
 
+=head2 migrate_modules
+
+This hook allows you to add modules to Migrate to support additional systems 
+to be imported into Bugzilla
+
+Params:
+
+=over
+
+=item C<modules> - An hashref containing data to be returned to L<Bugzilla::Migrate>.
+This hashref contains the path and prefix for the modules to be used.
+
+=over
+
+=item C<path> - Path to where the modules are kept, on a typical extension this
+would be the lib folder of the extension.
+
+=item C<prefix> - Package prefix of the module to be loaded
+
+=back
+
+The definition is structured as:
+ $modules = { path => $path, prefix => $prefix };
+
+
+=back
+
+
 =head2 object_before_delete
 
 This happens in L<Bugzilla::Object/remove_from_db>, after we've confirmed
index 0731d4fedf9ddcb1d9f3be6c920b84a29c6aef64..6ecdb5c0d894d07bc2413d844f88a3f9502adab1 100644 (file)
@@ -199,12 +199,24 @@ sub load {
     my @migration_modules = glob("$libdir/Bugzilla/Migrate/*");
     my ($module) = grep { basename($_) =~ /^\Q$from\E\.pm$/i }
                           @migration_modules;
-    if (!$module) {
+    if ($module) {
+      require $module;
+      my $canonical_name = _canonical_name($module);
+      return "Bugzilla::Migrate::$canonical_name"->new;     
+    }
+    else {
+      my $migrate_module = {};
+      Bugzilla::Hook::process('migrate_modules', $migrate_module);
+      @migration_modules = glob($migrate_module->{path}."/*");
+      ($module) = grep { basename($_) =~ /^\Q$from\E\.pm$/i }
+                          @migration_modules;
+      if (!$module) {
         ThrowUserError('migrate_from_invalid', { from => $from });
+      }
+      require $module;
+      my $canonical_name = _canonical_name($module);
+      return "$migrate_module->{prefix}::$canonical_name"->new;
     }
-    require $module;
-    my $canonical_name = _canonical_name($module);
-    return "Bugzilla::Migrate::$canonical_name"->new;
 }
 
 #############
index 1649957fdc683f0d3ecb0517db3cea04b24e8824..ad96066f7e59616efe1ae333d5a46afda081e6d8 100644 (file)
@@ -635,6 +635,12 @@ sub mailer_before_send {
     $email->header_set('X-Bugzilla-Example-Header', 'Example');
 }
 
+sub migrate_modules {
+    my ($self, $args) = @_;
+    $args->{path} = bz_locations->{'extensionsdir'} . "/Example/lib/Migrate";
+    $args->{prefix} = "Bugzilla::Extension::Example:Migrate";
+}
+
 sub object_before_create {
     my ($self, $args) = @_;
     
diff --git a/extensions/Example/lib/Migrate/ImportBugs.pm b/extensions/Example/lib/Migrate/ImportBugs.pm
new file mode 100644 (file)
index 0000000..42a393c
--- /dev/null
@@ -0,0 +1,102 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This Source Code Form is "Incompatible With Secondary Licenses", as
+# defined by the Mozilla Public License, v. 2.0.
+
+
+=head1 NAME
+
+Bugzilla::Extension::Example::Migrate::ImportBugs - Bugzilla example bug importer
+
+=head1 DESCRIPTION
+
+This is not a complete implementation of a Import module.  For a working
+implementation see L<Bugzilla::Migrate::Gnats>.
+
+=cut
+
+package Bugzilla::Extension::Example::Migrate::ImportBugs;
+use strict;
+use base qw(Bugzilla::Migrate);
+
+use Bugzilla::Constants;
+use Bugzilla::Install::Util qw(indicate_progress);
+use Bugzilla::Util qw(format_time trim generate_random_password);
+
+use constant REQUIRED_MODULES => [
+    {
+        package => 'Email-Simple-FromHandle',
+        module  => 'Email::Simple::FromHandle',
+        version => 0.050,
+    },
+];
+
+use constant FIELD_MAP => {
+    'Number'         => 'bug_id',
+    'Category'       => 'product',
+};
+
+use constant VALUE_MAP => {
+    bug_severity => {
+        'serious'      => 'major',
+        'non-critical' => 'normal',
+    },
+    bug_status => {
+        'feedback'  => 'RESOLVED',
+        'released'  => 'VERIFIED',
+    },
+};
+
+use constant IMPORTBUGS_CONFIG_VARS => (
+    {
+        name    => 'default_email_domain',
+        default => 'example.com',
+        desc    => <<'END',
+# Some users do not have full email addresses, but Bugzilla requires
+# every user to have an email address. What domain should be appended to
+# usernames that don't have emails, to make them into email addresses?
+# (For example, if you leave this at the default, "unknown" would become
+# "unknown@example.com".)
+END
+    },
+);
+
+#########
+# Hooks #
+#########
+
+sub before_insert {
+    my $self = shift;
+}
+
+#########
+# Users #
+#########
+
+sub _read_users {
+    my $self = shift;
+}
+
+############
+# Products #
+############
+
+sub _read_products {
+    my $self = shift;
+}
+
+################
+# Reading Bugs #
+################
+
+sub _read_bugs {
+    my $self = shift;
+}
+
+sub _parse_project {
+    my ($self, $directory) = @_;
+}
+
+1;