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(); ?>