PortfolioUser.php 5.69 KB
<?php

    namespace common\models;

    use Yii;

    /**
     * This is the model class for table "portfolio_user".
     * @property integer   $portfolio_user_id
     * @property integer   $portfolio_id
     * @property integer   $user_id
     * @property string    $position
     * @property integer   $time
     * @property integer   $status
     * @property Portfolio $portfolio
     * @property User      $user
     */
    class PortfolioUser extends \yii\db\ActiveRecord
    {

        public $project;

        public $time_from;

        public $time_to;

        /**
         * @inheritdoc
         */
        public static function tableName()
        {
            return 'portfolio_user';
        }

        /**
         * @inheritdoc
         */
        public function rules()
        {
            return [
                [
                    [
                        'portfolio_id',
                        'user_id',
                    ],
                    'required',
                ],
                [
                    [
                        'portfolio_id',
                        'user_id',
                        'time',
                        'status',
                    ],
                    'integer',
                ],
                [
                    [ 'position' ],
                    'string',
                    'max' => 255,
                ],
                [
                    [
                        'portfolio_id',
                        'user_id',
                    ],
                    'unique',
                    'targetAttribute' => [
                        'portfolio_id',
                        'user_id',
                    ],
                    'message'         => 'The combination of Portfolio ID and User ID has already been taken.',
                ],
                [
                    [ 'portfolio_id' ],
                    'exist',
                    'skipOnError'     => true,
                    'targetClass'     => Portfolio::className(),
                    'targetAttribute' => [ 'portfolio_id' => 'portfolio_id' ],
                ],
                [
                    [ 'user_id' ],
                    'exist',
                    'skipOnError'     => true,
                    'targetClass'     => User::className(),
                    'targetAttribute' => [ 'user_id' => 'id' ],
                ],
            ];
        }

        /**
         * @inheritdoc
         */
        public function attributeLabels()
        {
            return [
                'portfolio_user_id' => Yii::t('app', 'Portfolio User ID'),
                'portfolio_id'      => Yii::t('app', 'Portfolio ID'),
                'user_id'           => Yii::t('app', 'User ID'),
                'position'          => Yii::t('app', 'Должность'),
                'time'              => Yii::t('app', 'Рабочих часов'),
                'status'            => Yii::t('app', 'Статус'),
                'project'           => Yii::t('app', 'Проект'),
                'time_from'         => Yii::t('app', 'часы от'),
                'time_to'           => Yii::t('app', 'часы до'),
            ];
        }

        /**
         * @return \yii\db\ActiveQuery
         */
        public function getPortfolio()
        {
            return $this->hasOne(Portfolio::className(), [ 'portfolio_id' => 'portfolio_id' ])
                        ->inverseOf('portfolioUsers');
        }

        /**
         * @return \yii\db\ActiveQuery
         */
        public function getUser()
        {
            return $this->hasOne(User::className(), [ 'id' => 'user_id' ]);
        }

        public function afterSave($insert, $changedAttributes)
        {
            if(!$insert && array_key_exists('status', $changedAttributes)) {
                $portfolioGallery = PortfolioGallery::find()
                                                    ->where([
                                                        'portfolio_id' => $this->portfolio_id,
                                                        'user_id'      => $this->user_id,
                                                    ])
                                                    ->one();
                if(empty( $portfolioGallery )) {
                    $gallery = new Gallery([
                        'user_id' => $this->user_id,
                        'name'    => $this->portfolio->name,
                        'cover' => '/images/imageNotFound.jpg',
                    ]);
                    if($gallery->save()) {
                        $portfolioGallery = new PortfolioGallery([
                            'gallery_id'   => $gallery->gallery_id,
                            'portfolio_id' => $this->portfolio_id,
                            'user_id'      => $this->user_id,
                        ]);
                        $portfolioGallery->save();
                    } else {
                        throw new \Exception('Невозможно создать галерею пользователя ' . $this->user_id . ' для проекта ' . $this->portfolio_id);
                    }
                }
            }
            parent::afterSave($insert, $changedAttributes);
        }

        public function getPortfolioGallery()
        {
            return $this->hasOne(PortfolioGallery::className(), [
                'portfolio_id' => 'portfolio_id',
                'user_id'      => 'user_id',
            ]);
        }

        public function getGallery()
        {
            return $this->hasOne(Gallery::className(), [
                'gallery_id' => 'gallery_id',
                'user_id'    => 'user_id',
            ])
                        ->via('portfolioGallery');
        }

    }