function rules_forms_options_set_validate in Rules Forms Support 7.2
Validation callback for setting the #options attribute of an element.
1 string reference to 'rules_forms_options_set_validate'
- _rules_forms_attribute_info in includes/
rules_forms.info.inc - Retrieve a list of Form API properties with supported attributes information.
File
- ./
rules_forms.rules.inc, line 384 - Rules events, conditions, and actions hooks for Rules Forms module.
Code
function rules_forms_options_set_validate($value, RulesAbstractPlugin $element) {
// Check for duplicate key values to prevent unexpected data loss. Require
// all options to include a safe_key.
$lines = explode("\n", trim($value));
$existing_keys = array();
$duplicate_keys = array();
$missing_keys = array();
$long_keys = array();
$group = '';
// Check each option for validity - length, existence, and duplication.
foreach ($lines as $line) {
$matches = array();
$line = trim($line);
if (preg_match('/^([^|]*)\\|(.*)$/', $line, $matches)) {
$key = $matches[1];
// Validate the length of the key.
if (strlen($key) > 128) {
$long_keys[] = $key;
}
}
else {
$missing_keys[] = $line;
}
// Ensure this is not a duplicate key.
if (isset($key)) {
if (isset($existing_keys[$group][$key])) {
$duplicate_keys[$key] = $key;
}
else {
$existing_keys[$group][$key] = $key;
}
}
}
// Throw exceptions for validation errors.
if (!empty($missing_keys)) {
throw new RulesIntegrityException(t('Every option must have a key specified. Specify each option as "safe_key|Some readable option'), $element);
}
if (!empty($long_keys)) {
throw new RulesIntegrityException(t('Option keys must be less than 128 characters. The following keys exceed this limit:') . theme('item_list', $long_keys), $element);
}
if (!empty($duplicate_keys)) {
throw new RulesIntegrityException(t('Options within the select list must be unique. The following keys have been used multiple times:') . theme('item_list', array(
'items' => $duplicate_keys,
)), $element);
}
}