- 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
103 lines
4.5 KiB
PHP
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;
|
|
}
|
|
|
|
|
|
} |