Products.php 6.41 KB
<?php

namespace app\modules\admin\models;
use Yii;
use app\components\Translite;
use app\components\resize;
use yii\web\UploadedFile;

class Products extends \yii\db\ActiveRecord
{
    public $old_image;
    public $catalog_parent;
    public $catalog;
    public $catalog_parent_image;
    public $catalog_image;
    public static function tableName()
    {
        return 'products';
    }
	
	public function rules()
	{
		return [
			[
			    [
			        'name','art'
                ],
                'required'
            ],
			[
			    [
			        'fasovka','type','brends','catalog_id','old_image',
                    'body','char','new','top','akciya', 'out_of_stock','translit',
                    'meta_title','meta_keywords','meta_description','similar','featured'
                ],
                'safe'
            ],
            [
                ['image'],
                'file',
                'extensions'=>'jpg, gif, png',
                'skipOnEmpty'=>true
            ],
        ];
	}	
	
	public function attributeLabels()
	{
		return [
			'name'=>'Название',
			'body'=>'Описание',
            'char'=>'Характеристики',
			'sort'=>'Сорт.',
            'image'=>'Изображения',
            'fasovka'=>'Фасовка',
            'type'=>'Типы',
            'brends'=>'Производители',
            'top'=>'Топ',
            'new'=>'Новинка',
            'akciya'=>'Акция',
            'out_of_stock'=>'Нет в наличии',
            'similar'=>'Похожие товары',
            'featured'=>'Рекоммендуемые товары',
		];
	}
        
	public function beforeSave($insert) {
		
      
                if (!$this->translit)
			$this->translit = Translite::rusencode($this->name);
                
                
		if($image = UploadedFile::getInstance($this,'image')){			
			
                        $this->deleteImage($this->old_image);
                        //$this->image = $image;
			$this->image = time() . '_' . rand(1, 1000) . '.' . $image->extension;
                        $image->saveAs('upload/products/'.$this->image);
			
			$resizeObj = new resize('upload/products/'.$this->image);
			$resizeObj -> resizeImage(180, 240, 'landscape');
                        $resizeObj -> saveImage('upload/products/ico/'.$this->image, 100);
			$resizeObj -> resizeImage(400, 400, 'landscape');
                        $resizeObj -> saveImage('upload/products/big/'.$this->image, 100);
                }else $this->image = $this->old_image;
                
                

		return parent::beforeSave($insert);
	}
        
        public function afterSave($insert, $changedAttributes) {
                if(!$insert) {
                    ProductsFasovka::deleteAll(['product_id' => $this->id]);
                }
                if(is_array($this->fasovka)) {
                    foreach ($this->fasovka as $fasovka) {
                        $ProductsFasovka = new ProductsFasovka();
                        $ProductsFasovka->product_id = $this->id;
                        $ProductsFasovka->fasovka_id = $fasovka;
                        $ProductsFasovka->save();
                    }
                }
                
                
                if(!$insert) {
                    ProductsType::deleteAll(['product_id' => $this->id]);
                }
                if(is_array($this->type)) {
                    foreach ($this->type as $type) {
                        $ProductsType = new ProductsType();
                        $ProductsType->product_id = $this->id;
                        $ProductsType->type_id = $type;
                        $ProductsType->save();
                    }
                } 
                
                
                if(!$insert) {
                    ProductsBrends::deleteAll(['product_id' => $this->id]);
                }
                if(is_array($this->brends)) {
                    foreach ($this->brends as $brend) {
                        $ProductsBrends = new ProductsBrends();
                        $ProductsBrends->product_id = $this->id;
                        $ProductsBrends->brend_id = $brend;
                        $ProductsBrends->save();
                    }
                }                 
            
            return parent::afterSave($insert, $changedAttributes);
            
        }
        
        public function beforeDelete() {
            $this->deleteImage($this->image); 
            return parent::beforeDelete();
        }
        
        public function getFasovka()
        { 
            return $this->hasMany(Fasovka::className(), ['id' => 'fasovka_id'])->viaTable(ProductsFasovka::tableName(), ['product_id' => 'id']);
        }
        
        public function setFasovka($fasovka)
        {
            $this->fasovka = $fasovka;
        }
        
        public function getType()
        { 
            return $this->hasMany(Type::className(), ['id' => 'type_id'])->viaTable(ProductsType::tableName(), ['product_id' => 'id']);
        }
        
        public function setType($type)
        {
            $this->type = $type;
        }
        
        public function getBrends()
        { 
            return $this->hasMany(Brends::className(), ['id' => 'brend_id'])->viaTable(ProductsBrends::tableName(), ['product_id' => 'id']);
        }
        
        public function setBrends($brends)
        {
            $this->brends = $brends;
        }
        
      
        public function getCatalog()
        {
            return $this->hasOne(Catalog::className(), ['id' => 'catalog_id']);
        }
        
        public function getMods()
        {
            return $this->hasMany(Mod::className(), ['product_id' => 'id']);
        } 
        
        public function getFotos()
        {
            return $this->hasMany(Fotos::className(), ['product_id' => 'id']);
        }        
        
        public function deleteImage($file){ 
                        if(!empty($file)){
                            @unlink('upload/products/'.$file);
                            @unlink('upload/products/ico/'.$file);
                            @unlink('upload/products/big/'.$file);
                        }            
        }          
        
        
        
      
	

}