Source of file ListingsControllerExtension.php
Size: 2,918 Bytes - Last Modified: 2021-12-24T06:48:31+00:00
/var/www/docs.ssmods.com/process/src/src/Extensions/ListingsControllerExtension.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 | <?php namespace Fromholdio\Listings\Extensions; use Fromholdio\Listings\ListedPages; use SilverStripe\CMS\Controllers\ContentController; use SilverStripe\Core\Extension; use SilverStripe\ORM\DataList; class ListingsControllerExtension extends Extension { protected $listedPages; /** * Only applicable if no associated Page extended with ListingsPageExtension. */ private static $listed_pages_classes = []; private static $listed_pages_index_only = false; public function onBeforeInit() { $this->owner->getListedPages(); } public function getListedPages() { if ($this->owner->listedPages) { return $this->owner->listedPages; } $listingsPage = $this->owner->getListingsPage(); if ($listingsPage) { $pages = $listingsPage->getListedPages(); } else { $pages = ListedPages::get( $this->owner->getListedPagesClasses(), $this->owner->getListedPagesParentID() ); } if ($this->owner->hasMethod('updateListedPages')) { $pages = $this->owner->updateListedPages($pages); } $this->owner->setListedPages($pages); return $pages; } public function setListedPages($pages) { if (!is_a($pages, DataList::class) && !is_null($pages)) { throw new \InvalidArgumentException( 'Invalid $pages value passed to ' . get_class($this->owner) . '::setListedPages(). ' . 'Supplied ' . gettype($pages) . ' but expected either DataList or NULL.' ); } $this->owner->listedPages = $pages; return $this; } public function getListedPagesClasses() { $classes = $this->owner->config()->get('listed_pages_classes'); if ($this->owner->hasMethod('updateListedPagesClasses')) { $classes = $this->owner->updateListedPagesClasses($classes); } return $classes; } public function getListedPagesParentID() { $indexOnly = (bool) $this->owner->config()->get('listed_pages_index_only'); $parentID = ($indexOnly) ? 0 : null; if ($this->owner->hasMethod('updateListedPagesParentID')) { $parentID = $this->owner->updateListedPagesParentID($parentID); } return $parentID; } public function getListingsPage() { $listingsPage = null; if (is_a($this->owner, ContentController::class)) { $page = $this->owner->data(); if ($page && $page->hasExtension(ListingsSiteTreeExtension::class)) { $listingsPage = $page; } } if ($this->owner->hasMethod('updateListingsPage')) { $listingsPage = $this->owner->updateListingsPage($listingsPage); } return $listingsPage; } } |