function _domain_alias_validate in Domain Access 6.2
Same name and namespace in other branches
- 7.3 domain_alias/domain_alias.admin.inc \_domain_alias_validate()
- 7.2 domain_alias/domain_alias.admin.inc \_domain_alias_validate()
Helper function to validate alias entries.
Parameters
$alias: The form element defining the alias.
$id: The form array id, either a number or an alias_id.
$aliases: The array of currently processed alias strings.
$type: The type of alias, used to determine form errors.
Return value
A valid alias string, or an error.
1 call to _domain_alias_validate()
- domain_alias_form_validate in domain_alias/
domain_alias.admin.inc - FAPI for domain_alias_form()
File
- domain_alias/
domain_alias.admin.inc, line 162 - Administration functions for the domain_alias module.
Code
function _domain_alias_validate($form, $alias, $id, $aliases, $type) {
$alias = $alias['pattern'];
// 1) Check that the same alias is not entered twice.
if (in_array($alias, $aliases)) {
form_error($form[$type][$id]['pattern'], t('%name is already defined. You must use unique values.', array(
'%name' => $alias,
)));
return;
}
// 2) Check that the alias only has one wildcard.
$count = substr_count($alias, '*') + substr_count($alias, '?');
if ($count > 1) {
form_error($form[$type][$id]['pattern'], t('You may only have one wildcard character in each alias.'));
return;
}
// 3) Only one colon allowed, and it must be followed by numbers only.
$count = substr_count($alias, ':');
if ($count > 1) {
form_error($form[$type][$id]['pattern'], t('You may only have one colon ":" character in each alias.'));
return;
}
else {
if ($count == 1) {
$int = substr($alias, strpos($alias, ':') + 1);
if (!is_numeric($int)) {
form_error($form[$type][$id]['pattern'], t('A colon may only be followed by an integer indicating the proper port.'));
return;
}
}
}
// 4) Check that the alias doesn't contain any invalid characters.
$check = preg_match('/^[a-z0-9\\.\\+\\-\\*\\?:]*$/', $alias);
if ($check == 0) {
form_error($form[$type][$id]['pattern'], t('%name contains invalid characters.', array(
'%name' => $alias,
)));
}
// 5) Check that the alias is not a direct match for a registered domain.
$check = preg_match('/[a-z0-9\\.\\+\\-:]*$/', $alias);
if ($check == 1) {
$count = db_result(db_query("SELECT 1 FROM {domain} WHERE subdomain = '%s'", $alias));
if ($count > 0) {
form_error($form[$type][$id]['pattern'], t('%name matches an existing domain record. ', array(
'%name' => $alias,
)));
}
}
// 6) Check that the alias doesn't match another alias defined for this domain.
$replace = array(
'.' => '\\.',
'+' => '\\+',
'-' => '\\-',
'*' => '[a-z0-9\\.\\+\\-]*',
'?' => '[a-z0-9\\.\\+\\-]?',
);
$_pattern = str_replace(array_keys($replace), $replace, $alias);
foreach ($aliases as $_alias) {
$_alias_pattern = str_replace(array_keys($replace), $replace, $_alias);
if (preg_match('@' . $_pattern . '@i', $_alias) || preg_match('@' . $_alias_pattern . '@i', $alias)) {
form_error($form[$type][$id]['pattern'], t('%name matches %existing. You must use unique values.', array(
'%name' => $alias,
'%existing' => $_alias,
)));
break;
}
}
// 7) Check that the alias or a pattern matching the same domain name does not exist.
$_pattern = _domain_alias_placeholders_to_sql($alias);
if (isset($form_state['values']['domain_id']) && $_pattern != $form_state['values']['domain_id']) {
$_alias = db_fetch_array(db_query("SELECT alias_id, domain_id, pattern FROM {domain_alias} WHERE pattern = '%s' OR pattern = '%s'", $_pattern, $form_state['values']['domain_id']));
}
else {
$_alias = db_fetch_array(db_query("SELECT alias_id, domain_id, pattern FROM {domain_alias} WHERE pattern = '%s'", $_pattern));
}
if (!empty($_alias)) {
form_error($form[$type][$id]['pattern'], t('%name matches <a href="!url" title="Edit aliases for domain !id">alias #!aid</a> (%existing). You must use unique values. ', array(
'%name' => $alias,
'%existing' => _domain_alias_placeholders_from_sql($_alias['pattern']),
'!url' => url('admin/build/domain/alias/' . $_alias['domain_id']),
'!id' => $_alias['domain_id'],
'!aid' => $_alias['alias_id'],
)));
}
return $alias;
}