From b047c9bc338c70fef6d50f3cf7bd46385f7ccd58 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sun, 4 Apr 2021 17:10:52 +0200 Subject: [PATCH] many fixes and expands and module expansions --- Admin/Install/db.json | 24 +++++++++++ Controller/BackendController.php | 20 +++++++++ Models/NewsSeen.php | 60 ++++++++++++++++++++++++++ Models/NewsSeenMapper.php | 64 ++++++++++++++++++++++++++++ Models/NullNewsSeen.php | 39 +++++++++++++++++ Theme/Backend/news-create.tpl.php | 2 +- Theme/Backend/news-dashboard.tpl.php | 11 ++++- Theme/Backend/news-single.tpl.php | 3 +- 8 files changed, 220 insertions(+), 3 deletions(-) create mode 100644 Models/NewsSeen.php create mode 100644 Models/NewsSeenMapper.php create mode 100644 Models/NullNewsSeen.php diff --git a/Admin/Install/db.json b/Admin/Install/db.json index 56b5e2a..3668166 100755 --- a/Admin/Install/db.json +++ b/Admin/Install/db.json @@ -95,5 +95,29 @@ "foreignKey": "tag_id" } } + }, + "news_seen": { + "name": "news_seen", + "fields": { + "news_seen_id": { + "name": "news_seen_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "news_seen_at": { + "name": "news_seen_at", + "type": "DATETIME", + "null": false + }, + "news_seen_by": { + "name": "news_seen_by", + "type": "INT", + "null": false, + "foreignTable": "account", + "foreignKey": "account_id" + } + } } } \ No newline at end of file diff --git a/Controller/BackendController.php b/Controller/BackendController.php index 369520b..9191427 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -17,7 +17,10 @@ namespace Modules\News\Controller; use Modules\Dashboard\Models\DashboardElementInterface; use Modules\News\Models\NewsArticle; use Modules\News\Models\NewsArticleMapper; +use Modules\News\Models\NewsSeen; +use Modules\News\Models\NewsSeenMapper; use Modules\News\Models\NewsStatus; +use Modules\News\Models\NullNewsSeen; use Modules\News\Models\PermissionState; use phpOMS\Account\PermissionType; use phpOMS\Contract\RenderableInterface; @@ -82,6 +85,23 @@ final class BackendController extends Controller implements DashboardElementInte ); } + $seen = NewsSeenMapper::getFor($request->header->account, 'seenBy'); + $view->setData('seen', $seen->seenAt); + + // @async + if ($seen instanceof NullNewsSeen) { + $seen = new NewsSeen(); + $seen->seenBy = (int) $request->header->account; + $seen->seenAt = new \DateTime('now'); + + NewsSeenMapper::create($seen); + } else { + $newSeen = clone $seen; + $newSeen->seenAt = new \DateTime('now'); + + NewsSeenMapper::update($newSeen); + } + return $view; } diff --git a/Models/NewsSeen.php b/Models/NewsSeen.php new file mode 100644 index 0000000..bfb0508 --- /dev/null +++ b/Models/NewsSeen.php @@ -0,0 +1,60 @@ +seenAt = new \DateTime('now'); + } + + /** + * Get id + * + * @return int + * + * @since 1.0.0 + */ + public function getId() : int + { + return $this->id; + } +} diff --git a/Models/NewsSeenMapper.php b/Models/NewsSeenMapper.php new file mode 100644 index 0000000..48b4206 --- /dev/null +++ b/Models/NewsSeenMapper.php @@ -0,0 +1,64 @@ + + * @since 1.0.0 + */ + protected static array $columns = [ + 'news_seen_id' => ['name' => 'news_seen_id', 'type' => 'int', 'internal' => 'id'], + 'news_seen_at' => ['name' => 'news_seen_at', 'type' => 'DateTime', 'internal' => 'seenAt'], + 'news_seen_by' => ['name' => 'news_seen_by', 'type' => 'int', 'internal' => 'seenBy'], + ]; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + protected static string $table = 'news_seen'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + protected static string $primaryField = 'news_seen_id'; +} diff --git a/Models/NullNewsSeen.php b/Models/NullNewsSeen.php new file mode 100644 index 0000000..3230e6b --- /dev/null +++ b/Models/NullNewsSeen.php @@ -0,0 +1,39 @@ +id = $id; + parent::__construct(); + } +} diff --git a/Theme/Backend/news-create.tpl.php b/Theme/Backend/news-create.tpl.php index f13c658..3b3c051 100755 --- a/Theme/Backend/news-create.tpl.php +++ b/Theme/Backend/news-create.tpl.php @@ -30,7 +30,7 @@ echo $this->getData('nav')->render(); ?>
- +
diff --git a/Theme/Backend/news-dashboard.tpl.php b/Theme/Backend/news-dashboard.tpl.php index 811a7af..279b529 100755 --- a/Theme/Backend/news-dashboard.tpl.php +++ b/Theme/Backend/news-dashboard.tpl.php @@ -18,6 +18,7 @@ use phpOMS\Utils\Parser\Markdown\Markdown; /** @var \phpOMS\Views\View $this */ /** @var \Modules\News\Models\NewsArticle[] $newsList */ $newsList = $this->getData('news'); +$seenAt = $this->getData('seen'); $previous = empty($newsList) ? '{/prefix}news/dashboard' : '{/prefix}news/dashboard?{?}&id=' . \reset($newsList)->getId() . '&ptype=p'; $next = empty($newsList) ? '{/prefix}news/dashboard' : '{/prefix}news/dashboard?{?}&id=' . \end($newsList)->getId() . '&ptype=n'; @@ -31,7 +32,15 @@ echo $this->getData('nav')->render(); ?> $profile = UriFactory::build('{/prefix}profile/single?{?}&id=' . $news->createdBy->getId()); ?>
- +
+ getTimestamp() < $news->publish->getTimestamp() ? '' : ''; ?> + printHtml($news->title); ?> + + printHtml($news->createdBy->name3 . ' ' . $news->createdBy->name2 . ' ' . $news->createdBy->name1); ?> + - publish->format('Y-m-d'); ?> + + getTimestamp() < $news->publish->getTimestamp() ? '' : ''; ?> +
plain, 0, 500)); ?> diff --git a/Theme/Backend/news-single.tpl.php b/Theme/Backend/news-single.tpl.php index 10d2662..91e5994 100755 --- a/Theme/Backend/news-single.tpl.php +++ b/Theme/Backend/news-single.tpl.php @@ -14,6 +14,7 @@ declare(strict_types=1); use phpOMS\Uri\UriFactory; +use Modules\Comments\Models\CommentListStatus; /** @var \Modules\News\Models\NewsArticle $news */ $news = $this->getData('news'); @@ -57,7 +58,7 @@ echo $this->getData('nav')->render(); ?> comments; -if (!empty($commentList) && $commentList->isActive()) : +if (!empty($commentList) && $commentList->status !== CommentListStatus::INACTIVE) : /* @todo: check if user has permission to create a comment here, maybe he is only allowed to read comments */ echo $this->getData('commentCreate')->render(1); echo $this->getData('commentList')->render($commentList);