ProductSpec.php 4.93 KB
<?php
    
    namespace common\models;
    
    use common\modules\language\behaviors\LanguageBehavior;
    use common\modules\product\models\Product;
    use Yii;
    use yii\db\ActiveQuery;
    use yii\db\ActiveRecord;
    use yii\web\Request;
    use yii\web\UploadedFile;
    
    /**
     * This is the model class for table "product_spec".
     * @property integer           $product_spec_id
     * @property integer           $product_id
     * @property string            $tech_spec_link
     * @property string            $tech_char_link
     * @property Product           $product
     * * From language behavior *
     * @property ProductSpecLang   $lang
     * @property ProductSpecLang[] $langs
     * @property ProductSpecLang   $object_lang
     * @property string            $ownerKey
     * @property string            $langKey
     * @property ProductSpecLang[] $model_langs
     * @property bool              $transactionStatus
     * @method string           getOwnerKey()
     * @method void             setOwnerKey( string $value )
     * @method string           getLangKey()
     * @method void             setLangKey( string $value )
     * @method ActiveQuery      getLangs()
     * @method ActiveQuery      getLang( integer $language_id )
     * @method ProductSpecLang[]    generateLangs()
     * @method void             loadLangs( Request $request )
     * @method bool             linkLangs()
     * @method bool             saveLangs()
     * @method bool             getTransactionStatus()
     * * End language behavior *
     */
    class ProductSpec extends ActiveRecord
    {
        
        /**
         * @var UploadedFile
         */
        public $techSpecFile;
        
        /**
         * @var UploadedFile
         */
        public $techCharFile;
        
        /**
         * @inheritdoc
         */
        public static function tableName()
        {
            return 'product_spec';
        }
        
        public function behaviors()
        {
            return [
                'language' => [
                    'class' => LanguageBehavior::className(),
                ],
            ];
        }
        
        /**
         * @inheritdoc
         */
        public function rules()
        {
            return [
                [
                    [
                        'techSpecFile',
                        'techCharFile',
                    ],
                    'file',
                    'extensions' => 'txt, pdf, xls, xlsx',
                ],
            ];
        }
        
        /**
         * @inheritdoc
         */
        public function attributeLabels()
        {
            return [
                'product_spec_id' => Yii::t('app', 'product_spec_id'),
                'product_id'      => Yii::t('app', 'product_id'),
                'tech_spec_link'  => Yii::t('app', 'tech_spec_link'),
                'tech_char_link'  => Yii::t('app', 'tech_char_link'),
                'techSpecFile'    => Yii::t('app', 'techSpecFile'),
                'techCharFile'    => Yii::t('app', 'techCharFile'),
            ];
        }
        
        public function upload()
        {
            $storage = \Yii::getAlias('@storage');
            $product_dir = $storage . '/product_spec/' . $this->product_id;
            if(!is_dir($product_dir)) {
                mkdir($product_dir);
            }
            if($this->validate()) {
                if(!empty( $this->techSpecFile )) {
                    $path = $product_dir . '/' . $this->techSpecFile->baseName . '.' . $this->techSpecFile->extension;
                    $this->tech_spec_link = $this->techSpecFile->baseName . '.' . $this->techSpecFile->extension;
                    $this->techSpecFile->saveAs($path);
                }
                if(!empty( $this->techCharFile )) {
                    $path = $product_dir . '/' . $this->techCharFile->baseName . '.' . $this->techCharFile->extension;
                    $this->tech_char_link = $this->techCharFile->baseName . '.' . $this->techCharFile->extension;
                    $this->techCharFile->saveAs($path);
                }
                return true;
            } else {
                return false;
            }
        }
        
        /**
         * @return \yii\db\ActiveQuery
         */
        public function getProduct()
        {
            return $this->hasOne(Product::className(), [ 'product_id' => 'product_id' ]);
        }
        
        public function getTechSpecUrl()
        {
            if(!empty( $this->tech_spec_link )) {
                return '/storage/product_spec/' . $this->product_id . '/' . $this->tech_spec_link;
            } else {
                return false;
            }
        }
        
        public function getTechCharUrl()
        {
            if(!empty( $this->tech_char_link )) {
                return '/storage/product_spec/' . $this->product_id . '/' . $this->tech_char_link;
            } else {
                return false;
            }
        }
    }