Example #1
0
 /**
  * @param array $fields
  * @param null|array $old_fields
  * @throws \InvalidArgumentException
  * @return bool
  */
 private function validate(array $fields, $old_fields = null)
 {
     $validator = new LIVR(['login' => ['required', 'unique_login'], 'password' => 'hash_password', 'credentials' => 'required', 'remember_hash' => 'trim']);
     if (is_array($old_fields)) {
         $is_login_changed = $old_fields['login'] != $fields['login'];
         $validator->registerRules(['unique_login' => function () use($is_login_changed) {
             return function ($value) use($is_login_changed) {
                 if ($is_login_changed && !empty($this->adapter->select()->where(['login' => ['=', $value]])->execute()->get_result())) {
                     return 'LOGIN_EXISTS';
                 }
                 return null;
             };
         }]);
     } else {
         $validator->registerRules(['unique_login' => function () {
             return function ($value) {
                 $user = $this->adapter->select()->where(['login' => ['=', $value]])->execute()->get_result();
                 if ($user) {
                     return 'LOGIN_EXISTS';
                 }
                 return null;
             };
         }]);
     }
     $validator->registerRules(['hash_password' => function () use($fields) {
         return function ($value, $undef, &$output_arr) use($fields) {
             if (trim($value)) {
                 $output_arr = password_hash($value, PASSWORD_BCRYPT);
                 return;
             }
             return null;
         };
     }]);
     /**
      * @var $ext \User
      */
     $ext = Application::get_class(\User::class);
     $lang_vars = new LanguageFile('mapper' . DS . 'usermapper.json', $ext->get_lang_path());
     $result = $validator->validate($fields);
     !$result && ($this->validation_errors = $validator->getErrors($lang_vars['errors']));
     return $result;
 }