From 3ad375e73a3453070905b097d0c0c0054b4370c0 Mon Sep 17 00:00:00 2001 From: Julien Veyssier Date: Thu, 8 Sep 2022 10:51:50 +0200 Subject: [PATCH 1/3] implement IAPIWIdget, IButtonWidget and IIconWidget Signed-off-by: Julien Veyssier --- lib/Dashboard/ActivityWidget.php | 96 +++++++++++++++++++++++++++++--- 1 file changed, 87 insertions(+), 9 deletions(-) diff --git a/lib/Dashboard/ActivityWidget.php b/lib/Dashboard/ActivityWidget.php index 7689a0a77..565b43e34 100644 --- a/lib/Dashboard/ActivityWidget.php +++ b/lib/Dashboard/ActivityWidget.php @@ -26,22 +26,48 @@ namespace OCA\Activity\Dashboard; use OCA\Activity\AppInfo\Application; -use OCP\Dashboard\IWidget; +use OCA\Activity\Data; +use OCA\Activity\GroupHelper; +use OCA\Activity\UserSettings; +use OCP\Dashboard\IAPIWidget; +use OCP\Dashboard\IButtonWidget; +use OCP\Dashboard\IIconWidget; +use OCP\Dashboard\Model\WidgetButton; +use OCP\Dashboard\Model\WidgetItem; +use OCP\IDateTimeFormatter; use OCP\IL10N; +use OCP\IURLGenerator; +use OCP\Util; -class ActivityWidget implements IWidget { - - /** - * @var IL10N - */ - private $l10n; +class ActivityWidget implements IAPIWidget, IButtonWidget, IIconWidget { + private Data $data; + private IL10N $l10n; + private GroupHelper $helper; + private UserSettings $settings; + private IDateTimeFormatter $dateTimeFormatter; + private IURLGenerator $urlGenerator; /** * ActivityWidget constructor. * @param IL10N $l10n + * @param Data $data + * @param GroupHelper $helper + * @param UserSettings $settings + * @param IURLGenerator $urlGenerator + * @param IDateTimeFormatter $dateTimeFormatter */ - public function __construct(IL10N $l10n) { + public function __construct(IL10N $l10n, + Data $data, + GroupHelper $helper, + UserSettings $settings, + IURLGenerator $urlGenerator, + IDateTimeFormatter $dateTimeFormatter) { + $this->data = $data; $this->l10n = $l10n; + $this->helper = $helper; + $this->settings = $settings; + $this->dateTimeFormatter = $dateTimeFormatter; + $this->urlGenerator = $urlGenerator; } /** @@ -72,6 +98,15 @@ public function getIconClass(): string { return 'icon-activity'; } + /** + * @inheritDoc + */ + public function getIconUrl(): string { + return $this->urlGenerator->getAbsoluteURL( + $this->urlGenerator->imagePath(Application::APP_ID, 'activity-dark.svg') + ); + } + /** * @inheritDoc */ @@ -83,6 +118,49 @@ public function getUrl(): ?string { * @inheritDoc */ public function load(): void { - \OCP\Util::addScript('activity', 'activity-dashboard'); + Util::addScript('activity', 'activity-dashboard'); + } + + /** + * @inheritDoc + */ + public function getItems(string $userId, ?string $since = null, int $limit = 7): array { + $activities = $this->data->get( + $this->helper, + $this->settings, + $userId, + $since ? (int) $since : 0, + 50, + 'desc', + 'by', + '', + 0 + ); + return array_map(function (array $activity) { + return new WidgetItem( + $activity['subject'], + $this->dateTimeFormatter->formatTimeSpan($activity['timestamp']), + $activity['link'], + $this->urlGenerator->getAbsoluteURL( + $this->urlGenerator->linkToRoute('core.avatar.getAvatar', ['userId' => $activity['affecteduser'], 'size' => 44]) + ), + (string) $activity['activity_id'] + ); + }, array_slice($activities['data'], 0, $limit)); + } + + /** + * @inheritDoc + */ + public function getWidgetButtons(string $userId): array { + return [ + new WidgetButton( + WidgetButton::TYPE_MORE, + $this->urlGenerator->getAbsoluteURL( + $this->urlGenerator->linkToRoute(Application::APP_ID . '.Activities.showList') + ), + $this->l10n->t('More Activities') + ), + ]; } } From 7b835e789fbbad6e2a0aeb4fc0baa604c88cc5f8 Mon Sep 17 00:00:00 2001 From: Julien Veyssier Date: Mon, 12 Sep 2022 20:25:46 +0200 Subject: [PATCH 2/3] adjustments in dashboard widget declaration Signed-off-by: Julien Veyssier --- lib/Dashboard/ActivityWidget.php | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/lib/Dashboard/ActivityWidget.php b/lib/Dashboard/ActivityWidget.php index 565b43e34..bd2426f23 100644 --- a/lib/Dashboard/ActivityWidget.php +++ b/lib/Dashboard/ActivityWidget.php @@ -47,15 +47,6 @@ class ActivityWidget implements IAPIWidget, IButtonWidget, IIconWidget { private IDateTimeFormatter $dateTimeFormatter; private IURLGenerator $urlGenerator; - /** - * ActivityWidget constructor. - * @param IL10N $l10n - * @param Data $data - * @param GroupHelper $helper - * @param UserSettings $settings - * @param IURLGenerator $urlGenerator - * @param IDateTimeFormatter $dateTimeFormatter - */ public function __construct(IL10N $l10n, Data $data, GroupHelper $helper, @@ -111,7 +102,9 @@ public function getIconUrl(): string { * @inheritDoc */ public function getUrl(): ?string { - return null; + return $this->urlGenerator->getAbsoluteURL( + $this->urlGenerator->linkToRoute(Application::APP_ID . '.Activities.showList') + ); } /** @@ -125,6 +118,8 @@ public function load(): void { * @inheritDoc */ public function getItems(string $userId, ?string $since = null, int $limit = 7): array { + // we set the limit to 50 here because data->get might return less activity entries + // in the end we take the first 7 of'em $activities = $this->data->get( $this->helper, $this->settings, @@ -141,9 +136,7 @@ public function getItems(string $userId, ?string $since = null, int $limit = 7): $activity['subject'], $this->dateTimeFormatter->formatTimeSpan($activity['timestamp']), $activity['link'], - $this->urlGenerator->getAbsoluteURL( - $this->urlGenerator->linkToRoute('core.avatar.getAvatar', ['userId' => $activity['affecteduser'], 'size' => 44]) - ), + $activity['icon'], (string) $activity['activity_id'] ); }, array_slice($activities['data'], 0, $limit)); From 1d7b4add4a205fda75bc5c8086cedfae0d60e019 Mon Sep 17 00:00:00 2001 From: Julien Veyssier Date: Fri, 16 Sep 2022 13:16:35 +0200 Subject: [PATCH 3/3] fix dashboard api button title Signed-off-by: Julien Veyssier --- lib/Dashboard/ActivityWidget.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Dashboard/ActivityWidget.php b/lib/Dashboard/ActivityWidget.php index bd2426f23..2e97cb6f4 100644 --- a/lib/Dashboard/ActivityWidget.php +++ b/lib/Dashboard/ActivityWidget.php @@ -152,7 +152,7 @@ public function getWidgetButtons(string $userId): array { $this->urlGenerator->getAbsoluteURL( $this->urlGenerator->linkToRoute(Application::APP_ID . '.Activities.showList') ), - $this->l10n->t('More Activities') + $this->l10n->t('More activities') ), ]; }