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.
		
		
		
		
		
			
		
			
				
					
					
						
							93 lines
						
					
					
						
							2.5 KiB
						
					
					
				
			
		
		
	
	
							93 lines
						
					
					
						
							2.5 KiB
						
					
					
				<?php | 
						|
 | 
						|
namespace common\modules\banners\services; | 
						|
 | 
						|
use common\modules\banners\entities\Banner; | 
						|
use common\modules\banners\forms\BannerForm; | 
						|
use common\modules\banners\repositories\BannerRepository; | 
						|
use yii\base\Security; | 
						|
 | 
						|
class BannerManageService | 
						|
{ | 
						|
    private $_repository; | 
						|
 | 
						|
    public function __construct(BannerRepository $repository) | 
						|
    { | 
						|
        $this->_repository = $repository; | 
						|
    } | 
						|
 | 
						|
    public function create(BannerForm $form): Banner | 
						|
    { | 
						|
        if ($form->image) { | 
						|
            $filename = $form->image->baseName . '_' . (new Security())->generateRandomString(5) . '.' . $form->image->extension; | 
						|
            $path     = \Yii::getAlias(Banner::FILE_ORIGINAL_PATH); | 
						|
            if (!file_exists($path)) { | 
						|
                mkdir($path, 0777, true); | 
						|
            } | 
						|
            $form->image->saveAs($path . '/' . $filename); | 
						|
            $form->image = $filename; | 
						|
        } | 
						|
 | 
						|
        $banner = Banner::create( | 
						|
            $form->title, | 
						|
            $form->image, | 
						|
            $form->url, | 
						|
            $form->target, | 
						|
            $form->start_at, | 
						|
            $form->end_at, | 
						|
            $form->include_urls, | 
						|
            $form->exclude_urls, | 
						|
            $form->active, | 
						|
            $form->place_id | 
						|
        ); | 
						|
        $this->_repository->save($banner); | 
						|
 | 
						|
        return $banner; | 
						|
    } | 
						|
 | 
						|
    public function edit($id, BannerForm $form): void | 
						|
    { | 
						|
        $banner = $this->_repository->get($id); | 
						|
 | 
						|
        if ($form->image) { | 
						|
            $filename = $form->image->baseName . '_' . (new Security())->generateRandomString(5) . '.' . $form->image->extension; | 
						|
            $path     = \Yii::getAlias(Banner::FILE_ORIGINAL_PATH); | 
						|
            $form->image->saveAs($path . '/' . $filename); | 
						|
            $form->image = $filename; | 
						|
        } else { | 
						|
            $form->image = $banner->image; | 
						|
        } | 
						|
 | 
						|
        $banner->edit( | 
						|
            $form->title, | 
						|
            $form->image, | 
						|
            $form->url, | 
						|
            $form->target, | 
						|
            $form->start_at, | 
						|
            $form->end_at, | 
						|
            $form->include_urls, | 
						|
            $form->exclude_urls, | 
						|
            $form->active, | 
						|
            $form->place_id | 
						|
        ); | 
						|
        $this->_repository->save($banner); | 
						|
    } | 
						|
 | 
						|
    public function remove($id): void | 
						|
    { | 
						|
        $banner = $this->_repository->get($id); | 
						|
        $this->_repository->remove($banner); | 
						|
    } | 
						|
 | 
						|
    public function addView(Banner $banner) | 
						|
    { | 
						|
        $banner->views++; | 
						|
        $this->_repository->save($banner); | 
						|
    } | 
						|
 | 
						|
    public function addClick(Banner $banner) | 
						|
    { | 
						|
        $banner->clicks++; | 
						|
        $this->_repository->save($banner); | 
						|
    } | 
						|
}
 | 
						|
 |