Пример #1
0
 public function __construct($name = false, $directCall = true)
 {
     if ($directCall) {
         trigger_error(Lang::getString('Lang.errors.noconstructor'), E_USER_ERROR);
     }
     parent::__construct($name);
 }
Пример #2
0
 /**
  * Конструктор Singleton
  * @param type $name
  * @param type $directCall
  */
 public function __construct($name = false, $directCall = true)
 {
     // Интернационализируем
     require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'i18n.php';
     if ($directCall) {
         trigger_error(Lang::getString('Auth.errors.noconstructor'), E_USER_ERROR);
     }
     parent::__construct($name);
 }
Пример #3
0
    /**
     * Действие по умолчанию
     * @return string Тест выводимый в страницу
     */
    public function action_index() {
        if ($this->m->yes()) {
	    if (Auth::getInstance()->getUser('id') == 1) // только админу
		Output::assign('adminlink', $this->actUri('userwin')->url());
	    Output::assign('users', '');
	    Output::assign('linktitle', Lang::getString('Adminhere'));
            return $this->fetch('adminhere.tpl');
        }
        else
            return "";
    }
Пример #4
0
    /**
     * Инициализует форму в backend и разбирает входящие данные.
     */
    function initBackend() {

        $req = array();

        // Цепляем всю сессию из фронтенда, с описанием чекеров, обязательных полей и т.д.
        // Если такого нет — значит либо нас ломают, либо где-то ошибка.
        if (!$this->sessionGet())
            $this->errorCritical("Не удалось найти сессию «{$this->name}».");
        if (!$this->fields)
            $this->errorCritical("Пустой массив с определениями полей (\$form->fields).");

        // в массив пишем только известные значения, никакой левой фигни
        foreach ($this->fields as $field) {

            if (@isset($_REQUEST[$this->name][$field[name]]))
                $req[$field[name]] = $_REQUEST[$this->name][$field[name]];

            if ($field[type] == AJAXFORM_TYPE_CHECKBOXES) {

                foreach ($field[values] as $k => $v)
                    if (@isset($_REQUEST[$this->name][$field[name] . "|" . $k]))
                        $req[$field[name] . "|" . $k] = true;
            }
            if ($field[type] == AJAXFORM_TYPE_DATE) {
                $req[$field[name]] = $this->datepicker2date($_REQUEST[$this->name][$field[name]]);
            }
        }
        //$req = $_REQUEST[$this->name];
        //$this->alert(print_r($req, true));

        if (count($_FILES[$this->name][name])) {

            foreach ($_FILES[$this->name][name] as $file => $name) {

                $this->files[$file] = array(
                    "name" => $_FILES[$this->name][name][$file],
                    "error" => $_FILES[$this->name][errors][$file],
                    "errors" => $_FILES[$this->name][errors][$file], // compatibility
                    "type" => $_FILES[$this->name][type][$file],
                    "size" => $_FILES[$this->name][size][$file],
                    "tmp" => $_FILES[$this->name][tmp_name][$file],
                    "tmp_name" => $_FILES[$this->name][tmp_name][$file], // compatibility
                    "uploaded" => strlen($_FILES[$this->name][tmp_name][$file]) > 0 ? true : false,
                );
            }
        }

        $this->uid = $this->checkString($req[uid], "id");

        // Ошибки обнуляем, чтобы они не пришли из сессии, так, на всякий случай.
        // А также кладем все новое г в сессию. Если что-то провалится —
        // именно это г из сессии высплывет в случае не-аяксового интерфейса
        $this->session = $req;
        $this->errors = array();

        // Проверяем длину
        foreach ($this->fields as $field) {

            if ($field[options][length] && mb_strlen($req[$field[name]]) > $field[options][length]) {

                $this->error(AJAXFORM_ERROR_FORMAT, $field[name], Lang::getString("Form.error.length") . ": " . $field[options][length]);
                $req[$field[name]] = mb_substr($req[$field[name]], 0, $field[options][length]);
            }
        }

        // Проверяем соответствие формату
        if (count($this->formats))
            foreach ($this->formats as $format) {

                $res = $this->checkFormat($req[$format[name]], $format[type], $format[pregPattern]);

                //$this->alert("FORMAT: " . var_export($format, true) . "\nREQ: " . $req[$format[name]] . "\nSTATUS: " . var_export($res, true));

                if ($res === false && $req[$format[name]]) {

                    $html = ($format[type] == AJAXFORM_FORMAT_CUSTOM) ? $format[html] : Lang::getString("Form.error.format.{$format[type]}");
                    $this->error(AJAXFORM_ERROR_FORMAT, $format[name], $html);
                } elseif ($res === null) {

                    $this->errorCritical("Для поля «{$format[name]}» не найден формат «{$format[type]}».");
                }
            }

        // Проверяем весь $_REQUEST проверкой по-умолчанию
        $req = $this->checkField($req);

        // Проходим по массиву проверок и каждый элемент $_REQUEST проверяем
        // Нужно затем, чтобы потом безопасно использовать данные в сторонних проверках, выполняемых в бакенде
        if (count($this->checkers)) {

            // Проверяем должным образом
            foreach ($this->checkers as $checker) {

                $req[$checker[name]] = $this->checkField($req[$checker[name]], $checker[name], $checker[type], $checker[pregPattern], $checker[pregReplace]);
            }

            $errors = array();

            // Второй проход — смотрим что стало отличаться
            foreach ($this->checkers as $checker) {

                $name = $checker[name];
                $field = $this->fields[$name];

                //$this->alert("Проверка значения: «mb_strtolower($req[$name]) . "» —> «" . mb_strtolower($this->session[$name]) . "»");
                // после обработки чекером значение стало пустым, или в массиве элемента не нашлось сопоставления значению
                if (mb_strtolower($req[$name]) != mb_strtolower($this->session[$name])) { // || (($field[type] == AJAXFORM_TYPE_SELECT || $field[type] == AJAXFORM_TYPE_RADIO) && $this->value($name, $req[$name])) === null
                    // НЕ ЗАПОЛНЕННОЕ ПОЛЕ ДЛЯ ЧЕКЕРА НЕ ВАЖНО — ЗДЕСЬ ГЛАВНОЕ, ЧТОБЫ НЕ ЧЕКЕР ЕГО ТАКИМ СДЕЛАЛ
                    // если стало пустым после чекеров или не нашлось
                    if ($checker[type] != AJAXFORM_CHECK_DEFAULT)
                        $this->error(AJAXFORM_ERROR_CHECK, $name, ($checker[type] == AJAXFORM_CHECK_CUSTOM) ? $checker[html] : Lang::getString ("Form.error.checker." . $checker[type]));
                    $errors[$name] = true;
                }
            }
        }

        //$this->alert(print_r($this->obligatory, 1));
        //$this->alert(print_r($this->files, 1));
        // Проверяем заполненность обязательных полей
        if (count($this->obligatory))
            foreach ($this->obligatory as $name => $tmp) {

                $field = $this->fields[$name];

                //$this->alert("Obligatory check: {$field[name]}, " . var_export($this->value($name, $req[$name]), 1));
                // после обработки чекером значение стало пустым, или в массиве элемента не нашлось сопоставления значению
                if ($this->value($name, $req[$name]) === null) {

                    $html = ($field[type] == AJAXFORM_TYPE_CHECKBOX 
                            || $field[type] == AJAXFORM_TYPE_RADIO 
                            || $field[type] == AJAXFORM_TYPE_SELECT 
                            || $field[type] == AJAXFORM_TYPE_FILE) ?
                                Lang::getString("Form.error.obligatory." . $field[type]) :
                                Lang::getString("Form.error.obligatory.empty");
//                endif;
//                endif;

                    $this->error(AJAXFORM_ERROR_OBLIGATORY, $name, $html);
                }

                // проверим массив, есть ли там вообще такое значение (достаточно проверить тип —
                // если СЕЛЕКТ или РАДИО, то null в условии только поэтому может появиться
                if (($field[type] == AJAXFORM_TYPE_SELECT 
                        || $field[type] == AJAXFORM_TYPE_RADIO) 
                     && $this->value($name, $req[$name]) === null 
                     && !empty($req[$name])) { // было выше в чекерах
                        $this->error(AJAXFORM_ERROR_OBLIGATORY, $name, 
                                Lang::getString("Form.error.obligatory.not-found"));
                    continue; // был break… само собой не работало
                }
            }

        // проверяем код, если таковой есть в массиве
        if ($this->fields[confirm]) {

            $req[confirm] = $this->confirmReplace($req[confirm]);

            if ($req[confirm] != $this->fields[confirm][value]) {

                $this->error(AJAXFORM_ERROR_CONFIRM, "confirm", Lang::getString("Form.error.code"));
                //$this->alert($req[confirm] . "|" . $this->fields[confirm][value]);
            }
        }

        //$this->alert($res, true);

        foreach ($this->fields as $field) {


            if (($field[type] == AJAXFORM_TYPE_TEXT || $field[type] == AJAXFORM_TYPE_TEXTAREA || $field[type] == AJAXFORM_TYPE_HIDDEN || $field[type] == AJAXFORM_TYPE_PASSWORD) && !$field[options][allowHTML]) {

                if (!$field[options][raw])
                    $req[$field[name]] = htmlSpecialChars($req[$field[name]]);
                //$this->alert($field[type] . " — " . $field[name] . " — " . $req[$field[name]]);
            }
        }

        //$this->alert(print_r($this->errors, 1));

        $this->request = $req;
        $this->parseRequest();
    }
Пример #5
0
 /**
  * Проверка сессии получене данных о пользователе
  * @var string $sessionid Идентификатор  сессии
  * @return array
  */
 public function checksession($sessionid)
 {
     $rec = array();
     $sql1 = "SELECT * FROM session " . "WHERE session ='{$sessionid}'";
     $rs = sql::fetchOne($sql1);
     if (!empty($rs)) {
         // не бывает, в авторизации записываем 0 на неудаче
         if ($rs["u_id"] != 0) {
             $sql = "SELECT * FROM users " . "WHERE id='{$rs["u_id"]}'";
             $rs = sql::fetchOne($sql);
             if (!empty($rs)) {
                 $rec["user"]["username"] = $rs["nik"];
                 $rec["user"]["userid"] = $rs["id"];
                 $rec["user"]["user_id"] = $rs["id"];
                 $rec["user"]["u_id"] = $rs["id"];
                 $rec["user"]["id"] = $rs["id"];
                 $sql = "UPDATE session SET ts=NOW() WHERE session='{$sessionid}'";
                 sql::query($sql);
                 // права
                 if (empty($_SESSION["rights"])) {
                     $sql = "SELECT rights.right,type,rtype FROM rights " . "JOIN (rtypes,rrtypes) " . "ON (rtypes.id=type_id " . "AND rrtypes.id=rtype_id) " . "WHERE u_id='{$rs["id"]}'";
                     $res = sql::fetchAll($sql);
                     foreach ($res as $rs) {
                         if ($rs["right"] == '1') {
                             $_SESSION["rights"][$rs["type"]][$rs["rtype"]] = true;
                         }
                     }
                 }
                 $rec["rights"] = $_SESSION["rights"];
                 $rec["success"] = 'Auth.session.success';
                 // определимся с сессией окна
                 Auth::$lss = !empty($_REQUEST["lss"]) ? $_REQUEST["lss"] : "lss";
             } else {
                 $rec["success"] = 'Auth.session.cantfinduser';
             }
         } else {
             // нет пользователя
             $rec["success"] = 'Auth.session.wrongpassword';
         }
     } else {
         // не  оказалось сессии в базе
         $rec["success"] = 'Auth.session.nosession';
     }
     $rec["mes"] .= Lang::getString($rec["success"]);
     return $rec;
 }