array('modificar', 'delete'), 'users' => array('@'), ), array('deny', // deny all users 'users' => array('*'), ), ); } /** * Actualiza un usuario. * If update is successful, the browser will be redirected to the 'view' page. * @param integer $id the ID of the model to be updated */ public function actionModificar($id, $provider = '') { if ($id != Yii::app()->user->id) throw new CHttpException(404, Yii::t('profind', 'La página solicitada no existe.')); 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'); Yii::log(CVarDumper::dumpAsString($_POST['Usuario']), CLogger::LEVEL_ERROR); Yii::log(CVarDumper::dumpAsString($usuario->attributes), CLogger::LEVEL_ERROR); Yii::log(CVarDumper::dumpAsString($ficheroFotografia), CLogger::LEVEL_ERROR); $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, )); } public function actionDelete($id) { if ($id != Yii::app()->user->id) throw new CHttpException(404, Yii::t('profind', 'La página solicitada no existe.')); 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))); } public function loadModelwithSocialData($id, $provider) { $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; } /** * Returns the data model based on the primary key given in the GET variable. * If the data model is not found, an HTTP exception will be raised. * @param integer the ID of the model to be loaded */ public function loadModel($id) { $model = Usuario::model()->findByPk($id); if ($model === null) throw new CHttpException(404, Yii::t('profind', 'La página solicitada no existe.')); return $model; } /** * Performs the AJAX validation. * @param CModel the model to be validated */ protected function performAjaxValidation($model) { if (isset($_POST['ajax']) && $_POST['ajax'] === 'usuario-form') { echo CActiveForm::validate($model); Yii::app()->end(); } } /** * 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 enviarMailSolicitudBaja($usuario) { Yii::import('ext.yii-mail.YiiMailMessage'); $url_cancelacion = $this->createAbsoluteUrl('registroUsuario/cancelar', 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', 'Solicitud de cancelación de su cuenta en PROFIND'); $mensaje->view = 'solicitud_cancelacion_usuario'; $mensaje->setBody(array('url' => $url_cancelacion), 'text/html'); return Yii::app()->mail->send($mensaje); } }