You are here

function _noderelationships_parent_node_form_alter in Node Relationships 6

Alter parent node form to attach extra buttons to node reference fields.

1 call to _noderelationships_parent_node_form_alter()
noderelationships_form_alter in ./noderelationships.module
Implementation of hook_form_alter().

File

./noderelationships.pages.inc, line 571
Implementation of user land pages.

Code

function _noderelationships_parent_node_form_alter(&$form, $form_state, $type_name, $noderef_settings) {
  $reference_fields = noderelationships_get_reference_fields($type_name);
  $creatable_types = noderelationships_get_creatable_types($type_name);
  $content_fields = array();

  // Prepare nodereference settings.
  $field_settings = array();
  foreach (array_keys($reference_fields) as $field_name) {
    if (!isset($content_fields[$field_name])) {
      $content_fields[$field_name] = content_fields($field_name, $type_name);
    }
    $field_settings[$field_name] = array(
      'maxAllowedValues' => $content_fields[$field_name]['multiple'] == 1 ? 0 : (empty($content_fields[$field_name]['multiple']) ? 1 : (int) $content_fields[$field_name]['multiple']),
      'ahahSearchUrl' => url('noderelationships/ahah/search/' . $type_name . '/' . $field_name),
    );
    if (isset($noderef_settings['edit_reference'][$field_name])) {
      $field_settings[$field_name]['editReference'] = TRUE;
    }
    if (isset($noderef_settings['search_and_reference_view'][$field_name])) {
      $field_settings[$field_name]['searchUrl'] = url('noderelationships/search/' . $type_name . '/' . $field_name);
    }
    if (isset($noderef_settings['create_and_reference'][$field_name]) && isset($reference_fields[$field_name])) {

      // Compute the list of content types that can be referred from this
      // nodereference field and the current user is allowed to create.
      $field_creatable_types = array_intersect($creatable_types, $reference_fields[$field_name]);
      if (!empty($field_creatable_types)) {
        $field_settings[$field_name]['createUrl'] = url('noderelationships/create/' . $type_name . '/' . $field_name);
      }
    }
    $field_settings[$field_name]['viewInNewWindow'] = !empty($noderef_settings['view_in_new_window'][$field_name]);
  }

  // If we're translating a node, then let's find missing translations for
  // fields where the "Translate and reference" option has been enabled.
  if (empty($form_state['submitted']) && isset($form['translation_source']) && isset($noderef_settings['translate_and_reference']) && noderelationships_translation_supported_type($type_name)) {
    module_load_include('inc', 'noderelationships', 'noderelationships.translation');
    _noderelationships_parent_node_form_build_translation_settings($form['#node'], $field_settings, $noderef_settings);
  }
  $form['#noderelationships'] = $field_settings;

  // Install an after_build callback. This one is used to have support for the
  // AHAH request related to the "Add more items" button of multivalue fields.
  if (!isset($form['#after_build'])) {
    $form['#after_build'] = array();
  }
  $form['#after_build'][] = '_noderelationships_parent_node_form_scanner_proxy';

  // Install a pre_render callback. This one is used to have support when form
  // validation errors are found. The after_build callback is not invoked in
  // that case because the form is not rebuilt.
  if (!isset($form['#pre_render'])) {
    $form['#pre_render'] = array();
  }
  $form['#pre_render'][] = '_noderelationships_parent_node_form_scanner_proxy';
}