From b155c8167ddd5562f30fcfadd9eeb60d80e2619e Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 3 May 2022 17:36:29 +0200 Subject: [locations/news] Add per-location news/help/loginscreentext --- modules-available/news/page.inc.php | 39 +++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-) (limited to 'modules-available/news/page.inc.php') diff --git a/modules-available/news/page.inc.php b/modules-available/news/page.inc.php index 21b99952..ceffd028 100644 --- a/modules-available/news/page.inc.php +++ b/modules-available/news/page.inc.php @@ -39,6 +39,10 @@ class Page_News extends Page * @var int Unix epoch date when the news expires. */ private $newsExpires = false; + /** + * @var int location id + */ + private $locationId = 0; /** @@ -65,28 +69,31 @@ class Page_News extends Page /* and also the news (or help) with the given id */ $newsId = Request::get('newsid', false, 'int'); $pageType = Request::get('type', false, 'string'); + $this->locationId = Request::get('locationid', 0, 'int'); if ($pageType === false && $newsId === false) { - Util::redirect('?do=news&type=news'); + Util::redirect('?do=news&type=news&locationid=' . $this->locationId); } $this->pageType = $pageType === false ? 'news' : $pageType; $this->loadNews($newsId, $pageType); foreach (self::TYPES as $type => $entry) { - Dashboard::addSubmenu('?do=news&type=' . $type, Dictionary::translate('type_' . $type, true)); + Dashboard::addSubmenu('?do=news&type=' . $type . '&locationid=' . $this->locationId, + Dictionary::translate('type_' . $type, true)); } } else { $action = Request::post('action', false, 'string'); $pageType = Request::post('type', false, 'string'); + $this->locationId = Request::post('locationid', Request::REQUIRED_EMPTY, 'int'); if (!array_key_exists($pageType, self::TYPES)) { Message::addError('invalid-type', $pageType); - Util::redirect('?do=news'); + Util::redirect('?do=news&locationid=' . $this->locationId); } if ($action === 'save') { // save to DB - User::assertPermission("$pageType.save"); + User::assertPermission("$pageType.save", $this->locationId); if (!$this->saveNews($pageType)) { Message::addError('save-error'); } else { @@ -95,14 +102,14 @@ class Page_News extends Page } elseif ($action === 'delete') { // delete it - User::assertPermission("$pageType.delete"); + User::assertPermission("$pageType.delete", $this->locationId); $this->delNews(Request::post('newsid', false, 'int'), $pageType); } else { // unknown action, redirect user Message::addError('invalid-action', $action); } - Util::redirect('?do=news&type=' . $pageType); + Util::redirect('?do=news&type=' . $pageType . '&locationid=' . $this->locationId); } /* load summernote module if available */ @@ -119,8 +126,9 @@ class Page_News extends Page // fetch the list of the older news $NOW = time(); $lines = array(); + $str = $this->locationId === 0 ? 'IS NULL' : ' = ' . $this->locationId; $res = Database::simpleQuery("SELECT newsid, dateline, expires, title, content FROM vmchooser_pages - WHERE type = :type ORDER BY dateline DESC LIMIT 20", ['type' => $this->pageType]); + WHERE type = :type AND locationid $str ORDER BY dateline DESC LIMIT 20", ['type' => $this->pageType]); $foundActive = false; foreach ($res as $row) { $row['dateline_s'] = Util::prettyTime($row['dateline']); @@ -169,6 +177,10 @@ class Page_News extends Page 'disabled' => 'disabled', ]; } + $data['locationid'] = $this->locationId; + if ($this->locationId > 0) { + $data['location_name'] = Location::getName($this->locationId); + } Render::addTemplate('page-news', $data); } @@ -199,8 +211,9 @@ class Page_News extends Page Message::addError('news-empty'); } } else { + $str = $this->locationId === 0 ? 'IS NULL' : ' = ' . $this->locationId; $row = Database::queryFirst("SELECT newsid, title, content, dateline, expires, type FROM vmchooser_pages - WHERE type = :type AND expires > UNIX_TIMESTAMP() ORDER BY dateline DESC LIMIT 1", [ + WHERE type = :type AND locationid $str AND expires > UNIX_TIMESTAMP() ORDER BY dateline DESC LIMIT 1", [ 'type' => $pageType, ]); } @@ -234,11 +247,12 @@ class Page_News extends Page $expires = strtotime(Request::post('enddate', 'today', 'string') . ' ' . Request::post('endtime', '23:59', 'string')); } + $str = $this->locationId === 0 ? 'IS NULL' : ' = ' . $this->locationId; if (!empty($newsContent)) { // we got title and content, save it to DB // dup check first - $row = Database::queryFirst('SELECT newsid FROM vmchooser_pages - WHERE content = :content AND type = :type LIMIT 1', [ + $row = Database::queryFirst("SELECT newsid FROM vmchooser_pages + WHERE content = :content AND type = :type AND locationid $str LIMIT 1", [ 'content' => $newsContent, 'type' => $pageType, ]); @@ -253,10 +267,11 @@ class Page_News extends Page return true; } // new one - Database::exec("INSERT INTO vmchooser_pages (dateline, expires, title, content, type) - VALUES (:dateline, :expires, :title, :content, :type)", array( + Database::exec("INSERT INTO vmchooser_pages (dateline, expires, locationid, title, content, type) + VALUES (:dateline, :expires, :locationid, :title, :content, :type)", array( 'dateline' => time(), 'expires' => $expires, + 'locationid' => $this->locationId, 'title' => $newsTitle, 'content' => $newsContent, 'type' => $pageType, -- cgit v1.2.3-55-g7522