ProductSpec.php 4.1 KB
<?php
    
    namespace common\models;
    
    use common\modules\product\models\Product;
    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_text
     * @property string  $tech_spec_link
     * @property string  $tech_char_link
     * @property string  $instruction
     * @property Product $product
     */
    class ProductSpec extends \yii\db\ActiveRecord
    {
        
        /**
         * @var UploadedFile
         */
        public $techSpecFile;
        
        /**
         * @var UploadedFile
         */
        public $techCharFile;
        
        /**
         * @inheritdoc
         */
        public static function tableName()
        {
            return 'product_spec';
        }
        
        /**
         * @inheritdoc
         */
        public function rules()
        {
            return [
                [
                    [
                        'tech_spec_text',
                        'instruction',
                    ],
                    'string',
                ],
//                [
//                    [ 'product_id' ],
//                    'exist',
//                    'skipOnError'     => true,
//                    'targetClass'     => Product::className(),
//                    'targetAttribute' => [ 'product_id' => 'product_id' ],
//                ],
                [
                    [
                        '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_text'  => 'Tech Spec Text',
                'tech_spec_link'  => 'Tech Spec Link',
                'tech_char_link'  => 'Tech Char Link',
                'instruction'     => 'Instruction',
                '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;
            }
        }
    }