ProductSpec.php 4.64 KB
<?php
    
    namespace common\models;
    
    use common\modules\language\behaviors\LanguageBehavior;
    use common\modules\product\models\Product;
    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
     * @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, ActiveRecord[] $model_langs)
     * @method bool             linkLangs(ActiveRecord[] $model_langs)
     * @method bool             saveLangs(ActiveRecord[] $model_langs)
     * * End language behavior *
     */
    class ProductSpec extends \yii\db\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' => 'Product Spec ID',
                'product_id'      => 'Product ID',
                'tech_spec_link'  => 'Tech Spec Link',
                'tech_char_link'  => 'Tech Char Link',
                'techSpecFile'    => 'techSpecFile',
                'techCharFile'    => '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;
            }
        }
    }