You are here

values_cck.module in Values 6

Use reusable value sets as allowed values for CCK fields.

File

values_cck.module
View source
<?php

/**
 * @file
 * Use reusable value sets as allowed values for CCK fields.
 */

/**
 * Implementation of hook_field_settings_alter().
 */
function values_cck_field_settings_alter(&$form, $op, $field) {
  switch ($op) {
    case 'form':

      // Only provide Value sets for field types that allows values.
      if (!is_array($form['allowed_values_fieldset'])) {
        break;
      }
      $options = array(
        '' => t('- None -'),
      );
      foreach (values_load_all() as $values) {

        // Enforce numeric value sets for numeric fields
        $numeric = TRUE;
        if ($field['module'] == 'number') {
          if (is_array($values->data)) {
            foreach ($values->data as $value) {
              if (!is_numeric($value['value'])) {
                $numeric = FALSE;
              }
            }
          }
          if ($numeric) {
            $options[$values->name] = $values->description;
          }
        }
        else {

          // All other fields will be assumed string values
          $options[$values->name] = $values->description;
        }
      }
      $form['allowed_values_fieldset']['values_cck'] = array(
        '#type' => 'select',
        '#title' => t('Value sets'),
        '#description' => t('Select a reusable value set to use as allowed values for this field. Configure value sets !here. If this field is filled out, the values returned by this set will override the allowed values list below.', array(
          '!here' => l('here', 'admin/content/values'),
        )),
        '#options' => $options,
        '#default_value' => !empty($field['values_cck']) ? $field['values_cck'] : '',
        '#weight' => -10,
      );
      break;
    case 'save':
      $form = array_merge($form, array(
        'values_cck',
      ));
      break;
  }
}

/**
 * Implementation of hook_content_allowed_values_alter().
 */
function values_cck_content_allowed_values_alter(&$allowed_values, $field) {
  if (!empty($field['values_cck'])) {
    $allowed_values = array();
    if ($values = values_load($field['values_cck'])) {
      foreach ($values->data as $value) {
        $allowed_values[$value['value']] = $value['label'];
      }
    }
  }
}

Functions

Namesort descending Description
values_cck_content_allowed_values_alter Implementation of hook_content_allowed_values_alter().
values_cck_field_settings_alter Implementation of hook_field_settings_alter().