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; } }