You are here

function backstretch_field_formatter_settings_form in Backstretch 7.2

Implements hook_field_formatter_settings_form().

File

./backstretch.module, line 45
Main file for Backstretch Formatter module.

Code

function backstretch_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {

  // This gets the view mode where the settings are stored.
  $display = $instance['display'][$view_mode];

  // This gets the settings.
  $settings = $display['settings'];
  $element = array();
  if ($field['type'] == 'entityreference') {
    $entity_type = $field['settings']['target_type'];
    $bundles = isset($field['settings']['handler_settings']['target_bundles']) ? $field['settings']['handler_settings']['target_bundles'] : NULL;
    $instances = array();
    $fields = array();
    if (is_array($bundles)) {
      foreach (array_keys($bundles) as $bundle_name) {
        $fields_info = field_info_instances($entity_type, $bundle_name);
        foreach ($fields_info as $field_name => &$value) {
          $field_info = field_info_field($field_name);
          $value['type'] = $field_info['type'];

          // Remove non image fields.
          if ($value['type'] != 'image') {
            unset($value);
            continue;
          }
          $fields[$field_name] = $value['label'] . ' (' . $field_name . ')';
        }
      }
    }
    else {
      $fields_info = field_info_instances($entity_type);
      foreach ($fields_info as $bundle_name => $field) {
        foreach ($field as $field_name => &$value) {
          $field_info = field_info_field($field_name);
          $value['type'] = $field_info['type'];

          // Remove non image fields.
          if ($value['type'] != 'image') {
            unset($value);
            continue;
          }
          $fields[$field_name] = $value['label'] . ' (' . $field_name . ')';
        }
      }
    }

    // Display all image fields in a select list.
    if (count($fields) > 1) {
      $element['field'] = array(
        '#title' => t('Image field'),
        '#type' => 'select',
        '#required' => TRUE,
        '#default_value' => $settings['field'],
        '#options' => $fields,
        '#description' => t('Select the image field which should be used for Backstretch.'),
      );
    }
    elseif (count($fields)) {
      $field = array_keys($fields);
      $field = reset($field);
      $element['field_info'] = array(
        '#markup' => '<div class="form-item"><label>' . t('Image field') . '</label><div>' . t('Using: %name', array(
          '%name' => $field,
        )) . '</div></div>',
      );
      $element['field'] = array(
        '#type' => 'value',
        '#value' => $field,
      );
    }
    else {
      drupal_set_message(t('There is no image field in @entity_type.', array(
        '@entity_type' => $entity_type,
      )), 'error');
      return array();
    }
  }
  $image_styles = image_style_options(FALSE);
  $element['image_style'] = array(
    '#title' => t('Image style'),
    '#type' => 'select',
    '#default_value' => $settings['image_style'],
    '#options' => $image_styles,
    '#empty_option' => t('None (original image)'),
    '#description' => t('Image style for the images.'),
  );
  $element['element'] = array(
    '#type' => 'select',
    '#title' => t('Attach to'),
    '#default_value' => $settings['element'],
    '#options' => array(
      'other' => t('Other element'),
    ),
    '#empty_option' => t('Whole page'),
    '#description' => t('Where the Backstretch should be attached to.'),
  );
  $element['element_other'] = array(
    '#type' => 'textfield',
    '#title' => t('Other element'),
    '#default_value' => $settings['element_other'],
    '#description' => t('Enter the CSS selector for the element.'),
    '#states' => array(
      'visible' => array(
        ':input[name$="[element]"]' => array(
          'value' => 'other',
        ),
      ),
    ),
  );
  $element['tokens'] = array(
    '#type' => 'container',
    '#theme' => 'token_tree',
    '#token_types' => array(
      $instance['entity_type'],
    ),
    '#dialog' => TRUE,
    '#states' => array(
      'visible' => array(
        ':input[name$="[element]"]' => array(
          'value' => 'other',
        ),
      ),
    ),
  );
  $element['duration'] = array(
    '#type' => 'textfield',
    '#title' => t('Duration'),
    '#default_value' => $settings['duration'],
    '#description' => t('Amount of time in between slides.'),
    '#size' => 10,
    '#field_suffix' => 'ms',
    '#element_validate' => array(
      'element_validate_integer_positive',
    ),
  );

  // Disable duration setting if it is a one value field.
  if ($field['cardinality'] == '1') {
    $element['duration']['#disabled'] = TRUE;
    $element['duration']['#description'] = '<strong>' . t('Duration setting is only allowed for multi value fields.') . '</strong>';
  }
  $element['fade'] = array(
    '#type' => 'textfield',
    '#title' => t('Fade'),
    '#default_value' => $settings['fade'],
    '#description' => t('Speed of fade transition between slides.'),
    '#size' => 10,
    '#field_suffix' => 'ms',
    '#element_validate' => array(
      'backstretch_element_validate_duration',
    ),
  );

  // Make cardinality setting only available for multiple value field.
  if ($field['cardinality'] != '1') {
    $element['delta'] = array(
      '#type' => 'select',
      '#title' => t('Which image should be displayed?'),
      '#default_value' => $settings['delta'],
      '#options' => $field['cardinality'] != FIELD_CARDINALITY_UNLIMITED ? drupal_map_assoc(range(1, $field['cardinality'])) : drupal_map_assoc(range(1, BACKSTRETCH_MAX_DELTA)),
      '#empty_option' => t('All images'),
    );
  }
  $element['center_x'] = array(
    '#type' => 'checkbox',
    '#title' => t('Horizontal centered'),
    '#default_value' => $settings['center_x'],
    '#description' => t('Should we center the image on the X axis?'),
  );
  $element['center_y'] = array(
    '#type' => 'checkbox',
    '#title' => t('Vertically centered'),
    '#default_value' => $settings['center_y'],
    '#description' => t('Should we center the image on the Y axis?'),
  );
  $element['random'] = array(
    '#type' => 'checkbox',
    '#title' => t('Random'),
    '#default_value' => $settings['random'],
    '#description' => t('Check when a random image should be displayed instead of a slideshow.'),
    '#access' => $field['cardinality'] != 1,
  );
  return $element;
}