array('registrar', 'registrarAgente', 'activar', 'cancelar'), '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->tipo = Usuario::TIPO_USUARIO_COORDINADOR; $nuevo_usuario->email = $formulario->email; $nuevo_usuario->password = $nuevo_usuario->encryptPassword($formulario->password); $nuevo_usuario->estado = Usuario::ESTADO_NOACTIVO; $nuevo_usuario->clave_seguridad = $nuevo_usuario->encryptSecureKey(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(); } // Crear la empresa $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(); } // Crear la subscripción $nueva_subscripcion = new Subscripcion('registrar'); $nueva_subscripcion->estado = Subscripcion::ESTADO_ACTIVO; $nueva_subscripcion->id_usuario = $nuevo_usuario->id; $nueva_subscripcion->id_producto = 1; if (!$nueva_subscripcion->save()) { foreach ($nueva_subscripcion->getErrors() as $campo => $error) { $resultado[$campo] = $error; } echo function_exists('json_encode') ? json_encode($resultado) : CJSON::encode($resultado); Yii::app()->end(); } if ($this->enviarMailRegistro($nuevo_usuario)) { $resultado['status'] = '200'; $resultado['titulo'] = Yii::t('profind', 'Gracias por registrarse en PRODIND'); $resultado['texto'] = Yii::t('profind', 'Su cuenta ha sido creada. En unos momentos recibirá un email con un enlace para completar su registro.'); } else { $resultado['status'] = '200'; $resultado['titulo'] = Yii::t('profind', 'Error en el registro'); $resultado['texto'] = Yii::t('profind', 'No se ha podido enviar el correo de registro a la dirección indicada.'); } echo function_exists('json_encode') ? json_encode($resultado) : CJSON::encode($resultado); Yii::app()->end(); } $this->redirect(Yii::app()->params['frontpage']); } public function actionRegistrarAgente() { $formulario = new FormularioRegistroAgente; $resultado = array(); if (isset($_POST['ajax']) && $_POST['ajax'] === 'activar-agente-form-ext') { $formulario->key = $_POST['FormularioActivarAgente_key']; $formulario->email = $_POST['FormularioActivarAgente_email']; $formulario->password = $_POST['FormularioActivarAgente_password']; $formulario->passwordRepetida = $_POST['FormularioActivarAgente_password_repetida']; if ($formulario->validate()) { $usuario = Usuario::model()->findByAttributes(array('email' => $formulario->email)); $usuario->estado = Usuario::ESTADO_ACTIVO; $usuario->save(); if ($this->_cambiarPassword($usuario->id, $formulario->password)) { $this->enviarMailConfirmacionActivacion($usuario); $resultado['status'] = '200'; $resultado['titulo'] = Yii::t('profind', 'Cuenta de agente activada'); $resultado['texto'] = Yii::t('profind', 'Se ha activado su cuenta y se ha establecido su nueva password en PROFIND.'); echo function_exists('json_encode') ? json_encode($resultado) : CJSON::encode($resultado); Yii::app()->end(); } else { foreach ($formulario->getErrors() as $campo => $error) { $resultado[$campo] = $error; } echo function_exists('json_encode') ? json_encode($resultado) : CJSON::encode($resultado); Yii::app()->end(); } } else { foreach ($formulario->getErrors() as $campo => $error) { $resultado[$campo] = $error; } echo function_exists('json_encode') ? json_encode($resultado) : CJSON::encode($resultado); Yii::app()->end(); } } $this->redirect(Yii::app()->params['frontpage']); } private function _cambiarPassword($id, $nueva_password) { $usuario = Usuario::model()->findByPk($id); if (!isset($usuario)) throw new CHttpException(404, Yii::t('profind', 'La página solicitada no existe.')); $usuario->password = $usuario->encryptPassword($nueva_password); $usuario->clave_seguridad = $usuario->encryptSecureKey(microtime() . $usuario->password); if ($usuario->save()) { return true; } else return false; } /** * 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('//site/error', array( 'titulo' => Yii::t('profind', 'Error de activación'), 'mensaje' => Yii::t('profind', 'No se puede activar la cuenta.
La URL de activación es incorrecta.'), )); } elseif ($usuario->estado == Usuario::ESTADO_ACTIVO) { $this->render('//site/error', array( 'titulo' => Yii::t('profind', 'Cuenta ya activada'), 'mensaje' => Yii::t('profind', 'No se ha realizado ningún cambio.
La cuenta ya estaba activada.'), )); } elseif ($usuario->estado == Usuario::ESTADO_DENEGADO) { $this->render('//site/error', array( 'titulo' => Yii::t('profind', 'Cuenta bloqueada'), 'mensaje' => Yii::t('profind', 'La cuenta ha sido bloqueada.
Contacte con el administrador del sitio para obtener más información.'), )); } elseif (isset($usuario->clave_seguridad) && ($usuario->clave_seguridad == $clave_seguridad)) { // Hay que activar el usuario $usuario->estado = Usuario::ESTADO_ACTIVO; $usuario->clave_seguridad = $usuario->encryptSecureKey(microtime() . $usuario->password); $usuario->save(); $this->enviarMailConfirmacionActivacion($usuario); $this->layout = '//layouts/mensaje'; $this->render('confirmacion_usuario', array()); } else { $this->render('//site/error', array( 'titulo' => Yii::t('profind', 'Error de activación'), 'mensaje' => Yii::t('profind', 'No se puede activar la cuenta.
La URL de activación es incorrecta.'), )); } } else { $this->render('//site/error', array( 'titulo' => Yii::t('profind', 'Error de activación'), 'mensaje' => Yii::t('profind', 'No se puede activar la cuenta.
La URL de activación es incorrecta.'), )); } } public function actionCancelar() { $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('//site/error', array( 'titulo' => Yii::t('profind', 'Error de cancelación'), 'mensaje' => Yii::t('profind', 'No se puede cancelar la cuenta.
La URL de cancelación es incorrecta.'), )); } elseif ($usuario->estado == Usuario::ESTADO_NOACTIVO) { $this->render('//site/error', array( 'titulo' => Yii::t('profind', 'Cuenta no confirmada'), 'mensaje' => Yii::t('profind', 'No se ha realizado ningún cambio.
La cuenta no está confirmada.'), )); } elseif ($usuario->estado == Usuario::ESTADO_BORRADO) { $this->render('//site/error', array( 'titulo' => Yii::t('profind', 'Cuenta ya cancelada'), 'mensaje' => Yii::t('profind', 'No se ha realizado ningún cambio.
La cuenta ya estaba cancelada.'), )); } elseif ($usuario->estado == Usuario::ESTADO_DENEGADO) { $this->render('//site/error', array( 'titulo' => Yii::t('profind', 'Cuenta bloqueada'), 'mensaje' => Yii::t('profind', 'La cuenta ha sido bloqueada.
Contacte con el administrador del sitio para obtener más información.'), )); } elseif (isset($usuario->clave_seguridad) && ($usuario->clave_seguridad == $clave_seguridad)) { // Hay que desactivar el usuario $usuario->estado = Usuario::ESTADO_NOACTIVO; $usuario->clave_seguridad = $usuario->encryptSecureKey(microtime() . $usuario->password); $usuario->save(); $this->enviarMailConfirmacionCancelacion($usuario); $this->layout = '//layouts/mensaje'; $this->render('confirmacion_cancelacion_usuario', array()); } else { $this->render('//site/error', array( 'titulo' => Yii::t('profind', 'Error de cancelación'), 'mensaje' => Yii::t('profind', 'No se puede cancelar la cuenta.
La URL de cancelación es incorrecta.'), )); } } else { $this->render('//site/error', array( 'titulo' => Yii::t('profind', 'Error de cancelación'), 'mensaje' => Yii::t('profind', 'No se puede cancelar la cuenta.
La URL de cancelación es incorrecta.'), )); } } /** * 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' ); return 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( 'email' => $usuario->email ), 'text/html' ); return Yii::app()->mail->send($mensaje); } private function enviarMailConfirmacionCancelacion($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', 'Confirmación de cancelación de su cuenta en PROFIND'); $mensaje->view = 'confirmacion_cancelacion_usuario'; $mensaje->setBody(array('email' => $usuario->email), 'text/html'); return Yii::app()->mail->send($mensaje); } }