You are here

function noderelationships_admin_settings_backref in Node Relationships 6

Back reference settings form.

1 string reference to 'noderelationships_admin_settings_backref'
noderelationships_admin_page in ./noderelationships.admin.inc
Menu callback; relationships administration.

File

./noderelationships.admin.inc, line 454
Implementation of the administration pages of the module.

Code

function noderelationships_admin_settings_backref(&$form_state, $type) {
  $form = array();
  $referrer_types = noderelationships_get_referrer_types($type->type);

  // If this type does not have relations, then we're done here.
  if (empty($referrer_types)) {
    drupal_set_message(t('Could not find content types referring to %type.', array(
      '%type' => $type->name,
    )), 'warning');
    return $form;
  }
  $admin_help_text = t('This panel displays <em>Node Reference</em> fields that may refer to nodes of type %type.
These fields generate <em>back references</em> that you can easily display using a view on several regions (<em>Page</em>, <em>Tab</em> or <em>Fields</em>).
You can modify and/or clone (recommended) the default view should you need to add more fields, filters or change any other option to suit your needs.
To enable these <em>back references</em> just drag them to the region of your choice.
Back references assigned to the <em>Page</em> and <em>Tab</em> regions can be reordered from this panel.
Back references assigned to the <em>Fields</em> region can be reordered from the "Manage fields" panel.', array(
    '%type' => $type->name,
  ));
  $form['help'] = array(
    '#type' => 'markup',
    '#value' => theme('noderelationships_admin_help', $admin_help_text),
  );

  // Obtain back reference settings for this type.
  $backref_settings = noderelationships_settings_load($type->type, 'backref');

  // Prepare a list of all available relations.
  $available_relations = array();
  foreach ($referrer_types as $referrer_type => $field_names) {
    foreach ($field_names as $field_name) {
      $available_relations[$referrer_type . ':' . $field_name] = array(
        'referrer_type' => $referrer_type,
        'field_name' => $field_name,
      );
    }
  }

  // Build the list of all relations assigned to active regions.
  $form['#noderelationships-regions'] = array();
  foreach (array_keys(noderelationships_get_back_reference_regions()) as $region) {
    $form['#noderelationships-regions'][$region] = array();
    if (isset($backref_settings['regions'][$region])) {
      foreach ($backref_settings['regions'][$region] as $relation_key => $relation_info) {
        if (isset($available_relations[$relation_key])) {
          $referrer_type = $available_relations[$relation_key]['referrer_type'];
          $field_name = $available_relations[$relation_key]['field_name'];
          $form['#noderelationships-regions'][$region][$relation_key] = array(
            'referrer_type' => $referrer_type,
            'field_name' => $field_name,
            'field' => content_fields($field_name, $referrer_type),
            'weight' => $relation_info['weight'],
            'back_reference_view' => $relation_info['back_reference_view'],
          );
          unset($available_relations[$relation_key]);
        }
      }
    }
  }

  // Assign remaining relations to the disabled region.
  $form['#noderelationships-regions']['none'] = array();
  foreach ($available_relations as $relation_key => $available_relation) {
    $referrer_type = $available_relation['referrer_type'];
    $field_name = $available_relation['field_name'];
    $form['#noderelationships-regions']['none'][$relation_key] = array(
      'referrer_type' => $referrer_type,
      'field_name' => $field_name,
      'field' => content_fields($field_name, $referrer_type),
      'weight' => 0,
      'back_reference_view' => '',
    );
  }
  unset($available_relations);
  $options_back_reference_region = array(
    'none' => '<' . t('none') . '>',
  ) + noderelationships_get_back_reference_regions();
  $options_back_reference_view = noderelationships_get_views('backref');
  $form['weight'] = array(
    '#tree' => TRUE,
  );
  $form['back_reference_region'] = array(
    '#tree' => TRUE,
  );
  $form['back_reference_view'] = array(
    '#tree' => TRUE,
  );
  $form['#noderelationships-type'] = $type->type;
  foreach ($form['#noderelationships-regions'] as $region => $region_relations) {
    foreach ($region_relations as $relation_key => $relation_info) {
      $referrer_type = $relation_info['referrer_type'];
      $field_name = $relation_info['field_name'];
      $field = $relation_info['field'];
      $form['weight'][$relation_key] = array(
        '#type' => 'textfield',
        '#default_value' => isset($relation_info['weight']) ? $relation_info['weight'] : 0,
        '#size' => 3,
        '#attributes' => array(
          'class' => 'noderelationships-weight noderelationships-weight-' . $region,
        ),
      );
      $form['back_reference_region'][$relation_key] = array(
        '#type' => 'select',
        '#default_value' => $region,
        '#options' => $options_back_reference_region,
        '#attributes' => array(
          'class' => 'noderelationships-region-select noderelationships-region-' . $region,
        ),
      );
      $form['back_reference_view'][$relation_key] = array(
        '#type' => 'select',
        '#default_value' => isset($relation_info['back_reference_view']) ? $relation_info['back_reference_view'] : '',
        '#options' => $options_back_reference_view,
      );
    }
  }
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save settings'),
  );
  return $form;
}