function _hierarchical_select_validate in Hierarchical Select 7.3
Same name and namespace in other branches
- 5.3 hierarchical_select.module \_hierarchical_select_validate()
- 5.2 hierarchical_select.module \_hierarchical_select_validate()
- 6.3 hierarchical_select.module \_hierarchical_select_validate()
Hierarchical select form element #element_validate callback.
1 string reference to '_hierarchical_select_validate'
- form_hierarchical_select_process in ./
hierarchical_select.module - Hierarchical select form element type #process callback.
File
- ./
hierarchical_select.module, line 928 - This module defines the "hierarchical_select" form element, which is a greatly enhanced way for letting the user select items in a hierarchy.
Code
function _hierarchical_select_validate(&$element, &$form_state) {
// If the dropbox is enabled and a dropbox limit is configured, check if
// this limit is not exceeded.
$hsid = $element['hsid']['#value'];
$config = _hierarchical_select_inherit_default_config($element['#config']);
if ($config['dropbox']['status']) {
if ($config['dropbox']['limit'] > 0) {
// Zero as dropbox limit means no limit.
// TRICKY: #element_validate is not called upon the initial rendering
// (i.e. it is assumed that the default value is valid). However,
// Hierarchical Select's config can influence the validity (i.e. how
// many selections may be added to the dropbox). This means it's
// possible the user has actually selected too many items without being
// notified of this.
$lineage_count = count($form_state['storage']['hs'][$hsid]['dropbox_lineages_selections']);
if ($lineage_count > $config['dropbox']['limit']) {
// TRICKY: this should propagate the error down to the children, but
// this doesn't seem to happen, since for example the selects of the
// hierarchical select don't get the error class set. Further
// investigation needed.
form_error($element, t("You've selected %lineage-count items, but you're only allowed to select %dropbox-limit items.", array(
'%lineage-count' => $lineage_count,
'%dropbox-limit' => $config['dropbox']['limit'],
)));
_hierarchical_select_form_set_error_class($element);
}
}
}
// Set the proper return value. I.e. instead of returning all the values
// that are used for making the hierarchical_select form element type work,
// we pass a flat array of item ids. e.g. for the taxonomy module, this will
// be an array of term ids. If a single item is selected, this will not be
// an array.
// If the form item is disabled, set the default value as the return value,
// because otherwise nothing would be returned (disabled form items are not
// submitted, as described in the HTML standard).
if (isset($element['#disabled']) && $element['#disabled']) {
$element['#return_value'] = $element['#default_value'];
}
$element['#value'] = $element['#return_value'];
form_set_value($element, $element['#value'], $form_state);
// We have to check again for errors. This line is taken litterally from
// form.inc, so it works in an identical way.
if ($element['#required'] && (!isset($form_state['submit_handlers'][0]) || $form_state['submit_handlers'][0] !== 'hierarchical_select_ajax_update_submit') && (!count($element['#value']) || is_string($element['#value']) && strlen(trim($element['#value'])) == 0)) {
form_error($element, t('!name field is required.', array(
'!name' => $element['#title'],
)));
_hierarchical_select_form_set_error_class($element);
}
}