Browse Source

2018-01-09 Validator

Visman 7 years ago
parent
commit
6e40010dba

+ 50 - 43
app/Core/Validator.php

@@ -17,55 +17,55 @@ class Validator
      * Массив валидаторов
      * @var array
      */
-    protected $validators = [];
+    protected $validators;
 
     /**
      * Массив правил для текущей проверки данных
      * @var array
      */
-    protected $rules = [];
+    protected $rules;
 
     /**
      * Массив результатов проверенных данных
      * @var array
      */
-    protected $result = [];
+    protected $result;
 
     /**
      * Массив дополнительных аргументов для валидаторов и конкретных полей/правил
      * @var array
      */
-    protected $arguments = [];
+    protected $arguments;
 
     /**
      * Массив сообщений об ошибках для конкретных полей/правил
      * @var array
      */
-    protected $messages = [];
+    protected $messages;
 
     /**
      * Массив псевдонимов имен полей для вывода в ошибках
      * @var array
      */
-    protected $aliases = [];
+    protected $aliases;
 
     /**
      * Массив ошибок валидации
      * @var array
      */
-    protected $errors = [];
+    protected $errors;
 
     /**
      * Массив имен полей для обработки
      * @var array
      */
-    protected $fields = [];
+    protected $fields;
 
     /**
      * Массив состояний проверки полей
      * @var array
      */
-    protected $status = [];
+    protected $status;
 
     /**
      * Массив входящих данных для обработки
@@ -77,7 +77,7 @@ class Validator
      * Данные для текущей обработки
      * @var array
      */
-    protected $curData = [];
+    protected $curData;
 
     /**
      * Флаг ошибки
@@ -93,6 +93,16 @@ class Validator
     public function __construct(Container $container)
     {
         $this->c = $container;
+        $this->reset();
+    }
+
+    /**
+     * Сброс настроек
+     *
+     * @return Validator
+     */
+    public function reset()
+    {
         $this->validators = [
             'absent'        => [$this, 'vAbsent'],
             'array'         => [$this, 'vArray'],
@@ -114,6 +124,15 @@ class Validator
             'string'        => [$this, 'vString'],
             'token'         => [$this, 'vToken'],
         ];
+        $this->rules     = [];
+        $this->result    = [];
+        $this->arguments = [];
+        $this->messages  = [];
+        $this->aliases   = [];
+        $this->errors    = [];
+        $this->fields    = [];
+        $this->status    = [];
+        return $this;
     }
 
     /**
@@ -130,7 +149,7 @@ class Validator
     }
 
     /**
-     * Установка правил проверки
+     * Добавление правил проверки
      *
      * @param array $list
      *
@@ -138,14 +157,8 @@ class Validator
      *
      * @return Validator
      */
-    public function setRules(array $list)
+    public function addRules(array $list)
     {
-        $this->rules = [];
-        $this->result = [];
-        $this->alias = [];
-        $this->errors = [];
-        $this->arguments = [];
-        $this->fields = [];
         foreach ($list as $field => $raw) {
             $suffix = null;
             // правило для элементов массива
@@ -153,13 +166,8 @@ class Validator
                 list($field, $suffix) = explode('.', $field, 2);
             }
             $rules = [];
-            // псевдоним содержится в списке правил
-            if (is_array($raw)) {
-                $this->aliases[$field] = $raw[1]; //????????????????
-                $raw                   = $raw[0];
-            }
             // перебор правил для текущего поля
-            foreach (explode('|', $raw) as $rule) {
+            foreach (explode('|', $raw) as $rule) { //???? нужно экоанирование для разделителей
                  $tmp = explode(':', $rule, 2);
                  if (empty($this->validators[$tmp[0]])) {
                      throw new RuntimeException($tmp[0] . ' validator not found');
@@ -177,39 +185,39 @@ class Validator
     }
 
     /**
-     * Установка дополнительных аргументов для конкретных "имя поля"."имя правила".
+     * Добавление дополнительных аргументов для конкретных "имя поля"."имя правила".
      *
      * @param array $arguments
      *
      * @return Validator
      */
-    public function setArguments(array $arguments)
+    public function addArguments(array $arguments)
     {
-        $this->arguments = $arguments;
+        $this->arguments = array_replace($this->arguments, $arguments);
         return $this;
     }
 
     /**
-     * Установка сообщений для конкретных "имя поля"."имя правила".
+     * Добавление сообщений для конкретных "имя поля"."имя правила".
      *
      * @param array $messages
      *
      * @return Validator
      */
-    public function setMessages(array $messages)
+    public function addMessages(array $messages)
     {
-        $this->messages = $messages;
+        $this->messages = array_replace($this->messages, $messages);
         return $this;
     }
 
     /**
-     * Установка псевдонимов имен полей для сообщений об ошибках
+     * Добавление псевдонимов имен полей для сообщений об ошибках
      *
      * @param array $aliases
      *
      * @return Validator
      */
-    public function setAliases(array $aliases)
+    public function addAliases(array $aliases)
     {
         $this->aliases = array_replace($this->aliases, $aliases);
         return $this;
@@ -217,7 +225,6 @@ class Validator
 
     /**
      * Проверка данных
-     * Удачная проверка возвращает true
      *
      * @param array $raw
      *
@@ -250,7 +257,7 @@ class Validator
      */
     public function __isset($field)
     {
-        return isset($this->result[$field]); //????
+        return isset($this->result[$field]);
     }
 
     /**
@@ -291,11 +298,11 @@ class Validator
 
     /**
      * Проверка значения списком правил
-     * 
+     *
      * @param mixed $value
      * @param array $rules
      * @param string $field
-     * 
+     *
      * @return mixed
      */
     protected function checkValue($value, array $rules, $field)
@@ -310,7 +317,7 @@ class Validator
             ];
 
             $value = $this->validators[$validator]($this, $value, $attr, $this->getArguments($field, $validator));
-            
+
             array_pop($this->curData);
 
             if (null !== $this->error) {
@@ -325,7 +332,7 @@ class Validator
      *
      * @param mixed $error
      * @param string $type
-     * 
+     *
      * @throws RuntimeException
      */
     public function addError($error, $type = 'v')
@@ -425,7 +432,7 @@ class Validator
         if (null !== $value) {
             $this->addError('The :alias should be absent');
         }
-        if (isset($attr[0])) {
+        if (isset($attr{0})) {
             return $attr;
         } else {
             return null;
@@ -530,7 +537,7 @@ class Validator
         if (empty($vars = end($this->curData))) {
             throw new RuntimeException('The array of variables is empty');
         }
-        
+
         $result = [];
         foreach ($attr as $name => $rules) {
             $this->recArray($value, $result, $name, $rules, $vars['field'] . '.' . $name);
@@ -560,7 +567,7 @@ class Validator
             if (! array_key_exists($key, $value)) {
                 return; //????
             }
-    
+
             if ('' === $name) {
                 $result[$key] = $this->checkValue($value[$key], $rules, $field);
             } else {
@@ -645,7 +652,7 @@ class Validator
 
     protected function vEmail($v, $value)
     {
-        if (null === $value) {
+        if (null === $value || '' === $value) { //???? перед правилом должно стоять правило `required`
             return null;
         }
         $email = $this->c->Mail->valid($value, true);
@@ -669,7 +676,7 @@ class Validator
 
     protected function vRegex($v, $value, $attr)
     {
-        if (null !== $value 
+        if (null !== $value
             && (! is_string($value) || ! preg_match($attr, $value))
         ) {
             $this->addError('The :alias is not valid format');

+ 20 - 18
app/Models/Pages/Admin/Categories.php

@@ -21,15 +21,16 @@ class Categories extends Admin
         $this->c->Lang->load('admin_categories');
 
         if ('POST' === $method) {
-            $v = $this->c->Validator->setRules([
-                'token'                => 'token:AdminCategories',
-                'form.*.cat_name'      => 'required|string:trim|max:80',
-                'form.*.disp_position' => 'required|integer|min:0|max:9999999999',
-                'new'                  => 'string:trim|max:80'
-            ])->setAliases([
-            ])->setArguments([
-            ])->setMessages([
-            ]);
+            $v = $this->c->Validator->reset()
+                ->addRules([
+                    'token'                => 'token:AdminCategories',
+                    'form.*.cat_name'      => 'required|string:trim|max:80',
+                    'form.*.disp_position' => 'required|integer|min:0|max:9999999999',
+                    'new'                  => 'string:trim|max:80'
+                ])->addAliases([
+                ])->addArguments([
+                ])->addMessages([
+                ]);
 
             if ($v->validation($_POST)) {
                 $this->c->DB->beginTransaction();
@@ -134,15 +135,16 @@ class Categories extends Admin
         $this->c->Lang->load('admin_categories');
 
         if ('POST' === $method) {
-            $v = $this->c->Validator->setRules([
-                'token'     => 'token:AdminCategoriesDelete',
-                'confirm'   => 'integer',
-                'delete'    => 'string',
-                'cancel'    => 'string',
-            ])->setAliases([
-            ])->setArguments([
-                'token' => $args,
-            ]);
+            $v = $this->c->Validator->reset()
+                ->addRules([
+                    'token'     => 'token:AdminCategoriesDelete',
+                    'confirm'   => 'integer',
+                    'delete'    => 'string',
+                    'cancel'    => 'string',
+                ])->addAliases([
+                ])->addArguments([
+                    'token' => $args,
+                ]);
 
             if (! $v->validation($_POST) || null === $v->delete) {
                 return $this->c->Redirect->page('AdminCategories')->message('Cancel redirect');

+ 10 - 9
app/Models/Pages/Admin/Censoring.php

@@ -19,15 +19,16 @@ class Censoring extends Admin
         $this->c->Lang->load('admin_censoring');
 
         if ('POST' === $method) {
-            $v = $this->c->Validator->setRules([
-                'token'               => 'token:AdminCensoring',
-                'o_censoring'         => 'required|integer|in:0,1',
-                'form.*.search_for'   => 'string:trim|max:60',
-                'form.*.replace_with' => 'string:trim|max:60',
-            ])->setAliases([
-            ])->setArguments([
-            ])->setMessages([
-            ]);
+            $v = $this->c->Validator->reset()
+                ->addRules([
+                    'token'               => 'token:AdminCensoring',
+                    'o_censoring'         => 'required|integer|in:0,1',
+                    'form.*.search_for'   => 'string:trim|max:60',
+                    'form.*.replace_with' => 'string:trim|max:60',
+                ])->addAliases([
+                ])->addArguments([
+                ])->addMessages([
+                ]);
 
             if ($v->validation($_POST)) {
                 $this->c->DB->beginTransaction();

+ 35 - 32
app/Models/Pages/Admin/Forums.php

@@ -111,13 +111,14 @@ class Forums extends Admin
         $this->c->Lang->load('admin_forums');
 
         if ('POST' === $method) {
-            $v = $this->c->Validator->setRules([
-                'token'                => 'token:AdminForums',
-                'form.*.disp_position' => 'required|integer|min:0|max:9999999999',
-            ])->setAliases([
-            ])->setArguments([
-            ])->setMessages([
-            ]);
+            $v = $this->c->Validator->reset()
+                ->addRules([
+                    'token'                => 'token:AdminForums',
+                    'form.*.disp_position' => 'required|integer|min:0|max:9999999999',
+                ])->addAliases([
+                ])->addArguments([
+                ])->addMessages([
+                ]);
 
             if ($v->validation($_POST)) {
                 $this->c->DB->beginTransaction();
@@ -245,15 +246,16 @@ class Forums extends Admin
         $this->c->Lang->load('admin_forums');
 
         if ('POST' === $method) {
-            $v = $this->c->Validator->setRules([
-                'token'     => 'token:AdminForumsDelete',
-                'confirm'   => 'integer',
-                'delete'    => 'string',
-                'cancel'    => 'string',
-            ])->setAliases([
-            ])->setArguments([
-                'token' => $args,
-            ]);
+            $v = $this->c->Validator->reset()
+                ->addRules([
+                    'token'     => 'token:AdminForumsDelete',
+                    'confirm'   => 'integer',
+                    'delete'    => 'string',
+                    'cancel'    => 'string',
+                ])->addAliases([
+                ])->addArguments([
+                    'token' => $args,
+                ]);
 
             if (! $v->validation($_POST) || null === $v->delete) {
                 return $this->c->Redirect->page('AdminForums')->message('Cancel redirect');
@@ -356,22 +358,23 @@ class Forums extends Admin
         $this->calcList($forum);
 
         if ('POST' === $method) {
-            $v = $this->c->Validator->setRules([
-                'token'                => 'token:' . $marker,
-                'forum_name'           => 'required|string:trim|max:80',
-                'forum_desc'           => 'string:trim|max:65000 bytes',
-                'parent'               => 'required|integer|in:' . implode(',', $this->listOfIndexes),
-                'sort_by'              => 'required|integer|in:0,1,2',
-                'redirect_url'         => 'string:trim|max:255', //????
-                'perms.*.read_forum'   => 'checkbox',
-                'perms.*.post_replies' => 'checkbox',
-                'perms.*.post_topics'  => 'checkbox',
-                'submit'               => 'string',
-                'reset'                => empty($forum->id) ? 'absent' : 'string',
-            ])->setAliases([
-            ])->setArguments([
-                'token' => $args,
-            ]);
+            $v = $this->c->Validator->reset()
+                ->addRules([
+                    'token'                => 'token:' . $marker,
+                    'forum_name'           => 'required|string:trim|max:80',
+                    'forum_desc'           => 'string:trim|max:65000 bytes',
+                    'parent'               => 'required|integer|in:' . implode(',', $this->listOfIndexes),
+                    'sort_by'              => 'required|integer|in:0,1,2',
+                    'redirect_url'         => 'string:trim|max:255', //????
+                    'perms.*.read_forum'   => 'checkbox',
+                    'perms.*.post_replies' => 'checkbox',
+                    'perms.*.post_topics'  => 'checkbox',
+                    'submit'               => 'string',
+                    'reset'                => empty($forum->id) ? 'absent' : 'string',
+                ])->addAliases([
+                ])->addArguments([
+                    'token' => $args,
+                ]);
 
             $valid = $v->validation($_POST);
 

+ 64 - 60
app/Models/Pages/Admin/Groups.php

@@ -111,13 +111,14 @@ class Groups extends Admin
      */
     public function defaultSet()
     {
-        $v = $this->c->Validator->setRules([
-            'token'        => 'token:AdminGroupsDefault',
-            'defaultgroup' => 'required|integer|in:' . implode(',', array_keys($this->groupsDefault)),
-        ])->setAliases([
-        ])->setMessages([
-            'defaultgroup.in' => 'Invalid default group',
-        ]);
+        $v = $this->c->Validator->reset()
+            ->addRules([
+                'token'        => 'token:AdminGroupsDefault',
+                'defaultgroup' => 'required|integer|in:' . implode(',', array_keys($this->groupsDefault)),
+            ])->addAliases([
+            ])->addMessages([
+                'defaultgroup.in' => 'Invalid default group',
+            ]);
 
         if (! $v->validation($_POST)) {
             $this->fIswev = $v->getErrors();
@@ -141,13 +142,14 @@ class Groups extends Admin
     {
         // начало создания новой группы
         if (empty($args['id']) && empty($args['base'])) {
-            $v = $this->c->Validator->setRules([
-                'token'     => 'token:AdminGroupsNew',
-                'basegroup' => 'required|integer|in:' . implode(',', array_keys($this->groupsNew)),
-            ])->setAliases([
-            ])->setMessages([
-                'basegroup.in' => 'Invalid group to create on base',
-            ]);
+            $v = $this->c->Validator->reset()
+                ->addRules([
+                    'token'     => 'token:AdminGroupsNew',
+                    'basegroup' => 'required|integer|in:' . implode(',', array_keys($this->groupsNew)),
+                ])->addAliases([
+                ])->addMessages([
+                    'basegroup.in' => 'Invalid group to create on base',
+                ]);
 
             if (! $v->validation($_POST)) {
                 $this->fIswev = $v->getErrors();
@@ -196,42 +198,43 @@ class Groups extends Admin
                 }
             }
 
-            $v = $this->c->Validator->setRules([
-                'token'                  => 'token:' . $marker,
-                'g_title'                => 'required|string:trim|max:50|not_in:' . implode(',', $reserve),
-                'g_user_title'           => 'string:trim|max:50',
-                'g_promote_next_group'   => 'integer|min:0|not_in:' . $notNext,
-                'g_promote_min_posts'    => 'integer|min:0|max:9999999999',
-                'g_moderator'            => 'integer|in:0,1',
-                'g_mod_edit_users'       => 'integer|in:0,1',
-                'g_mod_rename_users'     => 'integer|in:0,1',
-                'g_mod_change_passwords' => 'integer|in:0,1',
-                'g_mod_promote_users'    => 'integer|in:0,1',
-                'g_mod_ban_users'        => 'integer|in:0,1',
-                'g_read_board'           => 'integer|in:0,1',
-                'g_view_users'           => 'integer|in:0,1',
-                'g_post_replies'         => 'integer|in:0,1',
-                'g_post_topics'          => 'integer|in:0,1',
-                'g_edit_posts'           => 'integer|in:0,1',
-                'g_delete_posts'         => 'integer|in:0,1',
-                'g_delete_topics'        => 'integer|in:0,1',
-                'g_deledit_interval'     => 'integer|min:0|max:999999',
-                'g_set_title'            => 'integer|in:0,1',
-                'g_post_links'           => 'integer|in:0,1',
-                'g_search'               => 'integer|in:0,1',
-                'g_search_users'         => 'integer|in:0,1',
-                'g_send_email'           => 'integer|in:0,1',
-                'g_post_flood'           => 'integer|min:0|max:999999',
-                'g_search_flood'         => 'integer|min:0|max:999999',
-                'g_email_flood'          => 'integer|min:0|max:999999',
-                'g_report_flood'         => 'integer|min:0|max:999999',
-            ])->setAliases([
-            ])->setArguments([
-                'token' => $vars,
-            ])->setMessages([
-                'g_title.required' => 'You must enter a group title',
-                'g_title.not_in'   => 'Title already exists',
-            ]);
+            $v = $this->c->Validator->reset()
+                ->addRules([
+                    'token'                  => 'token:' . $marker,
+                    'g_title'                => 'required|string:trim|max:50|not_in:' . implode(',', $reserve),
+                    'g_user_title'           => 'string:trim|max:50',
+                    'g_promote_next_group'   => 'integer|min:0|not_in:' . $notNext,
+                    'g_promote_min_posts'    => 'integer|min:0|max:9999999999',
+                    'g_moderator'            => 'integer|in:0,1',
+                    'g_mod_edit_users'       => 'integer|in:0,1',
+                    'g_mod_rename_users'     => 'integer|in:0,1',
+                    'g_mod_change_passwords' => 'integer|in:0,1',
+                    'g_mod_promote_users'    => 'integer|in:0,1',
+                    'g_mod_ban_users'        => 'integer|in:0,1',
+                    'g_read_board'           => 'integer|in:0,1',
+                    'g_view_users'           => 'integer|in:0,1',
+                    'g_post_replies'         => 'integer|in:0,1',
+                    'g_post_topics'          => 'integer|in:0,1',
+                    'g_edit_posts'           => 'integer|in:0,1',
+                    'g_delete_posts'         => 'integer|in:0,1',
+                    'g_delete_topics'        => 'integer|in:0,1',
+                    'g_deledit_interval'     => 'integer|min:0|max:999999',
+                    'g_set_title'            => 'integer|in:0,1',
+                    'g_post_links'           => 'integer|in:0,1',
+                    'g_search'               => 'integer|in:0,1',
+                    'g_search_users'         => 'integer|in:0,1',
+                    'g_send_email'           => 'integer|in:0,1',
+                    'g_post_flood'           => 'integer|min:0|max:999999',
+                    'g_search_flood'         => 'integer|min:0|max:999999',
+                    'g_email_flood'          => 'integer|min:0|max:999999',
+                    'g_report_flood'         => 'integer|min:0|max:999999',
+                ])->addAliases([
+                ])->addArguments([
+                    'token' => $vars,
+                ])->addMessages([
+                    'g_title.required' => 'You must enter a group title',
+                    'g_title.not_in'   => 'Title already exists',
+                ]);
 
             if ($v->validation($_POST)) {
                 return $this->save($group, $baseGroup, $v->getData());
@@ -618,16 +621,17 @@ class Groups extends Admin
         }
 
         if ('POST' === $method) {
-            $v = $this->c->Validator->setRules([
-                'token'     => 'token:AdminGroupsDelete',
-                'movegroup' => $move,
-                'confirm'   => 'integer',
-                'delete'    => 'string',
-                'cancel'    => 'string',
-            ])->setAliases([
-            ])->setArguments([
-                'token' => $args,
-            ]);
+            $v = $this->c->Validator->reset()
+                ->addRules([
+                    'token'     => 'token:AdminGroupsDelete',
+                    'movegroup' => $move,
+                    'confirm'   => 'integer',
+                    'delete'    => 'string',
+                    'cancel'    => 'string',
+                ])->addAliases([
+                ])->addArguments([
+                    'token' => $args,
+                ]);
 
             if (! $v->validation($_POST) || null === $v->delete) {
                 return $this->c->Redirect->page('AdminGroups')->message('Cancel redirect');

+ 72 - 71
app/Models/Pages/Admin/Options.php

@@ -23,77 +23,78 @@ class Options extends Admin
         $config = clone $this->c->config;
 
         if ('POST' === $method) {
-            $v = $this->c->Validator->addValidators([
-                'check_timeout' => [$this, 'vCheckTimeout'],
-                'check_dir'     => [$this, 'vCheckDir'],
-                'check_empty'   => [$this, 'vCheckEmpty'],
-            ])->setRules([
-                'token'                   => 'token:AdminOptions',
-                'o_board_title'           => 'required|string:trim|max:255',
-                'o_board_desc'            => 'string:trim|max:65000 bytes',
-                'o_default_timezone'      => 'required|string:trim|in:-12,-11,-10,-9.5,-9,-8.5,-8,-7,-6,-5,-4,-3.5,-3,-2,-1,0,1,2,3,3.5,4,4.5,5,5.5,5.75,6,6.5,7,8,8.75,9,9.5,10,10.5,11,11.5,12,12.75,13,14',
-                'o_default_dst'           => 'required|integer|in:0,1',
-                'o_default_lang'          => 'required|string:trim|in:' . implode(',', $this->c->Func->getLangs()),
-                'o_default_style'         => 'required|string:trim|in:' . implode(',', $this->c->Func->getStyles()),
-                'o_time_format'           => 'required|string:trim|max:25',
-                'o_date_format'           => 'required|string:trim|max:25',
-                'o_timeout_visit'         => 'required|integer|min:0|max:99999',
-                'o_timeout_online'        => 'required|integer|min:0|max:99999|check_timeout',
-                'o_redirect_delay'        => 'required|integer|min:0|max:99999',
-                'o_show_user_info'        => 'required|integer|in:0,1',
-                'o_show_post_count'       => 'required|integer|in:0,1',
-                'o_smilies'               => 'required|integer|in:0,1',
-                'o_smilies_sig'           => 'required|integer|in:0,1',
-                'o_make_links'            => 'required|integer|in:0,1',
-                'o_topic_review'          => 'required|integer|min:0|max:50',
-                'o_disp_topics_default'   => 'required|integer|min:10|max:50',
-                'o_disp_posts_default'    => 'required|integer|min:10|max:50',
-                'o_indent_num_spaces'     => 'required|integer|min:0|max:99',
-                'o_quote_depth'           => 'required|integer|min:0|max:9',
-                'o_quickpost'             => 'required|integer|in:0,1',
-                'o_users_online'          => 'required|integer|in:0,1',
-                'o_signatures'            => 'required|integer|in:0,1',
-                'o_show_dot'              => 'required|integer|in:0,1',
-                'o_topic_views'           => 'required|integer|in:0,1',
-                'o_quickjump'             => 'required|integer|in:0,1',
-                'o_gzip'                  => 'required|integer|in:0,1',
-                'o_search_all_forums'     => 'required|integer|in:0,1',
-                'o_additional_navlinks'   => 'string:trim|max:65000 bytes',
-                'o_feed_type'             => 'required|integer|in:0,1,2',
-                'o_feed_ttl'              => 'required|integer|in:0,5,15,30,60',
-                'o_report_method'         => 'required|integer|in:0,1,2',
-                'o_mailing_list'          => 'string:trim|max:65000 bytes',
-                'o_avatars'               => 'required|integer|in:0,1',
-                'o_avatars_dir'           => 'required|string:trim|max:255|check_dir',
-                'o_avatars_width'         => 'required|integer|min:50|max:999',
-                'o_avatars_height'        => 'required|integer|min:50|max:999',
-                'o_avatars_size'          => 'required|integer|min:0|max:9999999',
-                'o_admin_email'           => 'required|string:trim,lower|max:80|email',
-                'o_webmaster_email'       => 'required|string:trim,lower|max:80|email',
-                'o_forum_subscriptions'   => 'required|integer|in:0,1',
-                'o_topic_subscriptions'   => 'required|integer|in:0,1',
-                'o_smtp_host'             => 'string:trim|max:255',
-                'o_smtp_user'             => 'string:trim|max:255',
-                'o_smtp_pass'             => 'string:trim|max:255', //??????
-                'changeSmtpPassword'      => 'integer',             //??????
-                'o_smtp_ssl'              => 'required|integer|in:0,1',
-                'o_regs_allow'            => 'required|integer|in:0,1',
-                'o_regs_verify'           => 'required|integer|in:0,1',
-                'o_regs_report'           => 'required|integer|in:0,1',
-                'o_rules'                 => 'required|integer|in:0,1|check_empty:o_rules_message',
-                'o_rules_message'         => 'string:trim|max:65000 bytes',
-                'o_default_email_setting' => 'required|integer|in:0,1,2',
-                'o_announcement'          => 'required|integer|in:0,1|check_empty:o_announcement_message',
-                'o_announcement_message'  => 'string:trim|max:65000 bytes',
-                'o_maintenance'           => 'required|integer|in:0,1|check_empty:o_maintenance_message',
-                'o_maintenance_message'   => 'string:trim|max:65000 bytes',
-            ])->setAliases([
-            ])->setArguments([
-            ])->setMessages([
-                'o_board_title'     => 'Must enter title message',
-                'o_admin_email'     => 'Invalid e-mail message',
-                'o_webmaster_email' => 'Invalid webmaster e-mail message',
-            ]);
+            $v = $this->c->Validator->reset()
+                ->addValidators([
+                    'check_timeout' => [$this, 'vCheckTimeout'],
+                    'check_dir'     => [$this, 'vCheckDir'],
+                    'check_empty'   => [$this, 'vCheckEmpty'],
+                ])->addRules([
+                    'token'                   => 'token:AdminOptions',
+                    'o_board_title'           => 'required|string:trim|max:255',
+                    'o_board_desc'            => 'string:trim|max:65000 bytes',
+                    'o_default_timezone'      => 'required|string:trim|in:-12,-11,-10,-9.5,-9,-8.5,-8,-7,-6,-5,-4,-3.5,-3,-2,-1,0,1,2,3,3.5,4,4.5,5,5.5,5.75,6,6.5,7,8,8.75,9,9.5,10,10.5,11,11.5,12,12.75,13,14',
+                    'o_default_dst'           => 'required|integer|in:0,1',
+                    'o_default_lang'          => 'required|string:trim|in:' . implode(',', $this->c->Func->getLangs()),
+                    'o_default_style'         => 'required|string:trim|in:' . implode(',', $this->c->Func->getStyles()),
+                    'o_time_format'           => 'required|string:trim|max:25',
+                    'o_date_format'           => 'required|string:trim|max:25',
+                    'o_timeout_visit'         => 'required|integer|min:0|max:99999',
+                    'o_timeout_online'        => 'required|integer|min:0|max:99999|check_timeout',
+                    'o_redirect_delay'        => 'required|integer|min:0|max:99999',
+                    'o_show_user_info'        => 'required|integer|in:0,1',
+                    'o_show_post_count'       => 'required|integer|in:0,1',
+                    'o_smilies'               => 'required|integer|in:0,1',
+                    'o_smilies_sig'           => 'required|integer|in:0,1',
+                    'o_make_links'            => 'required|integer|in:0,1',
+                    'o_topic_review'          => 'required|integer|min:0|max:50',
+                    'o_disp_topics_default'   => 'required|integer|min:10|max:50',
+                    'o_disp_posts_default'    => 'required|integer|min:10|max:50',
+                    'o_indent_num_spaces'     => 'required|integer|min:0|max:99',
+                    'o_quote_depth'           => 'required|integer|min:0|max:9',
+                    'o_quickpost'             => 'required|integer|in:0,1',
+                    'o_users_online'          => 'required|integer|in:0,1',
+                    'o_signatures'            => 'required|integer|in:0,1',
+                    'o_show_dot'              => 'required|integer|in:0,1',
+                    'o_topic_views'           => 'required|integer|in:0,1',
+                    'o_quickjump'             => 'required|integer|in:0,1',
+                    'o_gzip'                  => 'required|integer|in:0,1',
+                    'o_search_all_forums'     => 'required|integer|in:0,1',
+                    'o_additional_navlinks'   => 'string:trim|max:65000 bytes',
+                    'o_feed_type'             => 'required|integer|in:0,1,2',
+                    'o_feed_ttl'              => 'required|integer|in:0,5,15,30,60',
+                    'o_report_method'         => 'required|integer|in:0,1,2',
+                    'o_mailing_list'          => 'string:trim|max:65000 bytes',
+                    'o_avatars'               => 'required|integer|in:0,1',
+                    'o_avatars_dir'           => 'required|string:trim|max:255|check_dir',
+                    'o_avatars_width'         => 'required|integer|min:50|max:999',
+                    'o_avatars_height'        => 'required|integer|min:50|max:999',
+                    'o_avatars_size'          => 'required|integer|min:0|max:9999999',
+                    'o_admin_email'           => 'required|string:trim,lower|max:80|email',
+                    'o_webmaster_email'       => 'required|string:trim,lower|max:80|email',
+                    'o_forum_subscriptions'   => 'required|integer|in:0,1',
+                    'o_topic_subscriptions'   => 'required|integer|in:0,1',
+                    'o_smtp_host'             => 'string:trim|max:255',
+                    'o_smtp_user'             => 'string:trim|max:255',
+                    'o_smtp_pass'             => 'string:trim|max:255', //??????
+                    'changeSmtpPassword'      => 'integer',             //??????
+                    'o_smtp_ssl'              => 'required|integer|in:0,1',
+                    'o_regs_allow'            => 'required|integer|in:0,1',
+                    'o_regs_verify'           => 'required|integer|in:0,1',
+                    'o_regs_report'           => 'required|integer|in:0,1',
+                    'o_rules'                 => 'required|integer|in:0,1|check_empty:o_rules_message',
+                    'o_rules_message'         => 'string:trim|max:65000 bytes',
+                    'o_default_email_setting' => 'required|integer|in:0,1,2',
+                    'o_announcement'          => 'required|integer|in:0,1|check_empty:o_announcement_message',
+                    'o_announcement_message'  => 'string:trim|max:65000 bytes',
+                    'o_maintenance'           => 'required|integer|in:0,1|check_empty:o_maintenance_message',
+                    'o_maintenance_message'   => 'string:trim|max:65000 bytes',
+                ])->addAliases([
+                ])->addArguments([
+                ])->addMessages([
+                    'o_board_title'     => 'Must enter title message',
+                    'o_admin_email'     => 'Invalid e-mail message',
+                    'o_webmaster_email' => 'Invalid webmaster e-mail message',
+                ]);
 
             $valid = $v->validation($_POST);
             $data  = $v->getData();

+ 18 - 17
app/Models/Pages/Admin/Permissions.php

@@ -23,23 +23,24 @@ class Permissions extends Admin
         $config = clone $this->c->config;
 
         if ('POST' === $method) {
-            $v = $this->c->Validator->addValidators([
-            ])->setRules([
-                'token'                   => 'token:AdminPermissions',
-                'p_message_bbcode'        => 'required|integer|in:0,1',
-                'p_message_img_tag'       => 'required|integer|in:0,1',
-                'p_message_all_caps'      => 'required|integer|in:0,1',
-                'p_subject_all_caps'      => 'required|integer|in:0,1',
-                'p_force_guest_email'     => 'required|integer|in:0,1',
-                'p_sig_bbcode'            => 'required|integer|in:0,1',
-                'p_sig_img_tag'           => 'required|integer|in:0,1',
-                'p_sig_all_caps'          => 'required|integer|in:0,1',
-                'p_sig_length'            => 'required|integer|min:0|max:16000',
-                'p_sig_lines'             => 'required|integer|min:0|max:100',
-            ])->setAliases([
-            ])->setArguments([
-            ])->setMessages([
-            ]);
+            $v = $this->c->Validator->reset()
+                ->addValidators([
+                ])->addRules([
+                    'token'               => 'token:AdminPermissions',
+                    'p_message_bbcode'    => 'required|integer|in:0,1',
+                    'p_message_img_tag'   => 'required|integer|in:0,1',
+                    'p_message_all_caps'  => 'required|integer|in:0,1',
+                    'p_subject_all_caps'  => 'required|integer|in:0,1',
+                    'p_force_guest_email' => 'required|integer|in:0,1',
+                    'p_sig_bbcode'        => 'required|integer|in:0,1',
+                    'p_sig_img_tag'       => 'required|integer|in:0,1',
+                    'p_sig_all_caps'      => 'required|integer|in:0,1',
+                    'p_sig_length'        => 'required|integer|min:0|max:16000',
+                    'p_sig_lines'         => 'required|integer|min:0|max:100',
+                ])->addAliases([
+                ])->addArguments([
+                ])->addMessages([
+                ]);
 
             $valid = $v->validation($_POST);
             $data  = $v->getData();

+ 37 - 34
app/Models/Pages/Auth.php

@@ -50,18 +50,19 @@ class Auth extends Page
 
         $v = null;
         if ('POST' === $method) {
-            $v = $this->c->Validator->addValidators([
-                'login_process' => [$this, 'vLoginProcess'],
-            ])->setRules([
-                'token'    => 'token:Login',
-                'redirect' => 'required|referer:Index',
-                'username' => 'required|string',
-                'password' => 'required|string|login_process',
-                'save'     => 'checkbox',
-            ])->setAliases([
-                'username' => 'Username',
-                'password' => 'Passphrase',
-            ]);
+            $v = $this->c->Validator->reset()
+                ->addValidators([
+                    'login_process' => [$this, 'vLoginProcess'],
+                ])->addRules([
+                    'token'    => 'token:Login',
+                    'redirect' => 'required|referer:Index',
+                    'username' => 'required|string',
+                    'password' => 'required|string|login_process',
+                    'save'     => 'checkbox',
+                ])->addAliases([
+                    'username' => 'Username',
+                    'password' => 'Passphrase',
+                ]);
     
             if ($v->validation($_POST)) {
                 return $this->c->Redirect->url($v->redirect)->message('Login redirect');
@@ -153,15 +154,16 @@ class Auth extends Page
 
         $v = null;
         if ('POST' === $method) {
-            $v = $this->c->Validator->addValidators([
-                'check_email' => [$this, 'vCheckEmail'],
-            ])->setRules([
-                'token' => 'token:Forget',
-                'email' => 'required|string:trim,lower|email|check_email',
-            ])->setAliases([
-            ])->setMessages([
-                'email.email' => 'Invalid email',
-            ]);
+            $v = $this->c->Validator->reset()
+                ->addValidators([
+                    'check_email' => [$this, 'vCheckEmail'],
+                ])->addRules([
+                    'token' => 'token:Forget',
+                    'email' => 'required|string:trim,lower|email|check_email',
+                ])->addAliases([
+                ])->addMessages([
+                    'email.email' => 'Invalid email',
+                ]);
 
             if ($v->validation($_POST)) {
                 $key = 'p' . $this->c->Secury->randomPass(79);
@@ -260,19 +262,20 @@ class Auth extends Page
         $this->c->Lang->load('auth');
 
         if ('POST' === $method) {
-            $v = $this->c->Validator->setRules([
-                'token'     => 'token:ChangePassword',
-                'password'  => 'required|string|min:16|password',
-                'password2' => 'required|same:password',
-            ])->setAliases([
-                'password'  => 'New pass',
-                'password2' => 'Confirm new pass',
-            ])->setArguments([
-                'token' => $args,
-            ])->setMessages([
-                'password.password'  => 'Pass format',
-                'password2.same'     => 'Pass not match',
-            ]);
+            $v = $this->c->Validator->reset()
+                ->addRules([
+                    'token'     => 'token:ChangePassword',
+                    'password'  => 'required|string|min:16|password',
+                    'password2' => 'required|same:password',
+                ])->addAliases([
+                    'password'  => 'New pass',
+                    'password2' => 'Confirm new pass',
+                ])->addArguments([
+                    'token' => $args,
+                ])->addMessages([
+                    'password.password'  => 'Pass format',
+                    'password2.same'     => 'Pass not match',
+                ]);
     
             if ($v->validation($_POST)) {
                 $user->password        = password_hash($v->password, PASSWORD_DEFAULT);

+ 10 - 9
app/Models/Pages/Delete.php

@@ -30,15 +30,16 @@ class Delete extends Page
         $this->c->Lang->load('delete');
 
         if ($method === 'POST') {
-            $v = $this->c->Validator->setRules([
-                'token'   => 'token:DeletePost',
-                'confirm' => 'integer',
-                'delete'  => 'string',
-                'cancel'  => 'string',
-            ])->setAliases([
-            ])->setArguments([
-                'token' => $args,
-            ]);
+            $v = $this->c->Validator->reset()
+                ->addRules([
+                    'token'   => 'token:DeletePost',
+                    'confirm' => 'integer',
+                    'delete'  => 'string',
+                    'cancel'  => 'string',
+                ])->addAliases([
+                ])->addArguments([
+                    'token' => $args,
+                ]);
     
             if (! $v->validation($_POST) || null === $v->delete) {
                 return $this->c->Redirect->page('ViewPost', $args)->message('Cancel redirect');

+ 43 - 41
app/Models/Pages/Install.php

@@ -67,11 +67,12 @@ class Install extends Page
     {
         $changeLang = false;
         if ('POST' === $method) {
-            $v = $this->c->Validator->setRules([
-                'token'       => 'token:Install',
-                'installlang' => 'required|string:trim',
-                'changelang'  => 'string',
-            ]);
+            $v = $this->c->Validator->reset()
+                ->addRules([
+                    'token'       => 'token:Install',
+                    'installlang' => 'required|string:trim',
+                    'changelang'  => 'string',
+                ]);
 
             if ($v->validation($_POST)) {
                 $this->c->user->language = $v->installlang;
@@ -126,42 +127,43 @@ class Install extends Page
         }
 
         if ('POST' === $method && ! $changeLang && empty($this->a['fIswev']['e'])) {
-            $v = $this->c->Validator->addValidators([
-                'check_prefix' => [$this, 'vCheckPrefix'],
-                'check_host'   => [$this, 'vCheckHost'],
-                'rtrim_url'    => [$this, 'vRtrimURL']
-            ])->setRules([
-                'dbtype'       => 'required|string:trim|in:' . implode(',', array_keys($this->dbTypes)),
-                'dbhost'       => 'required|string:trim|check_host',
-                'dbname'       => 'required|string:trim',
-                'dbuser'       => 'string:trim',
-                'dbpass'       => 'string:trim',
-                'dbprefix'     => 'string:trim|max:40|check_prefix',
-                'username'     => 'required|string:trim|min:2|max:25',
-                'password'     => 'required|string|min:16|password',
-                'email'        => 'required|string:trim,lower|max:80|email',
-                'title'        => 'required|string:trim|max:255',
-                'descr'        => 'string:trim|max:65000 bytes',
-                'baseurl'      => 'required|string:trim|rtrim_url',
-                'defaultlang'  => 'required|string:trim|in:' . implode(',', $this->c->Func->getLangs()),
-                'defaultstyle' => 'required|string:trim|in:' . implode(',', $this->c->Func->getStyles()),
-            ])->setAliases([
-                'dbtype'       => 'Database type',
-                'dbhost'       => 'Database server hostname',
-                'dbname'       => 'Database name',
-                'dbuser'       => 'Database username',
-                'dbpass'       => 'Database password',
-                'dbprefix'     => 'Table prefix',
-                'username'     => 'Administrator username',
-                'password'     => 'Administrator passphrase',
-                'title'        => 'Board title',
-                'descr'        => 'Board description',
-                'baseurl'      => 'Base URL',
-                'defaultlang'  => 'Default language',
-                'defaultstyle' => 'Default style',
-            ])->setMessages([
-                'email'        => 'Wrong email',
-            ]);
+            $v = $this->c->Validator->reset()
+                ->addValidators([
+                    'check_prefix' => [$this, 'vCheckPrefix'],
+                    'check_host'   => [$this, 'vCheckHost'],
+                    'rtrim_url'    => [$this, 'vRtrimURL']
+                ])->addRules([
+                    'dbtype'       => 'required|string:trim|in:' . implode(',', array_keys($this->dbTypes)),
+                    'dbhost'       => 'required|string:trim|check_host',
+                    'dbname'       => 'required|string:trim',
+                    'dbuser'       => 'string:trim',
+                    'dbpass'       => 'string:trim',
+                    'dbprefix'     => 'string:trim|max:40|check_prefix',
+                    'username'     => 'required|string:trim|min:2|max:25',
+                    'password'     => 'required|string|min:16|password',
+                    'email'        => 'required|string:trim,lower|max:80|email',
+                    'title'        => 'required|string:trim|max:255',
+                    'descr'        => 'string:trim|max:65000 bytes',
+                    'baseurl'      => 'required|string:trim|rtrim_url',
+                    'defaultlang'  => 'required|string:trim|in:' . implode(',', $this->c->Func->getLangs()),
+                    'defaultstyle' => 'required|string:trim|in:' . implode(',', $this->c->Func->getStyles()),
+                ])->addAliases([
+                    'dbtype'       => 'Database type',
+                    'dbhost'       => 'Database server hostname',
+                    'dbname'       => 'Database name',
+                    'dbuser'       => 'Database username',
+                    'dbpass'       => 'Database password',
+                    'dbprefix'     => 'Table prefix',
+                    'username'     => 'Administrator username',
+                    'password'     => 'Administrator passphrase',
+                    'title'        => 'Board title',
+                    'descr'        => 'Board description',
+                    'baseurl'      => 'Base URL',
+                    'defaultlang'  => 'Default language',
+                    'defaultstyle' => 'Default style',
+                ])->addMessages([
+                    'email'        => 'Wrong email',
+                ]);
     
             if ($v->validation($_POST)) {
                 return $this->installEnd($v);

+ 32 - 28
app/Models/Pages/PostValidatorTrait.php

@@ -152,7 +152,7 @@ trait PostValidatorTrait
     protected function messageValidator(Model $model, $marker, array $args, $editPost = false, $editSubject = false)
     {
         if ($this->c->user->isGuest) {
-            $ruleEmail    = ($this->c->config->p_force_guest_email == '1' ? 'required|' : '') . 'string:trim,lower|email|check_email';
+            $ruleEmail    = ('1' == $this->c->config->p_force_guest_email ? 'required|' : '') . 'string:trim,lower|email|check_email';
             $ruleUsername = 'required|string:trim,spaces|min:2|max:25|login|check_username';
         } else {
             $ruleEmail    = 'absent';
@@ -198,33 +198,37 @@ trait PostValidatorTrait
             $ruleHideSmilies = 'absent';
         }
             
-        $v = $this->c->Validator->addValidators([
-            'check_email'    => [$this, 'vCheckEmail'],
-            'check_username' => [$this, 'vCheckUsername'],
-            'check_subject'  => [$this, 'vCheckSubject'],
-            'check_message'  => [$this, 'vCheckMessage'],
-            'check_timeout'  => [$this, 'vCheckTimeout'],
-        ])->setRules([
-            'token'        => 'token:' . $marker,
-            'email'        => [$ruleEmail, \ForkBB\__('Email')],
-            'username'     => [$ruleUsername, \ForkBB\__('Username')],
-            'subject'      => [$ruleSubject, \ForkBB\__('Subject')],
-            'stick_topic'  => $ruleStickTopic,
-            'stick_fp'     => $ruleStickFP,
-            'merge_post'   => $ruleMergePost,
-            'hide_smilies' => $ruleHideSmilies,
-            'edit_post'    => $ruleEditPost,
-            'preview'      => 'string',
-            'submit'       => 'string|check_timeout',
-            'message'      => 'required|string:trim|max:' . $this->c->MAX_POST_SIZE . '|check_message',
-        ])->setAliases([
-        ])->setArguments([
-            'token'                 => $args,
-            'subject.check_subject' => $executive,
-            'message.check_message' => $executive,
-        ])->setMessages([
-            'username.login' => \ForkBB\__('Login format'),
-        ]);
+        $v = $this->c->Validator->reset()
+            ->addValidators([
+                'check_email'    => [$this, 'vCheckEmail'],
+                'check_username' => [$this, 'vCheckUsername'],
+                'check_subject'  => [$this, 'vCheckSubject'],
+                'check_message'  => [$this, 'vCheckMessage'],
+                'check_timeout'  => [$this, 'vCheckTimeout'],
+            ])->addRules([
+                'token'        => 'token:' . $marker,
+                'email'        => $ruleEmail,
+                'username'     => $ruleUsername,
+                'subject'      => $ruleSubject,
+                'stick_topic'  => $ruleStickTopic,
+                'stick_fp'     => $ruleStickFP,
+                'merge_post'   => $ruleMergePost,
+                'hide_smilies' => $ruleHideSmilies,
+                'edit_post'    => $ruleEditPost,
+                'preview'      => 'string',
+                'submit'       => 'string|check_timeout',
+                'message'      => 'required|string:trim|max:' . $this->c->MAX_POST_SIZE . '|check_message',
+            ])->addAliases([
+                'email'        => 'Email',
+                'username'     => 'Username',
+                'subject'      => 'Subject',
+            ])->addArguments([
+                'token'                 => $args,
+                'subject.check_subject' => $executive,
+                'message.check_message' => $executive,
+            ])->addMessages([
+                'username.login' => 'Login format',
+            ]);
 
         return $v;
     }

+ 33 - 32
app/Models/Pages/Register.php

@@ -11,33 +11,34 @@ class Register extends Page
 {
     /**
      * Регистрация
-     * 
+     *
      * @return Page
      */
     public function reg()
     {
         $this->c->Lang->load('register');
 
-        $v = $this->c->Validator->addValidators([
-            'check_email'    => [$this, 'vCheckEmail'],
-            'check_username' => [$this, 'vCheckUsername'],
-        ])->setRules([
-            'token'    => 'token:RegisterForm',
-            'agree'    => 'required|token:Register',
-            'on'       => 'integer',
-            'email'    => 'required_with:on|string:trim,lower|email|check_email',
-            'username' => 'required_with:on|string:trim,spaces|min:2|max:25|login|check_username',
-            'password' => 'required_with:on|string|min:16|password',
-        ])->setAliases([
-            'email'    => 'Email',
-            'username' => 'Username',
-            'password' => 'Passphrase',
-        ])->setMessages([
-            'agree.required'    => ['cancel', 'cancel'],
-            'agree.token'       => [\ForkBB\__('Bad agree', $this->c->Router->link('Register')), 'w'],
-            'password.password' => 'Pass format',
-            'username.login'    => 'Login format',
-        ]);
+        $v = $this->c->Validator->reset()
+            ->addValidators([
+                'check_email'    => [$this, 'vCheckEmail'],
+                'check_username' => [$this, 'vCheckUsername'],
+            ])->addRules([
+                'token'    => 'token:RegisterForm',
+                'agree'    => 'required|token:Register',
+                'on'       => 'integer',
+                'email'    => 'required_with:on|string:trim,lower|email|check_email',
+                'username' => 'required_with:on|string:trim,spaces|min:2|max:25|login|check_username',
+                'password' => 'required_with:on|string|min:16|password',
+            ])->addAliases([
+                'email'    => 'Email',
+                'username' => 'Username',
+                'password' => 'Passphrase',
+            ])->addMessages([
+                'agree.required'    => ['cancel', 'cancel'],
+                'agree.token'       => [\ForkBB\__('Bad agree', $this->c->Router->link('Register')), 'w'],
+                'password.password' => 'Pass format',
+                'username.login'    => 'Login format',
+            ]);
 
         // завершение регистрации
         if ($v->validation($_POST) && 1 === $v->on) {
@@ -68,10 +69,10 @@ class Register extends Page
 
     /**
      * Дополнительная проверка email
-     * 
+     *
      * @param Validator $v
      * @param string $email
-     * 
+     *
      * @return string
      */
     public function vCheckEmail(Validator $v, $email)
@@ -88,10 +89,10 @@ class Register extends Page
 
     /**
      * Дополнительная проверка username
-     * 
+     *
      * @param Validator $v
      * @param string $username
-     * 
+     *
      * @return string
      */
     public function vCheckUsername(Validator $v, $username)
@@ -116,9 +117,9 @@ class Register extends Page
 
     /**
      * Завершение регистрации
-     * 
+     *
      * @param Validator $v
-     * 
+     *
      * @return Page
      */
     protected function regEnd(Validator $v)
@@ -132,7 +133,7 @@ class Register extends Page
         }
 
         $user = $this->c->users->create();
-        
+
         $user->username        = $v->username;
         $user->password        = password_hash($v->password, PASSWORD_DEFAULT);
         $user->group_id        = $groupId;
@@ -147,7 +148,7 @@ class Register extends Page
         $user->style           = $user->style;    //????
         $user->registered      = time();
         $user->registration_ip = $this->c->user->ip;
-            
+
         $newUserId = $this->c->users->insert($user);
 
         // обновление статистики по пользователям
@@ -225,9 +226,9 @@ class Register extends Page
 
     /**
      * Активация аккаунта
-     * 
+     *
      * @param array $args
-     * 
+     *
      * @return Page
      */
     public function activate(array $args)
@@ -235,7 +236,7 @@ class Register extends Page
         if (! hash_equals($args['hash'], $this->c->Secury->hash($args['id'] . $args['key']))
             || ! ($user = $this->c->users->load($args['id'])) instanceof User
             || empty($user->activate_string)
-            || 'w' !== $user->activate_string{0} 
+            || 'w' !== $user->activate_string{0}
             || ! hash_equals($user->activate_string, $args['key'])
         ) {
             return $this->c->Message->message('Bad request', false);

+ 1 - 1
app/Models/User/Load.php

@@ -40,7 +40,7 @@ class Load extends Action
 
         $data = $this->c->DB->query($sql, $vars)->fetchAll();
 
-        // число найденных пользователей отлично от одного
+        // число найденных пользователей отлично от одного или гость
         $count = count($data);
         if (1 !== $count || 1 === $data[0]['id']) {
             return $count;