Exemple #1
0
 /**
  * Конструктор
  */
 function __construct()
 {
     parent::__construct();
     if (DEBUG) {
         Open_Benchmark::getInstance()->mark(__CLASS__ . '_start');
     }
     /**
      * Создаём объект Smarty
      */
     $this->smarty = new Open_Smarty();
     /**
      * Передаём Smarty ссылки на экземпляры объектов, для удобства их использования изнутри
      * Использовать функцию Smarty assign_by_ref не надо, т.к. мы и так имеем дело со ссылками на объекты, иначе получится двойная ссылка
      */
     $C = Open_Config::getInstance();
     $this->smarty->assign('config', $C);
     $this->smarty->assign('input', Open_Input::getInstance());
     $this->smarty->assign('router', Open_Router::getInstance());
     $this->smarty->assign('text', Open_Text::getInstance());
     $this->smarty->assign('view', $this);
     /**
      * Устанавливаем значения по умолчанию
      */
     $config = $C->get(array('headers', 'default_title', 'js', 'css', 'default_body'));
     $this->setHeaders($config['headers']);
     $this->setTitle($config['default_title']);
     $this->setJs($config['js']);
     $this->setCss($config['css']);
     $this->setBody($config['default_body']);
 }
Exemple #2
0
 /**
  * Конструктор
  */
 protected function __construct()
 {
     parent::__construct();
     if (DEBUG) {
         Open_Benchmark::getInstance()->mark(__CLASS__ . '_start');
     }
     $config = Open_Config::getInstance()->get('auth', array('table', 'identity_field', 'credential_field', 'treatment_callback'));
     $this->table = $config['table'];
     $this->identityField = $config['identity_field'];
     $this->credentialField = $config['credential_field'];
     $this->treatmentCallback = $config['treatment_callback'];
 }
Exemple #3
0
 /**
  * Конструктор
  */
 protected function __construct()
 {
     parent::__construct();
     if (DEBUG) {
         Open_Benchmark::getInstance()->mark(__CLASS__ . '_start');
     }
     $this->config = Open_Config::getInstance();
     $this->input = Open_Input::getInstance();
     $this->router = Open_Router::getInstance();
     $this->text = Open_Text::getInstance();
     $this->view = Open_View::getInstance();
     $this->setArguments($this->router->getArguments());
 }
Exemple #4
0
 /**
  * Конструктор
  *
  */
 protected function __construct()
 {
     parent::__construct();
     if (DEBUG) {
         Open_Benchmark::getInstance()->mark(__CLASS__ . '_start');
     }
     $this->config = Open_Config::getInstance()->get('db');
     /**
      * Если установлен параметр автоматического соединения с БД, то соединяемся
      */
     if ($this->config['auto_connect'] === TRUE) {
         $this->connect();
     }
 }
Exemple #5
0
 /**
  * Конструктор
  */
 protected function __construct()
 {
     parent::__construct();
     if (DEBUG) {
         Open_Benchmark::getInstance()->mark(__CLASS__ . '_start');
     }
     $config = Open_Config::getInstance()->get('acl', array('roles', 'hierarchy', 'resources', 'allow', 'deny', 'complete_access_role'));
     $this->roles = $config['roles'];
     $this->hierarchy = $config['hierarchy'];
     $this->resources = $config['resources'];
     $this->allow = $config['allow'];
     $this->deny = $config['deny'];
     $this->complete_access_role = $config['complete_access_role'];
 }
Exemple #6
0
 /**
  * Конструктор
  */
 protected function __construct()
 {
     parent::__construct();
     if (DEBUG) {
         Open_Benchmark::getInstance()->mark(__CLASS__ . '_start');
     }
     $C = Open_Config::getInstance();
     $I = Open_Input::getInstance();
     /**
      * Открываем сессию
      * Имя куки зависит от названия приложения, текущего ip пользователя и агента пользователя
      * Соответственно сменив ip или используя другой агент откроется и другая сессия
      * Выполняется "хитрое" преобразование, чтобы никто не догадался :-)
      * Об этом никто не должен знать
      */
     session_name(strrev(md5(str_rot13($C->get('application_name') . $I->ip() . $I->server('HTTP_USER_AGENT')) & !md5($I->ip()))));
     session_start();
     //session_regenerate_id(TRUE);
 }
Exemple #7
0
 /**
  * Конструктор
  */
 protected function __construct()
 {
     parent::__construct();
     if (DEBUG) {
         Open_Benchmark::getInstance()->mark(__CLASS__ . '_start');
     }
     $C = Open_Config::getInstance();
     $this->config = $C->get('text');
     /**
      * Установка рабочей локали, если она всё ещё не указана
      * Локаль устанавливается на этапе роутинга
      */
     if (self::$locale === FALSE) {
         self::locale($C->get('default_locale'));
     }
     /**
      * Установка домена по умолчанию
      */
     self::domain($this->config['default_domain']);
 }
Exemple #8
0
 /**
  * Получить путь БЕЗ локали в начале
  *
  * @return string
  */
 public function pathNoLocale()
 {
     if ($this->pathNoLocale === FALSE) {
         $locales = array_keys(Open_Config::getInstance()->get('locales'));
         $this->pathNoLocale = preg_replace('#^/(' . implode('|', $locales) . ')#i', '', $this->path());
     }
     return $this->pathNoLocale;
 }
Exemple #9
0
/**
 * Функция для вставки постраничной навигации
 *
 * Параметры:
 *
 * 1. Обязательные
 *
 * 1.1. Для всех шаблонов
 * 1.1.1. link - ссылка для навигации, где подстрока [:nav:] заменяется на параметр навигации (e.g. страницу, номер объекта)
 * 1.1.2. amount - количество объектов по которым производится навигация
 * 1.1.3. span - количество объектов выводимых на одной странице
 * 1.1.4. current - текущий параметр навигации (e.g. текущая страница, номер объекта)
 *
 * 1.2. Шаблон first
 *
 * 2. Необязательные
 *
 * 2.1. Для всех шаблонов
 * 2.1.1. pattern - шаблон постраничной навигации. По умолчанию берётся значение 'default_pagination_pattern' из конфига
 * 2.1.2. class - имя класса для <div> навигации. По умолчанию будет присвоен класс 'pagination-'. $params['pattern']
 *
 * 2.2. Шаблон first
 * 2.2.1. around - страниц рядом с текущей
 * 2.2.2. gaps - максимальное количество промежутков
 * 2.2.3. threshold - порог промежутка
 * 2.2.4. gap - обозначение промежутка, по умолчанию строка '&#8230;', что есть многоточие
 *
 * @param array $params
 * @param object $smarty
 * @return string
 */
function smarty_function_pagination($params, &$smarty)
{
    /**
     * Проверка все ли необходимые аргументы переданы
     */
    if (!isset($params['link']) || empty($params['link'])) {
        trigger_error(sprintf(Open_Text::getInstance()->dget('errors', 'Parameter <b>%s</b> for Smarty function <b>pagination</b> is not set'), 'link'), E_USER_ERROR);
    } else {
        if (!isset($params['amount']) || empty($params['amount'])) {
            trigger_error(sprintf(Open_Text::getInstance()->dget('errors', 'Parameter <b>%s</b> for Smarty function <b>pagination</b> is not set'), 'amount'), E_USER_ERROR);
        } else {
            if (!isset($params['span']) || empty($params['span'])) {
                trigger_error(sprintf(Open_Text::getInstance()->dget('errors', 'Parameter <b>%s</b> for Smarty function <b>pagination</b> is not set'), 'span'), E_USER_ERROR);
            } else {
                if (!isset($params['current']) || empty($params['current'])) {
                    trigger_error(sprintf(Open_Text::getInstance()->dget('errors', 'Parameter <b>%s</b> for Smarty function <b>pagination</b> is not set'), 'current'), E_USER_ERROR);
                }
            }
        }
    }
    /**
     * Если шаблон не передан, берём значение по умолчанию из конфига
     */
    if (!isset($params['pattern']) || empty($params['pattern'])) {
        $params['pattern'] = Open_Config::getInstance()->get('default_pagination_pattern');
    }
    /**
     * Если класс ещё не объявлен, подключается исходный файл
     */
    if (!class_exists('Open_Pagination')) {
        require_once CORE_PATH . 'Open/Pagination' . EXT;
    }
    /**
     * Выполнение действий для выбранного шаблона
     */
    switch ($params['pattern']) {
        case Open_Pagination::FIRST:
            /**
             * Установка значений по умолчанию, если необходимо
             */
            $params['around'] = isset($params['around']) ? $params['around'] : Open_Pagination::FIRST_DEFAULT_AROUND;
            $params['gaps'] = isset($params['gaps']) ? $params['gaps'] : Open_Pagination::FIRST_DEFAULT_GAPS;
            $params['threshold'] = isset($params['threshold']) ? $params['threshold'] : Open_Pagination::FIRST_DEFAULT_THRESHOLD;
            /**
             * Получение массива с вычисленными значениями
             */
            $params['pagination'] = Open_Pagination::getInstance()->patternFirst($params['amount'], $params['span'], $params['current'], $params['around'], $params['gaps'], $params['threshold']);
            break;
        default:
            trigger_error(sprintf(Open_Text::getInstance()->dget('errors', 'Pagination pattern <b>%s</b> is not available'), $params['pattern']), E_USER_ERROR);
            break;
    }
    /**
     * Получение значения переменной params из Smarty
     * Устанавливается своё значение
     */
    $paramsBackup = $smarty->get_template_vars('params');
    $smarty->assign('params', $params);
    /**
     * Отключение кеширования
     */
    $previousCaching = $smarty->caching;
    $smarty->caching = FALSE;
    /**
     * Получение шаблона
     */
    $result = $smarty->fetch('Open/Pagination/' . $params['pattern'] . TPLEXT);
    /**
     * Возврат значения кеширования
     */
    $smarty->caching = $previousCaching;
    /**
     * Восстановление значения переменной params
     */
    $smarty->assign('params', $paramsBackup);
    return $result;
}
Exemple #10
0
/**
 * Показать 404-ю
 *
 * @param string $message Текст ошибки
 */
function trigger404($message = FALSE)
{
    if ($message === FALSE) {
        $message = Open_Text::getInstance()->dget('errors', Open_Config::getInstance()->get('default_404_message'));
    }
    triggerError($message, E_404);
}
Exemple #11
0
 /**
  * Callback функция для preg_replace_callback
  * С определением текущей кодировки
  *
  * @param array $match
  * @return string
  */
 private static function xss_html_entity_decode($match)
 {
     return html_entity_decode($match[0], ENT_COMPAT, strtoupper(Open_Config::getInstance()->get('charset')));
 }
Exemple #12
0
 /**
  * Перенаправление на URL
  * Если передан полный URL с хостом, то перенаправление чётко на него
  * Если передан URL без хоста, то к нему добавляется текущая локаль (если её нет) и текущий хост
  *
  * @param string $url
  */
 public function redirect($url)
 {
     if (!parse_url($url, PHP_URL_HOST)) {
         $I = Open_Input::getInstance();
         $locales = array_keys(Open_Config::getInstance()->get('locales'));
         if (!preg_match('#^/(' . implode('|', $locales) . ')#i', $url)) {
             $url = $I->locale() . $url;
         }
         $url = $I->base() . $url;
     }
     header('Location: ' . $url);
     exit(0);
 }
Exemple #13
0
 /**
  * Установить соединение с БД
  * Если параметр профиль не передан, то подключение осуществляется по профилю по умолчанию
  *
  * @param string $profile По какому профилю подключиться
  * @return bool Успех операции
  */
 public function connect($profile = FALSE)
 {
     $C = Open_Config::getInstance();
     /**
      * Если профиль не передан, то берём профиль по умолчанию
      */
     if ($profile === FALSE) {
         $profile = $this->config['default_profile'];
     }
     /**
      * Если соединение по этому профилю уже существует, то возвращаем успех операции
      */
     if (isset($this->links[$profile])) {
         return TRUE;
     }
     /**
      * Если выбранного профиля в конфиге не существует, то возвращаем провал операции
      */
     if (!isset($this->config['profiles'][$profile])) {
         triggerError(sprintf(Open_Text::getInstance()->dget('errors', 'Profile <b>%s</b> for DB does not exist in config'), $profile), E_DB);
         return FALSE;
     } else {
         $P = $this->config['profiles'][$profile];
     }
     /**
      * Сохраняем текущий профиль
      */
     $this->setProfile($profile);
     /**
      * Соединяемся с базой с учётом выбранного метода - connect или pconnect
      */
     $this->links[$profile] = $P['pconnect'] ? @mysql_pconnect($P['host'], $P['user'], $P['password']) : @mysql_connect($P['host'], $P['user'], $P['password']) or triggerError("<i>" . Open_Text::getInstance()->dget('errors', 'Unable to connect to the server') . " - <b>" . $P['host'] . "</b> !<br><b>#" . mysql_errno() . "</b> - " . mysql_error() . "</i><br />", E_DB);
     /**
      * Устанавливаем три переменные сеанса
      * character_set_client
      * character_set_connection
      * character_set_result
      * Для корректной работы с кодировкой
      */
     $this->query("SET NAMES '" . strtoupper(preg_replace('#[^a-z0-9]#i', '', $C->get('charset'))) . "'");
     /**
      * Выбираем рабочую базу
      */
     mysql_select_db($P['db'], $this->links[$profile]) or triggerError("<i>" . Open_Text::getInstance()->dget('errors', 'Unable to select DB') . " - <b>" . $P['host'] . "</b> !<br><b>#" . mysql_errno($this->links[$profile]) . "</b> - " . mysql_error($this->links[$profile]) . "</i><br />", E_DB);
     return TRUE;
 }