Exemplo n.º 1
0
 /**
  * Création d'un utilisateur par l'administrateur.
  * Cette action ne renseigne que la partie User. La partie Profile n'est pas créé.
  * @todo Créer un Profile par défaut pour l'utilisateur créé ici ?
  */
 public function actionCreate()
 {
     $model = new User();
     $this->performAjaxValidation($model);
     if (isset($_POST['User'])) {
         /** @var myWebUser $webUser */
         $webUser = Yii::app()->user;
         $model->attributes = $_POST['User'];
         /** @var UserModule $module */
         $module = Yii::app()->controller->module;
         $model->activkey = $module->encrypting(microtime() . $model->password);
         if ($model->validate()) {
             $model->password = $module->encrypting($model->password);
             $transaction = Yii::app()->db->beginTransaction();
             if (!$model->save()) {
                 $transaction->rollback();
                 $msg = array("Erreur sur \$model->save()", $model);
                 Yii::log(h::_($msg, __FILE__, __LINE__, __METHOD__), CLogger::LEVEL_ERROR);
                 $webUser->setFlash('error', Yii::t('UserModule.user', 'There are errors. Please check the form'));
             } else {
                 // On crée un profil par défaut.
                 $profile = UserModuleFactory::profile();
                 $attributes = array('user_id' => $model->id, 'firstname' => '-', 'lastname' => $model->username, 'status' => 1);
                 $profile->setAttributes($attributes, false);
                 if (!$profile->save()) {
                     $transaction->rollback();
                     $msg = array("Erreur sur \$profile->save()", $profile);
                     Yii::log(h::_($msg, __FILE__, __LINE__, __METHOD__), CLogger::LEVEL_ERROR);
                     $webUser->setFlash('error', Yii::t('UserModule.msg', 'Unable to create a profile for this user'));
                 } else {
                     $transaction->commit();
                     $webUser->setFlash('success', Yii::t('UserModule.user', 'User saved'));
                     if (isset($_POST['backToList'])) {
                         // On a cliqué le bouton 'revenir à la liste' et le formulaire a bien été traité
                         $this->redirect(array('admin'));
                     }
                 }
             }
         }
     }
     $this->render('create', array('model' => $model));
 }
 /**
  * Affichage et traitement du formulaire d'inscription
  */
 public function actionRegistration()
 {
     $form = new RegistrationForm();
     $profile = UserModuleFactory::profile();
     $profile->regMode = true;
     // ajax validator
     if (isset($_POST['ajax']) && $_POST['ajax'] === 'registration-form') {
         echo UActiveForm::validate(array($form, $profile));
         Yii::app()->end();
     }
     /** @var UserModule $userModule */
     $userModule = Yii::app()->controller->module;
     if (Yii::app()->user->id) {
         // Utilisateur déjà identifié : on le redirige sur sa page de profil
         $this->redirect($userModule->profileUrl);
     }
     if (isset($_POST['RegistrationForm'])) {
         // Création d'un nouvel utilisateur
         $form->attributes = $_POST['RegistrationForm'];
         if (!$form->validate()) {
             Yii::app()->user->setFlash('error', UserModule::t("Unable to validate user data"));
         } else {
             $profile->attributes = $_POST[get_class($profile)];
             if (!$profile->validate()) {
                 Yii::app()->user->setFlash('error', UserModule::t("Unable to validate profile data"));
             } else {
                 $sourcePassword = $form->password;
                 $form->activkey = UserModule::encrypting(microtime() . $form->password);
                 $form->password = UserModule::encrypting($form->password);
                 $form->verifyPassword = UserModule::encrypting($form->verifyPassword);
                 $form->superuser = 0;
                 $form->status = $userModule->activeAfterRegister ? User::STATUS_ACTIVE : User::STATUS_INACTIVE;
                 $transaction = Yii::app()->db->beginTransaction();
                 if ($ok = $form->save(false)) {
                     $profile->user_id = $form->id;
                     if ($ok = $profile->save()) {
                         // On envoie le mail de confirmation
                         if (!$this->notifyRegistration($form)) {
                             Yii::app()->user->setFlash('error', UserModule::t("The confirmation mail has not been sent. Please contact the administrator"));
                         }
                         // Connexion automatique du nouvel inscrit, selon la configuration
                         $autoConnect = ($userModule->loginNotActiv || $userModule->activeAfterRegister && $userModule->sendActivationMail == false) && $userModule->autoLogin;
                         if ($autoConnect) {
                             // Connexion automatique
                             $identity = new user\components\UserIdentity($form->username, $sourcePassword);
                             $identity->authenticate();
                             Yii::app()->user->login($identity, 0);
                             $this->redirect($userModule->returnUrl);
                         } else {
                             if (!$userModule->activeAfterRegister && !$userModule->sendActivationMail) {
                                 // Pas d'activation automatique ni de mail : il faut passer par l'admin pour activer le compte
                                 Yii::app()->user->setFlash('success', Yii::t("UserModule.msg", "Thank you for your registration. Please contact the administrator to activate your account"));
                             } elseif ($userModule->activeAfterRegister && $userModule->sendActivationMail == false) {
                                 // Activation au compte, pas de mail de confirmation : on peut se connecter tout de suite
                                 Yii::app()->user->setFlash('success', Yii::t("UserModule.msg", "Thank you for your registration. You can now {{login}}.", array('{{login}}' => CHtml::link(UserModule::t('login'), $userModule->loginUrl))));
                             } elseif ($userModule->loginNotActiv) {
                                 //
                                 Yii::app()->user->setFlash('success', Yii::t("UserModule.msg", "Thank you for your registration. Please check your email or login."));
                             } else {
                                 // par défaut : pas d'activation automatique, il faut répondre au mail de confirmation
                                 Yii::app()->user->setFlash('success', Yii::t("UserModule.msg", "Thank you for your registration. Please check your email."));
                             }
                         }
                     } else {
                         // if ($ok = $profile->save())
                         $msg = array("Erreur sur \$profile->save()", $profile);
                         Yii::log(h::_($msg, __FILE__, __LINE__, __METHOD__), CLogger::LEVEL_ERROR);
                         Yii::app()->user->setFlash('error', Yii::t('msg', 'There are errors. Please check the form'));
                     }
                 } else {
                     // if ($ok = $form->save(false))
                     $msg = array("Erreur sur \$form->save()", $form);
                     Yii::log(h::_($msg, __FILE__, __LINE__, __METHOD__), CLogger::LEVEL_ERROR);
                     Yii::app()->user->setFlash('error', UserModule::t("Registration failed. Please contact the administrator"));
                 }
                 if ($ok) {
                     // Inscription validée, on redirige en page d'accueil
                     $transaction->commit();
                     $this->redirect('/');
                 } else {
                     $transaction->rollback();
                     $form->password = $sourcePassword;
                     $form->verifyPassword = $sourcePassword;
                     $this->refresh();
                 }
             }
         }
     }
     // Inscription en erreur, on ré-affiche le formulaire
     $this->render('/user/registration', array('model' => $form, 'profile' => $profile, 'page' => $this->getPage('inscription')));
 }