You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					157 lines
				
				3.7 KiB
			
		
		
			
		
	
	
					157 lines
				
				3.7 KiB
			| 
											7 years ago
										 | <?php
 | ||
|  | 
 | ||
|  | namespace common\modules\banners\entities;
 | ||
|  | 
 | ||
|  | use common\modules\banners\entities\queries\BannerQuery;
 | ||
|  | use yii\behaviors\TimestampBehavior;
 | ||
|  | use yii\db\ActiveRecord;
 | ||
|  | use yii\web\UploadedFile;
 | ||
|  | use Yii;
 | ||
|  | 
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * This is the model class for table "banners".
 | ||
|  |  *
 | ||
|  |  * @property int $id
 | ||
|  |  * @property string $title
 | ||
|  |  * @property string $image
 | ||
|  |  * @property string $url
 | ||
|  |  * @property string $target
 | ||
|  |  * @property int $active
 | ||
|  |  * @property int $start_at
 | ||
|  |  * @property int $end_at
 | ||
|  |  * @property int $created_at
 | ||
|  |  * @property int $updated_at
 | ||
|  |  * @property string $include_urls
 | ||
|  |  * @property string $exclude_urls
 | ||
|  |  * @property int $views
 | ||
|  |  * @property int $clicks
 | ||
|  |  * @property int $place_id
 | ||
|  |  *
 | ||
|  |  * @property BannerPlace $place
 | ||
|  |  */
 | ||
|  | class Banner extends ActiveRecord
 | ||
|  | {
 | ||
|  | 	const STATUS_DRAFT = 0;
 | ||
|  | 	const STATUS_ACTIVE = 1;
 | ||
|  | 
 | ||
|  | 	const TARGET_BLANK = '_blank';
 | ||
|  | 	const TARGET_SELF = '_self';
 | ||
|  | 
 | ||
|  | 	const FILE_ORIGINAL_PATH = '@staticRoot/origin/banners';
 | ||
|  | 
 | ||
|  | 	public static function create($title, $image, $url, $target, $start_at, $end_at, $include_urls, $exclude_urls, $active, $place_id): self
 | ||
|  | 	{
 | ||
|  | 		$banner = new static();
 | ||
|  | 		$banner->title = $title;
 | ||
|  | 		$banner->image = $image;
 | ||
|  | 		$banner->url = $url;
 | ||
|  | 		$banner->target = $target;
 | ||
|  | 		$banner->start_at = $start_at;
 | ||
|  | 		$banner->end_at = $end_at;
 | ||
|  | 		$banner->include_urls = $include_urls;
 | ||
|  | 		$banner->exclude_urls = $exclude_urls;
 | ||
|  | 		$banner->active = $active;
 | ||
|  | 		$banner->place_id = $place_id;
 | ||
|  | 		return $banner;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	public function setImage(UploadedFile $image): void
 | ||
|  | 	{
 | ||
|  | 		$this->image = $image;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 	public function edit($title, $image, $url, $target, $start_at, $end_at, $include_urls, $exclude_urls, $active, $place_id): void
 | ||
|  | 	{
 | ||
|  | 		$this->title = $title;
 | ||
|  | 		$this->image = $image;
 | ||
|  | 		$this->url = $url;
 | ||
|  | 		$this->target = $target;
 | ||
|  | 		$this->start_at = $start_at;
 | ||
|  | 		$this->end_at = $end_at;
 | ||
|  | 		$this->include_urls = $include_urls;
 | ||
|  | 		$this->exclude_urls = $exclude_urls;
 | ||
|  | 		$this->active = $active;
 | ||
|  | 		$this->place_id = $place_id;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  |     /**
 | ||
|  |      * @inheritdoc
 | ||
|  |      */
 | ||
|  |     public static function tableName()
 | ||
|  |     {
 | ||
|  |         return 'banners';
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     /**
 | ||
|  |      * @inheritdoc
 | ||
|  |      */
 | ||
|  |     public function attributeLabels()
 | ||
|  |     {
 | ||
|  |         return [
 | ||
|  |             'id' => Yii::t('banners', 'ID'),
 | ||
|  |             'title' => Yii::t('banners', 'Title'),
 | ||
|  |             'url' => Yii::t('banners', 'URL'),
 | ||
|  |             'image' => Yii::t('banners', 'Image'),
 | ||
|  |             'target' => Yii::t('banners', 'Target'),
 | ||
|  |             'active' => Yii::t('banners', 'Status'),
 | ||
|  |             'start_at' => Yii::t('banners', 'Start At'),
 | ||
|  |             'end_at' => Yii::t('banners', 'End At'),
 | ||
|  |             'created_at' => Yii::t('banners', 'Created At'),
 | ||
|  |             'updated_at' => Yii::t('banners', 'Updated At'),
 | ||
|  |             'include_urls' => Yii::t('banners', 'Show only on URLs'),
 | ||
|  |             'exclude_urls' => Yii::t('banners', 'Not show on URLs'),
 | ||
|  |             'views' => Yii::t('banners', 'Views'),
 | ||
|  |             'clicks' => Yii::t('banners', 'Visits'),
 | ||
|  |             'place_id' => Yii::t('banners', 'Place'),
 | ||
|  |         ];
 | ||
|  |     }
 | ||
|  | 
 | ||
|  | 	public function activate(): void
 | ||
|  | 	{
 | ||
|  | 		if ($this->isActive()) {
 | ||
|  | 			throw new \DomainException('Banner is already active.');
 | ||
|  | 		}
 | ||
|  | 		$this->active = self::STATUS_ACTIVE;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	public function draft(): void
 | ||
|  | 	{
 | ||
|  | 		if ($this->isDraft()) {
 | ||
|  | 			throw new \DomainException('Banner is already draft.');
 | ||
|  | 		}
 | ||
|  | 		$this->active = self::STATUS_DRAFT;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	public function isActive(): bool
 | ||
|  | 	{
 | ||
|  | 		return $this->active == self::STATUS_ACTIVE;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 	public function isDraft(): bool
 | ||
|  | 	{
 | ||
|  | 		return $this->active == self::STATUS_DRAFT;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	public function getPlace()
 | ||
|  | 	{
 | ||
|  | 		return $this->hasOne(BannerPlace::class, ['id' => 'place_id']);
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  |     ######################################
 | ||
|  | 
 | ||
|  | 	public function behaviors(): array
 | ||
|  | 	{
 | ||
|  | 		return [
 | ||
|  | 			TimestampBehavior::class,
 | ||
|  | 		];
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	public static function find(): BannerQuery
 | ||
|  | 	{
 | ||
|  | 		return new BannerQuery(static::class);
 | ||
|  | 	}
 | ||
|  | }
 |