You are here

function oa_clone_batch_clone_group_metadata in Open Atrium Clone 7.2

Callback for cloning Organic Groups metadata (variables, permisssions, etc).

Parameters

object $node: Node object representing the Space or Group that we are going to configure.

int $original_nid: The node ID of the original Space or Group we are cloning metadata from.

array &$context: A place where we can store values that need to b passed from one iteration of this batch operation to the next.

2 string references to 'oa_clone_batch_clone_group_metadata'
oa_clone_node_insert in ./oa_clone.module
Implements hook_node_insert().
_oa_clone_batch_space in ./oa_clone.module
Recursively clone a Space while setting up a batch for cloning content.

File

./oa_clone.module, line 956

Code

function oa_clone_batch_clone_group_metadata($node, $original_nid, &$context) {

  // Clone OG variables.
  foreach (variable_store_list_all('og', 'node_' . $original_nid) as $name) {
    variable_realm_set('og', 'node_' . $node->nid, $name, variable_realm_get('og', 'node_' . $original_nid, $name));
  }

  // Clone OG roles.
  $original_role_map = array();
  $original_roles = og_roles('node', $node->type, $original_nid);
  foreach ($original_roles as $original_rid => $original_name) {
    $original_role_map[$original_name] = $original_rid;

    // If this is a custom role, then we have to create it.
    if (!in_array($original_name, array(
      OG_ANONYMOUS_ROLE,
      OG_AUTHENTICATED_ROLE,
      OG_ADMINISTRATOR_ROLE,
    ))) {
      $role = og_role_create($original_name, 'node', $node->nid, $node->type);
      og_role_save($role);
    }
  }

  // Clone OG permissions.
  $permissions = og_role_permissions($original_roles);
  foreach (og_roles('node', $node->type, $node->nid) as $rid => $name) {

    // Only clone custom permissions.
    if ($rid != $original_role_map[$name]) {
      og_role_change_permissions($rid, $permissions[$original_role_map[$name]]);
    }
  }

  // Allow other modules to copy group metadata too.
  module_invoke_all('oa_clone_group_metadata', $node, $original_nid);
}