Incam_PROFIND_Web/www/protected/controllers/SeguridadUsuarioController.php
david df138cf8bb - Revisión del código en general
- Tarea #1099 -> Mejorar la encriptación de las contraseñas
- Tarea #1104 -> Guardar en el usuario la fecha de creación y del último login
- Tarea #1125 -> Quitar la máscara en el campo 'teléfono' del usuario

git-svn-id: https://192.168.0.254/svn/Proyectos.Incam_PROFIND_Web/trunk@57 3fe1ab16-cfe0-e34b-8c9f-7d8c168d430d
2012-10-09 11:44:12 +00:00

103 lines
4.5 KiB
PHP

<?php
class SeguridadUsuarioController extends Controller {
public $defaultAction = 'recuperar';
/**
* Cambiar la contraseña del usuario desde la página de entrada.
* Este método es llamado por AJAX desde la página de entrada.
* Envia un email de notificación al usuario.
* @param integer ID del usuario
*/
public function actionCambiarPasswordExt() {
$formulario = new FormularioExtCambiarPassword;
$resultado = array();
if (isset($_POST['ajax']) && $_POST['ajax'] === 'cambiar-password-form-ext') {
$formulario->key = $_POST['FormularioCambiarPassword_key'];
$formulario->email = $_POST['FormularioCambiarPassword_email'];
$formulario->password = $_POST['FormularioCambiarPassword_password'];
$formulario->passwordRepetida = $_POST['FormularioCambiarPassword_password_repetida'];
if ($formulario->validate()) {
$usuario = Usuario::model()->findByAttributes(array('email' => $formulario->email));
if ($this->_cambiarPassword($usuario->id, $formulario->password)) {
$resultado['status'] = '200';
$resultado['titulo'] = Yii::t('profind', 'Password modificada');
$resultado['texto'] = Yii::t('profind', 'Se ha modificado su 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']);
}
/**
* Cambiar la contraseña del usuario desde el formulario de la aplicación.
* Envia un email de notificación al usuario.
* @param integer ID del usuario
*/
public function actionCambiarPassword($id) {
if ($id != Yii::app()->user->id)
throw new CHttpException(404, Yii::t('profind', 'La página solicitada no existe.'));
$formulario = new FormularioCambiarPassword;
if (isset($_POST['ajax']) && $_POST['ajax'] === 'cambiar-password-form') {
echo CActiveForm::validate($formulario);
Yii::app()->end();
}
if (isset($_POST['FormularioCambiarPassword'])) {
$formulario->attributes = $_POST['FormularioCambiarPassword'];
if ($formulario->validate() && $this->_cambiarPassword($id, $formulario->password)) {
Yii::app()->user->setFlash('success', Yii::t('profind', 'Se ha modificado la contraseña'));
$this->redirect(array('usuario/modificar', 'id' => $id));
} else {
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));
}
/**
* Realiza el proceso interno de cambiar la contraseña a un usuario.
* Envia un email de notificación al usuario.
* Este método es privado y de uso interno al controlador.
* @param integer ID del usuario
* @param string nueva contraseña del usuario
* @return boolean si se ha podido hacer o no el cambio
*/
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()) {
$this->enviarMailNotificacionCambioPassword($usuario);
return true;
} else
return false;
}
}