Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorJulien Veyssier <eneiluj@posteo.net>2022-09-07 13:46:56 +0300
committerJulien Veyssier <eneiluj@posteo.net>2022-09-15 19:06:21 +0300
commit8e2e3b4a9f243b0a3d02b5dcdc9e7ef02d9c3d35 (patch)
tree4812bdf5880216c451a4678db1f71cbf5a83576d /apps
parentd9e75f00b1977da7325db14554729419f5fe02c9 (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.php86
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);
}
}