Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace frontend\controllers;
- use Yii;
- use yii\base\InvalidParamException;
- use yii\web\BadRequestHttpException;
- use yii\web\Controller;
- use yii\filters\VerbFilter;
- use yii\filters\AccessControl;
- use common\models\LoginForm;
- use frontend\models\PasswordResetRequestForm;
- use frontend\models\ResetPasswordForm;
- use frontend\models\SignupForm;
- use frontend\models\ContactForm;
- use common\models\User;
- use common\funciones\funciones;
- use backend\models\Logusuario;
- use backend\models\Ciudadanos;
- use backend\models\Usuarios;
- use yii\helpers\VarDumper;
- use common\models\Incidente;
- use common\models\IncidenteSearch;
- use common\models\AccessHelpers;
- use yii\web\Session;
- use frontend\models\FormRecoverPass;
- use frontend\models\FormResetPass;
- use yii\captcha\Captcha;
- use yii\captcha\CCaptcha;
- /**
- * Site controller
- */
- class SiteController extends Controller
- { public $successUrl = 'Success';
- /**
- * @inheritdoc
- */
- public function behaviors()
- {
- return [
- 'access' => [
- 'class' => AccessControl::className(),
- 'only' => ['logout', 'signup', 'captcha'],
- 'rules' => [
- [
- 'actions' => ['signup','captcha'],
- 'allow' => true,
- 'roles' => ['?'],
- ],
- [
- 'actions' => ['logout','captcha'],
- 'allow' => true,
- 'roles' => ['@'],
- ],
- ],
- ],
- 'verbs' => [
- 'class' => VerbFilter::className(),
- 'actions' => [
- 'logout' => ['post'],
- ],
- ],
- ];
- }
- /**
- * @inheritdoc
- */
- public function actions()
- {
- return [
- 'error' => [
- 'class' => 'yii\web\ErrorAction',
- ],
- 'captcha' => [
- 'class' => 'yii\captcha\CaptchaAction',
- // 'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
- ],
- 'auth' => [
- 'class' => 'yii\authclient\AuthAction',
- 'successCallback' => [$this, 'successCallback'],
- ],
- ];
- }
- public function successCallback($client)
- {
- $attributes = $client->getUserAttributes();
- // user login or signup comes here
- /*
- Checking facebook email registered yet?
- Maxsure your registered email when login same with facebook email
- die(print_r($attributes));
- */
- $user = \common\models\User::find()->where(['username'=>$attributes['name']])->one();
- if(empty($user)){
- $model = new User();
- $tipo_auth='Facebook';
- $password = md5($attributes['email']);
- if(empty($attributes['email'])){
- $attributes['email']= '@'.$attributes['screen_name'];
- $tipo_auth='Twitter';
- }
- //$auth_key=$this->auth_key = Yii::$app->security->generateRandomString();
- $created_at = date('Y-m-d h:i:s');
- $update_at = date('Y-m-d h:i:s');
- $model -> username = $attributes['name'];
- $model->password = $password;
- $model->auth_key = $password;
- $model->email = $attributes['email'];
- $model->created_at = $created_at;
- $model->updated_at = $update_at;
- $model->tipo_autenticacion = $tipo_auth;
- // $model->image = $attributes['picture'];;
- $model->status = 10;
- $model->save();
- date_default_timezone_set('America/Bogota');
- $userciu = \common\models\User::find()->orderBy(['id' => SORT_DESC])->limit(1)->one();
- $idciu=$userciu->id;
- $modelo= new Ciudadanos();
- $modelo->iduser=$idciu;
- $modelo->nombres= $attributes['first_name'];
- $modelo->apellidos= $attributes['last_name'];
- $modelo->genero= $attributes['gender'];
- $modelo->location=$attributes['locale'];
- $modelo->fechacrea=date("Y-m-d H:i:s");
- $modelo->save();
- }
- $user = \common\models\User::find()->where(['username'=>$attributes['name']])->one();
- if(!empty($user)){
- Yii::$app->user->login($user);
- $user=Yii::$app->user->identity->id;
- date_default_timezone_set('America/Bogota');
- $model=new Logusuario();
- $model->usuarioid=''.$user.'';
- $model->fechaingresa=date("Y-m-d H:i:s");
- $model->fechasale=date("Y-m-d H:i:s");
- $model->ip=Funciones::getRealIp();
- $model->puerto=$_SERVER['REMOTE_PORT'];
- $model->server_name=$_SERVER['SERVER_NAME'];
- $model->save();
- }else{
- // Save session attribute user from FB
- $session = Yii::$app->session;
- $session['attributes']=$attributes;
- // redirect to form signup, variabel global set to successUrl
- $this->successUrl = \yii\helpers\Url::to(['signup']);
- }
- }
- /**
- * Displays homepage.
- *
- * @return mixed
- */
- public function actionIndex2()
- {
- return $this->render('index2');
- }
- public function actionIndex()
- {
- return $this->render('index');
- }
- public function actionIndex3()
- {
- return $this->render('index3');
- }
- public function actionIndex4()
- {
- return $this->render('index4');
- }
- public function actionIndex5()
- {
- return $this->render('index5');
- }
- /**
- * Logs in a user.
- *
- * @return mixed
- */
- public function actionLogin()
- {
- if (!Yii::$app->user->isGuest) {
- return $this->goHome();
- }
- $model = new LoginForm();
- if ($model->load(Yii::$app->request->post()) && $model->login()) {
- $user=Yii::$app->user->identity->id;
- date_default_timezone_set('America/Bogota');
- $model=new Logusuario();
- $model->usuarioid=''.$user.'';
- $model->fechaingresa=date("Y-m-d H:i:s");
- $model->fechasale=date("Y-m-d H:i:s");
- $model->ip=Funciones::getRealIp();;
- $model->puerto=$_SERVER['REMOTE_PORT'];
- $model->server_name=$_SERVER['SERVER_NAME'];
- $model->save();
- return $this->goBack();
- }
- else {
- return $this->render('login', [
- 'model' => $model,
- ]);
- }
- }
- /**
- * Logout action.
- *
- * @return string
- */
- public function actionLogout()
- { $ip=Funciones::getRealIp();
- $usuario=Yii::$app->user->identity->id;
- date_default_timezone_set('America/Bogota');
- $logusuario = Logusuario::find()->where(['usuarioid' =>''.$usuario.'', 'ip' => ''.$ip.''])->orderBy('fechaingresa DESC')->limit(1)->one();
- if ( sizeof($logusuario) > 0 ) {
- $logusuario->fechasale=date("Y-m-d H:i:s");
- $logusuario->save();
- }
- Yii::$app->user->logout();
- return $this->goHome();
- }
- /**
- * Displays contact page.
- *
- * @return mixed
- */
- public function actionContact()
- {
- $model = new ContactForm();
- if ($model->load(Yii::$app->request->post()) && $model->validate()) {
- if ($model->sendEmail(Yii::$app->params['adminEmail'])) {
- Yii::$app->session->setFlash('success', 'Thank you for contacting us. We will respond to you as soon as possible.');
- } else {
- Yii::$app->session->setFlash('error', 'There was an error sending email.');
- }
- return $this->refresh();
- } else {
- return $this->render('contact', [
- 'model' => $model,
- ]);
- }
- }
- /**
- * Displays about page.
- *
- * @return mixed
- */
- public function actionAbout()
- {
- return $this->render('about');
- }
- /**
- * Signs user up.
- *
- * @return mixed
- */
- public function actionSignup()
- {
- $model = new SignupForm();
- if ($model->load(Yii::$app->request->post())) {
- if ($user = $model->signup()) {
- date_default_timezone_set('America/Bogota');
- $userciu = \common\models\User::find()->orderBy(['id' => SORT_DESC])->limit(1)->one();
- $idciu=$userciu->id;
- $modelo= new Ciudadanos();
- $modelo->iduser=$idciu;
- $modelo->nombres= $userciu->username;
- $modelo->fechacrea=date("Y-m-d H:i:s");
- $modelo->save();
- if (Yii::$app->getUser()->login($user)) {
- return $this->goHome();
- }
- }
- }
- return $this->render('signup', [
- 'model' => $model,
- ]);
- }
- /**
- * Requests password reset.
- *
- * @return mixed
- */
- public function actionRequestPasswordReset()
- {
- $model = new PasswordResetRequestForm();
- if ($model->load(Yii::$app->request->post()) && $model->validate()) {
- if ($model->sendEmail()) {
- Yii::$app->session->setFlash('success', 'Check your email for further instructions.');
- return $this->goHome();
- } else {
- Yii::$app->session->setFlash('error', 'Sorry, we are unable to reset password for email provided.');
- }
- }
- return $this->render('requestPasswordResetToken', [
- 'model' => $model,
- ]);
- }
- /**
- * Resets password.
- *
- * @param string $token
- * @return mixed
- * @throws BadRequestHttpException
- */
- public function actionResetPassword($token)
- {
- try {
- $model = new ResetPasswordForm($token);
- } catch (InvalidParamException $e) {
- throw new BadRequestHttpException($e->getMessage());
- }
- if ($model->load(Yii::$app->request->post()) && $model->validate() && $model->resetPassword()) {
- Yii::$app->session->setFlash('success', 'New password was saved.');
- return $this->goHome();
- }
- return $this->render('resetPassword', [
- 'model' => $model,
- ]);
- }
- public function actionPerfil(){
- $searchModel = new IncidenteSearch();
- $dataProvider = $searchModel->search2(Yii::$app->request->queryParams);
- return $this->render('perfil', [
- 'searchModel' => $searchModel,
- 'dataProvider' => $dataProvider,
- ]);
- }
- public function actionRecoverpass()
- {
- //Instancia para validar el formulario
- $model = new FormRecoverPass;
- //Mensaje que será mostrado al usuario en la vista
- $msg = null;
- if ($model->load(Yii::$app->request->post()))
- {
- if ($model->validate())
- {
- //Buscar al usuario a través del email
- $table = User::find()->where("email=:email", [":email" => $model->email]);
- //Si el usuario existe
- if ($table->count() == 1)
- {
- //Crear variables de sesión para limitar el tiempo de restablecido del password
- //hasta que el navegador se cierre
- $session = new Session;
- $session->open();
- //Esta clave aleatoria se cargará en un campo oculto del formulario de reseteado
- $session["recover"] = $this->randKey("abcdef0123456789", 200);
- $recover = $session["recover"];
- //También almacenaremos el id del usuario en una variable de sesión
- //El id del usuario es requerido para generar la consulta a la tabla users y
- //restablecer el password del usuario
- $table = User::find()->where("email=:email", [":email" => $model->email])->one();
- $session["id_recover"] = $table->id;
- //Esta variable contiene un número hexadecimal que será enviado en el correo al usuario
- //para que lo introduzca en un campo del formulario de reseteado
- //Es guardada en el registro correspondiente de la tabla users
- $verification_code = $this->randKey("abcdef0123456789", 8);
- //Columna verification_code
- $table->verification_code = $verification_code;
- //Guardamos los cambios en la tabla users
- $table->save();
- //Creamos el mensaje que será enviado a la cuenta de correo del usuario
- $subject = "Recuperar password";
- $body = "<p>Copie el siguiente código de verificación para restablecer su password ... ";
- $body .= "<strong>".$verification_code."</strong></p>";
- $body .= "<p><a href='http://yii.local/index.php?r=site/resetpass'>Recuperar password</a></p>";
- //Enviamos el correo
- Yii::$app->mailer->compose()
- ->setTo($model->email)
- ->setFrom([Yii::$app->params["adminEmail"] => Yii::$app->params["title"]])
- ->setSubject($subject)
- ->setHtmlBody($body)
- ->send();
- //Vaciar el campo del formulario
- $model->email = null;
- //Mostrar el mensaje al usuario
- $msg = "Le hemos enviado un mensaje a su cuenta de correo para que pueda resetear su password";
- }
- else //El usuario no existe
- {
- $msg = "Ha ocurrido un error";
- }
- }
- else
- {
- $model->getErrors();
- }
- }
- return $this->render("recoverpass", ["model" => $model, "msg" => $msg]);
- }
- public function actionResetpass()
- {
- //Instancia para validar el formulario
- $model = new FormResetPass;
- //Mensaje que será mostrado al usuario
- $msg = null;
- //Abrimos la sesión
- $session = new Session;
- $session->open();
- //Si no existen las variables de sesión requeridas lo expulsamos a la página de inicio
- if (empty($session["recover"]) || empty($session["id_recover"]))
- {
- return $this->redirect(["site/index"]);
- }
- else
- {
- $recover = $session["recover"];
- //El valor de esta variable de sesión la cargamos en el campo recover del formulario
- $model->recover = $recover;
- //Esta variable contiene el id del usuario que solicitó restablecer el password
- //La utilizaremos para realizar la consulta a la tabla users
- $id_recover = $session["id_recover"];
- }
- //Si el formulario es enviado para resetear el password
- if ($model->load(Yii::$app->request->post()))
- {
- if ($model->validate())
- {
- //Si el valor de la variable de sesión recover es correcta
- if ($recover == $model->recover)
- {
- //Preparamos la consulta para resetear el password, requerimos el email, el id
- //del usuario que fue guardado en una variable de session y el código de verificación
- //que fue enviado en el correo al usuario y que fue guardado en el registro
- $table = Users::findOne(["email" => $model->email, "id" => $id_recover, "verification_code" => $model->verification_code]);
- //Encriptar el password
- $table->password = crypt($model->password, Yii::$app->params["salt"]);
- //Si la actualización se lleva a cabo correctamente
- if ($table->save())
- {
- //Destruir las variables de sesión
- $session->destroy();
- //Vaciar los campos del formulario
- $model->email = null;
- $model->password = null;
- $model->password_repeat = null;
- $model->recover = null;
- $model->verification_code = null;
- $msg = "Enhorabuena, password reseteado correctamente, redireccionando a la página de login ...";
- $msg .= "<meta http-equiv='refresh' content='5; ".Url::toRoute("site/login")."'>";
- }
- else
- {
- $msg = "Ha ocurrido un error";
- }
- }
- else
- {
- $model->getErrors();
- }
- }
- }
- return $this->render("resetpass", ["model" => $model, "msg" => $msg]);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement