AccountsController.php 13 KB
<?php
    namespace frontend\controllers;

    use common\models\CompanyInfo;
    use common\models\Fields;
    use common\models\Job;
    use common\models\Language;
    use common\models\Payment;
    use common\models\Specialization;
    use common\models\UserPayment;
    use common\models\UserSpecialization;
    use Yii;
    use common\models\User;
    use common\models\UserInfo;

    use yii\filters\AccessControl;
    use yii\web\Controller;
    use yii\web\NotFoundHttpException;

    /**
     * Site controller
     */
    class AccountsController extends Controller
    {

        public $layout = 'admin';

        public function behaviors()
        {
            return [
                'access' => [
                    'class' => AccessControl::className(),
                    'rules' => [
                        [
                            //'actions' => ['cabinet','change-password', 'bookmarks', 'projects'],
                            'allow' => true,
                            'roles' => [ '@' ],
                        ],
                    ],
                ],
            ];
        }

        public function actionCabinet()
        {

            $user = $this->findUser(Yii::$app->user->identity->id);

            $langs = Language::getActiveLanguages();

            if($user->load(Yii::$app->request->post()) && $user->save()) {
                $user->userInfo->load(Yii::$app->request->post());
                $user->userInfo->save();
                Fields::saveFieldData(Yii::$app->request->post('Fields'), $user->id, $user::className(), 'ru');
                return $this->render('cabinet', [
                    'user'      => $user,
                    'user_info' => $user->userInfo,
                    'langs'     => $langs,
                ]);

            } else {

                return $this->render('cabinet', [
                    'user'      => $user,
                    'user_info' => $user->userInfo,
                    'langs'     => $langs,
                ]);

            }

        }

        public function actionBookmarks()
        {
            return $this->render('bookmarks');
        }

        public function actionGeneral()
        {
            $user_info = UserInfo::find()
                                 ->where([ 'user_id' => \Yii::$app->user->getId() ])
                                 ->one();
            $company_info = CompanyInfo::find()
                                       ->where([ 'user_id' => \Yii::$app->user->getId() ])
                                       ->one();
            $user = \Yii::$app->user->identity;
            if(empty( $user_info )) {
                $user_info = new UserInfo([ 'user_id' => \Yii::$app->user->getId() ]);
            }
            if(empty( $company_info )) {
                $company_info = new CompanyInfo([ 'user_id' => \Yii::$app->user->getId() ]);
            }
            $post = \Yii::$app->request->post();
            if(!empty( $post )) {
                $user_info->load($post);
                $company_info->load($post);
                $user->load($post);
                if($user_info->save() && $user->save() && $company_info->save()) {
                    \Yii::$app->session->setFlash('userinfoupdate', 'Информация успешно обновлена');
                } else {
                    \Yii::$app->session->setFlash('userinfoupdate', 'Ошибка обновления. Проверьте форму');
                }
            }
            return $this->render('general', [
                'user_info'    => $user_info,
                'user'         => $user,
                'company_info' => $company_info,
            ]);
        }

        public function actionPortfolio()
        {

        }

        /**
         * $user User
         */
        public function actionSetting()
        {
            $user = \Yii::$app->user->identity;
            $post = \Yii::$app->request->post('User');
            if(!empty( $post )) {
                if(empty( $post[ 'new_password' ] )) {
                    $user->addError('new_password', 'Введите новый пароль');
                } else {
                    $user->new_password = $post[ 'new_password' ];
                }
                if(empty( $post[ 'old_password' ] )) {
                    $user->addError('old_password', 'Введите новый пароль');
                } else {
                    $user->old_password = $post[ 'old_password' ];
                }
                if(empty( $post[ 'password_reply' ] ) || $post[ 'password_reply' ] !== $post[ 'new_password' ]) {
                    $user->addError('password_reply', 'Неправильный повтор пароля');
                } else {
                    $user->password_reply = $post[ 'password_reply' ];
                }
                if(!$user->hasErrors()) {
                    if($user->validatePassword($user->old_password)) {
                        $user->setPassword($user->new_password);
                        $user->generateAuthKey();
                        if($user->save()) {
                            \Yii::$app->session->setFlash('passwordupdate', 'Пароль успешно обновлен');
                        }
                    } else {
                        $user->addError('old_password', 'Неправильный старый пароль');
                    }
                }
            }
            return $this->render('setting', [ 'user' => $user ]);
        }

        public function actionContacts()
        {
            $user_info = UserInfo::find()
                                 ->where([ 'user_id' => \Yii::$app->user->getId() ])
                                 ->one();
            if(empty( $user_info )) {
                $user_info = new UserInfo([ 'user_id' => \Yii::$app->user->getId() ]);
            }
            if(!empty( \Yii::$app->request->post() )) {
                Fields::saveFieldData(Yii::$app->request->post('Fields'), \Yii::$app->user->identity->id, User::className(), 'ru');
                $user_info->load(\Yii::$app->request->post());
                $user_info->save();
            }
            return $this->render('contacts', [ 'user_info' => $user_info ]);
        }

        public function actionService()
        {
            $user_info = UserInfo::find()
                                 ->where([ 'user_id' => \Yii::$app->user->getId() ])
                                 ->one();
            if(empty( $user_info )) {
                $user_info = new UserInfo([ 'user_id' => \Yii::$app->user->getId() ]);
            }
            $post = \Yii::$app->request->post();
            if(!empty( $post )) {
                $user_info->load($post);
                $user_info->save();
                $user_specialization_values = [ ];
                $user_payment_values = [ ];
                UserSpecialization::deleteAll([ 'user_id' => \Yii::$app->user->getId() ]);
                UserPayment::deleteAll([ 'user_id' => \Yii::$app->user->getId() ]);
                foreach($post[ 'UserSpecialization' ][ 'specialization_id' ] as $index => $value) {
                    $user_specialization_values[] = (new UserSpecialization([ 'user_id'           => \Yii::$app->user->getId(),
                                                                              'specialization_id' => $value,
                    ]))->save();
                }
                foreach($post[ 'UserPayment' ][ 'payment_id' ] as $index => $value) {
                    $user_payment_values[] = (new UserPayment([ 'user_id'    => \Yii::$app->user->getId(),
                                                                'payment_id' => $value,
                    ]))->save();
                }
            }
            $user_specialization = UserSpecialization::find()
                                                     ->where([ 'user_id' => \Yii::$app->user->getId() ])
                                                     ->select([ 'specialization_id' ])
                                                     ->column();
            $user_payment = UserPayment::find()
                                       ->where([ 'user_id' => \Yii::$app->user->getId() ])
                                       ->select([ 'payment_id' ])
                                       ->column();
            $user_specialization_input = new UserSpecialization([ 'user_id' => \Yii::$app->user->getId() ]);
            $user_payment_input = new UserPayment([ 'user_id' => \Yii::$app->user->getId() ]);
            $specialization = Specialization::find()
                                            ->select([
                                                'specialization_name',
                                                'specialization_id',
                                            ])
                                            ->indexBy('specialization_id')
                                            ->asArray()
                                            ->column();
            $payment = Payment::find()
                              ->select([
                                  'name',
                                  'payment_id',
                              ])
                              ->indexBy('payment_id')
                              ->asArray()
                              ->column();
            return $this->render('service', [
                'user_info'                 => $user_info,
                'specialization'            => $specialization,
                'user_specialization'       => $user_specialization,
                'user_specialization_input' => $user_specialization_input,
                'payment'                   => $payment,
                'user_payment'              => $user_payment,
                'user_payment_input'        => $user_payment_input,
            ]);
        }

        public function actionAddSkills()
        {
            $user = \Yii::$app->user->identity;
            if(!empty(\Yii::$app->request->post())) {
                Fields::saveFieldData(Yii::$app->request->post('Fields'), \Yii::$app->user->identity->id, User::className(), 'ru');
            }
            return $this->render('add-skills', ['user' => $user]);
        }

        public function actionDescription()
        {
            $user_info = UserInfo::find()
                                 ->where([ 'user_id' => \Yii::$app->user->getId() ])
                                 ->one();
            if(empty( $user_info )) {
                $user_info = new UserInfo([ 'user_id' => \Yii::$app->user->getId() ]);
            }
            $post = \Yii::$app->request->post();
            if(!empty($post)) {
                $user_info->load($post);
                $user_info->save();
            }
            return $this->render('description', [ 'user_info' => $user_info ]);
        }

        public function actionEmployment()
        {
            $post = \Yii::$app->request->post();
            if(!empty( $post )) {
                $job = [ ];
                for($i = 0; $i < count($post[ 'Job' ]); $i++) {
                    $job[ $i ] = new Job([
                        'user_id' => \Yii::$app->user->getId(),
                        'current' => 0,
                    ]);
                }
                if(Job::loadMultiple($job, $post)) {
                    $job[ 0 ]->current = 1;
                    if(Job::validateMultiple($job)) {
                        Job::deleteAll([ 'user_id' => \Yii::$app->user->getId() ]);
                        foreach($job as $onejob) {
                            $onejob->save(false);
                        }
                    }
                }
            } else {
                $job = Job::find()
                          ->where([ 'user_id' => \Yii::$app->user->getId() ])
                          ->orderBy([ 'current' => SORT_DESC ])
                          ->all();
                if(empty( $job )) {
                    $job[] = new Job([
                        'user_id' => \Yii::$app->user->getId(),
                        'current' => 0,
                    ]);
                }
                if(!$job[ 0 ]->current) {
                    array_unshift($job, new Job([
                        'user_id' => \Yii::$app->user->getId(),
                        'current' => 1,
                    ]));
                }
            }
            return $this->render('employment', [ 'job' => $job ]);
        }

        public function actionProjects()
        {
            return $this->render('projects');
        }

        public function actionGallery()
        {

        }

        public function actionGetForm($lastindex)
        {
            return $this->renderAjax('_job_form', [ 'index' => $lastindex + 1 ]);
        }

        /**
         * @param $id
         *
         * @return User
         * @throws NotFoundHttpException
         */
        protected function findUser($id)
        {

            if($model = User::findOne([ "id" => $id ])) {
                return $model;
            } else {
                throw new NotFoundHttpException('The requested page does not exist.');
            }
        }

    }