You are here

contextual_view_modes.admin.inc in Contextual View Modes 7.2

Same filename and directory in other branches
  1. 7 contextual_view_modes.admin.inc

Contextual View Modes Administrative Screens

File

contextual_view_modes.admin.inc
View source
<?php

/**
 * @file
 * Contextual View Modes Administrative Screens
 */

/**
 * [contextual_view_modes_settings description]
 * @param  [type] $form       [description]
 * @param  [type] $form_state [description]
 * @return [type]             [description]
 */
function contextual_view_modes_settings_form($form, &$form_state) {
  $entity_info = entity_get_info();
  unset($entity_info['taxonomy_vocabulary']);
  unset($entity_info['comment']);
  $context_options = contextual_view_modes_get_context_options();
  $settings = variable_get('contextual_view_modes_global', array());
  $form['#attached']['css'][] = drupal_get_path('module', 'contextual_view_modes') . "/css/contextual_view_modes.admin.css";
  $form['description']['#markup'] = "";
  $d =& $form['description']['#markup'];
  $d .= "<h3>" . t("Site wide entity contextual view modes") . "</h3>";
  $d .= "<p>" . t("This form allows you to configure contextual view modes for each entity and bundle on your website. These settings are applied across all instances of the entity type.") . "</p>";
  $d .= "<p>" . t("For more information please see the !help.", array(
    '!help' => l("help page", 'admin/help'),
  )) . "</p>";
  foreach ($entity_info as $entity_type => $info) {

    // Define some vars.
    $delta = 0;
    $view_mode_options = contextual_view_modes_get_view_mode_options($entity_type);
    $bundles = array_keys($info['bundles']);
    $bundle_options = array(
      'none' => '- Select a bundle -',
    );
    $settings[$entity_type] = isset($settings[$entity_type]) ? $settings[$entity_type] : array();
    $form_state[$entity_type]['num_contexts'] = isset($form_state[$entity_type]['num_contexts']) ? $form_state[$entity_type]['num_contexts'] : count($settings[$entity_type]);

    // Create the fieldset.
    $form['entity_fieldset_' . $entity_type] = array(
      '#type' => 'fieldset',
      '#title' => $info['label'],
      '#collapsible' => TRUE,
      '#collapsed' => TRUE,
      '#tree' => TRUE,
    );
    $form['entity_fieldset_' . $entity_type]['container'] = array(
      '#type' => 'container',
      '#id' => "entity-wrapper-" . $entity_type,
    );

    // Create the labels.
    foreach ($bundles as $bundle_name) {
      $bundle_options[$bundle_name] = $info['bundles'][$bundle_name]['label'];
    }

    // loop through the stuff and things. Man im lazy tonight.
    for ($delta = 0; $delta <= $form_state[$entity_type]['num_contexts']; $delta++) {
      $form['entity_fieldset_' . $entity_type]['container'][$delta]['group'] = array(
        '#type' => 'container',
        '#attributes' => array(
          'class' => array(
            'inline-fields',
          ),
        ),
      );
      $form['entity_fieldset_' . $entity_type]['container'][$delta]["group"]['bundle'] = array(
        '#type' => 'select',
        '#title' => 'Type of content',
        '#options' => $bundle_options,
        '#default_value' => isset($settings[$entity_type][$delta]['bundle']) ? $settings[$entity_type][$delta]['bundle'] : 'none',
      );
      $form['entity_fieldset_' . $entity_type]['container'][$delta]["group"]['context'] = array(
        '#type' => 'select',
        '#title' => 'Context to evaluate',
        '#options' => $context_options,
        '#default_value' => isset($settings[$entity_type][$delta]['context']) ? $settings[$entity_type][$delta]['context'] : 'none',
      );
      $form['entity_fieldset_' . $entity_type]['container'][$delta]["group"]['view_mode'] = array(
        '#type' => 'select',
        '#title' => 'View mode to display',
        '#options' => $view_mode_options,
        '#default_value' => isset($settings[$entity_type][$delta]['view_mode']) ? $settings[$entity_type][$delta]['view_mode'] : 'none',
      );
      $form['entity_fieldset_' . $entity_type]['add_nuther'] = array(
        '#type' => 'submit',
        '#value' => t('Add another'),
        '#name' => 'add-nuther-' . $entity_type,
        '#submit' => array(
          'contextual_view_modes_settings_add_nuther',
        ),
        '#ajax' => array(
          'callback' => 'contextual_view_modes_settings_add_nuther_callback',
          'wrapper' => "entity-wrapper-" . $entity_type,
        ),
      );
    }
  }
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save'),
  );
  return $form;
}

/**
 * [contextual_view_modes_add_nuther_callback description]
 * @return [type] [description]
 */
function contextual_view_modes_settings_add_nuther_callback($form, $form_state) {
  $type = substr($form_state['triggering_element']['#name'], 11);
  return $form['entity_fieldset_' . $type]['container'];
}

/**
 * Submit handler for the "add-one-more" button.
 *
 * Increments the max counter and causes a rebuild.
 */
function contextual_view_modes_settings_add_nuther($form, &$form_state) {
  $type = substr($form_state['triggering_element']['#name'], 11);
  $form_state[$type]['num_contexts']++;
  $form_state['rebuild'] = TRUE;
}

/**
 * [contextual_view_modes_settings_form_submit description]
 * @param  [type] $form        [description]
 * @param  [type] &$form_state [description]
 * @return [type]              [description]
 */
function contextual_view_modes_settings_form_validate($form, &$form_state) {
  $values = $form_state['values'];
  $entity_info = entity_get_info();
  foreach ($entity_info as $entity_type => $info) {
    if (!isset($values['entity_fieldset_' . $entity_type])) {
      continue;
    }

    // Lets store the values.
    foreach ($values['entity_fieldset_' . $entity_type]['container'] as $index => $group) {
      $entries = array_values($group['group']);
      $uniq = array_diff($entries, array_diff_assoc($entries, array_unique($entries)));
      sort($uniq);

      // We need all three values to not be 'none' but skip if all 3 == none.
      if (empty($uniq)) {
        continue;
      }
      if (is_array($uniq) && count($uniq) == 1 && $uniq[0] == "none") {
        continue;
      }

      // Check for the none option.
      if (in_array('none', $entries)) {
        drupal_set_message("All values must be set.", 'error', 1);
        form_set_error('entity_fieldset_' . $entity_type . '][container][' . $index . '][group][bundle', "");
        form_set_error('entity_fieldset_' . $entity_type . '][container][' . $index . '][group][view_mode', "");
        form_set_error('entity_fieldset_' . $entity_type . '][container][' . $index . '][group][context', "");
      }
    }
  }
}

/**
 * [contextual_view_modes_settings_form_submit description]
 * @param  [type] $form        [description]
 * @param  [type] &$form_state [description]
 * @return [type]              [description]
 */
function contextual_view_modes_settings_form_submit($form, &$form_state) {
  $values = $form_state['values'];
  $entity_info = entity_get_info();
  $settings = array();
  foreach ($entity_info as $entity_type => $info) {
    if (!isset($values['entity_fieldset_' . $entity_type])) {
      continue;
    }

    // Lets store the values.
    foreach ($values['entity_fieldset_' . $entity_type]['container'] as $index => $group) {
      $entries = array_values($group['group']);

      // Check for the none option.
      if (in_array('none', $entries)) {
        continue;
      }

      // All three values available. Add to good pile.
      $settings[$entity_type][] = $group['group'];
    }
  }
  variable_set('contextual_view_modes_global', $settings);
}

Functions

Namesort descending Description
contextual_view_modes_settings_add_nuther Submit handler for the "add-one-more" button.
contextual_view_modes_settings_add_nuther_callback [contextual_view_modes_add_nuther_callback description]
contextual_view_modes_settings_form [contextual_view_modes_settings description]
contextual_view_modes_settings_form_submit [contextual_view_modes_settings_form_submit description]
contextual_view_modes_settings_form_validate [contextual_view_modes_settings_form_submit description]