%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/gallery/controllers/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/gallery/controllers/BaseController.php |
<?php /** * @link https://www.humhub.org/ * @copyright Copyright (c) 2015 HumHub GmbH & Co. KG * @license https://www.humhub.com/licences */ namespace humhub\modules\gallery\controllers; use humhub\modules\content\components\ActiveQueryContent; use humhub\modules\content\components\ContentActiveRecord; use \humhub\modules\content\components\ContentContainerController; use humhub\modules\gallery\models\BaseGallery; use humhub\modules\gallery\models\forms\ContainerSettings; use humhub\modules\gallery\models\Media; use \humhub\modules\gallery\Module; use humhub\modules\gallery\widgets\GalleryList; use humhub\modules\space\models\Space; use \humhub\modules\user\models\User; use \Yii; use yii\base\Exception; use \yii\base\Model; use yii\data\ActiveDataProvider; use yii\data\BaseDataProvider; use \yii\web\HttpException; use yii\web\NotFoundHttpException; /** * Description of a Base Controller for the gallery module. * * @package humhub.modules.gallery.controllers * @since 1.0 * @author Sebastian Stumpf */ abstract class BaseController extends ContentContainerController { /** * @var BaseDataProvider */ protected $dataProvider; /** * @var int current page */ protected $page = 0; public function actionIndex() { $this->dataProvider = $this->loadPage(); return $this->renderGallery($this->prepareInitialItems($this->dataProvider->getModels())); } /** * This function can be overwritten by subclasses in order to add or manipulate the initial items array. * * @param $items * @return mixed */ protected function prepareInitialItems($items) { return $items; } /** * @param int $page * @return ActiveDataProvider * @throws Exception * @throws \Throwable */ protected function loadPage($page = 0) { $query = $this->getPaginationQuery(); if(!$query) { throw new NotFoundHttpException(); } return new ActiveDataProvider([ 'query' => $query, 'pagination' => [ 'page' => $page, 'pageSize' => $this->getPageSize() ] ]); } abstract protected function getPaginationQuery(); abstract protected function renderGallery($items); /** * @return BaseGallery|null the current gallery, note the gallery overview itself does not have a gallery model */ abstract protected function getGallery(); final protected function isAdmin() { if(Yii::$app->user->isGuest) { return false; } if($this->contentContainer instanceof Space) { return $this->contentContainer->isAdmin(); } return $this->contentContainer->id === Yii::$app->user->id; } public function actionLoadPage($page) { $page = (int) $page; $this->dataProvider = $this->loadPage($page); $models = $this->dataProvider ->getModels(); return $this->asJson([ 'html' => GalleryList::widget(['entryList' => $models, 'entriesOnly' => true, 'parentGallery' => $this->getGallery()]), 'isLast' => $this->isLastPage($page) ]); } protected function isLastPage($page = 0) { if(!$this->dataProvider || !$this->dataProvider->getPagination()) { return true; } return $this->dataProvider->getPagination()->getPageCount() <= $page + 1; } protected function getPageSize() { return $this->module->galleryMaxImages; } protected function getSettings() { return new ContainerSettings([ 'contentContainer' => $this->contentContainer ]); } }