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