Implement task seen setting

This commit is contained in:
Dennis Eichhorn 2023-09-19 03:27:49 +00:00
parent a34e412947
commit 82072cfd65
3 changed files with 95 additions and 0 deletions

View File

@ -21,6 +21,8 @@ use Modules\Tasks\Models\AccountRelationMapper;
use Modules\Tasks\Models\PermissionCategory;
use Modules\Tasks\Models\TaskElementMapper;
use Modules\Tasks\Models\TaskMapper;
use Modules\Tasks\Models\TaskSeen;
use Modules\Tasks\Models\TaskSeenMapper;
use Modules\Tasks\Models\TaskStatus;
use Modules\Tasks\Views\TaskView;
use phpOMS\Account\PermissionType;
@ -110,6 +112,23 @@ final class BackendController extends Controller implements DashboardElementInte
$view->data['open'] = $open;
/** @var \Modules\Tasks\Models\TaskSeen[] $unread */
$unread = TaskSeenMapper::getAll()
->where('task', \array_keys($open), 'in')
->where('seenBy', $request->header->account)
->execute();
$unseen = [];
foreach ($unread as $read) {
if ($read->isRemindered && ($read->reminderAt?->getTimestamp() ?? 0) > $request->header->getRequestTime()) {
continue;
}
$unseen[$read->task] = true;
}
$view->data['unread'] = $unseen;
return $view;
}
@ -196,6 +215,31 @@ final class BackendController extends Controller implements DashboardElementInte
->where('tags/title/language', $request->header->l11n->language)
->execute();
if ($task !== 0) {
$taskSeen = TaskSeenMapper::getAll()
->where('task', (int) $request->getData('id'))
->where('seenBy', $request->header->account)
->execute();
foreach ($taskSeen as $unseen) {
if ($unseen->isRemindered && ($unseen->reminderAt?->getTimestamp() ?? 0) < $request->header->getRequestTime()) {
$old = clone $unseen;
$unseen->isRemindered = false;
$this->updateModel($request->header->account, $old, $unseen, TaskSeenMapper::class, 'task-seen', $request->getOrigin());
}
}
if (empty($taskSeen)) {
$taskSeen = new TaskSeen();
$taskSeen->seenBy = $request->header->account;
$taskSeen->task = (int) $request->getData('id');
$this->createModel($request->header->account, $taskSeen, TaskSeenMapper::class, 'task-seen', $request->getOrigin());
}
}
$accountId = $request->header->account;
if (!($task->createdBy->id === $accountId

47
Models/NullTaskSeen.php Normal file
View File

@ -0,0 +1,47 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Tasks\Models
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
namespace Modules\Tasks\Models;
/**
* Null model
*
* @package Modules\Tasks\Models
* @license OMS License 2.0
* @link https://jingga.app
* @since 1.0.0
*/
final class NullTaskSeen extends TaskSeen
{
/**
* Constructor
*
* @param int $id Model id
*
* @since 1.0.0
*/
public function __construct(int $id = 0)
{
$this->id = $id;
parent::__construct();
}
/**
* {@inheritdoc}
*/
public function jsonSerialize() : mixed
{
return ['id' => $this->id];
}
}

View File

@ -242,6 +242,10 @@ echo $this->data['nav']->render(); ?>
<?php
$c = 0;
foreach ($open as $key => $task) : ++$c;
if (isset($this->data['unread'][$key])) {
continue;
}
$url = UriFactory::build(empty($task->redirect)
? 'task/single?{?}&id=' . $task->id
: ('{/app}/' . $task->redirect),