- Registro de agentes git-svn-id: https://192.168.0.254/svn/Proyectos.Incam_PROFIND_Web/trunk@37 3fe1ab16-cfe0-e34b-8c9f-7d8c168d430d
262 lines
11 KiB
PHP
262 lines
11 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Sirve para realizar el proceso de registro de un usuario nuevo.
|
|
*/
|
|
class RegistroUsuarioController extends Controller {
|
|
|
|
public $defaultAction = 'registrar';
|
|
public $layout = '//layouts/error';
|
|
|
|
public function filters() {
|
|
return array('accessControl');
|
|
}
|
|
|
|
public function accessRules() {
|
|
return array(
|
|
array('allow',
|
|
'actions' => array('registrar', 'registrarAgente', 'activar'),
|
|
'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->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();
|
|
}
|
|
|
|
// 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->encrypt($nueva_password);
|
|
$usuario->clave_seguridad = $usuario->encrypt(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.<br>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.<br>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.<br>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->encrypt(microtime());
|
|
$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.<br>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.<br>La URL de activació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);
|
|
}
|
|
|
|
} |