You are here

token_field.module in Token Field 7

Same filename and directory in other branches
  1. 6 token_field.module

Optional extension to CCK (Content Construction Kit) to provide a read-only field which allows embedding of "compound" fields using Tokens.

File

token_field.module
View source
<?php

/**
 * @file
 * Optional extension to CCK (Content Construction Kit) to provide a read-only
 * field which allows embedding of "compound" fields using Tokens.
 */

/**
 * Implements hook_field_info().
 */
function token_field_field_info() {
  return array(
    'token_field' => array(
      'label' => t('Token Field'),
      'description' => t('A read-only compound field using Tokens.'),
      'default_widget' => 'token_field',
      'default_formatter' => 'token_field_default',
    ),
  );
}

/**
 * Implements hook_field_settings_form().
 */
function token_field_field_settings_form($field, $instance, $has_data) {
  $settings = $field['settings'];
  $form = array();
  $form['template'] = array(
    '#type' => 'text_format',
    '#default_value' => isset($settings['template']['value']) ? $settings['template']['value'] : '',
    '#format' => isset($settings['template']['format']) ? $settings['template']['format'] : NULL,
    '#description' => t('Using the text area, define the layout for this field using HTML and Tokens.'),
  );
  $form['token_help'] = array(
    '#theme' => 'token_tree',
    '#token_types' => array(
      'node',
    ),
  );
  return $form;
}

/**
 * Implements hook_form_FORM_ID_alter().
 */
function token_field_form_field_ui_field_edit_form_alter(&$form, &$form_state, $form_id) {

  // Not intereted in non-token_field forms
  if ($form['#field']['type'] != 'token_field') {
    return;
  }

  // By settings the following fields to 'value', they will no longer appear
  // in the form but their value will appear in the submission handlers.
  $form['instance']['required']['#type'] = 'value';
  $form['instance']['description']['#type'] = 'value';
  $form['field']['cardinality']['#type'] = 'value';
}

/**
 * Implements hook_field_instance_settings_form().
 */
function token_field_field_instance_settings_form($field, $instance) {

  // @todo This currently isn't used. Do we need to declare it?
  return array();
}

/**
 * Implements hook_field().
 */
function token_field_field_load($entity_type, $entities, $field, $instances, $landcode, &$items) {
  foreach ($entities as $id => $entity) {

    // Get the template from the field and overly the defaults
    $item = $field['settings']['template'] + array(
      'value' => '',
      'format' => filter_default_format(),
    );

    // Parse the body for tokens
    $types = array(
      'global' => NULL,
      $entity_type => $entity,
    );
    $item['value_token_filtered'] = token_replace($item['value'], $types);
    $item['safe'] = check_markup($item['value_token_filtered'], $item['format']);
    $items[$id][0] = $item;
  }
}

/**
 * Implements hook_field_formatter_info().
 */
function token_field_field_formatter_info() {
  return array(
    'token_field_default' => array(
      'field types' => array(
        'token_field',
      ),
      'label' => t('Default'),
    ),
  );
}

/**
 * Implements hook_field_formatter_settings_form().
 */
function token_field_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {

  // @todo
}

/**
 * Implements hook_field_formatter_settings_summary().
 */
function token_field_field_formatter_settings_summary($field, $instance, $view_mode) {

  // @todo
}

/**
 * Implements hook_field_formatter_view().
 */
function token_field_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $element = array();
  switch ($display['type']) {
    case 'token_field_default':
      foreach ($items as $delta => $item) {
        $element[$delta] = array(
          '#markup' => $item['safe'],
        );
      }
      break;
  }
  return $element;
}

/**
 * Implements hook_field_widget_info().
 */
function token_field_field_widget_info() {
  return array(
    'token_field' => array(
      'label' => t('Token Field (Read Only)'),
      'field types' => array(
        'token_field',
      ),
      'settings' => array(),
      'behaviors' => array(
        'multiple values' => FIELD_BEHAVIOR_DEFAULT,
        'default value' => FIELD_BEHAVIOR_NONE,
      ),
    ),
  );
}

/**
 * Implements hook_widget().
 */
function token_field_widget(&$form, &$form_state, $field, $items, $delta = 0) {
  return array();
}

/**
 * Implements hook_field_widget_settings_form().
 */

/*
 * Not needed at the moment - keeping for future possible reference
function token_field_field_widget_settings_form($field, $instance) {
}
*/

/**
 * Implements hook_field_widget_form().
 */
function token_field_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
}

/**
 * Implements hook_field_widget_error().
 */
function token_field_field_widget_error($element, $error, $form, &$form_state) {
}

/**
 * Implements hook_field_widget_translation().
 */
function token_field_field_prepare_translation($entity_type, $entity, $field, $instance, $langcode, &$items, $source_entity, $source_langcode) {
}

/**
 * Implements hook_filter_format_update().
 */
function token_field_filter_format_update($format) {
  field_cache_clear();
}

/**
 * Implements hook_filter_format_disable().
 */
function token_field_filter_format_disable($format) {
  field_cache_clear();
}

/**
 * Implements hook_field_is_empty().
 */
function token_field_field_is_empty($item, $field) {
  return FALSE;
}