Guest User

Untitled

a guest
Oct 9th, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 15.93 KB | None | 0 0
  1. <?php
  2. class UserController extends Controller
  3. {
  4.     /**
  5.      * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
  6.      * using two-column layout. See 'protected/views/layouts/column2.php'.
  7.      */
  8.     public $layout='//layouts/column2';
  9.  
  10.     /**
  11.      * @return array action filters
  12.      */
  13.     public function filters()
  14.     {
  15.         return array(
  16.             'accessControl', // perform access control for CRUD operations
  17.             'postOnly + delete', // we only allow deletion via POST request
  18.         );
  19.     }
  20.  
  21.     /**
  22.      * Displays a particular model.
  23.      * @param integer $id the ID of the model to be displayed
  24.      */
  25.     public function actionView($id)
  26.     {
  27.         if  ((Yii::app()->user->isGuest) || (Yii::app()->user->role == 'user')) {
  28.             $this->redirect(Yii::app()->user->returnUrl);
  29.         }
  30.        
  31.         $model = $this->loadModel($id);
  32.        
  33.         $this->render('view', array('model'=> $model));
  34.     }
  35.  
  36.     /**
  37.      * Creates a new model.
  38.      * If creation is successful, the browser will be redirected to the 'view' page.
  39.      */
  40.     public function actionCreate()
  41.     {
  42.        
  43.         if  ((Yii::app()->user->isGuest) || (Yii::app()->user->role == 'user'))
  44.         {
  45.             $this->redirect(Yii::app()->user->returnUrl);
  46.         }
  47.  
  48.         $model=new User;
  49.         $model->setScenario('create');
  50.  
  51.         if(isset($_POST['User']))
  52.         {
  53.             $model->attributes=$_POST['User'];
  54.            
  55.             if($model->validate()) {
  56.                
  57.                 if($model->model()->count("username = :username", array(':username' => $model->username)))
  58.                 {
  59.                     $model->addError('username', 'Псевдоним уже занят другим пользователем');
  60.                 }
  61.                 elseif($model->ref_phone && !$model->model()->count("phone = :ref_phone", array(':ref_phone' => $model->ref_phone)))
  62.                 {
  63.                     $model->addError('ref_phone', 'Номер реферера не зарегистрирован в системе');
  64.                 }
  65.                 else {
  66.  
  67.                     if ((Yii::app()->user->role == 'adm') && $model->role == 2) {
  68.                         $model->role = 'adm';
  69.                     }
  70.                     elseif((Yii::app()->user->role == 'adm') && $model->role == 1) {
  71.                         $model->role  = 'manager';
  72.                     }
  73.                     else {
  74.                         $model->role = 'user';
  75.                     }
  76.  
  77.                     if ($model->ref_phone) {
  78.                         $referal = User::model()->find('phone = :ref_phone', array(':ref_phone' => $model->ref_phone));
  79.                         $model->ref_id = $referal->id;
  80.                     }
  81.  
  82.                     if (Yii::app()->user->role == 'manager') {
  83.                         $model->who_added_id = Yii::app()->user->id;
  84.                     }
  85.                     else {
  86.                         $managers = Yii::app()->db->createCommand("SELECT COUNT(id), who_added_id FROM tbl_user  WHERE who_added_id <> 0 GROUP BY who_added_id ORDER BY COUNT(id)")->queryRow();
  87.                         $model->who_added_id = $managers['who_added_id'];
  88.                     }
  89.  
  90.                     $model->password = $model->hashPassword($model->password, $model->salt);
  91.                     $model->datereg = date("y-m-d H:i:s");
  92.  
  93.                     $model->save(false);
  94.  
  95.                     //если админ добавляет менеджера, делаем чтоб менеджер себя видел
  96.                     if($model->role  == 'manager' && (Yii::app()->user->role == 'adm')) {
  97.                         $model->who_added_id  = $model->id;
  98.                         $model->save(false);
  99.                     }
  100.  
  101.                     $this->redirect(array('view','id' => $model->id));
  102.                 }
  103.             }
  104.         }
  105.  
  106.         if (Yii::app()->user->role == 'adm') {
  107.             $this->render('create',array('model'=>$model));
  108.         }
  109.         else {
  110.             $this->render('mcreate',array('model'=>$model));
  111.         }
  112.     }
  113.  
  114.     public function actionUpdate($id)
  115.     {
  116.        
  117.         if  ((Yii::app()->user->isGuest) || (Yii::app()->user->role == 'user'))
  118.         {
  119.             $this->redirect(Yii::app()->user->returnUrl);
  120.         }
  121.        
  122.         $model=$this->loadModel($id);
  123.         $model->password = '';
  124.        
  125.         $model->setScenario('update');
  126.        
  127.         $oldAttr = $model->getOldAttr();
  128.  
  129.         if(isset($_POST['User']))
  130.         {
  131.             $model->attributes=$_POST['User'];
  132.            
  133.             if($model->validate()) {
  134.                
  135.                 $model->ref_id = $oldAttr['ref_id'];
  136.  
  137.                 if ((Yii::app()->user->role == 'adm') && $model->role == 2) {
  138.                     $model->role = 'adm';
  139.                 }
  140.                 elseif((Yii::app()->user->role == 'adm') && $model->role == 1) {
  141.                     $model->role  = 'manager';
  142.                 }
  143.                 else {
  144.                     $model->role = 'user';
  145.                 }
  146.  
  147.                 if ($model->password == '') {
  148.                     $model->password = $oldAttr['password'];
  149.                 }
  150.                 else {
  151.                     $model->password = $model->hashPassword($model->password, $model->salt);
  152.                 }
  153.                
  154.                 if (Yii::app()->user->role == 'manager') {
  155.                     if ($model->status == 1) {
  156.                         $model->status = 2;
  157.                     }
  158.                 }
  159.  
  160.                 $model->save(false);
  161.  
  162.                 //если текущий админ и роль менеджер, делаем чтоб менеджер себя видел
  163.                 if($model->role == 1 && (Yii::app()->user->role == 'adm')) {
  164.                     $model->who_added_id  = $model->id;
  165.                     $model->save(false);
  166.                 }
  167.                    
  168.                 $this->redirect(array('view','id' => $model->id));
  169.             }
  170.         }
  171.  
  172.         if (Yii::app()->user->role == 'adm') {
  173.             $this->render('update',array('model'=>$model));
  174.         }
  175.         else {
  176.             $this->render('mupdate',array('model'=>$model));
  177.         }
  178.     }
  179.  
  180.     /**
  181.      * Deletes a particular model.
  182.      * If deletion is successful, the browser will be redirected to the 'admin' page.
  183.      * @param integer $id the ID of the model to be deleted
  184.      */
  185.     public function actionDelete($id)
  186.     {
  187.        
  188.         if  ((Yii::app()->user->isGuest) || (Yii::app()->user->role == 'user'))
  189.         {
  190.             $this->redirect(Yii::app()->user->returnUrl);
  191.         }
  192.        
  193.         $model=$this->loadModel($id);
  194.         $model->status = 2;
  195.         $model->save(false);
  196.  
  197.         if(!isset($_GET['ajax']))
  198.             $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('index'));
  199.     }
  200.  
  201.     /**
  202.      * Manages all models.
  203.      */
  204.     public function actionIndex()
  205.     {      
  206.         if  ((Yii::app()->user->isGuest) || (Yii::app()->user->role == 'user'))
  207.         {
  208.             $this->redirect(Yii::app()->user->returnUrl);
  209.         }
  210.  
  211.         $model = new User('search');
  212.         $model->unsetAttributes();
  213.         if(isset($_GET['User']))
  214.             $model->attributes = $_GET['User'];
  215.  
  216.         $admin = false;
  217.         if (Yii::app()->user->role == 'adm') {
  218.             $admin = true;
  219.         }
  220.  
  221.         $this->render('admin',array(
  222.             'model' => $model,
  223.             'admin' => $admin,
  224.         ));
  225.     }
  226.  
  227.     /**
  228.      * Returns the data model based on the primary key given in the GET variable.
  229.      * If the data model is not found, an HTTP exception will be raised.
  230.      * @param integer the ID of the model to be loaded
  231.      */
  232.     public function loadModel($id)
  233.     {
  234.         $model=User::model()->findByPk($id);
  235.         if($model===null)
  236.             throw new CHttpException(404,'The requested page does not exist.');
  237.         return $model;
  238.     }
  239.  
  240.     public function actionReg() {
  241.         $this->layout='//layouts/column1';
  242.         if (Yii::app()->user->isGuest)
  243.         {
  244.             $user = new User();
  245.             $user->setScenario('create');
  246.  
  247.             if (isset($_GET['ref_phone'])) {
  248.                 $user->ref_phone = $_GET['ref_phone'];
  249.             }
  250.  
  251.             if(isset($_POST['User']))
  252.             {
  253.                 $user->attributes = $_POST['User'];
  254.  
  255.                 if($user->validate())
  256.                 {
  257.                     if($user->model()->count("username = :username", array(':username' => $user->username)))
  258.                     {
  259.                         $user->addError('username', 'Псевдоним уже занят другим пользователем');
  260.                     }
  261.                     elseif($user->ref_phone && !$user->model()->count("phone = :ref_phone", array(':ref_phone' => $user->ref_phone)))
  262.                     {
  263.                         $user->addError('ref_phone', 'Номер телефона, пригласившего вас пользователя не зарегистрирован в системе');
  264.                     }
  265.                     else {
  266.                         $managers = Yii::app()->db->createCommand("SELECT COUNT(id), who_added_id FROM tbl_user  WHERE who_added_id <> 0 GROUP BY who_added_id ORDER BY COUNT(id)")->queryRow();
  267.                         $user->who_added_id = $managers['who_added_id'];
  268.  
  269.                         $user->datereg = date("y-m-d H:i:s");
  270.                         $user->password = $user->hashPassword($user->password, $user->salt);
  271.                         $user->save(false);
  272.                         $reg_ok = true;
  273.  
  274.                         $this->render('form_reg_ok');
  275.                     }
  276.                 }
  277.             }
  278.             if (empty($reg_ok)) {
  279.                 $this->render('form_reg', array('form'=>$user));
  280.             }
  281.         }
  282.         else {
  283.             $this->redirect(Yii::app()->user->returnUrl);
  284.         }
  285.     }
  286.  
  287.     /**
  288.      * Performs the AJAX validation.
  289.      * @param CModel the model to be validated
  290.      */
  291.     protected function performAjaxValidation($model)
  292.     {
  293.         if(isset($_POST['ajax']) && $_POST['ajax']==='user-form')
  294.         {
  295.             echo CActiveForm::validate($model);
  296.             Yii::app()->end();
  297.         }
  298.     }
  299.    
  300.     public function actionCheck($id)
  301.     {
  302.         $this->layout='//layouts/column2';
  303.  
  304.         if  ((Yii::app()->user->isGuest) || (Yii::app()->user->role == 'user'))
  305.         {
  306.             $this->redirect(Yii::app()->user->returnUrl);
  307.         }
  308.        
  309.         $model = Yii::app()->db->createCommand()
  310.             ->select('*')
  311.             ->from('tbl_payments')
  312.             ->where('user_id=:id and status=:status', array(':id' => $id, ':status' => 'processing'))
  313.             ->queryRow();
  314.            
  315.         if(empty($model))
  316.             throw new CHttpException(404,'The requested page does not exist.');
  317.  
  318.         if (isset($_POST['check'])) {
  319.             Yii::app()->db->createCommand()->update('tbl_payments', array('status'=> 'processed'),
  320.                                 'user_id=:id', array(':id' => $id));
  321.             Yii::app()->db->createCommand()->update('tbl_user', array('pay_status'=> 0),
  322.                                 'id=:id', array(':id' => $id));
  323.             $this->redirect(array('view','id' => $id));
  324.         }
  325.        
  326.         $this->render('check',array(
  327.             'model'=>$model,
  328.         ));
  329.     }
  330.    
  331.     public function actionLevelup($id) {
  332.         if  ((Yii::app()->user->isGuest) || (Yii::app()->user->role == 'user'))
  333.         {
  334.             $this->redirect(Yii::app()->user->returnUrl);
  335.         }
  336.  
  337.         $model = $this->loadModel($id);
  338.        
  339.         if ($model->status != 'canup') {
  340.             $model = 'denied';
  341.             $payment = array();
  342.         }
  343.         else {
  344.             if($model->paywait == 0) {
  345.                 $model = $this->addReferer($model);
  346.  
  347.                 $model->datetopay = date("y-m-d H:i:s");
  348.                 $model->paywait = 1;
  349.                 $model->save(false);
  350.  
  351.                 $price = Level::model()->find('id=:id', array(':id' => $model->lvl+1));
  352.                 $card = $this->getCardtoPay($model);
  353.            
  354.                 $pay = new Payments;
  355.                 $pay->user_id = $model->id;
  356.                 $pay->amount  = $price->price;
  357.                 $pay->status  = 'processing';
  358.                 $pay->recipient = $card;
  359.                 $pay->pay_to_id = $model->id_for_pay;
  360.                 $pay->desc = 'pay for lvl'.$model->lvl+1;
  361.                 $pay->date = $model->datetopay;
  362.                 $pay->save(false);
  363.             }
  364.            
  365.             $payment['card']  = $this->getCardtoPay($model);
  366.             $payment['price'] = Level::model()->find('id=:id', array(':id' => $model->lvl+1));
  367.  
  368.             if (isset($_POST['up'])) {
  369.                
  370.                 $pay = Payments::model()->find('user_id=:id AND date=:date', array(':id' => $model->id, ':date' => $model->datetopay));
  371.                 $pay->status = 'processed';
  372.                 $pay->save(false);
  373.                
  374.                 $model->lvl = $model->lvl +1;
  375.                 $model->status = 'active';
  376.                 $model->paywait = 0;
  377.                 $model->datetopay = '0000-00-00 00:00:00';
  378.                 $model->save(false);
  379.  
  380.                 Yii::app()->db->createCommand()->insert('tbl_ref_counter',
  381.                         array('count_own' => 0,
  382.                               'count_all' => 0,
  383.                               'user_id' => $model->id,
  384.                               'lvl' => $model->lvl
  385.                               ));
  386.  
  387.                 $this->redirect(array('view','id' => $id));
  388.             }
  389.         }
  390.        
  391.         $this->render('up',array(
  392.             'model' => $model, 'payment' => $payment
  393.         ));
  394.     }
  395.    
  396.  
  397.  
  398.     public function addReferer($model) {
  399.  
  400.         $lvl = $model->lvl + 1;
  401.  
  402.         //записываем кому нибудь в рефереры
  403.         $ref = Yii::app()->db->createCommand('SELECT user_id, count_own, count_all FROM tbl_ref_counter WHERE lvl = '.$lvl.' AND count_own < 3 ORDER BY id, count_own')->queryRow();
  404.  
  405.         $model->id_for_pay = $ref['user_id'];
  406.         $model->save(false);
  407.  
  408.         $tuser = $model;
  409.         if ($model->lvl == 0)
  410.         {
  411.             $tuser = User::model()->find('id=:id', array(':id' => $model->id_for_pay));
  412.         }
  413.         else
  414.         {
  415.             $i = 1;
  416.             $alg = array(
  417.                     '2' => '2',
  418.                     '3' => '3',
  419.                     '4' => '4',
  420.                     '5' => '1',
  421.                     '6' => '2',
  422.                     '7' => '3',
  423.                     '8' => '4'
  424.                 );
  425.             $stop = $alg[$lvl];
  426.  
  427.             while ($i <= $stop) {
  428.                 if ($tuser->id_for_pay) {
  429.                     $tuser = User::model()->find('id=:id', array(':id' => $tuser->id_for_pay));
  430.                     $i++;
  431.                 }
  432.             }
  433.         }
  434.  
  435.         $user_to_pay = Yii::app()->db->createCommand('SELECT user_id, count_own, count_all FROM tbl_ref_counter WHERE lvl = '.$lvl.' AND user_id = '.$tuser->id)->queryRow();
  436.        
  437.         //поднимаем счетчик полученых оплат
  438.         Yii::app()->db->createCommand()->update('tbl_ref_counter', array('count_all' => $user_to_pay['count_all'] + 1),
  439.             'user_id=:ref_id and lvl=:ref_lvl', array(':ref_id' => $user_to_pay['user_id'], ':ref_lvl' => $lvl));
  440.        
  441.         //поднимаем счетчик рефералов
  442.         Yii::app()->db->createCommand()->update('tbl_ref_counter', array('count_own' => $ref['count_own'] + 1),
  443.             'user_id=:ref_id and lvl=:ref_lvl', array(':ref_id' => $ref['user_id'], ':ref_lvl' => $lvl));
  444.        
  445.        
  446.         return $model;
  447.     }
  448.  
  449.     public function getCardtoPay($user) {
  450.  
  451.         $tuser = $user;
  452.  
  453.         if ($user->lvl == 0)
  454.         {
  455.             $tuser = User::model()->find('id=:id', array(':id' => $user->id_for_pay));
  456.         }
  457.         else
  458.         {
  459.             $i = 1;
  460.             $alg = array(
  461.                     '1' => '2',
  462.                     '2' => '3',
  463.                     '3' => '4',
  464.                     '4' => '1',
  465.                     '5' => '2',
  466.                     '6' => '3',
  467.                     '7' => '4',
  468.                 ); 
  469.             $stop = $alg[$user->lvl];
  470.  
  471.             while ($i <= $stop) {
  472.                 if ($tuser->id_for_pay) {
  473.                     $tuser = User::model()->find('id=:id', array(':id' => $tuser->id_for_pay));
  474.                     $i++;
  475.                 }
  476.             }
  477.         }
  478.         return $tuser->card;
  479.     }
  480.  
  481.     public function ActionJunkcheck() {
  482.         $users = Yii::app()->db->createCommand('SELECT id, lvl, datetopay, id_for_pay FROM tbl_user WHERE datetopay <> "0000-00-00 00:00:00"')->queryAll();
  483.         if (!empty($users)) {
  484.             foreach ($users as $user) {
  485.                 if ((((strtotime(date("y-m-d H:i:s")) - strtotime($user['datetopay']))/60)) > 60) {
  486.                     $model = $this->loadModel($user['id']);
  487.  
  488.                     Yii::app()->db->createCommand()->delete('tbl_payments', 'user_id=:id AND date=:date', array(':id' => $model->id, ':date' => $model->datetopay));
  489.  
  490.                     $model->paywait = 0;
  491.                     $model->datetopay = '0000-00-00 00:00:00';
  492.                     $model->save(false);
  493.  
  494.                     $tuser = $model;
  495.                     $lvl = $model->lvl +1;
  496.                     if ($model->lvl == 0) {
  497.                         $tuser = User::model()->find('id=:id', array(':id' => $model->id_for_pay));
  498.                     }
  499.                     else {
  500.                         $i = 1;
  501.                         $alg = array(
  502.                             '2' => '2',
  503.                             '3' => '3',
  504.                             '4' => '4',
  505.                             '5' => '1',
  506.                             '6' => '2',
  507.                             '7' => '3',
  508.                             '8' => '4'
  509.                             );
  510.                         $stop = $alg[$lvl];
  511.  
  512.                         while ($i <= $stop) {
  513.                             if ($tuser->id_for_pay) {
  514.                                 $tuser = User::model()->find('id=:id', array(':id' => $tuser->id_for_pay));
  515.                                 $i++;
  516.                             }
  517.                         }
  518.                     }
  519.  
  520.                     $user_to_pay = Yii::app()->db->createCommand('SELECT user_id, count_own, count_all FROM tbl_ref_counter WHERE lvl = '.$lvl.' AND user_id = '.$tuser->id)->queryRow();
  521.                     $ref = Yii::app()->db->createCommand('SELECT user_id, count_own, count_all FROM tbl_ref_counter WHERE lvl = '.$lvl.' AND user_id = '.$model->id_for_pay)->queryRow();
  522.  
  523.                     //опускаем счетчик полученых оплат
  524.                     Yii::app()->db->createCommand()->update('tbl_ref_counter', array('count_all' => $user_to_pay['count_all'] - 1),
  525.                         'user_id=:ref_id and lvl=:ref_lvl', array(':ref_id' => $user_to_pay['user_id'], ':ref_lvl' => $lvl));
  526.        
  527.                     //опускаем счетчик рефералов
  528.                     Yii::app()->db->createCommand()->update('tbl_ref_counter', array('count_own' => $ref['count_own'] - 1),
  529.                     'user_id=:ref_id and lvl=:ref_lvl', array(':ref_id' => $ref['user_id'], ':ref_lvl' => $lvl));
  530.                 }
  531.             }
  532.         }
  533.         //проверяем возможность повышения уровня
  534.         $users = $user_to_pay = Yii::app()->db->createCommand('SELECT DISTINCT u.id, u.lvl, c.count_all, c.count_own FROM tbl_ref_counter c INNER JOIN tbl_user u ON c.user_id = u.id WHERE c.count_all >=3 AND c.lvl = u.lvl')->queryAll();
  535.         $alg = array(
  536.             '1' => '3',
  537.             '2' => '9',
  538.             '3' => '27',
  539.             '4' => '81',
  540.             '5' => '3',
  541.             '6' => '9',
  542.             '7' => '27',
  543.             '8' => '81'
  544.             );
  545.  
  546.         foreach ($users as $user) {
  547.             $model = $this->loadModel($user['id']);
  548.             if ($user['count_all'] >= $alg[$user['lvl']]) {
  549.                 $model->status = 'canup';
  550.                 $model->save(false);
  551.             }
  552.         }
  553.     }
  554. }
Add Comment
Please, Sign In to add comment