1 layout.admin.inc | layout_settings_form_validate(&$form, &$form_state) |
Validates layout_settings_form(), ensuring a valid path.
File
- core/
modules/ layout/ layout.admin.inc, line 842 - Admin page callbacks for the Layout module.
Code
function layout_settings_form_validate(&$form, &$form_state) {
/* @var Layout $layout */
$layout = $form_state['layout'];
// Remove trailing and preceding slashes.
$path = $form_state['values']['path'] = trim($form_state['values']['path'], '/');
if (strpos($path, '%') === 0) {
form_error($form['path'], t('The first part of a path may not be a placeholder.'));
}
// Ensure the path is not already an alias to something else.
if (strpos($path, '%') === FALSE) {
$alias = db_query('SELECT * FROM {url_alias} WHERE alias = :path', array(':path' => $path))->fetchObject();
if ($alias) {
$error = t('That path is currently assigned to be an alias for "@alias".', array('@alias' => $alias->source));
if (user_access('administer url aliases')) {
$error .= ' ' . t('<a href="!url">Delete the alias first</a>, then save this layout.', array('!url' => url('admin/config/urls/path/delete/' . $alias->pid, array('query' => array('destination' => $_GET['q'])))));
}
form_error($form['path'], $error);
}
}
// Ensure path is properly formed.
$parts = explode('/', $path);
foreach ($parts as $part) {
$wildcard_position = strpos($part, '%');
if ($wildcard_position !== FALSE && ($wildcard_position > 0 || strlen($part) > 1)) {
form_error($form['path'], t('Placeholders must be the only character in their part of the path i.e. "@part" should be "%".', array('@part' => $part)));
}
}
// Ensure that all conditions have context requirements met.
$context_plugins = array(
'user', // The user plugin is always available for the current user.
);
$contexts = layout_context_required_by_path($path);
foreach ($contexts as $context) {
$context_plugins[] = $context->plugin;
}
foreach ($layout->conditions as $key => $condition) {
$required_contexts = $condition->getRequiredContexts();
if (array_diff($required_contexts, $context_plugins)) {
form_error($form['conditions']['active'][$key], t('The condition \'!condition\' does not have the required contexts at this path. Remove the condition to save the layout.', array('!condition' => $condition->summary())));
}
}
}