/** * 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'))); }