function themekey_abstract_rule_chain_form_validate in ThemeKey 7.3
3 calls to themekey_abstract_rule_chain_form_validate()
- themekey_css_rule_chain_form_validate in themekey_css/
themekey_css_admin.inc - Validation of
- themekey_redirect_rule_chain_form_validate in themekey_redirect/
themekey_redirect_admin.inc - Validation of
- themekey_rule_chain_form_validate in ./
themekey_admin.inc - Validation of
File
- ./
themekey_admin.inc, line 269
Code
function themekey_abstract_rule_chain_form_validate(&$form, $form_state, $options) {
module_load_include('inc', 'themekey', 'themekey_validators');
$attributes = variable_get('themekey_attributes', array());
$values = $form_state['values'];
if (!empty($values['old_items'])) {
foreach ($values['old_items'] as $key_1 => $value_1) {
if ($value_1['enabled']) {
if (!empty($options['check_enabled_callback']) && !$options['check_enabled_callback']($value_1['theme'])) {
form_set_error('old_items][' . $key_1 . '][theme', check_plain($value_1['theme'] . ': ' . $options['not_enabled_message']));
}
if (empty($value_1['property'])) {
form_set_error('old_items][' . $key_1 . '][property', check_plain(t('Property missing')));
}
else {
if (0 == drupal_strlen($value_1['value'])) {
form_set_error('old_items][' . $key_1 . '][value', check_plain(t('You must enter a value')));
}
elseif (!empty($attributes[$value_1['property']]['validator'])) {
//validate rule with custom validator
$validator = $attributes[$value_1['property']]['validator'];
if (!function_exists($validator) && isset($attributes[$value_1['property']]['file'])) {
themekey_load_function($validator, $attributes[$value_1['property']]['file'], isset($attributes[$value_1['property']]['path']) ? $attributes[$value_1['property']]['path'] : '');
}
if (function_exists($validator)) {
$rule = array(
'property' => $value_1['property'],
'wildcard' => $value_1['wildcard'],
'operator' => $value_1['operator'],
'value' => $value_1['value'],
);
$errors = $validator($rule);
foreach ($errors as $element => $msg) {
form_set_error('old_items][' . $key_1 . '][' . $element, filter_xss($msg, array(
'em',
)));
}
}
else {
form_set_error('old_items][' . $key_1 . '][property', filter_xss(t('ThemeKey requested an unknown validator called %validator to validate property %property', array(
'%validator' => $validator,
'%property' => $value_1['property'],
)), array(
'em',
)));
}
}
elseif ('~' == $value_1['operator'] || '!~' == $value_1['operator']) {
$rule = array(
'property' => $value_1['property'],
'wildcard' => $value_1['wildcard'],
'operator' => $value_1['operator'],
'value' => $value_1['value'],
);
$errors = themekey_validator_regex($rule);
foreach ($errors as $element => $msg) {
form_set_error('old_items][' . $key_1 . '][' . $element, filter_xss($msg, array(
'em',
)));
}
}
}
foreach ($values['old_items'] as $key_2 => $value_2) {
if ($key_2 == $key_1) {
continue;
}
if ($value_2['enabled'] && !empty($value_1['value']) && $value_2['property'] == $value_1['property'] && $value_2['operator'] == $value_1['operator'] && $value_2['value'] == $value_1['value'] && ($value_2['parent'] == $value_1['parent'] || $value_2['parent'] == $value_1['id'])) {
if ('drupal:path:wildcard' != $value_2['property'] || 'drupal:path:wildcard' == $value_2['property'] && $value_2['wildcard'] == $value_1['wildcard']) {
// We have two identical rules with same 'indention' in a chain.
// This is allowed only if first one has childs and second one has none and one isn't the parent of the other
if (!$value_2['parent'] == $value_1['id']) {
$has_childs_1 = FALSE;
$has_childs_2 = FALSE;
foreach ($values['old_items'] as $value_3) {
if ($value_3['parent'] == $value_1['id']) {
$has_childs_1 = TRUE;
}
if ($value_3['parent'] == $value_2['id']) {
$has_childs_2 = TRUE;
}
if ($has_childs_1 && $has_childs_2) {
break;
}
}
if ($value_1['weight'] < $value_2['weight'] && $has_childs_1 && !$has_childs_2 || $value_1['weight'] > $value_2['weight'] && !$has_childs_1 && $has_childs_2) {
// no error
continue;
}
elseif ($value_1['weight'] > $value_2['weight'] && $has_childs_1 && !$has_childs_2) {
form_set_error('old_items][' . $key_1 . '][property', check_plain(t('Theme switching rule could never be reached')));
continue;
}
elseif ($value_1['weight'] < $value_2['weight'] && !$has_childs_1 && $has_childs_2) {
form_set_error('old_items][' . $key_1 . '][property', check_plain(t('Theme switching rule hides a later one')));
continue;
}
elseif ($value_1['weight'] < $value_2['weight'] && $has_childs_1 && $has_childs_2) {
form_set_error('old_items][' . $key_1 . '][property', check_plain(t('Theme switching rule should be combined with an identical one below')));
continue;
}
elseif ($value_1['weight'] > $value_2['weight'] && $has_childs_1 && $has_childs_2) {
form_set_error('old_items][' . $key_1 . '][property', check_plain(t('Theme switching rule should be combined with an identical one above')));
continue;
}
}
form_set_error('old_items][' . $key_1 . '][property', check_plain(t('You entered two identical theme switching rules in the chain')));
form_set_error('old_items][' . $key_2 . '][property', check_plain(t('You entered two identical theme switching rules in the chain')));
}
}
}
}
}
}
if (!empty($values['new_item']['value'])) {
if ($values['new_item']['enabled'] && !empty($options['check_enabled_callback']) && !$options['check_enabled_callback']($values['new_item']['theme'])) {
form_set_error('new_item][theme', check_plain($options['not_enabled_message']));
}
if (empty($values['new_item']['property'])) {
form_set_error('new_item][property', check_plain(t('Property missing')));
}
else {
if (!empty($attributes[$values['new_item']['property']]['validator'])) {
//validate rule with custom validator
$validator = $attributes[$values['new_item']['property']]['validator'];
if (!function_exists($validator) && isset($attributes[$values['new_item']['property']]['file'])) {
themekey_load_function($validator, $attributes[$values['new_item']['property']]['file'], isset($attributes[$values['new_item']['property']]['path']) ? $attributes[$values['new_item']['property']]['path'] : '');
}
if (function_exists($validator)) {
$rule = array(
'property' => $values['new_item']['property'],
'wildcard' => $values['new_item']['wildcard'],
'operator' => $values['new_item']['operator'],
'value' => $values['new_item']['value'],
);
$errors = $validator($rule);
foreach ($errors as $element => $msg) {
form_set_error('new_item][' . $element, filter_xss($msg));
}
}
else {
form_set_error('new_item][property', filter_xss(t('ThemeKey requested an unknown validator called %validator to validate the property, %property', array(
'%validator' => $validator,
'%property' => $values['new_item']['property'],
))), array(
'em',
));
}
}
elseif ('~' == $values['new_item']['operator'] || '!~' == $values['new_item']['operator']) {
$rule = array(
'property' => $values['new_item']['property'],
'wildcard' => $values['new_item']['wildcard'],
'operator' => $values['new_item']['operator'],
'value' => $values['new_item']['value'],
);
$errors = themekey_validator_regex($rule);
foreach ($errors as $element => $msg) {
form_set_error('new_item][' . $element, filter_xss($msg, array(
'em',
)));
}
}
}
}
}