예제 #1
0
 public function createUser(RegistrationForm $form)
 {
     $transaction = Yii::app()->getDb()->beginTransaction();
     try {
         $user = new User();
         $password = rand(1000000, 9999999);
         $Company = new Company();
         if ($form->organization_name) {
             $Company->name = $form->organization_name;
         }
         $Company->create = new CDbExpression('NOW()');
         $Company->save();
         $user->email = $form->email;
         $user->contact_phone = $form->phone;
         $user->contact_phone_prefix = $form->prefphone;
         $user->company_id = $Company->id;
         $user->status = User::STATUS_ACTIVE;
         //Сделать автопроверку выписки
         $user->setAttribute('hash', $this->hasher->hashPassword($password));
         if ($user->save() && ($token = $this->tokenStorage->createAccountActivationToken($user)) !== false) {
             $user->sendCRMRegistration();
             User::savePost($user);
             \Yii::import('application.modules.rbac.models.*');
             $model = new AuthAssignment();
             //$model->setAttributes(['userid' => $user->id,'itemname' => 'standart']); //Назаначаем роль владельца компании без инн
             //                $model->setAttributes(['userid' => $user->id,'itemname' => 'own_wo_inn']); //Назаначаем роль владельца компании без инн
             $model->setAttributes(['userid' => $user->id, 'itemname' => 'owner']);
             //Назаначаем роль владельца компании без инн
             if (!$model->save()) {
                 throw new CDbException(Yii::t('UserModule.rbac', 'There is an error occurred when saving data!'));
             }
             Yii::app()->eventManager->fire(UserEvents::SUCCESS_REGISTRATION, new UserRegistrationEvent($form, $user, $token, $password));
             Yii::log(Yii::t('UserModule.user', 'Account {nick_name} was created', ['{nick_name}' => $user->email]), CLogger::LEVEL_INFO, UserModule::$logCategory);
             $transaction->commit();
             $LoginForm = new LoginForm();
             $LoginForm->email = $user->email;
             $LoginForm->password = $password;
             Yii::app()->authenticationManager->login($LoginForm, Yii::app()->getUser(), Yii::app()->getRequest());
             return $user;
         }
         throw new CException(Yii::t('UserModule.user', 'Error creating account!'));
     } catch (Exception $e) {
         Yii::log(Yii::t('UserModule.user', 'Error {error} account creating!', ['{error}' => $e->__toString()]), CLogger::LEVEL_INFO, UserModule::$logCategory);
         $transaction->rollback();
         Yii::app()->eventManager->fire(UserEvents::FAILURE_REGISTRATION, new UserRegistrationEvent($form, $user));
         return false;
     }
 }
예제 #2
0
 public function actionAssign($id = null)
 {
     $user = User::model()->findByPk((int) $id);
     if (!$user) {
         $this->redirect(['userList']);
     }
     if (Yii::app()->getRequest()->isPostRequest) {
         /* получение названий ролей, которые есть в базе */
         $existingRoles = Yii::app()->db->createCommand('SELECT name FROM {{user_user_auth_item}}')->queryColumn();
         $transaction = Yii::app()->db->beginTransaction();
         try {
             AuthAssignment::model()->deleteAll('userid = :userid', [':userid' => (int) $user->id]);
             // убираем дубликаты и несуществующие роли
             $roles = array_intersect(array_unique((array) Yii::app()->getRequest()->getPost('AuthItem')), $existingRoles);
             foreach ($roles as $op) {
                 $model = new AuthAssignment();
                 $model->setAttributes(['userid' => $user->id, 'itemname' => $op]);
                 if (!$model->save()) {
                     throw new CDbException(Yii::t('RbacModule.rbac', 'There is an error occurred when saving data!'));
                 }
             }
             $transaction->commit();
             Yii::app()->getUser()->setFlash(yupe\widgets\YFlashMessages::SUCCESS_MESSAGE, Yii::t('RbacModule.rbac', 'Data was updated!'));
             /*сброс кэша меню*/
             Yii::app()->getCache()->delete('YAdminPanel::' . $id . '::' . Yii::app()->getLanguage());
             /*сброс кеша прав*/
             Yii::app()->getCache()->delete(Yii::app()->getUser()->rbacCacheNameSpace . $id);
             $this->redirect(['assign', 'id' => $user->id]);
         } catch (Exception $e) {
             Yii::app()->getUser()->setFlash(yupe\widgets\YFlashMessages::ERROR_MESSAGE, $e->getMessage());
             $transaction->rollback();
         }
     }
     $rbacTree = new RbacTree($user);
     $tree = $rbacTree->getTreeRoles();
     $this->render('assign', ['tree' => $tree, 'model' => $user]);
 }
예제 #3
0
 public function actionAssign($id)
 {
     $user = Users::model()->findByPk((int) $id);
     if (!$user) {
         throw new CHttpException(404);
     }
     $items = AuthItem::model()->findAll(array('order' => 'type DESC'));
     $itemsData = CHtml::listData(AuthItemChild::model()->findAll(), 'child', 'parent');
     if (Yii::app()->request->isPostRequest && count($_POST)) {
         $itemsArray = CHtml::listData($items, 'name', 'description');
         $transaction = Yii::app()->db->beginTransaction();
         try {
             if (count($_POST)) {
                 AuthAssignment::model()->deleteAll('userid = :userid', array(':userid' => (int) $user->id));
                 foreach ($_POST as $op => $val) {
                     if (!isset($itemsArray[$op])) {
                         continue;
                     }
                     $model = new AuthAssignment();
                     $model->setAttributes(array('userid' => $user->id, 'itemname' => $op));
                     if (!$model->save()) {
                         throw new CDbException('При сохранении произошла ошибка!');
                     }
                 }
             }
             $transaction->commit();
             Yii::app()->user->setFlash('notice', 'Данные обновлены!');
             $this->redirect(array('assign', 'id' => $user->id));
         } catch (Exception $e) {
             Yii::app()->user->setFlash('error', $e->getMessage());
             $transaction->rollback();
         }
     }
     //построить дерево
     $tree = array();
     foreach ($items as $item) {
         if ($item->type === AuthItem::TYPE_ROLE && !isset($tree[$item->name])) {
             $tree[$item->name] = array('text' => CHtml::checkBox($item->name, Yii::app()->user->checkAccess($item->name, $user->id), array('name' => 'operations', 'class' => 'root')) . $item->description . " ({$item->getType()})");
         }
         if ($item->type === AuthItem::TYPE_TASK) {
             // проверить есть ли для нее родитель
             if (isset($itemsData[$item->name]) && $itemsData[$item->name]) {
                 $tree[$itemsData[$item->name]]['children'][$item->name] = array('text' => CHtml::checkBox($item->name, Yii::app()->user->checkAccess($item->name, $user->id), array('name' => 'operations', 'class' => 'root')) . $item->description . " ({$item->getType()})");
             } else {
                 $tree[$item->name] = array('text' => CHtml::checkBox($item->name, Yii::app()->user->checkAccess($item->name, $user->id), array('name' => 'operations')) . $item->description . " ({$item->getType()})");
             }
         }
         if ($item->type == AuthItem::TYPE_OPERATION) {
             if (isset($itemsData[$item->name]) && $itemsData[$item->name]) {
                 // задача по своей сути
                 $parent = $itemsData[$item->name];
                 if (isset($itemsData[$parent]) && $itemsData[$parent]) {
                     $tree[$itemsData[$parent]]['children'][$itemsData[$item->name]]['children'][$item->name] = array('text' => CHtml::checkBox($item->name, Yii::app()->user->checkAccess($item->name, $user->id), array('name' => 'operations')) . $item->description . " ({$item->getType()})");
                 } else {
                     $tree[$itemsData[$item->name]]['children'][$item->name] = array('text' => CHtml::checkBox($item->name, Yii::app()->user->checkAccess($item->name, $user->id), array('name' => 'operations')) . $item->description . " ({$item->getType()})");
                 }
             } else {
                 $tree[$item->name] = array('text' => CHtml::checkBox($item->name, Yii::app()->user->checkAccess($item->name, $user->id), array('name' => 'operations')) . $item->description . " ({$item->getType()})");
             }
         }
     }
     $this->render('assign', array('tree' => $tree, 'model' => $user));
 }
예제 #4
0
 /**
  *    Сохранение данных и отправка письма для подтверждение email
  */
 private function saveDataAndSendEmail($user, $form)
 {
     $transaction = Yii::app()->getDb()->beginTransaction();
     try {
         $password = rand(1000000, 9999999);
         $user->email = $form->email;
         $user->contact_phone = $form->phone;
         $user->contact_phone_prefix = $form->prefphone;
         $user->old_contact_phone = $form->oldphone;
         $user->create_time = date('Y-m-d H:i:s');
         $user->setAttribute('hash', Yii::app()->userManager->hasher->hashPassword($password));
         //if ($user->save() && ($token =  Yii::app()->userManager->tokenStorage->createAccountActivationToken($user)) !== false) {
         if ($user->save()) {
             $token = Yii::app()->userManager->tokenStorage->createAccountActivationToken($user);
             $user->sendCRMRegistration();
             User::savePost($user);
             \Yii::import('application.modules.rbac.models.*');
             $model = new AuthAssignment();
             $model->setAttributes(['userid' => $user->id, 'itemname' => 'owner']);
             //Назаначаем роль владельца компании
             if (!$model->save()) {
                 throw new CDbException(Yii::t('UserModule.rbac', 'There is an error occurred when saving data!'));
             }
             Yii::app()->eventManager->fire(UserEvents::SUCCESS_ACTIVATION, new UserActivationEvent($form, $user, $token, $password));
             Yii::log(Yii::t('UserModule.user', 'Guest Account {nick_name} was registred', ['{nick_name}' => $user->email]), CLogger::LEVEL_INFO, UserModule::$logCategory);
             $transaction->commit();
             $LoginForm = new LoginForm();
             $LoginForm->email = $user->email;
             $LoginForm->password = $password;
             Yii::app()->authenticationManager->login($LoginForm, Yii::app()->getUser(), Yii::app()->getRequest());
             return $user;
         }
         throw new CException(Yii::t('UserModule.user', 'Error registr account!'));
     } catch (Exception $e) {
         Yii::log(Yii::t('UserModule.user', 'Error {error} account registr!', ['{error}' => $e->__toString()]), CLogger::LEVEL_INFO, UserModule::$logCategory);
         $transaction->rollback();
         Yii::app()->eventManager->fire(UserEvents::FAILURE_ACTIVATION, new UserActivationEvent($form, $user));
         return false;
     }
 }
예제 #5
0
 public function actionAdd($id = 0)
 {
     $company_id = Yii::app()->getUser()->getProfile()->company_id;
     $criteria = new CDbCriteria();
     $criteria->addCondition(':company_id = t.company_id');
     $criteria->params = [':company_id' => $company_id];
     /* if(
        $id == 0 &&
        User::model()->count($criteria) > 1 &&
        !Yii::app()->user->checkAccess('premium')
        ) {
        throw new CHttpException(403,'Вы не можете добавлять больше 1 сотрудника');
        } */
     if (!empty($id)) {
         $User = User::model()->findByPk($id);
         if (!Yii::app()->user->checkAccess('admin') && (Yii::app()->getUser()->getProfile()->modules->head != UserModules::DIRECTOR_COMPANY || Yii::app()->user->getProfile()->company_id != $User->company_id)) {
             throw new CHttpException(403);
         }
     } else {
         if (!Yii::app()->user->checkAccess('admin') && (Yii::app()->getUser()->getProfile()->modules->head != UserModules::DIRECTOR_COMPANY || Yii::app()->getUser()->getProfile()->company->active == '0')) {
             throw new CHttpException(403);
         }
         $User = new User();
     }
     $User->scenario = 'profile';
     if (isset($_POST['save'])) {
         $data = $_POST['User'];
         if (isset($data['id']) && empty($data['hash'])) {
             unset($data['hash']);
         }
         $data['company_id'] = $company_id;
         $User->setAttributes($data, false);
         if ($User->isNewRecord) {
             $role = 'user';
         }
         if ($User->validate()) {
             if (!empty($data['hash'])) {
                 $User->hash = Yii::app()->userManager->hasher->hashPassword($data['hash']);
             }
             $User->status = User::STATUS_ACTIVE;
             if ($User->save()) {
                 //если пользователь зарегистрирован в CRM обновляем его данные
                 if (isset($User->crm_user_id)) {
                     User::sendCRM($User);
                 }
                 $new_user = $User::getUserByEmail($User->email);
                 if (empty($new_user->id)) {
                     throw new CHttpException(402, "User_id Is EMPTY!!!  user={$new_user->email} id={$new_user->id}");
                 }
                 $password = rand(1000000, 9999999);
                 $token = Yii::app()->userManager->tokenStorage->createAccountActivationToken($new_user);
                 if (!$token) {
                     throw new CHttpException(402, "Token Is EMPTY!!!  password={$password} user={$User->email} id={$User->id}");
                 }
                 $form = new ActivationForm('default');
                 Yii::app()->eventManager->fire(UserEvents::SUCCESS_ACTIVATION, new UserActivationEvent($form, $new_user, $token, $password));
             }
             if (isset($role)) {
                 $User = User::model()->findByAttributes(['email' => $User->email]);
                 $model = new AuthAssignment();
                 $model->setAttributes(['userid' => $User->id, 'itemname' => $role]);
                 //Назаначаем роль пользователя
                 if (!$model->save()) {
                     throw new CDbException(Yii::t('CabinetModule.staff', print_r($model->errors, 1)));
                 }
                 User::savePostUser($User);
             }
             $this->redirect('/cabinet/staff/list/');
         }
     }
     $this->render('add', ['User' => $User]);
 }