ProfileController.php 2.94 KB
<?php

namespace frontend\modules\user\controllers;

use Yii;
use yii\db\Exception;
use yii\filters\AccessControl;
use yii\log\Logger;
//
use frontend\components\BaseUserSigInController;
use frontend\modules\user\models\{
    Profile
};

/**
 * Class ProfileController
 *
 * @package frontend\modules\user\controllers
 * @author FilamentV <vortex.filament@gmail.com>
 * @copyright (c), Thread
 */
class ProfileController extends BaseUserSigInController
{

    protected $model = Profile::class;
    public $title = "Profile";
    public $defaultAction = 'index';
    public $layout = "@app/layouts/user-profile";

    /**
     *
     */
    public function init()
    {
        parent::init();

        $this->breadcrumbs = [
            [
                'label' => Yii::t('user', 'Private Office'),
            ],
            [
                'label' => Yii::t('user', 'Profile'),
            ]
        ];
    }

    /**
     * @return array
     */
    public function behaviors()
    {
        return [
            'AccessControl' => [
                'class' => AccessControl::class,
                'rules' => [
                    [
                        'allow' => true,
                        'actions' => ['index', 'update'],
                        'roles' => ['@'],
                    ],
                    [
                        'allow' => true,
                        'roles' => ['?']
                    ],
                    [
                        'allow' => false,
                    ],
                ],
            ],
        ];
    }

    /**
     * @return string
     */
    public function actionIndex()
    {
        /** @var Profile $model */
        $model = new $this->model;
        $model->setScenario('frontend');
        $user = $model::findByUserId(Yii::$app->getUser()->id);

        return $this->render('index', [
            'model' => $user,
        ]);
    }

    /**
     * @return string
     */
    public function actionUpdate()
    {
        //
        $this->breadcrumbs[] = [
            'label' => Yii::t('app', 'Update'),
        ];
        //

        /** @var Profile $model */
        $model = new $this->model;
        $model->setScenario('ownEdit');
        $profile = $model::findByUserId(Yii::$app->getUser()->id);
        $profile->setScenario('ownEdit');
        if ($profile->load(Yii::$app->getRequest()->post())) {
            $transaction = $profile::getDb()->beginTransaction();
            try {
                $save = $profile->save();
                if ($save) {
                    $transaction->commit();
                    return $this->redirect(['index']);
                } else {
                    $transaction->rollBack();
                }
            } catch (Exception $e) {
                Yii::getLogger()->log($e->getMessage(), Logger::LEVEL_ERROR);
                $transaction->rollBack();
            }
        }
        return $this->render('_form', [
            'model' => $profile,
        ]);
    }

}