public static function execRouterHook(_Core_Request $request, &$class, &$method, array &$chunks, &$templateEngine) { $access = new _Core_Access(_User::getCurrent()); if (!$access->isAllowed($request->uri)) { // Редирект через заголовок. Дабы явно сменился урл в браузере оО _Core_Router::redirect($access->defaultPage, true, 403); } }
/** * Удаляет указанный счет * @param $args array mixed * @return void */ function delete($args) { if (isset($_REQUEST['confirmed']) && $_REQUEST['confirmed']) { $params = $_REQUEST; // Предупреждение перед удалением if (count($this->user->getUserAccounts()) == 1) { $this->renderJsonError('Перед удалением последнего счета создайте нужные Вам счета'); } $account = Account::getTypeByID($params); $er = $account->delete($this->user, $params); if (!$er) { $this->renderJsonError('Счёт не удалён'); } if ($er === 'cel') { $this->renderJsonError('Невозможно удалить счёт, к которому привязана фин.цель'); } else { //@XXX Тут как бы хз.. Нужно проверять какую конструкцию поставить. //Сильно смущает строка ниже, передающая в шаблонизатор переменную $this->tpl->assign('result', array('text' => 'Счёт удален')); } $this->tpl->assign('name_page', 'info_panel/info_panel'); } elseif (!isset($_POST['confirmed'])) { $confirm = array('title' => 'Удаление счёта', 'message' => 'Вы действительно хотите удалить выбранный счёт?', 'yesLink' => '/accounts/delete/?id=' . $args[0] . '&confirmed=1', 'noLink' => $_SERVER['HTTP_REFERER']); // Сохраняем в сессии адрес куда идти если согласится $_SESSION['redirect'] = $_SERVER['HTTP_REFERER']; $this->tpl->assign('confirm', $confirm); $this->tpl->assign('name_page', 'confirm'); // Видимо передумали удалять и наша логика не сработала - редиректим на инфо } else { _Core_Router::redirect('/info'); } }
public static function redirect($url, $isExternal = false, $statusCode = 200) { if (array_key_exists($statusCode, self::$headerByCode)) { header(self::$headerByCode[$statusCode]); } if ($isExternal) { header('Location: ' . $url); exit; } $request = _Core_Request::getFake($url); $router = new _Core_Router($request, _Core_TemplateEngine::getPrepared($request)); try { $router->performRequest(); } catch (Exception $e) { // Вывод отладочной информации if (DEBUG) { echo highlight_string("<?php\n" . $e->getTraceAsString()); exit; } elseif ('/notfound' == $url) { exit; } else { self::redirect('/notfound', false, 404); } } }
/** * Делает редирект на указанную страницу. Нужна для тестов * * @param string $url * @return void */ protected function _redirect($url) { _Core_Router::redirect($url); }
/** * Удаляет указанную категорию * @param $args array mixed * @return void */ function del($args) { $catId = 0; if (array_key_exists(0, $args) && is_numeric($args[0]) && $args[0]) { $catId = (int) $args[0]; } elseif (isset($this->request->post['id']) && $this->request->post['id']) { $catId = (int) $this->request->post['id']; } // Проверяем, есть ли по категории операции if (isset($this->request->post['confirm']) && $this->request->post['confirm'] === 'false' && $this->model->getCountOperationByCategory(Core::getInstance()->user, $catId) > 0) { die(json_encode(array("confirm" => array("text" => "Эта категория содержит операции. " . "При удалении категории все операции по ней будут удалены!" . "\n\nВы действительно хотите удалить категорию?", "id" => $catId)))); } // Если удаление подтверждено.... if (isset($this->request->get['confirmed']) && $this->request->get['confirmed']) { // Отмечаем операции неподтверждёнными $operation = new Operation_Model(); $operation->deleteOperationsByCategory(Core::getInstance()->user, $catId); // Удаляем категорию (делаем невидимой) if ($this->model->del($catId)) { $this->tpl->assign('result', array('text' => "Категория успешно удалена.", 'id' => $catId)); } else { $this->tpl->assign('error', array('text' => "Не удалось удалить категорию.")); } //возвращаемся if (array_key_exists('redirect', $_SESSION)) { _Core_Router::redirect($_SESSION['redirect'], true); unset($_SESSION['redirect']); } } elseif (!isset($request->get['confirmed'])) { $confirm = array('title' => 'Удаление категории', 'message' => 'Вы действительно хотите удалить категорию?', 'yesLink' => '/category/del/' . $catId . '?confirmed=1', 'noLink' => $_SERVER['HTTP_REFERER']); if ($this->model->getCountOperationByCategory(Core::getInstance()->user, $catId) > 0) { $confirm['message'] = "<b>Эта категория содержит операции.</b><br/>" . "При удалении категории все операции по ней будут удалены!<br/><br/>" . "Вы действительно хотите удалить категорию?"; } // Сохраняем в сессии адрес куда идти если согласится $_SESSION['redirect'] = $_SERVER['HTTP_REFERER']; $this->tpl->assign('confirm', $confirm); $this->tpl->assign('name_page', 'confirm'); } else { _Core_Router::redirect('/info'); } }
/** * Удаляет выбранное событие * @param $args array mixed Какие-нибудь аргументы * @return void */ function del($args) { $operationId = 0; if (array_key_exists(0, $args) && is_numeric($args[0]) && $args[0]) { $operationId = (int) $args[0]; } elseif (isset($this->request->post['id']) && $this->request->post['id']) { $operationId = $this->request->post['id']; } // Если удаление подтверждено.... if (isset($this->request->get['confirmed']) && $this->request->get['confirmed']) { if ($this->model->deleteOperation($operationId)) { $this->tpl->assign('result', array('text' => "Операция успешно удалена.")); } else { $this->tpl->assign('error', array('text' => "Не удалось удалить операцию.")); } //возвращаемся if (array_key_exists('redirect', $_SESSION)) { _Core_Router::redirect($_SESSION['redirect'], true); unset($_SESSION['redirect']); } } elseif (!isset($this->request->get['confirmed'])) { $confirm = array('title' => 'Удаление операции', 'message' => 'Вы действительно хотите удалить операцию?', 'yesLink' => '/operation/del/' . $operationId . '?confirmed=1', 'noLink' => $_SERVER['HTTP_REFERER']); // Сохраняем в сессии адрес куда идти если согласится $_SESSION['redirect'] = $_SERVER['HTTP_REFERER']; $this->tpl->assign('confirm', $confirm); $this->tpl->assign('name_page', 'confirm'); } else { _Core_Router::redirect('/info'); } }
*/ define('INDEX', true); error_reporting(E_ALL); // Подключаем файл с общей конфигурацией проекта require_once dirname(dirname(__FILE__)) . '/include/config.php'; // Загружаем общие данные // @todo оторвать! require_once SYS_DIR_INC . 'common.php'; // Получаем обьект с параметрами запроса. $request = _Core_Request::getCurrent(); // Получаем текущий шаблонизатор на основании запроса $templateEngine = _Core_TemplateEngine::getPrepared($request); // Запускаем хелпер для IFRAME авторизации и подключения шаблонов Helper_IframeLogin::login($templateEngine); // Инициализация роутера $router = new _Core_Router($request, $templateEngine); try { // Выполнение запроса (разбор ->вызов контроллера) $router->performRequest(); if (_Core_Request::getCurrent()->host . '/' == HOST_ROOT_IFRAME) { $templateEngine->display('iframe/index.iframe.html'); } elseif (_Core_Request::getCurrent()->host . '/' == HOST_ROOT_RAMBLER) { $templateEngine->display('index.html'); } else { if (!IS_DEMO) { // Если пользователь зашёл с мобильного браузера if (_Core_Request::getCurrent()->host . '/' != HOST_ROOT_PDA && Helper_DetectBrowser::detectMobile() && !isset($_COOKIE['DO_WHANT_FULL_VERSION'])) { if (isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], HOST_ROOT_PDA) === false) { header('Location: ' . URL_ROOT_PDA); exit; } else {