isAnnouncementsEnabled($request)) { $request->getDispatcher()->handle404(); } $this->setupTemplate($request); $templateMgr = TemplateManager::getManager($request); $templateMgr->assign('announcementsIntroduction', $this->getAnnouncementsIntro($request)); // TODO the announcements list should support pagination $collector = Repo::announcement() ->getCollector() ->filterByActive(); if ($request->getContext()) { $collector->filterByContextIds([$request->getContext()->getId()]); } else { $collector->withSiteAnnouncements(Collector::SITE_ONLY); } $announcements = $collector->getMany(); $templateMgr->assign('announcements', $announcements->toArray()); $templateMgr->display('frontend/pages/announcements.tpl'); } /** * View announcement details. * * @param array $args first parameter is the ID of the announcement to display * @param PKPRequest $request */ public function view($args, $request) { if (!$this->isAnnouncementsEnabled($request)) { $request->getDispatcher()->handle404(); } $this->validate(); $this->setupTemplate($request); $announcementId = (int) array_shift($args); $announcement = Repo::announcement()->get($announcementId); if ( $announcement && $announcement->getAssocType() == Application::getContextAssocType() && $announcement->getAssocId() == $request->getContext()?->getId() && ( $announcement->getDateExpire() == null || strtotime($announcement->getDateExpire()) > time() ) ) { $templateMgr = TemplateManager::getManager($request); $templateMgr->assign('announcement', $announcement); $templateMgr->assign('announcementTitle', $announcement->getLocalizedTitleFull()); return $templateMgr->display('frontend/pages/announcement.tpl'); } $request->redirect(null, 'announcement'); } protected function isAnnouncementsEnabled(Request $request): bool { if (!Config::getVar('features', 'site_announcements') && !$request->getContext()) { return false; } $contextOrSite = $request->getContext() ?? $request->getSite(); return $contextOrSite->getData('enableAnnouncements'); } protected function getAnnouncementsIntro(Request $request): ?string { $contextOrSite = $request->getContext() ?? $request->getSite(); return $contextOrSite->getLocalizedData('announcementsIntroduction'); } }