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

use common\models\CompanyInfo;
use common\models\Fields;
use common\models\Job;
use common\models\Language;
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()
    {
        if(!empty(\Yii::$app->request->post())) {
            Fields::saveFieldData( Yii::$app->request->post('Fields'), \Yii::$app->user->identity->id, User::className(),'ru');
        }
        $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()]);
        }
        return $this->render('contacts', ['user_info' => $user_info]);
    }

    public function actionService()
    {
        return $this->render('service');
    }

    public function actionAddSkills()
    {

    }

    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.');
        }
    }



}