layout = '/layouts/mensajes'; } public function filters() { return array('accessControl'); } public function accessRules() { return array( array('allow', 'actions' => array('registrar', 'activar'), 'users' => array('*') ), array('allow', 'users' => array('@') ), array('deny'), ); } /** * Realiza el registro de un usuario a partir de los datos introducidos * en el formulario de la página de entrada. * También envía un email al usuario para que confirme su cuenta. */ public function actionRegistrar() { $formulario = new FormularioRegistro; $resultado = array(); // if it is ajax validation request if (isset($_POST['ajax']) && $_POST['ajax'] === 'registro-form') { $formulario->email = $_POST['FormularioRegistro_email']; $formulario->password = $_POST['FormularioRegistro_password']; $formulario->password2 = $_POST['FormularioRegistro_password2']; if (!$formulario->validate()) { foreach ($formulario->getErrors() as $campo => $error) { $resultado[$campo] = $error; } echo function_exists('json_encode') ? json_encode($resultado) : CJSON::encode($resultado); Yii::app()->end(); } $nuevo_usuario = new Usuario('registrar'); $nuevo_usuario->email = $formulario->email; $nuevo_usuario->password = $nuevo_usuario->encrypt($formulario->password); $nuevo_usuario->estado = Usuario::ESTADO_NOACTIVO; $nuevo_usuario->clave_seguridad = $nuevo_usuario->encrypt(microtime() . $nuevo_usuario->password); if (!$nuevo_usuario->save()) { foreach ($nuevo_usuario->getErrors() as $campo => $error) { $resultado[$campo] = $error; } echo function_exists('json_encode') ? json_encode($resultado) : CJSON::encode($resultado); Yii::app()->end(); } $nueva_empresa = new Empresa('registrar'); if (!$nueva_empresa->save()) { foreach ($nueva_empresa->getErrors() as $campo => $error) { $resultado[$campo] = $error; } echo function_exists('json_encode') ? json_encode($resultado) : CJSON::encode($resultado); Yii::app()->end(); } $nuevo_usuario->id_empresa = $nueva_empresa->id; if (!$nuevo_usuario->save()) { foreach ($nuevo_usuario->getErrors() as $campo => $error) { $resultado[$campo] = $error; } echo function_exists('json_encode') ? json_encode($resultado) : CJSON::encode($resultado); Yii::app()->end(); } $this->enviarMailRegistro($nuevo_usuario); $resultado['status'] = '200'; $resultado['texto'] = 'Su cuenta ha sido creada, en unos momentos recibirá un email con un enlace para completar su registro.'; echo function_exists('json_encode') ? json_encode($resultado) : CJSON::encode($resultado); Yii::app()->end(); } $this->redirect(Yii::app()->params['frontpage']); } /** * Activa la cuenta del usuario a partir de la URL de activación * que se le ha enviado a través de un email. */ public function actionActivar() { $email = $_GET['email']; $clave_seguridad = $_GET['key']; if ($email && $clave_seguridad) { $usuario = Usuario::model()->findByAttributes(array('email' => $email)); // Comprobamos si se ha encontrado un usuario con ese email if (!isset($usuario)) //$this->render('/user/message', array('title' => Yii::t("User activation"), 'content' => Yii::t("Incorrect activation URL."))); Yii::log("Incorrect activation URL. 3"); elseif ($usuario->estado == Usuario::ESTADO_ACTIVO) //$this->render('/user/message', array('title' => Yii::t("User activation"), 'content' => Yii::t("You account is active."))); Yii::log("You account is active."); elseif ($usuario->estado == Usuario::ESTADO_DENEGADO) //$this->render('/user/message', array('title' => Yii::t("User activation"), 'content' => Yii::t("You account is banned."))); Yii::log("You account is banned."); elseif (isset($usuario->clave_seguridad) && ($usuario->clave_seguridad == $clave_seguridad)) { // Hay que activar el usuario $usuario->estado = Usuario::ESTADO_ACTIVO; $usuario->clave_seguridad = $usuario->encrypt(microtime()); $usuario->save(); $this->enviarMailConfirmacionActivacion($usuario); $this->render('confirmacion_usuario'); Yii::log("You account is activated."); } else { $this->render('error_confirmacion'); Yii::log("Incorrect activation URL. 2 "); } } else { $this->render('error_confirmacion'); Yii::log("Incorrect activation URL. 1"); } } /** * Envía un mail de registro a un usuario * con una URL de confirmación. * @param Usuario $usuario Usuario al que se le enviará el mail de registro */ private function enviarMailRegistro($usuario) { Yii::import('ext.yii-mail.YiiMailMessage'); $url_activacion = $this->createAbsoluteUrl('registroUsuario/activar', array("key" => $usuario->clave_seguridad, "email" => $usuario->email)); $mensaje = new YiiMailMessage; $mensaje->from = Yii::app()->params['email_remitente']; $mensaje->setTo($usuario->email); $mensaje->subject = Yii::t('profind', 'Complete su registro en PROFIND'); $mensaje->view = 'registro_usuario'; $mensaje->setBody( array( 'url' => $url_activacion, 'email' => $usuario->email ), 'text/html' ); Yii::app()->mail->send($mensaje); } /** * Envía un mail de confirmación de su cuenta al usuario. * @param Usuario $usuario Usuario al que se le enviará el mail de registro */ private function enviarMailConfirmacionActivacion($usuario) { Yii::import('ext.yii-mail.YiiMailMessage'); $mensaje = new YiiMailMessage; $mensaje->from = Yii::app()->params['email_remitente']; $mensaje->setTo($usuario->email); $mensaje->subject = Yii::t('profind', 'Gracias por registrarse en PROFIND.'); $mensaje->view = 'confirmacion_usuario'; $mensaje->setBody(array(), 'text/html'); Yii::app()->mail->send($mensaje); } }