values_field.module in Values 7
Use reusable value sets as allowed values for fields.
File
modules/values_field/values_field.moduleView source
<?php
/**
* @file
* Use reusable value sets as allowed values for fields.
*/
/**
* Implements hook_form_alter().
*/
function values_field_form_alter(&$form, &$form_state, $form_id) {
// On the field settings form or the full field edit form...
if ($form_id == 'field_ui_field_settings_form' || $form_id == 'field_ui_field_edit_form') {
// Our field instance (on new fields, #field is not always there so we
// load using field_info_field instead)
$field = isset($form['#field']) ? $form['#field'] : field_info_field($form['field']['field_name']['#value']);
// Make sure that we're on a "list" field
if ($field['module'] == 'list') {
// Our options for the value set select list
$options = array(
'' => t('- None -'),
);
// Go through the value sets
foreach (values_load_all() as $value_set) {
// Enforce numeric value sets for numeric fields
$numeric = TRUE;
if ($field['type'] == 'list_integer' || $field['type'] == 'list_float') {
if (is_array($value_set->data)) {
foreach ($value_set->data as $value) {
if (!is_numeric($value['value'])) {
$numeric = FALSE;
}
}
}
if ($numeric) {
$options[$value_set->name] = $value_set->title;
}
}
else {
// All other fields will be assumed string values
$options[$value_set->name] = $value_set->title;
}
}
// Custom validate handler to process values_field input
$form['#validate'][] = 'values_field_field_settings_form_validate';
// Our values_field select list to choose a value set for allowed values
$form['field']['settings']['values_field'] = 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['settings']['values_field']) ? $field['settings']['values_field'] : '',
'#weight' => -10,
);
// Add a state for the allowed values field
$form['field']['settings']['allowed_values']['#states']['visible'][':input[name="field[settings][values_field]"]'] = array(
'value' => '',
);
// If CCK Is enabled we'll need to add some special states to hide the
// Allowed values php code and allowed values function fields once
// a value set is chosen.
if (module_exists('cck')) {
$form['field']['settings']['allowed_values_php']['#states']['visible'][':input[name="field[settings][values_field]"]'] = array(
'value' => '',
);
$form['field']['settings']['allowed_values_function']['#states']['visible'][':input[name="field[settings][values_field]"]'] = array(
'value' => '',
);
$form['instance']['default_value_widget']['default_value_function']['#states']['visible'][':input[name="field[settings][values_field]"]'] = array(
'value' => '',
);
$form['instance']['default_value_widget']['default_value_php']['#states']['visible'][':input[name="field[settings][values_field]"]'] = array(
'value' => '',
);
}
return $form;
}
}
}
/**
* An extra validation form for the field settings form.
*
* Sets the allowed values function to values_field_content_allowed_values if a
* value set has been specified to be used for allowed values.
*/
function values_field_field_settings_form_validate(&$form, &$form_state) {
// Grab the value of the values_field form element
$values_field = $form_state['values']['field']['settings']['values_field'];
if (!empty($values_field)) {
// The "allowed_values_function" setting is built into the list module.
// so all we need to do is supply our own custom function
$form_state['values']['field']['settings']['allowed_values_function'] = 'values_field_content_allowed_values';
}
elseif ($form_state['values']['field']['settings']['allowed_values_function'] == 'values_field_content_allowed_values') {
// If there's no value set chosen, but the allowed values function is still
// set to values_field_content_allowed_values, we need to do a little
// clean up and unset it so it doesn't run needlessly.
$form_state['values']['field']['settings']['allowed_values_function'] = '';
}
}
/**
* Allowed Values callback function.
*
* Returns the value set as an allowed values array for the configured value set
*/
function values_field_content_allowed_values($field, $flatten = TRUE) {
$allowed_values = array();
if (!empty($field['settings']['values_field'])) {
$allowed_values = values_load_options($field['settings']['values_field']);
}
return $allowed_values;
}
Functions
Name![]() |
Description |
---|---|
values_field_content_allowed_values | Allowed Values callback function. |
values_field_field_settings_form_validate | An extra validation form for the field settings form. |
values_field_form_alter | Implements hook_form_alter(). |