Incam_PROFIND_Web/www/protected/controllers/RegistroUsuarioController.php
2012-09-21 10:41:55 +00:00

155 lines
6.4 KiB
PHP

<?php
/**
* Sirve para realizar el proceso de registro de un usuario nuevo.
*/
class RegistroUsuarioController extends Controller {
public $defaultAction = 'registrar';
public function accessRules()
{
return array(
array('allow',
'actions'=>array('registrar', '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->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();
}
$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('/user/message', array('title' => Yii::t("User activation"), 'content' => Yii::t("You account is activated.")));
Yii::log ("You account is activated.");
} else {
//$this->render('/user/message', array('title' => Yii::t("User activation"), 'content' => Yii::t("Incorrect activation URL.")));
Yii::log ("Incorrect activation URL. 2 ");
}
}
else {
//$this->render('/user/message', array('title' => Yii::t("User activation"), 'content' => Yii::t("Incorrect activation URL.")));
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);
}
}