diff --git a/components/com_banners/src/Model/BannerModel.php b/components/com_banners/src/Model/BannerModel.php index 653e7194cd67f..3fc088e4f6ae8 100644 --- a/components/com_banners/src/Model/BannerModel.php +++ b/components/com_banners/src/Model/BannerModel.php @@ -168,9 +168,11 @@ public function &getItem() $id = (int) $this->getState('banner.id'); // For PHP 5.3 compat we can't use $this in the lambda function below, so grab the database driver now to use it - $db = $this->getDatabase(); + $db = $this->getDatabase(); + $user = $this->getCurrentUser(); + $cacheId = md5(__METHOD__ . $id . ':' . implode(',', $user->getAuthorisedViewLevels())); - $loader = function ($id) use ($db) { + $loader = function ($id) use ($db, $user) { $nowDate = Factory::getDate()->toSql(); $query = $db->getQuery(true); @@ -178,14 +180,17 @@ public function &getItem() [ $db->quoteName('a.clickurl'), $db->quoteName('a.cid'), + $db->quoteName('a.catid'), $db->quoteName('a.track_clicks'), $db->quoteName('cl.track_clicks', 'client_track_clicks'), ] ) ->from($db->quoteName('#__banners', 'a')) ->join('LEFT', $db->quoteName('#__banner_clients', 'cl'), $db->quoteName('cl.id') . ' = ' . $db->quoteName('a.cid')) + ->join('INNER', $db->quoteName('#__categories', 'c'), $db->quoteName('c.id') . ' = ' . $db->quoteName('a.catid')) ->where($db->quoteName('a.id') . ' = :id') ->where($db->quoteName('a.state') . ' = 1') + ->where($db->quoteName('c.published') . ' = 1') ->extendWhere( 'AND', [ @@ -203,7 +208,8 @@ public function &getItem() 'OR' ) ->bind(':id', $id, ParameterType::INTEGER) - ->bind(':nowDate', $nowDate); + ->bind(':nowDate', $nowDate) + ->whereIn($db->quoteName('c.access'), $user->getAuthorisedViewLevels(), ParameterType::INTEGER); $db->setQuery($query); @@ -211,7 +217,7 @@ public function &getItem() }; try { - $this->_item = $cache->get($loader, [$id], md5(__METHOD__ . $id)); + $this->_item = $cache->get($loader, [$id], $cacheId); } catch (CacheExceptionInterface) { $this->_item = $loader($id); } diff --git a/components/com_banners/src/Model/BannersModel.php b/components/com_banners/src/Model/BannersModel.php index 524e058bd6961..03b8151d6ad20 100644 --- a/components/com_banners/src/Model/BannersModel.php +++ b/components/com_banners/src/Model/BannersModel.php @@ -73,6 +73,7 @@ protected function getListQuery() $keywords = $this->getState('filter.keywords'); $randomise = ($ordering === 'random'); $nowDate = Factory::getDate()->toSql(); + $groups = $this->getCurrentUser()->getAuthorisedViewLevels(); $query->select( [ @@ -91,7 +92,10 @@ protected function getListQuery() ) ->from($db->quoteName('#__banners', 'a')) ->join('LEFT', $db->quoteName('#__banner_clients', 'cl'), $db->quoteName('cl.id') . ' = ' . $db->quoteName('a.cid')) + ->join('INNER', $db->quoteName('#__categories', 'c'), $db->quoteName('c.id') . ' = ' . $db->quoteName('a.catid')) ->where($db->quoteName('a.state') . ' = 1') + ->where($db->quoteName('c.published') . ' = 1') + ->whereIn($db->quoteName('c.access'), $groups, ParameterType::INTEGER) ->extendWhere( 'AND', [ diff --git a/modules/mod_banners/src/Dispatcher/Dispatcher.php b/modules/mod_banners/src/Dispatcher/Dispatcher.php index dcad4f9f481a4..6ad8cbf99e01d 100644 --- a/modules/mod_banners/src/Dispatcher/Dispatcher.php +++ b/modules/mod_banners/src/Dispatcher/Dispatcher.php @@ -31,11 +31,11 @@ class Dispatcher extends AbstractModuleDispatcher implements HelperFactoryAwareI /** * Returns the layout data. * - * @return array + * @return array|false * * @since 5.1.0 */ - protected function getLayoutData(): array + protected function getLayoutData(): array|false { BannersComponentHelper::updateReset(); @@ -45,6 +45,10 @@ protected function getLayoutData(): array $data['footerText'] = trim($data['params']->get('footer_text', '')); $data['list'] = $this->getHelperFactory()->getHelper('BannersHelper')->getBanners($data['params'], $this->getApplication()); + if (empty($data['list'])) { + return false; + } + return $data; } }