You are here

function views_field_formatter_field_formatter_settings_form in Views field formatter 7

Implements hook_field_formatter_settings_form().

File

./views_field_formatter.module, line 33
Views field formatter module.

Code

function views_field_formatter_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
  $display = $instance['display'][$view_mode];
  $settings = $display['settings']['views_field_formatter'];
  $element = array();

  // Get only enabled views.
  $views = views_get_enabled_views();
  $options = array();
  foreach ($views as $view => $data) {

    // If editing a field from a Views, remove the current view from the list.
    if (isset($form_state['view']) && $form_state['view']->name == $view) {
      continue;
    }

    // Remove Views which don't have the tag 'views_field_formatter'.
    $tags = explode(',', $data->tag);
    if (!in_array('views_field_formatter', $tags)) {
      continue;
    }
    foreach ($data->display as $display => $display_data) {
      $options[$data->human_name][$view . '::' . $display] = $display_data->display_title . ' (' . $view . '::' . $display . ')';
    }
  }
  $element['views_field_formatter'] = array(
    '#type' => 'fieldset',
    '#title' => 'Views field formatter configuration',
    '#collapsible' => TRUE,
    '#collapsed' => FALSE,
  );
  if (!empty($options)) {
    $element['views_field_formatter']['view'] = array(
      '#title' => t('View'),
      '#description' => t('Select the view (<em><a href="@add_view_url">or create a new one</a></em>) that will be used to get the value of the field. Only views with tag <em>views_field_formatter</em> will be visible.', array(
        '@add_view_url' => url('admin/structure/views/add'),
      )),
      '#type' => 'select',
      '#default_value' => $settings['view'],
      '#options' => $options,
    );
    $element['views_field_formatter']['multiple'] = array(
      '#title' => t('Multiple'),
      '#description' => t('If the field is configured as multiple, should we display a view per item ? If selected, there will be one view per item. The arguments passed to that view are in this order: the field item value, the entity id and the item delta.'),
      '#type' => 'checkbox',
      '#default_value' => boolval($settings['multiple']),
    );
    $field_multiple = sprintf(':input[name="fields[%s][settings_edit_form][settings][views_field_formatter][multiple]"]', $field['field_name']);
    $element['views_field_formatter']['implode_character'] = array(
      '#title' => t('Implode with this character'),
      '#description' => t('If it is set, all field values are imploded with this character and sent as one views argument. Empty to disable.'),
      '#type' => 'textfield',
      '#default_value' => $settings['implode_character'],
      '#states' => array(
        'visible' => array(
          $field_multiple => array(
            'checked' => TRUE,
          ),
        ),
      ),
    );
  }
  else {
    $element['views_field_formatter']['help'] = array(
      '#markup' => t('<p>No available Views were found. <a href="@add_view_url">Create</a> or <a href="@views_templates">add from the views templates</a> a views with tag <em>views_field_formatter</em>.</p>', array(
        '@add_view_url' => url('admin/structure/views/add'),
        '@views_templates' => url('admin/structure/views/add-template'),
      )),
    );
  }
  return $element;
}