diff options
author | Julien Veyssier <eneiluj@posteo.net> | 2022-09-07 13:46:56 +0300 |
---|---|---|
committer | Julien Veyssier <eneiluj@posteo.net> | 2022-09-15 19:06:21 +0300 |
commit | 8e2e3b4a9f243b0a3d02b5dcdc9e7ef02d9c3d35 (patch) | |
tree | 4812bdf5880216c451a4678db1f71cbf5a83576d /apps | |
parent | d9e75f00b1977da7325db14554729419f5fe02c9 (diff) |
implement IAPIWidget in user_status
Signed-off-by: Julien Veyssier <eneiluj@posteo.net>
Diffstat (limited to 'apps')
-rw-r--r-- | apps/user_status/lib/Dashboard/UserStatusWidget.php | 86 |
1 files changed, 58 insertions, 28 deletions
diff --git a/apps/user_status/lib/Dashboard/UserStatusWidget.php b/apps/user_status/lib/Dashboard/UserStatusWidget.php index 10411dc7f9d..112e957cbcc 100644 --- a/apps/user_status/lib/Dashboard/UserStatusWidget.php +++ b/apps/user_status/lib/Dashboard/UserStatusWidget.php @@ -28,50 +28,52 @@ namespace OCA\UserStatus\Dashboard; use OCA\UserStatus\AppInfo\Application; use OCA\UserStatus\Db\UserStatus; use OCA\UserStatus\Service\StatusService; -use OCP\Dashboard\IWidget; -use OCP\IInitialStateService; +use OCP\AppFramework\Services\IInitialState; +use OCP\Dashboard\IAPIWidget; +use OCP\Dashboard\Model\WidgetItem; +use OCP\IDateTimeFormatter; use OCP\IL10N; +use OCP\IURLGenerator; use OCP\IUserManager; use OCP\IUserSession; use OCP\UserStatus\IUserStatus; +use OCP\Util; /** * Class UserStatusWidget * * @package OCA\UserStatus */ -class UserStatusWidget implements IWidget { - - /** @var IL10N */ - private $l10n; - - /** @var IInitialStateService */ - private $initialStateService; - - /** @var IUserManager */ - private $userManager; - - /** @var IUserSession */ - private $userSession; - - /** @var StatusService */ - private $service; +class UserStatusWidget implements IAPIWidget { + private IL10N $l10n; + private IDateTimeFormatter $dateTimeFormatter; + private IURLGenerator $urlGenerator; + private IInitialState $initialStateService; + private IUserManager $userManager; + private IUserSession $userSession; + private StatusService $service; /** * UserStatusWidget constructor * * @param IL10N $l10n - * @param IInitialStateService $initialStateService + * @param IDateTimeFormatter $dateTimeFormatter + * @param IURLGenerator $urlGenerator + * @param IInitialState $initialStateService * @param IUserManager $userManager * @param IUserSession $userSession * @param StatusService $service */ public function __construct(IL10N $l10n, - IInitialStateService $initialStateService, + IDateTimeFormatter $dateTimeFormatter, + IURLGenerator $urlGenerator, + IInitialState $initialStateService, IUserManager $userManager, IUserSession $userSession, StatusService $service) { $this->l10n = $l10n; + $this->dateTimeFormatter = $dateTimeFormatter; + $this->urlGenerator = $urlGenerator; $this->initialStateService = $initialStateService; $this->userManager = $userManager; $this->userSession = $userSession; @@ -117,7 +119,7 @@ class UserStatusWidget implements IWidget { * @inheritDoc */ public function load(): void { - \OCP\Util::addScript(Application::APP_ID, 'dashboard'); + Util::addScript(Application::APP_ID, 'dashboard'); $currentUser = $this->userSession->getUser(); if ($currentUser === null) { @@ -126,19 +128,24 @@ class UserStatusWidget implements IWidget { } $currentUserId = $currentUser->getUID(); + $widgetItemsData = $this->getWidgetData($currentUserId); + $this->initialStateService->provideInitialState('dashboard_data', $widgetItemsData); + } + + private function getWidgetData(string $userId, ?string $since = null, int $limit = 7): array { // Fetch status updates and filter current user $recentStatusUpdates = array_slice( array_filter( - $this->service->findAllRecentStatusChanges(8, 0), - static function (UserStatus $status) use ($currentUserId): bool { - return $status->getUserId() !== $currentUserId; + $this->service->findAllRecentStatusChanges($limit + 1, 0), + static function (UserStatus $status) use ($userId, $since): bool { + return $status->getUserId() !== $userId + && ($since === null || $status->getStatusTimestamp() > (int) $since); } ), 0, - 7 + $limit ); - - $this->initialStateService->provideInitialState(Application::APP_ID, 'dashboard_data', array_map(function (UserStatus $status): array { + return array_map(function (UserStatus $status): array { $user = $this->userManager->get($status->getUserId()); $displayName = $status->getUserId(); if ($user !== null) { @@ -155,6 +162,29 @@ class UserStatusWidget implements IWidget { 'message' => $status->getCustomMessage(), 'timestamp' => $status->getStatusTimestamp(), ]; - }, $recentStatusUpdates)); + }, $recentStatusUpdates); + } + + /** + * @inheritDoc + */ + public function getItems(string $userId, ?string $since = null, int $limit = 7): array { + $widgetItemsData = $this->getWidgetData($userId, $since, $limit); + + return array_map(function(array $widgetData) { + $formattedDate = $this->dateTimeFormatter->formatTimeSpan($widgetData['timestamp']); + return new WidgetItem( + $widgetData['displayName'], + $widgetData['icon'] . ' ' . $widgetData['message'] . ', ' . $formattedDate, + // https://nextcloud.local/index.php/u/julien + $this->urlGenerator->getAbsoluteURL( + $this->urlGenerator->linkToRoute('core.ProfilePage.index', ['targetUserId' => $widgetData['userId']]) + ), + $this->urlGenerator->getAbsoluteURL( + $this->urlGenerator->linkToRoute('core.avatar.getAvatar', ['userId' => $widgetData['userId'], 'size' => 44]) + ), + (string) $widgetData['timestamp'] + ); + }, $widgetItemsData); } } |