Skip to content

Commit

Permalink
Merge pull request #912 from nextcloud/enh/910/implement-new-dashboar…
Browse files Browse the repository at this point in the history
…d-api

Implement new dashboard API
  • Loading branch information
Julien Veyssier authored Sep 19, 2022
2 parents fb3816b + 1d7b4ad commit 8889f9f
Showing 1 changed file with 85 additions and 14 deletions.
99 changes: 85 additions & 14 deletions lib/Dashboard/ActivityWidget.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,22 +26,39 @@
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 {
class ActivityWidget implements IAPIWidget, IButtonWidget, IIconWidget {
private Data $data;
private IL10N $l10n;
private GroupHelper $helper;
private UserSettings $settings;
private IDateTimeFormatter $dateTimeFormatter;
private IURLGenerator $urlGenerator;

/**
* @var IL10N
*/
private $l10n;

/**
* ActivityWidget constructor.
* @param IL10N $l10n
*/
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;
}

/**
Expand Down Expand Up @@ -72,17 +89,71 @@ 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
*/
public function getUrl(): ?string {
return null;
return $this->urlGenerator->getAbsoluteURL(
$this->urlGenerator->linkToRoute(Application::APP_ID . '.Activities.showList')
);
}

/**
* @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 {
// 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,
$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'],
$activity['icon'],
(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')
),
];
}
}

0 comments on commit 8889f9f

Please sign in to comment.