Example #1
0
 function work(Request $request)
 {
     $user = Auth::get_user();
     if ($user->is_exists()) {
         if (!$user->confirm->is_draft()) {
             //новый и еще неактивный
             $this->_result = 5;
         } else {
             //Есть такой активный пользователь
             $this->_result = 4;
         }
         //пользователя еще нет
     } else {
         if ($request['REQUEST']['form']) {
             //Присвоим email новому пользователю и проверим уникальность
             $user->email->value($request['REQUEST']['email']);
             if ($request['REQUEST']['call'] == 'check') {
                 if (!$user->check()) {
                     if ($user->errors()->email->value->duplicate) {
                         $this->_result = 2;
                     } else {
                         //Другая ошибка
                         $this->_result = 3;
                     }
                 } else {
                     //все корректно
                     $this->_result = 1;
                 }
                 $session['result'] = $this->_result;
                 Session::set('form', array($this->uri() . $this->getToken() => $session));
                 setcookie('token', $this->getToken(), 0, '/');
                 return $session;
             } else {
                 if (isset($request['COOKIE']['token']) && Session::is_exist('form')) {
                     $form = Session::get('form');
                     if (isset($form[$this->uri() . $request['COOKIE']['token']])) {
                         $form = $form[$this->uri() . $request['COOKIE']['token']];
                         Session::remove('form');
                     }
                     if (isset($form['result'])) {
                         $this->_result = $form['result'];
                     }
                 }
                 if ($this->_result == 1 && isset($user)) {
                     $user->password->value($request['REQUEST']['password']);
                     $user->title->value($request['REQUEST']['email']);
                     $user->confirm->proto("/vendor/boolive/basic/string");
                     $user->confirm->value(uniqid('', true));
                     Data::write($user);
                     //Теперь у нас есть такой пользователь
                     $this->_result = 5;
                     $this->mailSender->sendMail($to = $user->email->value(), $subject = 'Подтвержление регистрации на ' . $this->mailSender->domain->value(), $message = 'Здравствйте, вы зарегистрировались на ' . $this->mailSender->domain->value() . ' , для подтверждения актуальности электронного адреса, перейдите, пожалуйста по <a href="' . $this->mailSender->domain->value() . '/profile?confirm=' . $user->confirm->value() . '">ссылке</a>');
                     $request->redirect('profile?confirm=0');
                 }
             }
         }
     }
     return parent::work($request);
 }
Example #2
0
 function work(Request $request)
 {
     if ($request['REQUEST']['form']) {
         $session = array();
         try {
             self::$config = Config::read('auth');
             $result = Data::find(array('from' => self::$config['users-list'], 'select' => 'children', 'depth' => 'max', 'where' => array(['child', 'email', array('value', '=', $request['REQUEST']['email'])], ['child', 'password', array('value', '=', $request['REQUEST']['password'])]), 'key' => false, 'limit' => array(0, 1), 'comment' => 'sign-in user by email and password'), false);
             if (!empty($result)) {
                 $user = $result[0];
                 Auth::set_user($user);
                 if ($request['REQUEST']['remember-me']) {
                     Auth::set_user($user, 1234565);
                 }
                 $request->redirect(self::$config['redirect']);
             } else {
                 $this->_result = 0;
             }
         } catch (\Exception $error) {
             $this->_result = 0;
         }
         $session['result'] = $this->_result;
         Session::set('form', array($this->uri() . $this->getToken() => $session));
         setcookie('token', $this->getToken(), 0, '/');
         return $session;
     } else {
         // Отображение формы
         $v = array();
         if (isset($request['COOKIE']['token']) && Session::is_exist('form')) {
             $form = Session::get('form');
             if (isset($form[$this->uri() . $request['COOKIE']['token']])) {
                 $form = $form[$this->uri() . $request['COOKIE']['token']];
                 Session::remove('form');
             }
             if (isset($form['result'])) {
                 $this->_result = $form['result'];
             }
         }
         $this->res->start($request);
         return $this->show($v, $request);
     }
 }
Example #3
0
 function work(Request $request)
 {
     $this->_base_uri = $request['REQUEST']['object']->uri();
     $request->mix(['REQUEST' => ['base_uri' => $this->_base_uri]]);
     if ($request['REQUEST']['form'] !== false) {
         // Обработка формы
         $session = array();
         try {
             // Вызов полей для свойств объекта
             $request->mix(['REQUEST' => ['call' => 'check']]);
             $list = $this->getList($request);
             if (is_array($list)) {
                 $input = $request->getInput();
                 $views = $this->linked()->views->linked();
                 foreach ($list as $obj) {
                     $name = preg_replace('/' . preg_quote($this->_base_uri . '/', '/') . '/u', '', $obj->uri());
                     $obj_input = [];
                     if (isset($input['REQUEST'][$name])) {
                         $obj_input['REQUEST']['value'] = $input['REQUEST'][$name];
                     }
                     if (isset($input['FILES'][$name])) {
                         $obj_input['FILES']['value'] = $input['FILES'][$name];
                     }
                     $obj_input['REQUEST']['object'] = $obj;
                     $views->start($request->mix($obj_input));
                 }
             }
             if (!$request['REQUEST']['object']->errors()->isExist()) {
                 // Выполнение действия
                 $this->process($request);
                 $this->_result = self::FORM_RESULT_OK;
                 if (!($redirect = $this->getCommands('redirect'))) {
                     $redirect = $this->redirect->inner();
                     if (!$redirect->is_draft() && $redirect->value() != '') {
                         $request->redirect(Request::url($redirect->value()));
                     }
                 }
             } else {
                 $this->_result = self::FORM_RESULT_ERROR;
             }
         } catch (\Exception $error) {
             $this->_result = self::FORM_RESULT_ERROR;
         }
         $session['result'] = $this->_result;
         if ($this->_result == self::FORM_RESULT_ERROR) {
             $session['object'] = $request['REQUEST']['object']->toArray();
             // @todo Для ajax запросов нужна развернутая информация об ошибках для каждого поля
             $session['message'] = 'Ошибки';
         } else {
             if ($this->_result == self::FORM_RESULT_ERROR) {
                 $session['message'] = 'Успех';
             }
         }
         // @todo Для ajax запросов в сессию сохранять нет смысла
         Session::set('form', array($this->uri() . $this->getToken() => $session));
         setcookie('token', $this->getToken(), 0, '/');
         return $session;
     } else {
         // Отображение формы
         $v = array();
         if (isset($request['COOKIE']['token']) && Session::is_exist('form')) {
             $form = Session::get('form');
             if (isset($form[$this->uri() . $request['COOKIE']['token']])) {
                 $form = $form[$this->uri() . $request['COOKIE']['token']];
                 Session::remove('form');
             }
             if (isset($form['object'])) {
                 $request['REQUEST']['object'] = Entity::fromArray($form['object']);
             }
             if (isset($form['result'])) {
                 $this->_result = $form['result'];
             }
         }
         $this->res->start($request);
         return $this->show($v, $request);
     }
 }