You are here

function migrate_autoregister in Migrate 6.2

On request, scan the Drupal code registry for any new migration classes for us to register in migrate_status.

2 calls to migrate_autoregister()
drush_migrate_auto_register in ./migrate.drush.inc
Register any previously-unrecognized non-dynamic migrations.
migrate_ui_configure_register_submit in migrate_ui/migrate_ui.pages.inc
Submit callback for the configuration form registration fieldset.

File

./migrate.module, line 132

Code

function migrate_autoregister() {

  // Make sure the registry is up-to-date on all available classes.
  autoload_registry_update();

  // Get list of modules implementing Migrate API
  $modules = array_keys(migrate_get_module_apis(TRUE));

  // Get list of classes we already know about
  $existing_classes = array();
  $result = db_query("SELECT class_name\n                      FROM {migrate_status}");
  while ($row = db_fetch_object($result)) {
    $existing_classes[$row->class_name] = $row->class_name;
  }

  // Discover class names registered with Drupal by modules implementing our API
  $result = db_query("SELECT name\n                      FROM {autoload_registry}\n                      WHERE type='class' AND module IN (" . db_placeholders($modules, 'varchar') . ") AND filename NOT LIKE '%.test'", $modules);
  while ($record = db_fetch_object($result)) {
    $class_name = $record->name;

    // If we already know about this class, skip it
    if (isset($existing_classes[$class_name])) {
      continue;
    }

    // Validate it's an implemented subclass of the parent class
    // Ignore errors
    try {
      $class = new ReflectionClass($class_name);
    } catch (Exception $e) {
      continue;
    }
    if (!$class
      ->isAbstract() && $class
      ->isSubclassOf('MigrationBase')) {

      // Verify that it's not a dynamic class (the implementor will be responsible
      // for registering those).
      $dynamic = call_user_func(array(
        $class_name,
        'isDynamic',
      ));
      if (!$dynamic) {

        // OK, this is a new non-dynamic migration class, register it
        MigrationBase::registerMigration($class_name);
      }
    }
  }
}