Esempio n. 1
0
 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);
     }
 }
Esempio n. 2
0
 public function performRequest()
 {
     // Формируем массив для разбора (substr отрезает "/" в начале)
     $uri = substr($this->request->uri, 1);
     $uriArr = explode('/', $uri);
     // Предопределяем переменную для хранения последней части запроса
     $lastPart = null;
     // Цикл по реверсивному поиску класса\метода оО (ниже понятнее) =)
     $iterations = sizeof($uriArr);
     for ($i = $iterations; $i >= 1; $i--) {
         // Пытаемся сформировать название класса из запроса
         $className = $this->formClassName($uriArr);
         // если таковой существует ...
         if (class_exists($className)) {
             $this->className = $className;
             // Проверяем нет ли метода с имененем = последнему элементу запроса
             if (method_exists($this->className, $lastPart)) {
                 $this->methodName = $lastPart;
                 // Не забываем подчистить остатки
                 array_shift($this->requestRemains);
             } else {
                 $this->methodName = 'index';
             }
             break;
         }
         // Перед переходом на последующую итерацию обрезаем последний элемент запроса
         $lastPart = array_pop($uriArr);
         // И пропихиваем его в массив остатков
         array_unshift($this->requestRemains, $lastPart);
         // Если итерация = 1 а класс ещё не определён
         if ($i == 1 && empty($this->className)) {
             //Подкидываем ещё один элемент в запрос
             array_unshift($uriArr, 'index');
             // Увеличиваем счётчик...
             $i++;
         }
     }
     // Вызов подключённых хуков
     foreach ($this->hooks as $className) {
         call_user_func_array(array($className, 'execRouterHook'), array($this->request, &$this->className, &$this->methodName, &$this->requestRemains, &$this->templateEngine));
     }
     $controller = new $this->className($this->templateEngine, $this->request);
     // Svel: добавил редирект, только ему пофигу на GET-POST, будет 404ые генерить
     if (method_exists($controller, $this->methodName)) {
         call_user_func(array($controller, $this->methodName), $this->requestRemains);
     } else {
         $url = sprintf("%smy/%s", URL_ROOT, $uri);
         _Core_Router::redirect($url, true, 302);
         die;
     }
     unset($controller);
 }
 /**
  * Удаляет указанный счет
  * @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');
     }
 }
Esempio n. 4
0
 /**
  * Делает редирект на указанную страницу. Нужна для тестов
  *
  * @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');
     }
 }
Esempio n. 7
0
        $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 {
                    setcookie('DO_WHANT_FULL_VERSION', true);
                }
            }
        }
        $templateEngine->display('index.html');
    }
    // Применение модификаций\удалений моделей
    _Core_ObjectWatcher::getInstance()->performOperations();
} catch (Exception $e) {
    // Вывод отладочной информации
    if (DEBUG) {
        if (strtolower(ini_get('html_errors')) == 'on') {
            highlight_string("<?php\n #" . $e->getMessage() . "\n\n in " . $e->getFile() . ':' . $e->getLine() . "\n\n" . $e->getTraceAsString());
        } else {
            print $e->getMessage() . "\n\n in " . $e->getFile() . ':' . $e->getLine() . "\n\n" . $e->getTraceAsString();
        }
    } elseif ('/notfound' == $request->uri) {
        //exit();
    } else {
        _Core_Router::redirect('/notfound', false, 404);
    }
}