Initial import
This commit is contained in:
@@ -0,0 +1,163 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace app\widgets;
|
||||
|
||||
|
||||
use app\models\Articles;
|
||||
use app\models\Expositions;
|
||||
use app\models\register\Collections;
|
||||
use app\models\Positions;
|
||||
|
||||
class Carousel extends _Base
|
||||
{
|
||||
public $type;
|
||||
public $id;
|
||||
public $article;
|
||||
public $width;
|
||||
public $partner_id;
|
||||
|
||||
public function run()
|
||||
{
|
||||
switch ($this->type) {
|
||||
case 'positions_home_page':
|
||||
return $this->render('carousel/home_page', ['positions' => $this->getPositionsCarousel()]);
|
||||
case 'positions_partner_home_page':
|
||||
return $this->render('carousel/home_partner_page', ['articles' => $this->getPartnerPositionsCarousel($this->partner_id)]);
|
||||
case 'virtual_walk_home_page':
|
||||
return $this->render('carousel/virtual_walk_home_page', ['positions' => $this->getPositionsCarousel()]);
|
||||
case 'positions_inner_page':
|
||||
return $this->render('carousel/inner_page', ['positions' => $this->getPositionsCarousel()]);
|
||||
case 'more_articles':
|
||||
return $this->render('carousel/more_articles', ['positions' => $this->getPositionsCarousel()]);
|
||||
case 'partner_more_articles':
|
||||
return $this->render('carousel/partner_more_articles', ['positions' => $this->getPartnerMoreArticle($this->partner_id), 'partner_id' => $this->partner_id]);
|
||||
case 'expositions_home_page':
|
||||
return $this->render('carousel/expositions_home_page', ['positions' => $this->getSelectedExpositions(true)]);
|
||||
case 'expositions_partner_home_page':
|
||||
return $this->render('carousel/expositions_partner_home_page', ['expositions' => $this->getSelectedByPartnerExpositions()]);
|
||||
case 'positions_inner_page_collections':
|
||||
return $this->render('carousel/inner_page_collections', ['positions' => $this->getSelectedCollections()]);
|
||||
case 'positions_inner_page_expositions':
|
||||
return $this->render('carousel/inner_page_expositions', ['positions' => $this->getSelectedExpositions()]);
|
||||
case 'article_detail_gallery':
|
||||
return $this->render('carousel/article_detail_gallery', ['article' => $this->article]);
|
||||
case 'object_detail_gallery':
|
||||
return $this->render('carousel/object_detail_gallery', ['article' => $this->article]);
|
||||
case 'exposition_detail_gallery':
|
||||
return $this->render('carousel/exposition_detail_gallery', ['article' => $this->article]);
|
||||
case 'article_detail_gallery_full_width':
|
||||
return $this->render('carousel/article_detail_gallery_full_width', ['article' => $this->article]);
|
||||
case 'collection_home_page':
|
||||
return $this->render('carousel/collection_home_page', ['positions' => $this->getLastCollections()]);
|
||||
case 'collection_partner_home_page':
|
||||
return $this->render('carousel/collection_home_page', ['positions' => $this->getLastPartnerCollections()]);
|
||||
}
|
||||
}
|
||||
|
||||
public function getPositionsCarousel()
|
||||
{
|
||||
if ($this->id) {
|
||||
$positions = Positions::find()
|
||||
->innerJoinWith('articleModel')
|
||||
->where(['group_id' => $this->id])
|
||||
->andWhere(['IS NOT', 'position_article_key', NULL])
|
||||
->andWhere(['is_active' => 1])
|
||||
->orderBy(['order_index' => SORT_ASC])
|
||||
->all();
|
||||
switch ($this->type) {
|
||||
case 'positions_home_page':
|
||||
case 'virtual_walk_home_page':
|
||||
return $this->reorder($positions);
|
||||
case 'positions_inner_page':
|
||||
case 'expositions_home_page':
|
||||
case 'more_articles':
|
||||
case 'partner_more_articles':
|
||||
return $positions;
|
||||
}
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
|
||||
public function getPartnerPositionsCarousel($partner_id)
|
||||
{
|
||||
if ($this->id) {
|
||||
|
||||
$data = Articles::find()->where(['partner_id' => $partner_id, 'partner_page_selected' => 1])
|
||||
->limit(7)
|
||||
->all();
|
||||
return $this->reorder($data);
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
public function getPartnerMoreArticle($partner_id)
|
||||
{
|
||||
|
||||
return Articles::find()
|
||||
->where(['partner_id' => $partner_id, 'partner_page_selected' => 1])
|
||||
->all();
|
||||
}
|
||||
|
||||
public function getSelectedCollections()
|
||||
{
|
||||
return Collections::find()->where([
|
||||
'published' => 1,
|
||||
'active' => 1,
|
||||
'deleted' => 0,
|
||||
'is_selected' => 1
|
||||
])->all();
|
||||
}
|
||||
|
||||
public function getSelectedExpositions($last = null)
|
||||
{
|
||||
if (!$last) {
|
||||
return Expositions::find()->where([
|
||||
'is_active' => 1,
|
||||
'is_selected' => 1
|
||||
])->all();
|
||||
} else {
|
||||
return Expositions::find()->where([
|
||||
'is_active' => 1
|
||||
])->orderBy(['publish_date' => SORT_DESC])->limit(15)->all();
|
||||
}
|
||||
}
|
||||
|
||||
public function getSelectedByPartnerExpositions()
|
||||
{
|
||||
return Expositions::find()->where([
|
||||
'on_partner_page' => 1,
|
||||
'partner_id' => $this->partner_id
|
||||
])->orderBy(['publish_date' => SORT_DESC])->limit(15)->all();
|
||||
}
|
||||
|
||||
public function getLastCollections()
|
||||
{
|
||||
return Collections::find()->where([
|
||||
'published' => 1
|
||||
])->orderBy(['added_on' => SORT_DESC])->all();
|
||||
}
|
||||
|
||||
public function getLastPartnerCollections()
|
||||
{
|
||||
return Collections::find()->where([
|
||||
'published' => 1,
|
||||
'partner_id' => $this->partner_id
|
||||
])->orderBy(['added_on' => SORT_DESC])->all();
|
||||
}
|
||||
|
||||
public function reorder($positions)
|
||||
{
|
||||
$reorderList = [];
|
||||
$center = ceil(sizeof($positions) / 2);
|
||||
|
||||
for ($i = $center; $i < sizeof($positions); $i++) {
|
||||
$reorderList[] = $positions[$i];
|
||||
}
|
||||
for ($i = 0; $i < $center; $i++) {
|
||||
$reorderList[] = $positions[$i];
|
||||
}
|
||||
return $reorderList;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user