You are here

function viewreference_field_settings in View reference 6.3

Same name and namespace in other branches
  1. 6 viewreference.module \viewreference_field_settings()
  2. 6.2 viewreference.module \viewreference_field_settings()

Implementation of hook_field_settings().

File

./viewreference.module, line 86
Defines a field type for referencing a view from a node.

Code

function viewreference_field_settings($op, $field) {
  switch ($op) {
    case 'form':
      $form = array();
      $form['referenceable_views'] = array(
        '#type' => 'checkboxes',
        '#title' => t('Views that can be referenced'),
        '#description' => t('Select the views that can be referenced. If no views are selected, then all the views will be available.'),
        '#multiple' => TRUE,
        '#default_value' => is_array($field['referenceable_views']) ? $field['referenceable_views'] : array(),
        '#options' => viewreference_get_views($field['append_id']),
      );
      $form['arguments'] = array(
        '#type' => 'fieldset',
        '#title' => t('Arguments'),
        '#collapsible' => TRUE,
        '#collapsed' => $field['dsv_arguments'] || $field['php_arguments'] ? FALSE : TRUE,
        '#description' => t('Enabling the following options will provide an input field for passing arguments to the view.'),
      );
      $form['arguments']['dsv_arguments'] = array(
        '#type' => 'checkbox',
        '#title' => t('Allow delimiter seperated values.'),
        '#default_value' => isset($field['dsv_arguments']) ? $field['dsv_arguments'] : 0,
        '#description' => t('Users can provide a list of arguments seperated by a delimiter. e.g: <em>term_1/term_2</em>'),
      );
      $form['arguments']['php_arguments'] = array(
        '#type' => 'checkbox',
        '#title' => t('Allow PHP code.'),
        '#default_value' => isset($field['php_arguments']) ? $field['php_arguments'] : 0,
        '#description' => t('Users can insert PHP code to generate the list of arguments. e.g: <em>term_1/&lt;?php print "term_x/term_y"; ?&gt;/term_2</em>'),
      );
      $form['arguments']['delimiter'] = array(
        '#type' => 'textfield',
        '#title' => t('Delimiter'),
        '#default_value' => !empty($field['delimiter']) ? $field['delimiter'] : '/',
        '#size' => 3,
        '#maxlength' => 30,
        '#required' => TRUE,
      );
      $row_range = range(0, 10);
      unset($row_range[0]);
      $form['arguments']['rows'] = array(
        '#type' => 'select',
        '#title' => t('Number of rows in argument field'),
        '#default_value' => isset($field['rows']) ? $field['rows'] : 1,
        '#options' => $row_range,
        '#description' => t('Set as 1 for textfield, or larger values for textarea (may be easier to write PHP with a textarea)'),
        '#required' => TRUE,
      );
      $form['append_id'] = array(
        '#type' => 'checkbox',
        '#title' => t('Append unique ID in lists.'),
        '#default_value' => isset($field['append_id']) ? $field['append_id'] : 0,
        '#description' => t('It is possible for views displays to have the same title, this option will append [view:view_display_n] in lists used by this field to disambiguate the options.'),
      );
      return $form;
    case 'save':
      $settings = array(
        'referenceable_views',
        'dsv_arguments',
        'php_arguments',
        'delimiter',
        'rows',
        'append_id',
      );
      return $settings;
    case 'database columns':
      $columns = array(
        'view_id' => array(
          'type' => 'varchar',
          'length' => '255',
          'default' => NULL,
          'not null' => FALSE,
        ),
        'arguments' => array(
          'type' => 'text',
          'size' => 'big',
        ),
      );
      return $columns;
    case 'views data':
      $data = content_views_field_views_data($field);
      $db_info = content_database_info($field);
      $table_alias = content_views_tablename($field);

      // Swap the filter handler to the 'in' operator.
      $data[$table_alias][$field['field_name'] . '_view_id']['filter']['handler'] = 'views_handler_filter_many_to_one_content';
      return $data;
  }
}