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]);
}
}
}
}