You are here

function commons_groups_features_permission_rebuild in Drupal Commons 7.3

Special Commons implementation of hook_features_rebuild().

By default, reverting og permissions only occurs on the default rid, which is 0. All groups already created will not see the new permissions.

As an alternative, this function iterates through all of the groups and sets default permissions and update the permissions map.

Parameters

string $module: The modules whose default user permissions should be rebuild.

7 calls to commons_groups_features_permission_rebuild()
commons_documents_enable in modules/commons/commons_documents/commons_documents.install
Set default polls roles upon enable
commons_documents_update_7009 in modules/commons/commons_documents/commons_documents.install
Reset document og permissions automatically, they were not set before now.
commons_events_enable in modules/commons/commons_events/commons_events.install
Set default events roles upon enable
commons_polls_enable in modules/commons/commons_polls/commons_polls.install
Set default polls roles upon enable
commons_posts_enable in modules/commons/commons_posts/commons_posts.install
Set default posts roles upon enable

... See full list

File

modules/commons/commons_groups/commons_groups.module, line 1204

Code

function commons_groups_features_permission_rebuild($module, $gid) {
  module_load_include('features.inc', 'og', '/includes/og_features_role');
  if ($defaults = features_get_default('og_features_permission', $module)) {

    // Make sure the list of available group types is up to date, especially
    // when installing multiple features at once, for example from an install
    // profile or via drush.
    drupal_static_reset();
    $grant = array();
    $revoke = array();
    foreach ($defaults as $key => $details) {
      list($group_type, $bundle, $perm) = explode(':', $key);

      // Make sure the role exists for this entity.
      foreach ($details['roles'] as $role) {
        $bundle_role = _og_features_role_exists($role, $group_type, $bundle);
        if (empty($bundle_role)) {
          og_role_save(og_role_create($role, $group_type, $gid, $bundle));
        }
      }
      $roles = og_roles($group_type, $bundle, $gid);
      foreach ($roles as $rid => $rolename) {
        if (in_array($rolename, $details['roles'])) {
          $grant[$rid][] = $perm;
        }
        else {
          $revoke[$rid][] = $perm;
        }
      }
    }
    if (!empty($grant)) {
      foreach ($grant as $rid => $permissions) {
        og_role_grant_permissions($rid, $permissions);
      }
    }
    if (!empty($revoke)) {
      foreach ($revoke as $rid => $permissions) {
        og_role_revoke_permissions($rid, $permissions);
      }
    }
  }
}