You are here

public function OgMigrateRoles::preImport in Organic groups 7.2

Copy all existing global roles to bundle-specific versions. Although similar processing is available through the og_roles_override() function, special handling is necessary to ensure that custom global roles are copied as well as default global roles.

Overrides Migration::preImport

File

includes/migrate/7200/og_roles.migrate.inc, line 57
Add per-bundle OG roles.

Class

OgMigrateRoles
@file Add per-bundle OG roles.

Code

public function preImport() {

  // This call to og_roles searches the database for all roles where
  // bundle and type are blank and gid = 0. Such entries should only
  // exist when a pre-2.0 version of og has not been fully migrated.
  $og_roles = og_roles('', '', 0);
  if (!empty($og_roles)) {
    $perms = og_role_permissions($og_roles);
  }
  else {

    // Just to be safe, revert to standard list of global default roles
    // if no matches were found.
    $og_roles = og_get_default_roles();
    $perms = og_get_default_permissions();
  }
  foreach (og_get_all_group_bundle() as $group_type => $bundles) {
    foreach ($bundles as $bundle => $label) {

      // Skip processing if already done.
      if (og_roles($group_type, $bundle, 0, TRUE)) {
        continue;
      }
      foreach ($og_roles as $rid => $name) {

        // Copy each role and its permissions to each bundle.
        // Although og_roles_override() does a db query at this point to
        // remap og_user_roles, not necessary in this case
        // (handled by og_user_roles.migrate).
        $role = og_role_create($name, $group_type, 0, $bundle);
        og_role_save($role);
        og_role_change_permissions($role->rid, $perms[$rid]);
      }
    }
  }
}