You are here

function oa_clone_node_presave in Open Atrium Clone 7.2

Implements hook_node_presave().

File

./oa_clone.module, line 511

Code

function oa_clone_node_presave($node) {
  if (empty($node->nid) && ($items = field_get_items('node', $node, 'field_oa_space_type')) && ($space_type = taxonomy_term_load($items[0]['tid'])) && !empty($node->oa_wizard_name) && ($steps = oa_wizard_get_steps($node->oa_wizard_name)) && ($wrapper = entity_metadata_wrapper('taxonomy_term', $space_type)) && $wrapper->field_oa_clone_enabled
    ->value() && ($clone_node = $wrapper->field_oa_clone_space
    ->value())) {
    module_load_include('inc', 'clone', 'clone.pages');
    $clone_node_prepared = _clone_node_prepare($clone_node, TRUE);
    $context = array(
      'method' => 'prepopulate',
      'original_node' => $clone_node,
    );
    drupal_alter('clone_node', $clone_node_prepared, $context);

    // Find what fields to copy to new node.
    // No additional hooks as people can implement hook_node_presave for
    // additional logic.
    $fields_transfer = array_merge(array(
      'title',
      'panelizer',
      'clone_from_original_nid',
    ), array_keys(field_info_instances('node', $node->type)));

    // Remove any fields exposed in wizard.
    foreach ($steps as $step) {
      foreach ($step['fields'] as $field_name) {
        $pos = array_search($field_name, $fields_transfer);
        if ($pos !== FALSE) {
          unset($fields_transfer[$pos]);
        }
      }
    }
    $fields_transfer = array_diff($fields_transfer, array(
      'oa_parent_space',
    ));
    foreach ($fields_transfer as $field_name) {
      if (isset($clone_node_prepared->{$field_name})) {
        $node->{$field_name} = $clone_node_prepared->{$field_name};
      }
    }
    $node->oa_clone_bypass_access_check = TRUE;
    $node->oa_clone_alter_batch = TRUE;
  }
}