Функция cot_uriredir_store сохраняет текущий URL (URI) в сессии для последующего перенаправления. Она предназначена для обеспечения удобного возврата пользователя на предыдущую страницу после выполнения определённых действий, например, авторизации.
Код функции:
function cot_uriredir_store()
{
$m = cot_import('m', 'G', 'ALP'); // Импортируем параметр 'm' из GET-запроса с фильтром 'ALP' (латинские буквы и символы подчеркивания)
if (
$_SERVER['REQUEST_METHOD'] !== 'POST' // Если запрос не POST (т.е. это не отправка формы)
&& empty($_GET['x']) // Если нет параметра 'x' в GET (не команда, связанная с действиями формы)
&& !defined('COT_MESSAGE') // Если не отображается сообщение (обычно после выполнения действий)
&& !defined('COT_AUTH') // Если это не страница входа/выхода
&& (
!defined('COT_USERS') // Если это не модуль пользователей
|| is_null($m) // Если параметр 'm' отсутствует
|| !in_array($m, ['register', 'passrecover']) // Если параметр 'm' не относится к действиям регистрации или восстановления пароля
)
) {
// Сохраняем текущий URI в сессии
$_SESSION['s_uri_redir'] = Cot::$sys['uri_redir'];
}
}
Объяснение:
Импорт параметра m:
$m = cot_import('m', 'G', 'ALP');
Импортируется параметр m из GET-запроса с фильтром 'ALP' (разрешены только латинские буквы, цифры и символ _).
Этот параметр часто используется в Cotonti для указания модуля или действия (например, register, passrecover).
Проверки условий:
Функция выполняет сохранение URI только при соблюдении следующих условий:
Запрос не является POST:
$_SERVER['REQUEST_METHOD'] !== 'POST'
Сохраняем URI только для GET-запросов.
Отсутствует параметр x в GET:
empty($_GET['x'])
Это означает, что запрос не связан с выполнением действия формы.
Не на странице сообщений (COT_MESSAGE):
!defined('COT_MESSAGE')
На страницах, где отображаются системные сообщения, URI не сохраняется.
Не на странице входа/выхода (COT_AUTH):
!defined('COT_AUTH')
Перенаправление на страницу входа/выхода не требует сохранения предыдущего URI.
Не связаны с регистрацией или восстановлением пароля:
!defined('COT_USERS') || is_null($m) || !in_array($m, ['register', 'passrecover'])
Если это модуль пользователей (COT_USERS), проверяется значение параметра m. Если m отсутствует или не относится к действиям регистрации/восстановления пароля, URI сохраняется.
Сохранение URI:
$_SESSION['s_uri_redir'] = Cot::$sys['uri_redir'];
Текущий URI сохраняется в сессии ($_SESSION['s_uri_redir']).
Переменная Cot::$sys['uri_redir'] содержит текущий URL с учётом всех параметров, без домена.
Пример использования:
Сценарий:
Пользователь посещает страницу статьи, а затем его перенаправляют на страницу авторизации. После входа в систему его нужно вернуть обратно на страницу статьи.
Код:
Сохранение URI: Когда пользователь открывает страницу статьи:
cot_uriredir_store();
Перенаправление после авторизации: После успешного входа:
if (!empty($_SESSION['s_uri_redir'])) {
$redirectUrl = $_SESSION['s_uri_redir'];
unset($_SESSION['s_uri_redir']); // Удаляем из сессии после использования
cot_redirect($redirectUrl);
} else {
cot_redirect(cot_url('index'));
}
Итоги:
Функция cot_uriredir_store полезна для сохранения логики перенаправления на предыдущую страницу. Это особенно актуально для сценариев авторизации, где важно вернуть пользователя на ту страницу, с которой он начал взаимодействие.