protected function createAliasForValue($getVarValue, array $configuration)
{
$result = $getVarValue;
// Define the language for the alias
$languageUrlParameter = $configuration['languageGetVar'] ?: 'L';
$languageUid = isset($this->originalUrlParameters[$languageUrlParameter]) ? (int) $this->originalUrlParameters[$languageUrlParameter] : 0;
if (GeneralUtility::inList($configuration['languageExceptionUids'], $languageUid)) {
$languageUid = 0;
}
// First, test if there is an entry in cache for the id
if (!$configuration['useUniqueCache'] || $configuration['autoUpdate'] || !($result = $this->getFromAliasCache($configuration, $getVarValue, $languageUid))) {
$languageEnabled = FALSE;
$fieldList = array();
if ($configuration['table'] === 'pages') {
$fieldList[] = 'uid';
$languageEnabled = TRUE;
} elseif ($configuration['transOrigPointerField'] && $configuration['languageField']) {
$fieldList[] = 'uid';
$fieldList[] = $configuration['transOrigPointerField'];
$fieldList[] = $configuration['languageField'];
$languageEnabled = TRUE;
}
$fieldList[] = $configuration['alias_field'];
$row = $this->databaseConnection->exec_SELECTgetSingleRow(implode(',', $fieldList), $configuration['table'], $configuration['id_field'] . '=' . $this->databaseConnection->fullQuoteStr($getVarValue, $configuration['table']) . ' ' . $configuration['addWhereClause']);
if (is_array($row)) {
// Looking for localized version
if ($languageEnabled && $languageUid !== 0) {
if ($configuration['table'] === 'pages') {
// Note: can't use $this->pageRepository->getPageOverlay() here because 'alias_field' can be an expression
$localizedRow = $this->databaseConnection->exec_SELECTgetSingleRow($configuration['alias_field'], 'pages_language_overlay', 'pid=' . (int) $row['uid'] . ' AND sys_language_uid=' . $languageUid . (isset($configuration['addWhereClause']) ? $configuration['addWhereClause'] : ''));
} else {
// Note: can't use $this->pageRepository->getRecordOverlay() here because 'alias_field' can be an expression
$localizedRow = $this->databaseConnection->exec_SELECTgetSingleRow($configuration['alias_field'], $configuration['table'], $configuration['transOrigPointerField'] . '=' . (int) $row['uid'] . ' AND ' . $configuration['languageField'] . '=' . $languageUid . (isset($configuration['addWhereClause']) ? $configuration['addWhereClause'] : ''));
}
if (is_array($localizedRow)) {
$row = $localizedRow;
}
}
$maxAliasLengthLength = isset($configuration['maxLength']) ? (int) $configuration['maxLength'] : self::MAX_ALIAS_LENGTH;
$aliasValue = substr($row[$configuration['alias_field']], 0, $maxAliasLengthLength);
# Do not allow aliases to be empty (see issue #1)
if (empty($aliasValue)) {
$aliasValue = md5($configuration['table'] . '-' . $row[$configuration['id_field']] . '-' . $languageUid);
}
if ($configuration['useUniqueCache']) {
// If cache is to be used, store the alias in the cache:
$result = $this->storeInAliasCache($configuration, $aliasValue, $getVarValue, $languageUid);
} else {
// If no cache for alias, then just return whatever value is appropriate:
$result = $aliasValue;
}
}
}
return is_null($result) ? $getVarValue : $result;
}