- Revisión de la pantalla de productos git-svn-id: https://192.168.0.254/svn/Proyectos.Incam_PROFIND_Web/trunk@61 3fe1ab16-cfe0-e34b-8c9f-7d8c168d430d
614 lines
28 KiB
PHP
614 lines
28 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @class UsuarioController
|
|
* @brief Controlador del modelo del usuario
|
|
*
|
|
* @package application.controllers
|
|
*/
|
|
|
|
class UsuarioController extends Controller {
|
|
|
|
public $defaultAction = 'modificar';
|
|
|
|
/**
|
|
* @return array action filters
|
|
*/
|
|
public function filters() {
|
|
return array(
|
|
'accessControl', // perform access control for CRUD operations
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Specifies the access control rules.
|
|
* This method is used by the 'accessControl' filter.
|
|
* @return array access control rules
|
|
*/
|
|
public function accessRules() {
|
|
return array(
|
|
array('allow',
|
|
'actions' => array(
|
|
'activar', 'cancelar', 'establecerPassword',
|
|
'recuperar', 'registrar', 'registrarAgente',
|
|
),
|
|
'users' => array('*'),
|
|
),
|
|
array('allow',
|
|
'actions' => array(
|
|
'cambiarPassword' ,'delete', 'modificar'
|
|
),
|
|
'users' => array('@'),
|
|
),
|
|
array('deny',
|
|
'users' => array('*'),
|
|
),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @brief Realiza el registro de un usuario.
|
|
* - Coordinador => a través de la página de entrada (formulario)
|
|
* - Agente => a través del formulario de añadir agente en el equipo (AJAX)
|
|
*/
|
|
public function actionRegistrar() {
|
|
// ¿Coordinador o agente?
|
|
if (isset($_POST['ajax']) && $_POST['ajax'] === 'registro-coordinador-form-entrada') {
|
|
$this->_registrarCoordinador();
|
|
} elseif (isset($_POST['FormularioRegistrarAgente'])) {
|
|
$this->_registrarAgente();
|
|
} else
|
|
$this->redirect(Yii::app()->params['frontpage']);
|
|
}
|
|
|
|
/**
|
|
* @brief Realiza la activación de un usuario (coordinadores y agentes).
|
|
* - Coordinador => a través del enlace recibido por email
|
|
* - Agente => a través del formulario de la página de entrada (AJAX)
|
|
*/
|
|
public function actionActivar() {
|
|
// ¿Coordinador o agente?
|
|
if (isset($_POST['ajax']) && $_POST['ajax'] === 'activar-agente-form-entrada') {
|
|
$this->_activarAgente();
|
|
} elseif (isset($_GET['email']) && isset($_GET['key'])) {
|
|
$this->_activarCoordinador();
|
|
} else
|
|
$this->redirect(Yii::app()->params['frontpage']);
|
|
}
|
|
|
|
/**
|
|
* @brief Realiza la recuperación de la contraseña de un usuario.
|
|
* Este método es llamado por AJAX desde la página de entrada.
|
|
*/
|
|
public function actionRecuperar() {
|
|
Yii::trace('Recuperar la cuenta del usuario', 'application.controllers.UsuarioController');
|
|
$formulario = new FormularioEntradaRecuperarPassword;
|
|
|
|
if (isset($_POST['ajax']) && $_POST['ajax'] === 'recuperar-form-entrada') {
|
|
$formulario->email = $_POST['FormularioRecuperar_email'];
|
|
|
|
if (!$formulario->validate())
|
|
$this->performAjaxValidationMessage($formulario);
|
|
|
|
$usuario = Usuario::model()->findByAttributes(array('email' => $formulario->email));
|
|
if ($usuario) {
|
|
if (EMail::enviarRecuperacion($usuario->email, $usuario->clave_seguridad)) {
|
|
Yii::trace('Correo para recuperar la cuenta enviado', 'application.controllers.UsuarioController');
|
|
$this->performAjaxStatusMessage('success',
|
|
Yii::t('profind', 'Recuperación de su cuenta en PROFIND'),
|
|
Yii::t('profind', 'En unos momentos recibirá un un correo con los pasos necesarios para recuperar su cuenta en PROFIND.')
|
|
);
|
|
} else {
|
|
Yii::trace('Error al enviar el correo para recuperar la cuenta', 'application.controllers.UsuarioController');
|
|
$this->performAjaxStatusMessage('success',
|
|
Yii::t('profind', 'Recuperación de su cuenta en PROFIND'),
|
|
Yii::t('profind', 'No se ha podido enviar el correo para recuperar su cuenta a la dirección indicada.')
|
|
);
|
|
}
|
|
} else {
|
|
Yii::trace('No se encontrado un usuario con el email indicado', 'application.controllers.UsuarioController');
|
|
$this->performAjaxStatusMessage('failure',
|
|
Yii::t('profind', 'Recuperación de su cuenta en PROFIND'),
|
|
Yii::t('profind', 'No se encontrado un usuario con el email indicado.')
|
|
);
|
|
}
|
|
}
|
|
$this->redirect(Yii::app()->params['frontpage']);
|
|
}
|
|
|
|
/**
|
|
* @brief Cambia la contraseña de un usuario (coordinador / agente).
|
|
* Esta acción se llama desde la ficha de un usuario.
|
|
* Envia un email de notificación al usuario.
|
|
* @param integer ID del usuario
|
|
*/
|
|
public function actionCambiarPassword($id) {
|
|
Yii::trace('Cambiar la password del usuario', 'application.controllers.UsuarioController');
|
|
|
|
if ($id != Yii::app()->user->id)
|
|
throw new CHttpException(401, Yii::t('profind', 'Acceso no autorizado.'));
|
|
|
|
$formulario = new FormularioCambiarPassword;
|
|
$this->performAjaxValidation($formulario, 'cambiar-password-form');
|
|
|
|
if (isset($_POST['FormularioCambiarPassword'])) {
|
|
$formulario->attributes = $_POST['FormularioCambiarPassword'];
|
|
|
|
if ($formulario->validate()) {
|
|
$usuario = $this->loadModel($id);
|
|
if ($this->_cambiarPassword($usuario, $formulario->password)) {
|
|
Yii::trace('Se ha modificado la password', 'application.controllers.UsuarioController');
|
|
|
|
EMail::enviarNotificacionCambioPassword($usuario->email, $usuario->clave_seguridad);
|
|
|
|
Yii::app()->user->setFlash('success', Yii::t('profind', 'Se ha modificado la contraseña'));
|
|
$this->redirect(array('usuario/modificar', 'id' => $id));
|
|
}
|
|
}
|
|
Yii::app()->user->setFlash('error', Yii::t('profind', 'No se ha podido modificar la contraseña'));
|
|
Yii::app()->user->setFlash('error', CHtml::errorSummary($formulario));
|
|
}
|
|
$this->render('cambiar_password', array('formulario' => $formulario));
|
|
}
|
|
|
|
/**
|
|
* @brief Establece la contraseña del usuario desde la página de entrada.
|
|
* Este método es llamado por AJAX desde la página de entrada cuando se
|
|
* olvida la contraseña.
|
|
* Envia un email de notificación al usuario informando del cambio.
|
|
*/
|
|
public function actionEstablecerPassword() {
|
|
Yii::trace('Estableciendo password para el usuario', 'application.controllers.UsuarioController');
|
|
|
|
$formulario = new FormularioEntradaCambiarPassword;
|
|
|
|
if (isset($_POST['ajax']) && $_POST['ajax'] === 'cambiar-password-form-entrada') {
|
|
$formulario->key = $_POST['FormularioCambiarPassword_key'];
|
|
$formulario->email = $_POST['FormularioCambiarPassword_email'];
|
|
$formulario->password = $_POST['FormularioCambiarPassword_password'];
|
|
$formulario->passwordRepetida = $_POST['FormularioCambiarPassword_password_repetida'];
|
|
|
|
if (!$formulario->validate())
|
|
$this->performAjaxValidationMessage($formulario);
|
|
|
|
$usuario = Usuario::model()->findByAttributes(array('email' => $formulario->email));
|
|
|
|
if ($this->_cambiarPassword($usuario, $formulario->password)) {
|
|
Yii::trace('Se ha modificado la password', 'application.controllers.UsuarioController');
|
|
if (EMail::enviarNotificacionCambioPassword($usuario->email, $usuario->clave_seguridad)) {
|
|
$this->performAjaxStatusMessage('success',
|
|
Yii::t('profind', 'Password modificada'),
|
|
Yii::t('profind', 'Se ha modificado su password en PROFIND.')
|
|
);
|
|
} else {
|
|
Yii::trace('Error al enviar el correo para informar del cambio', 'application.controllers.UsuarioController');
|
|
$this->performAjaxStatusMessage('success',
|
|
Yii::t('profind', 'Password modificada'),
|
|
Yii::t('profind', 'Se ha modificado su password en PROFIND pero no se ha podido enviar el correo informando del cambio.')
|
|
);
|
|
}
|
|
} else {
|
|
Yii::trace('Error al cambiar la password del usuario', 'application.controllers.UsuarioController');
|
|
$this->performAjaxStatusMessage('success',
|
|
Yii::t('profind', 'Recuperar password'),
|
|
Yii::t('profind', 'No se ha podido restablecer la password de su cuenta. Inténtelo más tarde o contacto con PROFIND.')
|
|
);
|
|
}
|
|
}
|
|
$this->redirect(Yii::app()->params['frontpage']);
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief 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.
|
|
*/
|
|
protected function _registrarCoordinador() {
|
|
Yii::trace('Registrando coordinador', 'application.controllers.UsuarioController');
|
|
|
|
$formulario = new FormularioRegistroCoordinador;
|
|
$resultado = array();
|
|
|
|
$formulario->email = $_POST['FormularioRegistro_email'];
|
|
$formulario->password = $_POST['FormularioRegistro_password'];
|
|
$formulario->password2 = $_POST['FormularioRegistro_password2'];
|
|
|
|
if (!$formulario->validate())
|
|
$this->performAjaxValidationMessage($formulario);
|
|
|
|
// Crear el usuario
|
|
$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);
|
|
|
|
// Crear la subscripción
|
|
$nueva_subscripcion = new Subscripcion('registrar');
|
|
$nueva_subscripcion->estado = Subscripcion::ESTADO_ACTIVO;
|
|
$nueva_subscripcion->id_producto = $this->_darIdProductoBasico();
|
|
|
|
// Crear la empresa
|
|
$nueva_empresa = new Empresa('registrar');
|
|
|
|
// Guardar los datos
|
|
$transaccion = Yii::app()->db->beginTransaction();
|
|
try {
|
|
Yii::trace('Guardando la nueva empresa', 'application.controllers.UsuarioController');
|
|
if (!$nueva_empresa->save())
|
|
throw new CException('Error al guardar la empresa');
|
|
|
|
Yii::trace('Guardando el nuevo usuario', 'application.controllers.UsuarioController');
|
|
$nuevo_usuario->id_empresa = $nueva_empresa->id;
|
|
if (!$nuevo_usuario->save())
|
|
throw new CException('Error al guardar el usuario');
|
|
|
|
Yii::trace('Guardando la nueva subscripción', 'application.controllers.UsuarioController');
|
|
$nueva_subscripcion->id_usuario = $nuevo_usuario->id;
|
|
if (!$nueva_subscripcion->save())
|
|
throw new CException('Error al guardar la subscripción');
|
|
|
|
$transaccion->commit();
|
|
Yii::trace('Nuevo coordinador dado de alta', 'application.controllers.UsuarioController');
|
|
} catch (Exception $e) {
|
|
Yii::trace($e->getMessage(), 'application.controllers.UsuarioController');
|
|
|
|
$transaccion->rollBack();
|
|
$errores = array_merge($nuevo_usuario->getErrors(), $nueva_empresa->getErrors(), $nueva_subscripcion->getErrors());
|
|
foreach ($errores as $campo => $mensaje) $resultado[$campo] = $mensaje;
|
|
Yii::trace(CVarDumper::dumpAsString($resultado), 'application.controllers.UsuarioController');
|
|
|
|
echo function_exists('json_encode') ? json_encode($resultado) : CJSON::encode($resultado);
|
|
Yii::app()->end();
|
|
}
|
|
|
|
if (EMail::enviarBienvenidaCoordinador($nuevo_usuario->email, $nuevo_usuario->clave_seguridad)) {
|
|
Yii::trace('Correo para activar el coordinador enviado', 'application.controllers.UsuarioController');
|
|
$this->performAjaxStatusMessage('success',
|
|
Yii::t('profind', 'Gracias por registrarse en PRODIND'),
|
|
Yii::t('profind', 'Su cuenta ha sido creada. En unos momentos recibirá un email con un enlace para completar su registro.')
|
|
);
|
|
} else {
|
|
Yii::trace('Error al enviar el correo para activar el coordinador', 'application.controllers.UsuarioController');
|
|
$this->performAjaxStatusMessage('success',
|
|
Yii::t('profind', 'Gracias por registrarse en PRODIND'),
|
|
Yii::t('profind', 'Su cuenta ha sido creada pero no se ha podido enviar el correo de registro a la dirección indicada.')
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief Activa la cuenta del coordinador a partir de la URL de activación
|
|
* que se le ha enviado a través del email generado en el proceso de
|
|
* registrar un coordinador.
|
|
*/
|
|
protected function _activarCoordinador() {
|
|
Yii::trace('Activando coordinador', 'application.controllers.UsuarioController');
|
|
|
|
$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)) {
|
|
Yii::trace('No existe el email', 'application.controllers.UsuarioController');
|
|
$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) {
|
|
Yii::trace('El usuario ya está activo', 'application.controllers.UsuarioController');
|
|
$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_BLOQUEADO) {
|
|
Yii::trace('El usuario está bloqueado', 'application.controllers.UsuarioController');
|
|
$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)) {
|
|
Yii::trace('Guardando el usuario', 'application.controllers.UsuarioController');
|
|
// Hay que activar el usuario
|
|
$usuario->estado = Usuario::ESTADO_ACTIVO;
|
|
$usuario->clave_seguridad = $usuario->encryptSecureKey(microtime() . $usuario->password);
|
|
$usuario->save();
|
|
|
|
EMail::enviarConfirmacionActivacion($usuario->email);
|
|
|
|
$this->layout = '//layouts/mensaje';
|
|
$this->render('confirmacion_usuario', array());
|
|
|
|
Yii::trace('Coordinador activado', 'application.controllers.UsuarioController');
|
|
} else {
|
|
Yii::trace('Clave de seguridad no válida', 'application.controllers.UsuarioController');
|
|
$this->render('//site/error', array(
|
|
'titulo' => Yii::t('profind', 'Error de activación'),
|
|
'mensaje' => Yii::t('profind', 'No se puede activar la cuenta.<br>El enlace de activación es incorrecto.'),
|
|
));
|
|
}
|
|
} else {
|
|
Yii::trace('URL de activación no válida', 'application.controllers.UsuarioController');
|
|
$this->render('//site/error', array(
|
|
'titulo' => Yii::t('profind', 'Error de activación'),
|
|
'mensaje' => Yii::t('profind', 'No se puede activar la cuenta.<br>El enlace de activación es incorrecto.'),
|
|
));
|
|
}
|
|
}
|
|
|
|
public function actionRegistrarAgente() {
|
|
$formulario = new FormularioRegistroAgente;
|
|
$resultado = array();
|
|
|
|
if (isset($_POST['ajax']) && $_POST['ajax'] === 'activar-agente-form-entrada') {
|
|
$formulario->key = $_POST['FormularioActivarAgente_key'];
|
|
$formulario->email = $_POST['FormularioActivarAgente_email'];
|
|
$formulario->password = $_POST['FormularioActivarAgente_password'];
|
|
$formulario->passwordRepetida = $_POST['FormularioActivarAgente_password_repetida'];
|
|
|
|
if (!$formulario->validate())
|
|
$this->performAjaxValidationMessage($formulario);
|
|
|
|
$usuario = Usuario::model()->findByAttributes(array('email' => $formulario->email));
|
|
$usuario->estado = Usuario::ESTADO_ACTIVO;
|
|
$usuario->save();
|
|
|
|
if ($this->_cambiarPassword($usuario, $formulario->password)) {
|
|
EMail::enviarConfirmacionActivacion($usuario->email);
|
|
$this->performAjaxStatusMessage('success',
|
|
Yii::t('profind', 'Cuenta de agente activada'),
|
|
Yii::t('profind', 'Se ha activado su cuenta y se ha establecido su nueva password en PROFIND.')
|
|
);
|
|
} 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']);
|
|
}
|
|
|
|
protected function _cambiarPassword($usuario, $nueva_password) {
|
|
$usuario->password = $usuario->encryptPassword($nueva_password);
|
|
$usuario->clave_seguridad = $usuario->encryptSecureKey(microtime() . $usuario->password);
|
|
return $usuario->save();
|
|
}
|
|
|
|
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.<br>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.<br>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.<br>La cuenta ya estaba cancelada.'),
|
|
));
|
|
} elseif ($usuario->estado == Usuario::ESTADO_BLOQUEADO) {
|
|
$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 desactivar el usuario
|
|
$usuario->estado = Usuario::ESTADO_NOACTIVO;
|
|
$usuario->clave_seguridad = $usuario->encryptSecureKey(microtime() . $usuario->password);
|
|
$usuario->save();
|
|
|
|
EMail::enviarConfirmacionCancelacion($usuario->email);
|
|
|
|
$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.<br>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.<br>La URL de cancelación es incorrecta.'),
|
|
));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief Busca el ID del producto básico que se utilizará para la subscripción
|
|
* de los coordinadores nuevos.
|
|
* @return integer
|
|
*/
|
|
protected function _darIdProductoBasico() {
|
|
$producto = Producto::model()->productoInicial()->find();
|
|
if ($producto === null) {
|
|
Yii::log('No se ha encontrado un producto básico', CLogger::LEVEL_ERROR, 'application.controller.UsuarioController');
|
|
throw new CHttpException(500, Yii::t('profind', 'Error interno.'));
|
|
}
|
|
return $producto->id;
|
|
}
|
|
|
|
/**
|
|
* @brief Muestra el formulario de modificación de un usuario y realiza los
|
|
* cambios.
|
|
* @param integer $id el ID del usuario a modificar
|
|
* @param string $provider nombre de la red social a utilizar para rellenar los datos del usuario
|
|
*/
|
|
public function actionModificar($id, $provider = '') {
|
|
if ($id != Yii::app()->user->id)
|
|
throw new CHttpException(401, Yii::t('profind', 'Acceso no autorizado.'));
|
|
|
|
if (($provider != '') && (!isset($_POST['Usuario']))) {
|
|
switch ($provider) {
|
|
case 'Twitter':
|
|
case 'Facebook':
|
|
case 'LinkedIn':
|
|
$usuario = $this->loadModelwithSocialData($id, $provider);
|
|
break;
|
|
default:
|
|
throw new CHttpException(404, Yii::t('profind', 'La página solicitada no existe.'));
|
|
}
|
|
}
|
|
else
|
|
$usuario = $this->loadModel($id);
|
|
|
|
// Uncomment the following line if AJAX validation is needed
|
|
// $this->performAjaxValidation($usuario);
|
|
|
|
if (isset($_POST['Usuario'])) {
|
|
$usuario->attributes = $_POST['Usuario'];
|
|
$ficheroFotografia = CUploadedFile::getInstance($usuario, 'ficheroFotografia');
|
|
|
|
$quitarFotografia = Yii::app()->request->getParam('quitar_fotografia', '0');
|
|
|
|
if ($usuario->save()) {
|
|
if (($quitarFotografia == '1') && ($usuario->fotografia->tieneFotografia()))
|
|
$usuario->fotografia->eliminarFotografia();
|
|
|
|
if ($ficheroFotografia)
|
|
$usuario->fotografia->guardarFotografia($ficheroFotografia);
|
|
|
|
Yii::app()->user->setFlash('success', Yii::t('profind', 'Se ha actualizado el perfil'));
|
|
$this->redirect(array('modificar', 'id' => $usuario->id));
|
|
}
|
|
}
|
|
|
|
$this->render('modificar', array(
|
|
'model' => $usuario,
|
|
));
|
|
}
|
|
|
|
/**
|
|
* @brief Elimina un usuario.
|
|
* @param integer $id el ID del usuario a eliminar
|
|
*/
|
|
public function actionDelete($id) {
|
|
if ($id != Yii::app()->user->id)
|
|
throw new CHttpException(401, Yii::t('profind', 'Acceso no autorizado.'));
|
|
|
|
if (Yii::app()->request->isAjaxRequest) {
|
|
$resultado = array();
|
|
$usuario = $this->loadModel($id);
|
|
|
|
if ($this->enviarMailSolicitudBaja($usuario))
|
|
$resultado['status'] = 'success';
|
|
else
|
|
$resultado['status'] = 'failure';
|
|
|
|
echo function_exists('json_encode') ? json_encode($resultado) : CJSON::encode($resultado);
|
|
Yii::app()->end();
|
|
} else
|
|
$this->redirect($this->createUrl('modificar', array('id' => $id)));
|
|
}
|
|
|
|
/**
|
|
* @brief Devuelve los datos de un usuario utilizando la red social que
|
|
* indique el parámetro $provider.
|
|
* @param integer $id el ID del usuario a modificar
|
|
* @param string $provider nombre de la red social a utilizar para rellenar los datos del usuario
|
|
*/
|
|
public function loadModelwithSocialData($id, $provider) {
|
|
Yii::trace('Cargar el modelo con datos de redes sociales', 'application.controllers.UsuarioController');
|
|
$usuario = $this->loadModel($id);
|
|
|
|
if (!Yii::app()->socialConnect->loadUserProfile($provider)) {
|
|
throw new CHttpException(
|
|
Yii::app()->socialConnect->errorCode,
|
|
Yii::t('profind', Yii::app()->socialConnect->errorMessage)
|
|
);
|
|
}
|
|
|
|
$profile = Yii::app()->socialConnect->userProfile;
|
|
|
|
//$usuario->email = $profile->email; <-- el email no lo cambio
|
|
$usuario->nombre = $profile->firstName;
|
|
$usuario->apellidos = $profile->lastName;
|
|
$usuario->descripcion = $profile->description;
|
|
|
|
switch ($provider) {
|
|
case 'Twitter':
|
|
$usuario->localidad = $profile->region;
|
|
break;
|
|
case 'Facebook':
|
|
case 'LinkedIn':
|
|
$usuario->localidad = $profile->city;
|
|
break;
|
|
}
|
|
|
|
return $usuario;
|
|
}
|
|
|
|
/**
|
|
* @brief Devuelve los datos del usuario.
|
|
* Si el usuario no existe, se lanza una excepción HTTP 404
|
|
* @param integer $id el ID del usuario a recuperar
|
|
*/
|
|
public function loadModel($id) {
|
|
Yii::trace('Cargar el modelo', 'application.controllers.UsuarioController');
|
|
$model = Usuario::model()->findByPk($id);
|
|
if ($model === null)
|
|
throw new CHttpException(404, Yii::t('profind', 'La página solicitada no existe.'));
|
|
|
|
return $model;
|
|
}
|
|
|
|
/**
|
|
* @brief Genera un mensaje de estado en formato JSON que se utilizará
|
|
* para mostrar información al usuario en la página de entrada.
|
|
* @param string $status 'success' o 'failure'
|
|
* @param string $title título de la ventana modal con mensaje
|
|
*/
|
|
protected function performAjaxStatusMessage($status, $title, $content) {
|
|
Yii::trace('Generando respuesta JSON con mensaje de estado', 'application.controllers.UsuarioController');
|
|
$result = array();
|
|
$result['status'] = $status;
|
|
$result['titulo'] = $title;
|
|
$result['texto'] = $content;
|
|
|
|
Yii::trace(CVarDumper::dumpAsString($result), 'application.controllers.UsuarioController');
|
|
echo function_exists('json_encode') ? json_encode($result) : CJSON::encode($result);
|
|
Yii::app()->end();
|
|
}
|
|
|
|
/**
|
|
* @brief Genera un mensaje en formato JSON con los errores de validación de
|
|
* uno o más modelos. El mensaje se mostrará al usuario en la página de entrada.
|
|
* @param mixed $models una instancia de un modelo o un array de instancias.
|
|
*/
|
|
protected function performAjaxValidationMessage($models) {
|
|
Yii::trace('Generando respuesta JSON con errores de validación', 'application.controllers.UsuarioController');
|
|
|
|
$result = array();
|
|
if(!is_array($models))
|
|
$models=array($models);
|
|
|
|
foreach($models as $model)
|
|
foreach($model->getErrors() as $attribute => $errors)
|
|
$result[$attribute] = $errors;
|
|
|
|
Yii::trace(CVarDumper::dumpAsString($result), 'application.controllers.UsuarioController');
|
|
echo function_exists('json_encode') ? json_encode($result) : CJSON::encode($result);
|
|
Yii::app()->end();
|
|
}
|
|
}
|