Advertisement
Guest User

Untitled

a guest
Nov 21st, 2016
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 15.63 KB | None | 0 0
  1. <?php
  2. namespace frontend\controllers;
  3.  
  4. use Yii;
  5. use yii\base\InvalidParamException;
  6. use yii\web\BadRequestHttpException;
  7. use yii\web\Controller;
  8. use yii\filters\VerbFilter;
  9. use yii\filters\AccessControl;
  10. use common\models\LoginForm;
  11. use frontend\models\PasswordResetRequestForm;
  12. use frontend\models\ResetPasswordForm;
  13. use frontend\models\SignupForm;
  14. use frontend\models\ContactForm;
  15. use common\models\User;
  16. use common\funciones\funciones;
  17. use backend\models\Logusuario;
  18. use backend\models\Ciudadanos;
  19. use backend\models\Usuarios;
  20. use yii\helpers\VarDumper;
  21. use common\models\Incidente;
  22. use common\models\IncidenteSearch;
  23. use common\models\AccessHelpers;
  24. use yii\web\Session;
  25. use frontend\models\FormRecoverPass;
  26. use frontend\models\FormResetPass;
  27. use yii\captcha\Captcha;
  28. use yii\captcha\CCaptcha;
  29.  
  30. /**
  31.  * Site controller
  32.  */
  33. class SiteController extends Controller
  34. { public $successUrl = 'Success';
  35.     /**
  36.      * @inheritdoc
  37.      */
  38.     public function behaviors()
  39.     {
  40.         return [
  41.             'access' => [
  42.                 'class' => AccessControl::className(),
  43.                 'only' => ['logout', 'signup', 'captcha'],
  44.                 'rules' => [
  45.                     [
  46.                         'actions' => ['signup','captcha'],
  47.                         'allow' => true,
  48.                         'roles' => ['?'],
  49.                     ],
  50.                     [
  51.                         'actions' => ['logout','captcha'],
  52.                         'allow' => true,
  53.                         'roles' => ['@'],
  54.                     ],
  55.                      
  56.                 ],
  57.             ],
  58.            
  59.            
  60.             'verbs' => [
  61.                 'class' => VerbFilter::className(),
  62.                 'actions' => [
  63.                     'logout' => ['post'],
  64.                 ],
  65.             ],
  66.            
  67.            
  68.  
  69.  
  70.         ];
  71.     }
  72.  
  73.     /**
  74.      * @inheritdoc
  75.      */
  76.      
  77.    
  78.     public function actions()
  79.     {
  80.         return [
  81.             'error' => [
  82.                 'class' => 'yii\web\ErrorAction',
  83.             ],
  84.             'captcha' => [
  85.                 'class' => 'yii\captcha\CaptchaAction',
  86.                 // 'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
  87.             ],
  88.     'auth' => [
  89.             'class' => 'yii\authclient\AuthAction',
  90.             'successCallback' => [$this, 'successCallback'],
  91.         ],
  92.         ];
  93.     }  
  94.      
  95. public function successCallback($client)
  96. {  
  97.     $attributes = $client->getUserAttributes();
  98.    
  99.         // user login or signup comes here
  100.         /*  
  101.         Checking facebook email registered yet?
  102.         Maxsure your registered email when login same with facebook email
  103.         die(print_r($attributes));
  104.         */
  105.         $user = \common\models\User::find()->where(['username'=>$attributes['name']])->one();
  106.         if(empty($user)){
  107.         $model = new User();
  108.      
  109.         $tipo_auth='Facebook';
  110.        
  111.         $password = md5($attributes['email']);
  112.         if(empty($attributes['email'])){
  113.         $attributes['email']= '@'.$attributes['screen_name'];
  114.         $tipo_auth='Twitter';
  115.         }
  116.    
  117.         //$auth_key=$this->auth_key = Yii::$app->security->generateRandomString();
  118.         $created_at = date('Y-m-d h:i:s');
  119.         $update_at = date('Y-m-d h:i:s');
  120.  
  121.         $model -> username = $attributes['name'];
  122.         $model->password = $password;
  123.         $model->auth_key = $password;
  124.         $model->email = $attributes['email'];
  125.         $model->created_at = $created_at;
  126.         $model->updated_at = $update_at;
  127.         $model->tipo_autenticacion = $tipo_auth;
  128.        // $model->image = $attributes['picture'];;
  129.      
  130.    
  131.         $model->status = 10;
  132.         $model->save();
  133.        
  134.        
  135.         date_default_timezone_set('America/Bogota');
  136.         $userciu = \common\models\User::find()->orderBy(['id' => SORT_DESC])->limit(1)->one();
  137.          $idciu=$userciu->id;
  138.          
  139.           $modelo= new Ciudadanos();
  140.           $modelo->iduser=$idciu;    
  141.           $modelo->nombres= $attributes['first_name'];
  142.           $modelo->apellidos= $attributes['last_name'];
  143.           $modelo->genero= $attributes['gender'];
  144.           $modelo->location=$attributes['locale'];
  145.           $modelo->fechacrea=date("Y-m-d H:i:s");
  146.        
  147.           $modelo->save();
  148.         }
  149.      
  150.         $user = \common\models\User::find()->where(['username'=>$attributes['name']])->one();
  151.         if(!empty($user)){
  152.             Yii::$app->user->login($user);
  153.             $user=Yii::$app->user->identity->id;
  154.             date_default_timezone_set('America/Bogota');
  155.            $model=new Logusuario();
  156.            $model->usuarioid=''.$user.'';
  157.            $model->fechaingresa=date("Y-m-d H:i:s");
  158.            $model->fechasale=date("Y-m-d H:i:s");
  159.            $model->ip=Funciones::getRealIp();
  160.            $model->puerto=$_SERVER['REMOTE_PORT'];
  161.            $model->server_name=$_SERVER['SERVER_NAME'];
  162.            $model->save();
  163.         }else{
  164.             // Save session attribute user from FB
  165.             $session = Yii::$app->session;
  166.             $session['attributes']=$attributes;
  167.             // redirect to form signup, variabel global set to successUrl
  168.            
  169.            
  170.            
  171.             $this->successUrl = \yii\helpers\Url::to(['signup']);
  172.         }
  173. }
  174.     /**
  175.      * Displays homepage.
  176.      *
  177.      * @return mixed
  178.      */
  179.     public function actionIndex2()
  180.     {
  181.         return $this->render('index2');
  182.     }
  183.  public function actionIndex()
  184.     {
  185.         return $this->render('index');
  186.     }
  187.      public function actionIndex3()
  188.     {
  189.         return $this->render('index3');
  190.     }
  191.     public function actionIndex4()
  192.     {
  193.         return $this->render('index4');
  194.     }
  195.         public function actionIndex5()
  196.     {
  197.         return $this->render('index5');
  198.     }
  199.     /**
  200.      * Logs in a user.
  201.      *
  202.      * @return mixed
  203.      */
  204.      public function actionLogin()
  205.     {    
  206.        
  207.        if (!Yii::$app->user->isGuest) {
  208.              
  209.             return $this->goHome();
  210.         }
  211.  
  212.         $model = new LoginForm();
  213.         if ($model->load(Yii::$app->request->post()) && $model->login()) {
  214.              $user=Yii::$app->user->identity->id;
  215.                     date_default_timezone_set('America/Bogota');
  216.              $model=new Logusuario();
  217.            $model->usuarioid=''.$user.'';
  218.            $model->fechaingresa=date("Y-m-d H:i:s");
  219.            $model->fechasale=date("Y-m-d H:i:s");
  220.            $model->ip=Funciones::getRealIp();;
  221.            $model->puerto=$_SERVER['REMOTE_PORT'];
  222.            $model->server_name=$_SERVER['SERVER_NAME'];
  223.            $model->save();
  224.             return $this->goBack();        
  225.         }
  226.         else {
  227.             return $this->render('login', [
  228.                 'model' => $model,
  229.             ]);
  230.         }
  231.        
  232.     }
  233.  
  234.     /**
  235.      * Logout action.
  236.      *
  237.      * @return string
  238.      */
  239.     public function actionLogout()
  240.     {   $ip=Funciones::getRealIp();  
  241.         $usuario=Yii::$app->user->identity->id;
  242.         date_default_timezone_set('America/Bogota');
  243.          $logusuario = Logusuario::find()->where(['usuarioid' =>''.$usuario.'', 'ip' => ''.$ip.''])->orderBy('fechaingresa DESC')->limit(1)->one();
  244.          if ( sizeof($logusuario) > 0 ) {
  245.          $logusuario->fechasale=date("Y-m-d H:i:s");
  246.          $logusuario->save();
  247. }
  248.         Yii::$app->user->logout();
  249.  
  250.          return $this->goHome();
  251.     }
  252.  
  253.     /**
  254.      * Displays contact page.
  255.      *
  256.      * @return mixed
  257.      */
  258.    public function actionContact()
  259.     {    
  260.    
  261.        
  262.         $model = new ContactForm();
  263.         if ($model->load(Yii::$app->request->post()) && $model->validate()) {
  264.             if ($model->sendEmail(Yii::$app->params['adminEmail'])) {
  265.                 Yii::$app->session->setFlash('success', 'Thank you for contacting us. We will respond to you as soon as possible.');
  266.             } else {
  267.                 Yii::$app->session->setFlash('error', 'There was an error sending email.');
  268.             }
  269.  
  270.             return $this->refresh();
  271.         } else {
  272.             return $this->render('contact', [
  273.                 'model' => $model,
  274.             ]);
  275.         }
  276.     }
  277.  
  278.     /**
  279.      * Displays about page.
  280.      *
  281.      * @return mixed
  282.      */
  283.     public function actionAbout()
  284.     {
  285.         return $this->render('about');
  286.     }
  287.  
  288.     /**
  289.      * Signs user up.
  290.      *
  291.      * @return mixed
  292.      */
  293.      public function actionSignup()
  294.     {
  295.         $model = new SignupForm();
  296.         if ($model->load(Yii::$app->request->post())) {
  297.             if ($user = $model->signup()) {
  298.          date_default_timezone_set('America/Bogota');
  299.          $userciu = \common\models\User::find()->orderBy(['id' => SORT_DESC])->limit(1)->one();
  300.          $idciu=$userciu->id;
  301.          
  302.           $modelo= new Ciudadanos();
  303.           $modelo->iduser=$idciu;    
  304.           $modelo->nombres= $userciu->username;
  305.           $modelo->fechacrea=date("Y-m-d H:i:s");
  306.        
  307.           $modelo->save();
  308.                 if (Yii::$app->getUser()->login($user)) {
  309.                     return $this->goHome();
  310.                 }
  311.             }
  312.         }
  313.         return $this->render('signup', [
  314.             'model' => $model,
  315.         ]);
  316.     }
  317.  
  318.     /**
  319.      * Requests password reset.
  320.      *
  321.      * @return mixed
  322.      */
  323.     public function actionRequestPasswordReset()
  324.     {
  325.         $model = new PasswordResetRequestForm();
  326.         if ($model->load(Yii::$app->request->post()) && $model->validate()) {
  327.             if ($model->sendEmail()) {
  328.                 Yii::$app->session->setFlash('success', 'Check your email for further instructions.');
  329.  
  330.                 return $this->goHome();
  331.             } else {
  332.                 Yii::$app->session->setFlash('error', 'Sorry, we are unable to reset password for email provided.');
  333.             }
  334.         }
  335.  
  336.         return $this->render('requestPasswordResetToken', [
  337.             'model' => $model,
  338.         ]);
  339.     }
  340.  
  341.     /**
  342.      * Resets password.
  343.      *
  344.      * @param string $token
  345.      * @return mixed
  346.      * @throws BadRequestHttpException
  347.      */
  348.     public function actionResetPassword($token)
  349.     {
  350.         try {
  351.             $model = new ResetPasswordForm($token);
  352.         } catch (InvalidParamException $e) {
  353.             throw new BadRequestHttpException($e->getMessage());
  354.         }
  355.  
  356.         if ($model->load(Yii::$app->request->post()) && $model->validate() && $model->resetPassword()) {
  357.             Yii::$app->session->setFlash('success', 'New password was saved.');
  358.  
  359.             return $this->goHome();
  360.         }
  361.  
  362.         return $this->render('resetPassword', [
  363.             'model' => $model,
  364.         ]);
  365.     }
  366.    
  367.    
  368.       public function actionPerfil(){
  369.          
  370.             $searchModel = new IncidenteSearch();
  371.         $dataProvider = $searchModel->search2(Yii::$app->request->queryParams);
  372.  
  373.         return $this->render('perfil', [
  374.             'searchModel' => $searchModel,
  375.             'dataProvider' => $dataProvider,
  376.         ]);
  377.          
  378.          
  379.       }
  380.       public function actionRecoverpass()
  381.  {
  382.   //Instancia para validar el formulario
  383.   $model = new FormRecoverPass;
  384.  
  385.   //Mensaje que será mostrado al usuario en la vista
  386.   $msg = null;
  387.  
  388.   if ($model->load(Yii::$app->request->post()))
  389.   {
  390.    if ($model->validate())
  391.    {
  392.     //Buscar al usuario a través del email
  393.     $table = User::find()->where("email=:email", [":email" => $model->email]);
  394.    
  395.     //Si el usuario existe
  396.     if ($table->count() == 1)
  397.     {
  398.      //Crear variables de sesión para limitar el tiempo de restablecido del password
  399.      //hasta que el navegador se cierre
  400.      $session = new Session;
  401.      $session->open();
  402.      
  403.      //Esta clave aleatoria se cargará en un campo oculto del formulario de reseteado
  404.      $session["recover"] = $this->randKey("abcdef0123456789", 200);
  405.      $recover = $session["recover"];
  406.      
  407.      //También almacenaremos el id del usuario en una variable de sesión
  408.      //El id del usuario es requerido para generar la consulta a la tabla users y
  409.      //restablecer el password del usuario
  410.      $table = User::find()->where("email=:email", [":email" => $model->email])->one();
  411.      $session["id_recover"] = $table->id;
  412.      
  413.      //Esta variable contiene un número hexadecimal que será enviado en el correo al usuario
  414.      //para que lo introduzca en un campo del formulario de reseteado
  415.      //Es guardada en el registro correspondiente de la tabla users
  416.      $verification_code = $this->randKey("abcdef0123456789", 8);
  417.      //Columna verification_code
  418.      $table->verification_code = $verification_code;
  419.      //Guardamos los cambios en la tabla users
  420.      $table->save();
  421.      
  422.      //Creamos el mensaje que será enviado a la cuenta de correo del usuario
  423.      $subject = "Recuperar password";
  424.      $body = "<p>Copie el siguiente código de verificación para restablecer su password ... ";
  425.      $body .= "<strong>".$verification_code."</strong></p>";
  426.      $body .= "<p><a href='http://yii.local/index.php?r=site/resetpass'>Recuperar password</a></p>";
  427.  
  428.      //Enviamos el correo
  429.      Yii::$app->mailer->compose()
  430.      ->setTo($model->email)
  431.      ->setFrom([Yii::$app->params["adminEmail"] => Yii::$app->params["title"]])
  432.      ->setSubject($subject)
  433.      ->setHtmlBody($body)
  434.      ->send();
  435.      
  436.      //Vaciar el campo del formulario
  437.      $model->email = null;
  438.      
  439.      //Mostrar el mensaje al usuario
  440.      $msg = "Le hemos enviado un mensaje a su cuenta de correo para que pueda resetear su password";
  441.     }
  442.     else //El usuario no existe
  443.     {
  444.      $msg = "Ha ocurrido un error";
  445.     }
  446.    }
  447.    else
  448.    {
  449.     $model->getErrors();
  450.    }
  451.   }
  452.   return $this->render("recoverpass", ["model" => $model, "msg" => $msg]);
  453.  }
  454.  
  455.  public function actionResetpass()
  456.  {
  457.   //Instancia para validar el formulario
  458.   $model = new FormResetPass;
  459.  
  460.   //Mensaje que será mostrado al usuario
  461.   $msg = null;
  462.  
  463.   //Abrimos la sesión
  464.   $session = new Session;
  465.   $session->open();
  466.  
  467.   //Si no existen las variables de sesión requeridas lo expulsamos a la página de inicio
  468.   if (empty($session["recover"]) || empty($session["id_recover"]))
  469.   {
  470.    return $this->redirect(["site/index"]);
  471.   }
  472.   else
  473.   {
  474.    
  475.    $recover = $session["recover"];
  476.    //El valor de esta variable de sesión la cargamos en el campo recover del formulario
  477.    $model->recover = $recover;
  478.    
  479.    //Esta variable contiene el id del usuario que solicitó restablecer el password
  480.    //La utilizaremos para realizar la consulta a la tabla users
  481.    $id_recover = $session["id_recover"];
  482.    
  483.   }
  484.  
  485.   //Si el formulario es enviado para resetear el password
  486.   if ($model->load(Yii::$app->request->post()))
  487.   {
  488.    if ($model->validate())
  489.    {
  490.     //Si el valor de la variable de sesión recover es correcta
  491.     if ($recover == $model->recover)
  492.     {
  493.      //Preparamos la consulta para resetear el password, requerimos el email, el id
  494.      //del usuario que fue guardado en una variable de session y el código de verificación
  495.      //que fue enviado en el correo al usuario y que fue guardado en el registro
  496.      $table = Users::findOne(["email" => $model->email, "id" => $id_recover, "verification_code" => $model->verification_code]);
  497.      
  498.      //Encriptar el password
  499.      $table->password = crypt($model->password, Yii::$app->params["salt"]);
  500.      
  501.      //Si la actualización se lleva a cabo correctamente
  502.      if ($table->save())
  503.      {
  504.      
  505.       //Destruir las variables de sesión
  506.       $session->destroy();
  507.      
  508.       //Vaciar los campos del formulario
  509.       $model->email = null;
  510.       $model->password = null;
  511.       $model->password_repeat = null;
  512.       $model->recover = null;
  513.       $model->verification_code = null;
  514.      
  515.       $msg = "Enhorabuena, password reseteado correctamente, redireccionando a la página de login ...";
  516.       $msg .= "<meta http-equiv='refresh' content='5; ".Url::toRoute("site/login")."'>";
  517.      }
  518.      else
  519.      {
  520.       $msg = "Ha ocurrido un error";
  521.      }
  522.      
  523.     }
  524.     else
  525.     {
  526.      $model->getErrors();
  527.     }
  528.    }
  529.   }
  530.  
  531.   return $this->render("resetpass", ["model" => $model, "msg" => $msg]);
  532.  
  533.  }
  534. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement