function _hs_process_exclusive_lineages in Hierarchical Select 7.3
1 call to _hs_process_exclusive_lineages()
- form_hierarchical_select_process in ./
hierarchical_select.module - Hierarchical select form element type #process callback.
File
- ./
hierarchical_select.module, line 540 - 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 _hs_process_exclusive_lineages($element, $hs_selection, $db_selection) {
$config = $element['#config'];
$special_items = _hs_process_shortcut_special_items($config);
// If:
// - the special_items setting has been configured
// - at least one special item has the 'exclusive' property
// - the dropbox is enabled
// then do the necessary processing to make exclusive lineages possible.
if (!empty($special_items) && count($special_items['exclusive']) && $config['dropbox']['status']) {
// When the form is first loaded, $db_selection will contain the selection
// that we should check, but in updates, $hs_selection will.
$selection = !empty($hs_selection) ? $hs_selection : $db_selection;
// If the current selection of the hierarchical select matches one of the
// configured exclusive items, then disable the dropbox (to ensure an
// exclusive selection).
$exclusive_item = array_intersect($selection, $special_items['exclusive']);
if (count($exclusive_item)) {
// By also updating the configuration stored in $element, we ensure that
// the validation step, which extracts the configuration again, also gets
// the updated config.
$element['#config']['dropbox']['status'] = 0;
// Set the hierarchical select to the exclusive item and make the
// dropbox empty.
$hs_selection = array(
0 => reset($exclusive_item),
);
$db_selection = array();
}
}
return array(
$element,
$hs_selection,
$db_selection,
);
}