Egorka
6 years ago
38 changed files with 1950 additions and 18 deletions
@ -0,0 +1,156 @@
|
||||
<?php |
||||
|
||||
namespace common\modules\banners\controllers\manage; |
||||
|
||||
use common\modules\banners\entities\Banner; |
||||
use common\modules\banners\forms\BannerForm; |
||||
use common\modules\banners\forms\search\BannerSearch; |
||||
use common\modules\banners\services\BannerManageService; |
||||
use yii\web\NotFoundHttpException; |
||||
use yii\filters\AccessControl; |
||||
use yii\filters\VerbFilter; |
||||
use yii\web\Controller; |
||||
use Yii; |
||||
|
||||
class BannerController extends Controller |
||||
{ |
||||
private $service; |
||||
|
||||
public function __construct($id, $module, BannerManageService $service, $config = []) |
||||
{ |
||||
parent::__construct($id, $module, $config); |
||||
$this->service = $service; |
||||
} |
||||
|
||||
public function behaviors(): array |
||||
{ |
||||
return [ |
||||
'access' => [ |
||||
'class' => AccessControl::class, |
||||
'rules' => [ |
||||
[ |
||||
'allow' => true, |
||||
'roles' => ['BannersManagement'], |
||||
], |
||||
[ // all the action are accessible to admin |
||||
'allow' => true, |
||||
'roles' => ['admin'], |
||||
], |
||||
], |
||||
], |
||||
'verbs' => [ |
||||
'class' => VerbFilter::class, |
||||
'actions' => [ |
||||
'delete' => ['POST'], |
||||
], |
||||
], |
||||
]; |
||||
} |
||||
|
||||
/** |
||||
* @return mixed |
||||
*/ |
||||
public function actionIndex() |
||||
{ |
||||
$searchModel = new BannerSearch(); |
||||
$dataProvider = $searchModel->search(Yii::$app->request->queryParams); |
||||
|
||||
return $this->render('index', [ |
||||
'searchModel' => $searchModel, |
||||
'dataProvider' => $dataProvider, |
||||
]); |
||||
} |
||||
|
||||
/** |
||||
* @param $id |
||||
* |
||||
* @return string |
||||
* @throws NotFoundHttpException |
||||
*/ |
||||
public function actionView($id) |
||||
{ |
||||
return $this->render('view', [ |
||||
'banner' => $this->findModel($id), |
||||
]); |
||||
} |
||||
|
||||
/** |
||||
* @return mixed |
||||
*/ |
||||
public function actionCreate() |
||||
{ |
||||
$form = new BannerForm(); |
||||
|
||||
if ($form->load(Yii::$app->request->post()) && $form->validate()) { |
||||
try { |
||||
$form = $this->service->create($form); |
||||
return $this->redirect(['view', 'id' => $form->id]); |
||||
} catch (\DomainException $e) { |
||||
Yii::$app->errorHandler->logException($e); |
||||
Yii::$app->session->setFlash('error', $e->getMessage()); |
||||
} |
||||
} |
||||
else { |
||||
$form->active = $form->active ?: Banner::STATUS_ACTIVE; |
||||
} |
||||
return $this->render('create', [ |
||||
'model' => $form, |
||||
]); |
||||
} |
||||
|
||||
/** |
||||
* @param $id |
||||
* |
||||
* @return string|\yii\web\Response |
||||
* @throws NotFoundHttpException |
||||
*/ |
||||
public function actionUpdate($id) |
||||
{ |
||||
$banner = $this->findModel($id); |
||||
$form = new BannerForm($banner); |
||||
$form->start_at = date('d.m.Y H:i:s', $form->start_at); |
||||
$form->end_at = date('d.m.Y H:i:s', $form->end_at); |
||||
if ($form->load(Yii::$app->request->post()) && $form->validate()) { |
||||
try { |
||||
$this->service->edit($banner->id, $form); |
||||
return $this->redirect(['view', 'id' => $banner->id]); |
||||
} catch (\DomainException $e) { |
||||
Yii::$app->errorHandler->logException($e); |
||||
Yii::$app->session->setFlash('error', $e->getMessage()); |
||||
} |
||||
} |
||||
|
||||
return $this->render('update', [ |
||||
'model' => $form, |
||||
'banner' => $banner, |
||||
]); |
||||
} |
||||
|
||||
/** |
||||
* @param integer $id |
||||
* @return mixed |
||||
*/ |
||||
public function actionDelete($id) |
||||
{ |
||||
try { |
||||
$this->service->remove($id); |
||||
} catch (\DomainException $e) { |
||||
Yii::$app->errorHandler->logException($e); |
||||
Yii::$app->session->setFlash('error', $e->getMessage()); |
||||
} |
||||
return $this->redirect(['index']); |
||||
} |
||||
|
||||
/** |
||||
* @param integer $id |
||||
* @return Banner the loaded model |
||||
* @throws NotFoundHttpException if the model cannot be found |
||||
*/ |
||||
protected function findModel($id): Banner |
||||
{ |
||||
if (($model = Banner::findOne($id)) !== null) { |
||||
return $model; |
||||
} |
||||
throw new NotFoundHttpException('The requested banner does not exist.'); |
||||
} |
||||
} |
@ -0,0 +1,154 @@
|
||||
<?php |
||||
|
||||
namespace common\modules\banners\controllers\manage; |
||||
|
||||
use common\modules\banners\entities\BannerPlace; |
||||
use common\modules\banners\forms\BannerPlaceForm; |
||||
use common\modules\banners\forms\search\PlaceSearch; |
||||
use common\modules\banners\services\BannerPlaceManageService; |
||||
use yii\web\NotFoundHttpException; |
||||
use yii\filters\AccessControl; |
||||
use yii\filters\VerbFilter; |
||||
use yii\web\Controller; |
||||
use Yii; |
||||
|
||||
class PlaceController extends Controller |
||||
{ |
||||
private $service; |
||||
|
||||
public function __construct($id, $module, BannerPlaceManageService $service, $config = []) |
||||
{ |
||||
parent::__construct($id, $module, $config); |
||||
$this->service = $service; |
||||
} |
||||
|
||||
public function behaviors(): array |
||||
{ |
||||
return [ |
||||
'access' => [ |
||||
'class' => AccessControl::class, |
||||
'rules' => [ |
||||
[ |
||||
'allow' => true, |
||||
'roles' => ['BannersManagement'], |
||||
], |
||||
[ // all the action are accessible to admin |
||||
'allow' => true, |
||||
'roles' => ['admin'], |
||||
], |
||||
], |
||||
], |
||||
'verbs' => [ |
||||
'class' => VerbFilter::class, |
||||
'actions' => [ |
||||
'delete' => ['POST'], |
||||
], |
||||
], |
||||
]; |
||||
} |
||||
|
||||
/** |
||||
* @return mixed |
||||
*/ |
||||
public function actionIndex() |
||||
{ |
||||
$searchModel = new PlaceSearch(); |
||||
$dataProvider = $searchModel->search(Yii::$app->request->queryParams); |
||||
|
||||
return $this->render('index', [ |
||||
'searchModel' => $searchModel, |
||||
'dataProvider' => $dataProvider, |
||||
]); |
||||
} |
||||
|
||||
/** |
||||
* @param $id |
||||
* |
||||
* @return string |
||||
* @throws NotFoundHttpException |
||||
*/ |
||||
public function actionView($id) |
||||
{ |
||||
return $this->render('view', [ |
||||
'place' => $this->findModel($id), |
||||
]); |
||||
} |
||||
|
||||
/** |
||||
* @return mixed |
||||
*/ |
||||
public function actionCreate() |
||||
{ |
||||
$form = new BannerPlaceForm(); |
||||
if ($form->load(Yii::$app->request->post()) && $form->validate()) { |
||||
try { |
||||
$form = $this->service->create($form); |
||||
return $this->redirect(['view', 'id' => $form->id]); |
||||
} catch (\DomainException $e) { |
||||
Yii::$app->errorHandler->logException($e); |
||||
Yii::$app->session->setFlash('error', $e->getMessage()); |
||||
} |
||||
} |
||||
else { |
||||
$form->active = $form->active ?: BannerPlace::STATUS_ACTIVE; |
||||
} |
||||
return $this->render('create', [ |
||||
'model' => $form, |
||||
]); |
||||
} |
||||
|
||||
/** |
||||
* @param $id |
||||
* |
||||
* @return string|\yii\web\Response |
||||
* @throws NotFoundHttpException |
||||
*/ |
||||
public function actionUpdate($id) |
||||
{ |
||||
$place = $this->findModel($id); |
||||
|
||||
$form = new BannerPlaceForm($place); |
||||
if ($form->load(Yii::$app->request->post()) && $form->validate()) { |
||||
try { |
||||
$this->service->edit($place->id, $form); |
||||
return $this->redirect(['view', 'id' => $place->id]); |
||||
} catch (\DomainException $e) { |
||||
Yii::$app->errorHandler->logException($e); |
||||
Yii::$app->session->setFlash('error', $e->getMessage()); |
||||
} |
||||
} |
||||
|
||||
return $this->render('update', [ |
||||
'model' => $form, |
||||
'place' => $place, |
||||
]); |
||||
} |
||||
|
||||
/** |
||||
* @param integer $id |
||||
* @return mixed |
||||
*/ |
||||
public function actionDelete($id) |
||||
{ |
||||
try { |
||||
$this->service->remove($id); |
||||
} catch (\DomainException $e) { |
||||
Yii::$app->errorHandler->logException($e); |
||||
Yii::$app->session->setFlash('error', $e->getMessage()); |
||||
} |
||||
return $this->redirect(['index']); |
||||
} |
||||
|
||||
/** |
||||
* @param integer $id |
||||
* @return BannerPlace the loaded model |
||||
* @throws NotFoundHttpException if the model cannot be found |
||||
*/ |
||||
protected function findModel($id): BannerPlace |
||||
{ |
||||
if (($model = BannerPlace::findOne($id)) !== null) { |
||||
return $model; |
||||
} |
||||
throw new NotFoundHttpException('The requested place does not exist.'); |
||||
} |
||||
} |
@ -0,0 +1,156 @@
|
||||
<?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); |
||||
} |
||||
} |
@ -0,0 +1,108 @@
|
||||
<?php |
||||
|
||||
namespace common\modules\banners\entities; |
||||
|
||||
use common\modules\banners\entities\queries\BannerPlaceQuery; |
||||
use yii\db\ActiveRecord; |
||||
use Yii; |
||||
|
||||
|
||||
/** |
||||
* This is the model class for table "banners". |
||||
* |
||||
* @property int $id |
||||
* @property string $title |
||||
* @property int $width |
||||
* @property int $height |
||||
* @property int $active |
||||
* |
||||
* |
||||
* @property Banner[] $banners |
||||
* @property Banner[] $activeBanners |
||||
*/ |
||||
class BannerPlace extends ActiveRecord |
||||
{ |
||||
const STATUS_DRAFT = 0; |
||||
const STATUS_ACTIVE = 1; |
||||
|
||||
public static function create($title, $width, $height, $active): self |
||||
{ |
||||
$place = new static(); |
||||
$place->title = $title; |
||||
$place->width = $width; |
||||
$place->height = $height; |
||||
$place->active = $active; |
||||
return $place; |
||||
} |
||||
|
||||
public function edit($title, $width, $height, $active): void |
||||
{ |
||||
$this->title = $title; |
||||
$this->width = $width; |
||||
$this->height = $height; |
||||
$this->active = $active; |
||||
} |
||||
|
||||
/** |
||||
* @inheritdoc |
||||
*/ |
||||
public static function tableName() |
||||
{ |
||||
return 'banners_places'; |
||||
} |
||||
|
||||
/** |
||||
* @inheritdoc |
||||
*/ |
||||
public function attributeLabels() |
||||
{ |
||||
return [ |
||||
'id' => Yii::t('banners', 'ID'), |
||||
'title' => Yii::t('banners', 'Title'), |
||||
'width' => Yii::t('banners', 'Width'), |
||||
'height' => Yii::t('banners', 'Height'), |
||||
'active' => Yii::t('banners', 'Status'), |
||||
]; |
||||
} |
||||
|
||||
public function activate(): void |
||||
{ |
||||
if ($this->isActive()) { |
||||
throw new \DomainException('Place is already active.'); |
||||
} |
||||
$this->active = self::STATUS_ACTIVE; |
||||
} |
||||
|
||||
public function draft(): void |
||||
{ |
||||
if ($this->isDraft()) { |
||||
throw new \DomainException('Place 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 getBanners() |
||||
{ |
||||
return $this->hasMany(Banner::class, ['place_id' => 'id']); |
||||
} |
||||
|
||||
public function getActiveBanners() |
||||
{ |
||||
return $this->hasMany(Banner::class, ['place_id' => 'id'])->andWhere(['active' => Banner::STATUS_ACTIVE]); |
||||
} |
||||
|
||||
public static function find(): BannerPlaceQuery |
||||
{ |
||||
return new BannerPlaceQuery(static::class); |
||||
} |
||||
} |
@ -0,0 +1,20 @@
|
||||
<?php |
||||
|
||||
namespace common\modules\banners\entities\queries; |
||||
|
||||
use common\modules\banners\entities\BannerPlace; |
||||
use yii\db\ActiveQuery; |
||||
|
||||
class BannerPlaceQuery extends ActiveQuery |
||||
{ |
||||
/** |
||||
* @param null $alias |
||||
* @return $this |
||||
*/ |
||||
public function active($alias = null) |
||||
{ |
||||
return $this->andWhere([ |
||||
($alias ? $alias . '.' : '') . 'active' => BannerPlace::STATUS_ACTIVE, |
||||
]); |
||||
} |
||||
} |
@ -0,0 +1,30 @@
|
||||
<?php |
||||
|
||||
namespace common\modules\banners\entities\queries; |
||||
|
||||
use common\modules\banners\entities\Banner; |
||||
use yii\helpers\Url; |
||||
use yii\db\ActiveQuery; |
||||
|
||||
class BannerQuery extends ActiveQuery |
||||
{ |
||||
/** |
||||
* @param null $alias |
||||
* @return $this |
||||
*/ |
||||
public function active() |
||||
{ |
||||
return $this->andWhere(['active' => Banner::STATUS_ACTIVE]); |
||||
} |
||||
|
||||
public function showTime() |
||||
{ |
||||
return $this->andWhere(['<', 'start_at', time()])->andWhere(['>', 'end_at', time()]); |
||||
} |
||||
|
||||
/*public function excludeFree() |
||||
{ |
||||
$current = Url::current([]); |
||||
return $this->andWhere(['not rlike', 'exclude_urls', '^'.$current.'$']); |
||||
}*/ |
||||
} |
@ -0,0 +1,100 @@
|
||||
<?php |
||||
|
||||
namespace common\modules\banners\forms; |
||||
|
||||
use common\modules\banners\entities\Banner; |
||||
use yii\base\Model; |
||||
use Yii; |
||||
use yii\web\UploadedFile; |
||||
|
||||
class BannerForm extends Model |
||||
{ |
||||
public $title; |
||||
|
||||
/** |
||||
* @var UploadedFile |
||||
*/ |
||||
public $image; |
||||
public $url; |
||||
public $target; |
||||
public $active; |
||||
public $start_at; |
||||
public $end_at; |
||||
public $include_urls; |
||||
public $exclude_urls; |
||||
public $place_id; |
||||
|
||||
public $_banner; |
||||
|
||||
public function __construct(Banner $banner = null, $config = []) |
||||
{ |
||||
if ($banner) { |
||||
$this->title = $banner->title; |
||||
$this->image = $banner->image; |
||||
$this->url = $banner->url; |
||||
$this->target = $banner->target; |
||||
$this->active = $banner->active; |
||||
$this->start_at = $banner->start_at; |
||||
$this->end_at = $banner->end_at; |
||||
$this->include_urls = $banner->include_urls; |
||||
$this->exclude_urls = $banner->exclude_urls; |
||||
$this->place_id = $banner->place_id; |
||||
$this->_banner = $banner; |
||||
} |
||||
parent::__construct($config); |
||||
} |
||||
|
||||
public function rules(): array |
||||
{ |
||||
return [ |
||||
[['title', 'place_id', 'start_at', 'end_at'], 'required'], |
||||
[['active', 'place_id', 'active'], 'integer'], |
||||
[['title', 'target', 'url'], 'string', 'max' => 255], |
||||
[['include_urls', 'exclude_urls'], 'string'], |
||||
[['image'], 'file', 'extensions' => 'png, jpg, gif'], |
||||
[['start_at','end_at'],'safe'], |
||||
/*[['start_at', 'end_at'], 'date', |
||||
'format' => 'php:d.m.Y H:i' |
||||
],*/ |
||||
]; |
||||
} |
||||
|
||||
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 beforeValidate() { |
||||
if (parent::beforeValidate()) { |
||||
$this->image = UploadedFile::getInstance($this, 'image'); |
||||
$this->start_at = strtotime($this->start_at); |
||||
$this->end_at = strtotime($this->end_at); |
||||
return true; |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
/*public function afterValidate() { |
||||
if (parent::afterValidate()) { |
||||
$this->start_at = strtotime($this->start_at); |
||||
$this->end_at = strtotime($this->end_at); |
||||
return true; |
||||
} |
||||
return false; |
||||
}*/ |
||||
} |
@ -0,0 +1,47 @@
|
||||
<?php |
||||
|
||||
namespace common\modules\banners\forms; |
||||
|
||||
use common\modules\banners\entities\BannerPlace; |
||||
use yii\base\Model; |
||||
use Yii; |
||||
|
||||
class BannerPlaceForm extends Model |
||||
{ |
||||
public $title; |
||||
public $width; |
||||
public $height; |
||||
public $active; |
||||
|
||||
public $_place; |
||||
|
||||
public function __construct(BannerPlace $place = null, $config = []) |
||||
{ |
||||
if ($place) { |
||||
$this->title = $place->title; |
||||
$this->width = $place->width; |
||||
$this->height = $place->height; |
||||
$this->active = $place->active; |
||||
$this->_place = $place; |
||||
} |
||||
parent::__construct($config); |
||||
} |
||||
|
||||
public function rules(): array |
||||
{ |
||||
return [ |
||||
[['title'], 'required'], |
||||
[['width', 'height', 'active'], 'integer'], |
||||
]; |
||||
} |
||||
|
||||
public function attributeLabels() { |
||||
return [ |
||||
'id' => Yii::t('banners', 'ID'), |
||||
'title' => Yii::t('banners', 'Title'), |
||||
'width' => Yii::t('banners', 'Width'), |
||||
'height' => Yii::t('banners', 'Height'), |
||||
'active' => Yii::t('banners', 'Status'), |
||||
]; |
||||
} |
||||
} |
@ -0,0 +1,58 @@
|
||||
<?php |
||||
|
||||
namespace common\modules\banners\forms\search; |
||||
|
||||
use common\modules\banners\entities\Banner; |
||||
use yii\base\Model; |
||||
use yii\data\ActiveDataProvider; |
||||
|
||||
class BannerSearch extends Model |
||||
{ |
||||
public $id; |
||||
public $title; |
||||
public $active; |
||||
public $place_id; |
||||
public $target; |
||||
|
||||
public function rules(): array |
||||
{ |
||||
return [ |
||||
[['id', 'active', 'place_id'], 'integer'], |
||||
[['title', 'target'], 'safe'], |
||||
]; |
||||
} |
||||
|
||||
/** |
||||
* @param array $params |
||||
* @return ActiveDataProvider |
||||
*/ |
||||
public function search(array $params): ActiveDataProvider |
||||
{ |
||||
$query = Banner::find(); |
||||
|
||||
$dataProvider = new ActiveDataProvider([ |
||||
'query' => $query, |
||||
'sort' => [ |
||||
'defaultOrder' => ['id' => SORT_DESC] |
||||
] |
||||
]); |
||||
|
||||
$this->load($params); |
||||
|
||||
if (!$this->validate()) { |
||||
$query->where('0=1'); |
||||
return $dataProvider; |
||||
} |
||||
|
||||
$query->andFilterWhere([ |
||||
'id' => $this->id, |
||||
'active' => $this->active, |
||||
'place_id' => $this->place_id, |
||||
'target' => $this->target |
||||
]); |
||||
|
||||
$query |
||||
->andFilterWhere(['like', 'title', $this->title]); |
||||
return $dataProvider; |
||||
} |
||||
} |
@ -0,0 +1,58 @@
|
||||
<?php |
||||
|
||||
namespace common\modules\banners\forms\search; |
||||
|
||||
use common\modules\banners\entities\BannerPlace; |
||||
use yii\base\Model; |
||||
use yii\data\ActiveDataProvider; |
||||
|
||||
class PlaceSearch extends Model |
||||
{ |
||||
public $id; |
||||
public $title; |
||||
public $width; |
||||
public $height; |
||||
public $active; |
||||
|
||||
public function rules(): array |
||||
{ |
||||
return [ |
||||
[['id', 'active', 'width', 'height'], 'integer'], |
||||
[['title'], 'safe'], |
||||
]; |
||||
} |
||||
|
||||
/** |
||||
* @param array $params |
||||
* @return ActiveDataProvider |
||||
*/ |
||||
public function search(array $params): ActiveDataProvider |
||||
{ |
||||
$query = BannerPlace::find(); |
||||
|
||||
$dataProvider = new ActiveDataProvider([ |
||||
'query' => $query, |
||||
'sort' => [ |
||||
'defaultOrder' => ['id' => SORT_DESC] |
||||
] |
||||
]); |
||||
|
||||
$this->load($params); |
||||
|
||||
if (!$this->validate()) { |
||||
$query->where('0=1'); |
||||
return $dataProvider; |
||||
} |
||||
|
||||
$query->andFilterWhere([ |
||||
'id' => $this->id, |
||||
'active' => $this->active, |
||||
'width' => $this->width, |
||||
'height' => $this->height |
||||
]); |
||||
|
||||
$query |
||||
->andFilterWhere(['like', 'title', $this->title]); |
||||
return $dataProvider; |
||||
} |
||||
} |
@ -0,0 +1,61 @@
|
||||
<?php |
||||
/** |
||||
* Created by Error202 |
||||
* Date: 21.08.2018 |
||||
*/ |
||||
|
||||
namespace common\modules\banners\helpers; |
||||
|
||||
|
||||
use common\modules\banners\entities\Banner; |
||||
use yii\helpers\ArrayHelper; |
||||
use yii\helpers\Html; |
||||
use yii\helpers\Url; |
||||
use Yii; |
||||
|
||||
class BannerHelper |
||||
{ |
||||
public static function targetList(): array |
||||
{ |
||||
return [ |
||||
Banner::TARGET_SELF => Yii::t('banners', 'Self window'), |
||||
Banner::TARGET_BLANK => Yii::t('banners', 'Blank window'), |
||||
]; |
||||
} |
||||
|
||||
public static function targetName($target): string |
||||
{ |
||||
return ArrayHelper::getValue(self::targetList(), $target); |
||||
} |
||||
|
||||
public static function statusList(): array |
||||
{ |
||||
return [ |
||||
Banner::STATUS_DRAFT => Yii::t('banners', 'Draft'), |
||||
Banner::STATUS_ACTIVE => Yii::t('banners', 'Active'), |
||||
]; |
||||
} |
||||
|
||||
public static function statusName($status): string |
||||
{ |
||||
return ArrayHelper::getValue(self::statusList(), $status); |
||||
} |
||||
|
||||
public static function statusLabel($status): string |
||||
{ |
||||
switch ($status) { |
||||
case Banner::STATUS_DRAFT: |
||||
$class = 'label label-default'; |
||||
break; |
||||
case Banner::STATUS_ACTIVE: |
||||
$class = 'label label-success'; |
||||
break; |
||||
default: |
||||
$class = 'label label-default'; |
||||
} |
||||
|
||||
return Html::tag('span', ArrayHelper::getValue(self::statusList(), $status), [ |
||||
'class' => $class, |
||||
]); |
||||
} |
||||
} |
@ -0,0 +1,36 @@
|
||||
<?php |
||||
|
||||
return [ |
||||
'banners' => 'Баннеры', |
||||
'Banners management and rotation system for site' => 'Система управления ротацией баннеров', |
||||
'Banners' => 'Баннеры', |
||||
'Places' => 'Расположения', |
||||
'Title' => 'Название', |
||||
'Width' => 'Ширина', |
||||
'Height' => 'Высота', |
||||
'Create Place' => 'Новое расположение', |
||||
'Create Banner' => 'Новый баннер', |
||||
'Status' => 'Статус', |
||||
'Active' => 'Опубликовано', |
||||
'Draft' => 'Черновик', |
||||
'Publish' => 'Публикация', |
||||
'Update Place: {name}' => 'Редактирование расположения: {name}', |
||||
'Update Banner: {name}' => 'Редактирование баннера: {name}', |
||||
'Place' => 'Расположение', |
||||
'URL' => 'Ссылка', |
||||
'Target' => 'Цель', |
||||
'Self window' => 'Текущее окно', |
||||
'Blank window' => 'Новое окно', |
||||
'Image' => 'Изображение', |
||||
'Start At' => 'Начало показов', |
||||
'End At' => 'Окончание показов', |
||||
'Show only on URLs' => 'Показывать по ссылкам', |
||||
'Not show on URLs' => 'Не показывать по ссылкам', |
||||
'Views' => 'Просмотры', |
||||
'Visits' => 'Переходы', |
||||
'Created At' => 'Создан', |
||||
'Updated At' => 'Обновлен', |
||||
'Insert Code' => 'Код вставки', |
||||
'For template' => 'Для шаблона', |
||||
'For editor' => 'Для редактора', |
||||
]; |
@ -0,0 +1,42 @@
|
||||
<?php |
||||
|
||||
use yii\db\Migration; |
||||
|
||||
/** |
||||
* Handles the creation of table `banners`. |
||||
*/ |
||||
class m180821_084231_create_banners_table extends Migration |
||||
{ |
||||
/** |
||||
* {@inheritdoc} |
||||
*/ |
||||
public function safeUp() |
||||
{ |
||||
$tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB'; |
||||
|
||||
$this->createTable('{{%banners}}', [ |
||||
'id' => $this->primaryKey(), |
||||
'title' => $this->string(255)->notNull(), |
||||
'image' => $this->string(255)->notNull(), |
||||
'url' => $this->string(255), |
||||
'target' => $this->string(15)->defaultValue('_blank'), |
||||
'active' => $this->integer(1)->defaultValue(1), |
||||
'start_at' => $this->integer()->unsigned(), |
||||
'end_at' => $this->integer()->unsigned(), |
||||
'created_at' => $this->integer()->unsigned(), |
||||
'updated_at' => $this->integer()->unsigned(), |
||||
'include_urls' => 'LONGTEXT', |
||||
'exclude_urls' => 'LONGTEXT', |
||||
'views' => $this->integer()->unsigned()->defaultValue(0), |
||||
'clicks' => $this->integer()->unsigned()->defaultValue(0), |
||||
], $tableOptions); |
||||
} |
||||
|
||||
/** |
||||
* {@inheritdoc} |
||||
*/ |
||||
public function safeDown() |
||||
{ |
||||
$this->dropTable('{{%banners}}'); |
||||
} |
||||
} |
@ -0,0 +1,33 @@
|
||||
<?php |
||||
|
||||
use yii\db\Migration; |
||||
|
||||
/** |
||||
* Handles the creation of table `banners_places`. |
||||
*/ |
||||
class m180821_100724_create_banners_places_table extends Migration |
||||
{ |
||||
/** |
||||
* {@inheritdoc} |
||||
*/ |
||||
public function safeUp() |
||||
{ |
||||
$tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB'; |
||||
|
||||
$this->createTable('{{%banners_places}}', [ |
||||
'id' => $this->primaryKey(), |
||||
'title' => $this->string(255)->notNull(), |
||||
'width' => $this->integer(), |
||||
'height' => $this->integer(), |
||||
'active' => $this->integer(1)->defaultValue(1) |
||||
], $tableOptions); |
||||
} |
||||
|
||||
/** |
||||
* {@inheritdoc} |
||||
*/ |
||||
public function safeDown() |
||||
{ |
||||
$this->dropTable('{{%banners_places}}'); |
||||
} |
||||
} |
@ -0,0 +1,31 @@
|
||||
<?php |
||||
|
||||
use yii\db\Migration; |
||||
|
||||
/** |
||||
* Class m180821_100959_add_banners_place_id_field |
||||
*/ |
||||
class m180821_100959_add_banners_place_id_field extends Migration |
||||
{ |
||||
/** |
||||
* {@inheritdoc} |
||||
*/ |
||||
public function safeUp() |
||||
{ |
||||
$this->addColumn('{{%banners}}', 'place_id', $this->integer()); |
||||
|
||||
$this->createIndex('idx_banners_place_id', '{{%banners}}', 'place_id'); |
||||
$this->addForeignKey('frg_banners_place_id_banners_places_id', '{{%banners}}', 'place_id', 'banners_places', 'id', 'CASCADE'); |
||||
} |
||||
|
||||
/** |
||||
* {@inheritdoc} |
||||
*/ |
||||
public function safeDown() |
||||
{ |
||||
$this->dropForeignKey('frg_banners_place_id_banners_places_id', '{{%banners}}'); |
||||
$this->dropIndex('idx_banners_place_id', '{{%banners}}'); |
||||
|
||||
$this->dropColumn('{{%banners}}', 'place_id'); |
||||
} |
||||
} |
@ -0,0 +1,31 @@
|
||||
<?php |
||||
|
||||
namespace common\modules\banners\repositories; |
||||
|
||||
use common\modules\banners\entities\BannerPlace; |
||||
use core\repositories\NotFoundException; |
||||
|
||||
class BannerPlaceRepository |
||||
{ |
||||
public function get($id): BannerPlace |
||||
{ |
||||
if (!$place = BannerPlace::findOne($id)) { |
||||
throw new NotFoundException('Banner place is not found.'); |
||||
} |
||||
return $place; |
||||
} |
||||
|
||||
public function save(BannerPlace $place): void |
||||
{ |
||||
if (!$place->save()) { |
||||
throw new \RuntimeException('Saving error.'); |
||||
} |
||||
} |
||||
|
||||
public function remove(BannerPlace $place): void |
||||
{ |
||||
if (!$place->delete()) { |
||||
throw new \RuntimeException('Removing error.'); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,31 @@
|
||||
<?php |
||||
|
||||
namespace common\modules\banners\repositories; |
||||
|
||||
use common\modules\banners\entities\Banner; |
||||
use core\repositories\NotFoundException; |
||||
|
||||
class BannerRepository |
||||
{ |
||||
public function get($id): Banner |
||||
{ |
||||
if (!$banner = Banner::findOne($id)) { |
||||
throw new NotFoundException('Banner is not found.'); |
||||
} |
||||
return $banner; |
||||
} |
||||
|
||||
public function save(Banner $banner): void |
||||
{ |
||||
if (!$banner->save()) { |
||||
throw new \RuntimeException('Saving error.'); |
||||
} |
||||
} |
||||
|
||||
public function remove(Banner $banner): void |
||||
{ |
||||
if (!$banner->delete()) { |
||||
throw new \RuntimeException('Removing error.'); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,82 @@
|
||||
<?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); |
||||
} |
||||
} |
@ -0,0 +1,47 @@
|
||||
<?php |
||||
|
||||
namespace common\modules\banners\services; |
||||
|
||||
use common\modules\banners\entities\BannerPlace; |
||||
use common\modules\banners\forms\BannerPlaceForm; |
||||
use common\modules\banners\repositories\BannerPlaceRepository; |
||||
|
||||
class BannerPlaceManageService |
||||
{ |
||||
private $repository; |
||||
|
||||
public function __construct(BannerPlaceRepository $repository) |
||||
{ |
||||
$this->repository = $repository; |
||||
} |
||||
|
||||
public function create(BannerPlaceForm $form): BannerPlace |
||||
{ |
||||
$place = BannerPlace::create( |
||||
$form->title, |
||||
$form->width, |
||||
$form->height, |
||||
$form->active |
||||
); |
||||
$this->repository->save($place); |
||||
return $place; |
||||
} |
||||
|
||||
public function edit($id, BannerPlaceForm $form): void |
||||
{ |
||||
$place = $this->repository->get($id); |
||||
$place->edit( |
||||
$form->title, |
||||
$form->width, |
||||
$form->height, |
||||
$form->active |
||||
); |
||||
$this->repository->save($place); |
||||
} |
||||
|
||||
public function remove($id): void |
||||
{ |
||||
$place = $this->repository->get($id); |
||||
$this->repository->remove($place); |
||||
} |
||||
} |
@ -0,0 +1,131 @@
|
||||
<?php |
||||
|
||||
use yii\helpers\Html; |
||||
use kartik\form\ActiveForm; |
||||
use common\modules\banners\helpers\BannerHelper; |
||||
use common\modules\banners\entities\BannerPlace; |
||||
use yii\helpers\ArrayHelper; |
||||
use kartik\file\FileInput; |
||||
use kartik\widgets\DateTimePicker; |
||||
|
||||
/* @var $this yii\web\View */ |
||||
/* @var $model \common\modules\banners\forms\BannerForm */ |
||||
/* @var $form yii\widgets\ActiveForm */ |
||||
|
||||
$js2 = ' |
||||
$(".hint-block").each(function () { |
||||
var $hint = $(this); |
||||
var label = $hint.parent().find("label"); |
||||
label.html(label.html() + \' <i style="color:#3c8dbc" class="fa fa-question-circle" aria-hidden="true"></i>\'); |
||||
label.addClass("help").popover({ |
||||
html: true, |
||||
trigger: "hover", |
||||
placement: "bottom", |
||||
content: $hint.html() |
||||
}); |
||||
$(this).hide(); |
||||
}); |
||||
'; |
||||
$this->registerJs($js2); |
||||
?> |
||||
|
||||
<div class="page-form"> |
||||
|
||||
<?php $form = ActiveForm::begin(); ?> |
||||
|
||||
<div class="row"> |
||||
<div class="col-md-10"> |
||||
|
||||
<div class="box box-default"> |
||||
<div class="box-body"> |
||||
|
||||
<div class="row"> |
||||
<div class="col-md-4"> |
||||
<?= $form->field($model, 'place_id')->dropDownList(ArrayHelper::map(BannerPlace::find()->all(), 'id', 'title')) ?> |
||||
</div> |
||||
<div class="col-md-8"> |
||||
<?= $form->field($model, 'title')->textInput(['maxlength' => true]) ?> |
||||
</div> |
||||
</div> |
||||
|
||||
<div class="row"> |
||||
<div class="col-md-8"> |
||||
<?= $form->field($model, 'url')->textInput(['maxlength' => true]) ?> |
||||
</div> |
||||
<div class="col-md-4"> |
||||
<?= $form->field($model, 'target')->dropDownList(BannerHelper::targetList()) ?> |
||||
</div> |
||||
</div> |
||||
|
||||
<div class="row"> |
||||
<div class="col-md-4"> |
||||
<?= $form->field($model, 'image')->widget(FileInput::class, [ |
||||
'options' => [ |
||||
'accept' => 'image/*', |
||||
], |
||||
'pluginOptions' => [ |
||||
'showUpload' => false, |
||||
'showPreview' => false, |
||||
], |
||||
]) ?> |
||||
</div> |
||||
</div> |
||||
|
||||
<div class="row"> |
||||
<div class="col-md-6"> |
||||
<?= $form->field($model, 'start_at')->widget(DateTimePicker::class, [ |
||||
'options' => [], |
||||
'removeButton' => false, |
||||
'pluginOptions' => [ |
||||
'autoclose' => true, |
||||
'format' => 'dd.mm.yyyy hh:ii:ss', |
||||
] |
||||
]); ?> |
||||
</div> |
||||
<div class="col-md-6"> |
||||
<?= $form->field($model, 'end_at')->widget(DateTimePicker::class, [ |
||||
'options' => [], |
||||
'removeButton' => false, |
||||
'pluginOptions' => [ |
||||
'autoclose' => true, |
||||
//'format' => 'dd.MM.yyyy hh:i', |
||||
'format' => 'dd.mm.yyyy hh:ii:ss', |
||||
] |
||||
]); ?> |
||||
</div> |
||||
</div> |
||||
|
||||
<!--<div class="row"> |
||||
<div class="col-md-6"> |
||||
< ?= $form->field($model, 'include_urls')->textarea(['rows' => 4]) ?> |
||||
</div> |
||||
<div class="col-md-6"> |
||||
< ?= $form->field($model, 'exclude_urls')->textarea(['rows' => 4]) ?> |
||||
</div> |
||||
</div>--> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
<div class="form-group"> |
||||
<?= Html::submitButton(Yii::t('buttons', 'Save'), ['class' => 'btn btn-success']) ?> |
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
<div class="col-md-2"> |
||||
<div class="box box-default"> |
||||
<div class="box-header with-border"><?= Yii::t('banners', 'Publish') ?></div>
|
||||
<div class="box-body"> |
||||
|
||||
<?= $form->field($model, 'active')->radioList(BannerHelper::statusList()) ?> |
||||
|
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
<?php ActiveForm::end(); ?> |
||||
|
||||
</div> |
@ -0,0 +1,16 @@
|
||||
<?php |
||||
|
||||
/* @var $this yii\web\View */ |
||||
/* @var $model \common\modules\banners\forms\BannerForm */ |
||||
|
||||
$this->title = Yii::t('banners', 'Create Banner'); |
||||
$this->params['breadcrumbs'][] = ['label' => Yii::t('banners', 'Banners'), 'url' => ['index']]; |
||||
$this->params['breadcrumbs'][] = $this->title; |
||||
?> |
||||
<div class="banner-create"> |
||||
|
||||
<?= $this->render('_form', [ |
||||
'model' => $model, |
||||
]) ?> |
||||
|
||||
</div> |
@ -0,0 +1,86 @@
|
||||
<?php |
||||
|
||||
use common\modules\banners\entities\Banner; |
||||
use yii\grid\ActionColumn; |
||||
use yii\helpers\Html; |
||||
use yii\grid\GridView; |
||||
use common\modules\banners\helpers\BannerHelper; |
||||
use yii\helpers\ArrayHelper; |
||||
use common\modules\banners\entities\BannerPlace; |
||||
|
||||
/* @var $this yii\web\View */ |
||||
/* @var $searchModel \common\modules\banners\forms\search\BannerSearch */ |
||||
/* @var $dataProvider yii\data\ActiveDataProvider */ |
||||
|
||||
$this->title = Yii::t('banners', 'Banners'); |
||||
$this->params['breadcrumbs'][] = $this->title; |
||||
?> |
||||
<div class="user-index"> |
||||
|
||||
<p> |
||||
<?= Html::a(Yii::t('banners','Create Banner'), ['create'], ['class' => 'btn btn-success']) ?> |
||||
</p> |
||||
|
||||
<div class="box"> |
||||
<div class="box-body"> |
||||
<?= GridView::widget([ |
||||
'dataProvider' => $dataProvider, |
||||
'filterModel' => $searchModel, |
||||
'columns' => [ |
||||
[ |
||||
'attribute' => 'title', |
||||
'value' => function (Banner $model) { |
||||
return Html::a(Html::encode($model->title), ['view', 'id' => $model->id]); |
||||
}, |
||||
'format' => 'raw', |
||||
], |
||||
'url:url', |
||||
[ |
||||
'attribute' => 'start_at', |
||||
'value' => function(Banner $banner) { |
||||
return date('d.m.Y H:i', $banner->start_at); |
||||
}, |
||||
'options' => ['style' => 'width: 180px;'], |
||||
], |
||||
[ |
||||
'attribute' => 'end_at', |
||||
'value' => function(Banner $banner) { |
||||
return date('d.m.Y H:i', $banner->end_at); |
||||
}, |
||||
'options' => ['style' => 'width: 180px;'], |
||||
], |
||||
[ |
||||
'attribute' => 'place_id', |
||||
'filter' => ArrayHelper::map(BannerPlace::find()->all(), 'id', 'title'), |
||||
'value' => 'place.title', |
||||
'label' => Yii::t('banners', 'Place'), |
||||
], |
||||
[ |
||||
'attribute' => 'target', |
||||
'filter' => BannerHelper::targetList(), |
||||
'value' => function(Banner $banner) { |
||||
return BannerHelper::targetName($banner->target); |
||||
}, |
||||
'options' => ['style' => 'width: 150px;'], |
||||
'contentOptions' => ['class' => 'text-center'], |
||||
], |
||||
[ |
||||
'attribute' => 'active', |
||||
'filter' => BannerHelper::statusList(), |
||||
'format' => 'raw', |
||||
'value' => function(Banner $banner) { |
||||
return BannerHelper::statusLabel($banner->active); |
||||
}, |
||||
'options' => ['style' => 'width: 150px;'], |
||||
'contentOptions' => ['class' => 'text-center'], |
||||
], |
||||
[ |
||||
'class' => ActionColumn::class, |
||||
'options' => ['style' => 'width: 100px;'], |
||||
'contentOptions' => ['class' => 'text-center'], |
||||
], |
||||
], |
||||
]); ?> |
||||
</div> |
||||
</div> |
||||
</div> |
@ -0,0 +1,18 @@
|
||||
<?php |
||||
|
||||
/* @var $this yii\web\View */ |
||||
/* @var $banner \common\modules\banners\entities\Banner */ |
||||
/* @var $model \common\modules\banners\forms\BannerForm */ |
||||
|
||||
$this->title = Yii::t('banners', 'Update Banner: {name}', ['name' => $banner->title]); |
||||
$this->params['breadcrumbs'][] = ['label' => Yii::t('banners', 'Banners'), 'url' => ['index']]; |
||||
$this->params['breadcrumbs'][] = ['label' => $banner->title, 'url' => ['view', 'id' => $banner->id]]; |
||||
$this->params['breadcrumbs'][] = Yii::t('buttons', 'Editing'); |
||||
?> |
||||
<div class="banner-update"> |
||||
|
||||
<?= $this->render('_form', [ |
||||
'model' => $model, |
||||
]) ?> |
||||
|
||||
</div> |
@ -0,0 +1,95 @@
|
||||
<?php |
||||
|
||||
use yii\helpers\Html; |
||||
use yii\widgets\DetailView; |
||||
use common\modules\banners\entities\Banner; |
||||
use common\modules\banners\helpers\BannerHelper; |
||||
|
||||
/* @var $this yii\web\View */ |
||||
/* @var $banner Banner */ |
||||
|
||||
$this->title = $banner->title; |
||||
$this->params['breadcrumbs'][] = ['label' => Yii::t('banners', 'Banners'), 'url' => ['index']]; |
||||
$this->params['breadcrumbs'][] = $this->title; |
||||
?> |
||||
<div class="banner-view"> |
||||
|
||||
<p> |
||||
<?= Html::a(Yii::t('banners','Banners'), ['index'], ['class' => 'btn btn-default']) ?> |
||||
<?= Html::a(Yii::t('buttons', 'Edit'), ['update', 'id' => $banner->id], ['class' => 'btn btn-primary']) ?> |
||||
<?= Html::a(Yii::t('buttons', 'Delete'), ['delete', 'id' => $banner->id], [ |
||||
'class' => 'btn btn-danger', |
||||
'data' => [ |
||||
'confirm' => Yii::t('buttons', 'Are you sure you want to delete this item?'), |
||||
'method' => 'post', |
||||
], |
||||
]) ?> |
||||
</p> |
||||
|
||||
<div class="row"> |
||||
<div class="col-md-12"> |
||||
|
||||
<?php if ($banner->image): ?> |
||||
<div class="box"> |
||||
<div class="box-body"> |
||||
<?= Html::img('@static/origin/banners/' . $banner->image, [ |
||||
'style' => 'margin: 20px' |
||||
]) ?> |
||||
</div> |
||||
</div> |
||||
<?php endif; ?> |
||||
|
||||
<div class="box"> |
||||
<div class="box-body"> |
||||
<?= DetailView::widget([ |
||||
'model' => $banner, |
||||
'attributes' => [ |
||||
'id', |
||||
'title', |
||||
[ |
||||
'attribute' => 'place.title', |
||||
'label' => Yii::t('banners', 'Place'), |
||||
], |
||||
'url:url', |
||||
[ |
||||
'attribute' => 'target', |
||||
'value' => function(Banner $banner) { |
||||
return BannerHelper::targetName($banner->target); |
||||
} |
||||
], |
||||
[ |
||||
'attribute' => 'start_at', |
||||
'value' => function(Banner $banner) { |
||||
return date('d.m.Y H:i', $banner->start_at); |
||||
}, |
||||
], |
||||
[ |
||||
'attribute' => 'end_at', |
||||
'value' => function(Banner $banner) { |
||||
return date('d.m.Y H:i', $banner->end_at); |
||||
}, |
||||
], |
||||
[ |
||||
'attribute' => 'created_at', |
||||
'value' => function(Banner $banner) { |
||||
return date('d.m.Y H:i', $banner->created_at); |
||||
}, |
||||
], |
||||
[ |
||||
'attribute' => 'updated_at_at', |
||||
'value' => function(Banner $banner) { |
||||
return date('d.m.Y H:i', $banner->updated_at); |
||||
}, |
||||
], |
||||
'views', |
||||
'clicks' |
||||
], |
||||
]) ?> |
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
</div> |
@ -0,0 +1,74 @@
|
||||
<?php |
||||
|
||||
use yii\helpers\Html; |
||||
use kartik\form\ActiveForm; |
||||
use common\modules\banners\helpers\BannerHelper; |
||||
|
||||
/* @var $this yii\web\View */ |
||||
/* @var $model \common\modules\banners\forms\BannerPlaceForm */ |
||||
/* @var $form yii\widgets\ActiveForm */ |
||||
|
||||
$js2 = ' |
||||
$(".hint-block").each(function () { |
||||
var $hint = $(this); |
||||
var label = $hint.parent().find("label"); |
||||
label.html(label.html() + \' <i style="color:#3c8dbc" class="fa fa-question-circle" aria-hidden="true"></i>\'); |
||||
label.addClass("help").popover({ |
||||
html: true, |
||||
trigger: "hover", |
||||
placement: "bottom", |
||||
content: $hint.html() |
||||
}); |
||||
$(this).hide(); |
||||
}); |
||||
'; |
||||
$this->registerJs($js2); |
||||
?> |
||||
|
||||
<div class="place-form"> |
||||
|
||||
<?php $form = ActiveForm::begin(); ?> |
||||
|
||||
<div class="row"> |
||||
<div class="col-md-10"> |
||||
|
||||
<div class="box box-default"> |
||||
<div class="box-body"> |
||||
<?= $form->field($model, 'title')->textInput(['maxlength' => true]) ?> |
||||
|
||||
<div class="row"> |
||||
<div class="col-md-6"> |
||||
<?= $form->field($model, 'width')->textInput(['maxlength' => true]) ?> |
||||
</div> |
||||
<div class="col-md-6"> |
||||
<?= $form->field($model, 'height')->textInput(['maxlength' => true]) ?> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<div class="form-group"> |
||||
<?= Html::submitButton(Yii::t('buttons', 'Save'), ['class' => 'btn btn-success']) ?> |
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
<div class="col-md-2"> |
||||
<div class="box box-default"> |
||||
<div class="box-header with-border"><?= Yii::t('banners', 'Publish') ?></div>
|
||||
<div class="box-body"> |
||||
|
||||
<?= $form->field($model, 'active')->radioList(BannerHelper::statusList()) ?> |
||||
|
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
<?php ActiveForm::end(); ?> |
||||
|
||||
</div> |
@ -0,0 +1,16 @@
|
||||
<?php |
||||
|
||||
/* @var $this yii\web\View */ |
||||
/* @var $model \common\modules\banners\forms\BannerPlaceForm */ |
||||
|
||||
$this->title = Yii::t('banners', 'Create Place'); |
||||
$this->params['breadcrumbs'][] = ['label' => Yii::t('banners', 'Places'), 'url' => ['index']]; |
||||
$this->params['breadcrumbs'][] = $this->title; |
||||
?> |
||||
<div class="place-create"> |
||||
|
||||
<?= $this->render('_form', [ |
||||
'model' => $model, |
||||
]) ?> |
||||
|
||||
</div> |
@ -0,0 +1,56 @@
|
||||
<?php |
||||
|
||||
use common\modules\banners\entities\BannerPlace; |
||||
use common\modules\banners\helpers\BannerHelper; |
||||
use yii\grid\ActionColumn; |
||||
use yii\helpers\Html; |
||||
use yii\grid\GridView; |
||||
|
||||
/* @var $this yii\web\View */ |
||||
/* @var $searchModel \common\modules\banners\forms\search\BannerSearch */ |
||||
/* @var $dataProvider yii\data\ActiveDataProvider */ |
||||
|
||||
$this->title = Yii::t('banners', 'Places'); |
||||
$this->params['breadcrumbs'][] = $this->title; |
||||
?> |
||||
<div class="place-index"> |
||||
|
||||
<p> |
||||
<?= Html::a(Yii::t('banners','Create Place'), ['create'], ['class' => 'btn btn-success']) ?> |
||||
</p> |
||||
|
||||
<div class="box"> |
||||
<div class="box-body"> |
||||
<?= GridView::widget([ |
||||
'dataProvider' => $dataProvider, |
||||
'filterModel' => $searchModel, |
||||
'columns' => [ |
||||
[ |
||||
'attribute' => 'title', |
||||
'value' => function (BannerPlace $model) { |
||||
return Html::a(Html::encode($model->title), ['view', 'id' => $model->id]); |
||||
}, |
||||
'format' => 'raw', |
||||
], |
||||
'width', |
||||
'height', |
||||
[ |
||||
'attribute' => 'active', |
||||
'filter' => BannerHelper::statusList(), |
||||
'format' => 'raw', |
||||
'value' => function(BannerPlace $place) { |
||||
return BannerHelper::statusLabel($place->active); |
||||
}, |
||||
'options' => ['style' => 'width: 150px;'], |
||||
'contentOptions' => ['class' => 'text-center'], |
||||
], |
||||
[ |
||||
'class' => ActionColumn::class, |
||||
'options' => ['style' => 'width: 100px;'], |
||||
'contentOptions' => ['class' => 'text-center'], |
||||
], |
||||
], |
||||
]); ?> |
||||
</div> |
||||
</div> |
||||
</div> |
@ -0,0 +1,18 @@
|
||||
<?php |
||||
|
||||
/* @var $this yii\web\View */ |
||||
/* @var $place \common\modules\banners\entities\BannerPlace */ |
||||
/* @var $model \common\modules\banners\forms\BannerPlaceForm */ |
||||
|
||||
$this->title = Yii::t('banners', 'Update Place: {name}', ['name' => $place->title]); |
||||
$this->params['breadcrumbs'][] = ['label' => Yii::t('banners', 'Places'), 'url' => ['index']]; |
||||
$this->params['breadcrumbs'][] = ['label' => $place->title, 'url' => ['view', 'id' => $place->id]]; |
||||
$this->params['breadcrumbs'][] = Yii::t('buttons', 'Editing'); |
||||
?> |
||||
<div class="place-update"> |
||||
|
||||
<?= $this->render('_form', [ |
||||
'model' => $model, |
||||
]) ?> |
||||
|
||||
</div> |
@ -0,0 +1,76 @@
|
||||
<?php |
||||
|
||||
use yii\helpers\Html; |
||||
use yii\widgets\DetailView; |
||||
use common\modules\banners\entities\BannerPlace; |
||||
use common\modules\banners\helpers\BannerHelper; |
||||
|
||||
/* @var $this yii\web\View */ |
||||
/* @var $place \common\modules\banners\entities\BannerPlace */ |
||||
|
||||
$this->title = $place->title; |
||||
$this->params['breadcrumbs'][] = ['label' => Yii::t('banners', 'Places'), 'url' => ['index']]; |
||||
$this->params['breadcrumbs'][] = $this->title; |
||||
?> |
||||
<div class="place-view"> |
||||
|
||||
<p> |
||||
<?= Html::a(Yii::t('banners','Places'), ['index'], ['class' => 'btn btn-default']) ?> |
||||
<?= Html::a(Yii::t('buttons', 'Edit'), ['update', 'id' => $place->id], ['class' => 'btn btn-primary']) ?> |
||||
<?= Html::a(Yii::t('buttons', 'Delete'), ['delete', 'id' => $place->id], [ |
||||
'class' => 'btn btn-danger', |
||||
'data' => [ |
||||
'confirm' => Yii::t('buttons', 'Are you sure you want to delete this item?'), |
||||
'method' => 'post', |
||||
], |
||||
]) ?> |
||||
</p> |
||||
|
||||
<div class="row"> |
||||
<div class="col-md-9"> |
||||
|
||||
<div class="box"> |
||||
<div class="box-body"> |
||||
<?= DetailView::widget([ |
||||
'model' => $place, |
||||
'attributes' => [ |
||||
'id', |
||||
'title', |
||||
'width', |
||||
'height', |
||||
[ |
||||
'attribute' => 'active', |
||||
'format' => 'raw', |
||||
'value' => function(BannerPlace $place) { |
||||
return BannerHelper::statusLabel($place->active); |
||||
} |
||||
], |
||||
], |
||||
]) ?> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
<div class="col-md-3"> |
||||
<div class="box box-default"> |
||||
<div class="box-header with-border"><?= Yii::t('banners', 'Insert Code') ?></div>
|
||||
<div class="box-body"> |
||||
|
||||
<?php |
||||
$code = Html::encode( |
||||
"<?= \common\modules\\banners\widgets\BannerWidget::widget(['id' => ".$place->id."]) ?>");
|
||||
?> |
||||
<p><?= Yii::t('banners', 'For template') ?></p>
|
||||
<pre><?= $code ?></pre>
|
||||
|
||||
<?php |
||||
$code = Html::encode( |
||||
"[?= \common\modules\\banners\widgets\BannerWidget::widget(['id' => ".$place->id."]) ?]"); |
||||
?> |
||||
<p><?= Yii::t('banners', 'For editor') ?></p>
|
||||
<pre><?= $code ?></pre>
|
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
@ -0,0 +1,42 @@
|
||||
<?php |
||||
/** |
||||
* Created by Error202 |
||||
* Date: 31.07.2018 |
||||
*/ |
||||
|
||||
namespace common\modules\banners\widgets; |
||||
|
||||
use common\modules\banners\entities\Banner; |
||||
use common\modules\banners\entities\BannerPlace; |
||||
use common\modules\banners\helpers\BannerHelper; |
||||
use yii\base\Widget; |
||||
|
||||
class BannerWidget extends Widget |
||||
{ |
||||
public $id; |
||||
|
||||
public function run() { |
||||
$place = BannerPlace::findOne($this->id); |
||||
if (!$place) { |
||||
return 'Place is not found'; |
||||
} |
||||
|
||||
$banners = Banner::find() |
||||
->active() |
||||
->showTime() |
||||
//->excludeFree() |
||||
->andWhere(['place_id' => $place->id]) |
||||
->all(); |
||||
|
||||
if (!$banners || $place->isDraft()) { |
||||
return ''; |
||||
} |
||||
|
||||
/* @var $banner Banner */ |
||||
$banner = $banners[array_rand($banners)]; |
||||
|
||||
return $this->render('banner', [ |
||||
'banner' => $banner, |
||||
]); |
||||
} |
||||
} |
@ -0,0 +1,18 @@
|
||||
<?php |
||||
/** |
||||
* Created by Error202 |
||||
* Date: 22.08.2018 |
||||
*/ |
||||
|
||||
use yii\helpers\Html; |
||||
|
||||
/** |
||||
* @var $this \yii\web\View |
||||
* @var $banner \common\modules\banners\entities\Banner; |
||||
*/ |
||||
|
||||
?> |
||||
|
||||
<?= Html::a(Html::img('@static/origin/banners/' . $banner->image), $banner->url, [ |
||||
'target' => $banner->target |
||||
]) ?> |
Loading…
Reference in new issue