You are here

function commons_groups_set_group_permissions in Drupal Commons 7.3

Set the group's permissions according to field_og_subscribe_settings.

Parameters

$node: A group node.

2 calls to commons_groups_set_group_permissions()
commons_groups_node_insert in modules/commons/commons_groups/commons_groups.module
Implements hook_node_insert().
commons_groups_node_update in modules/commons/commons_groups/commons_groups.module
Implements hook_node_update().

File

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

Code

function commons_groups_set_group_permissions($node) {

  // Avoid updating a group subscription twice on the same request.
  $updated_nodes =& drupal_static(__FUNCTION__);
  if (!empty($updated_nodes[$node->nid])) {
    return;
  }
  $updated_nodes[$node->nid] = TRUE;
  $wrapper = entity_metadata_wrapper('node', $node);
  $permission = $wrapper->field_og_subscribe_settings
    ->value();
  $og_roles = og_roles('node', $node->type, $node->nid);
  $anon_rid = array_search(OG_ANONYMOUS_ROLE, $og_roles);
  $permissions = array(
    'subscribe' => $permission == 'approval',
    'subscribe without approval' => $permission == 'anyone',
  );

  // Check if the permissions needs to be changed.
  $changed = FALSE;
  $old_permissions = og_role_permissions(array(
    $anon_rid => OG_ANONYMOUS_ROLE,
  ));
  foreach ($permissions as $permission => $value) {
    if (empty($old_permissions[$anon_rid][$permission]) || $old_permissions[$anon_rid][$permission] != $value) {
      $changed = TRUE;
    }
  }

  // Only change the permissions when neccessary.
  if ($changed) {
    og_role_change_permissions($anon_rid, $permissions);
  }
}