aboutsummaryrefslogtreecommitdiffstats
path: root/apps/dashboard/lib
diff options
context:
space:
mode:
Diffstat (limited to 'apps/dashboard/lib')
-rw-r--r--apps/dashboard/lib/Controller/DashboardApiController.php31
-rw-r--r--apps/dashboard/lib/Controller/DashboardController.php18
-rw-r--r--apps/dashboard/lib/ResponseDefinitions.php8
-rw-r--r--apps/dashboard/lib/Service/DashboardService.php28
4 files changed, 58 insertions, 27 deletions
diff --git a/apps/dashboard/lib/Controller/DashboardApiController.php b/apps/dashboard/lib/Controller/DashboardApiController.php
index a9557965076..d31cede85b7 100644
--- a/apps/dashboard/lib/Controller/DashboardApiController.php
+++ b/apps/dashboard/lib/Controller/DashboardApiController.php
@@ -13,6 +13,8 @@ use OCA\Dashboard\ResponseDefinitions;
use OCA\Dashboard\Service\DashboardService;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\Attribute\ApiRoute;
+use OCP\AppFramework\Http\Attribute\NoAdminRequired;
+use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCSController;
use OCP\Dashboard\IAPIWidget;
@@ -67,19 +69,18 @@ class DashboardApiController extends OCSController {
}
/**
- * @NoAdminRequired
- * @NoCSRFRequired
- *
* Get the items for the widgets
*
* @param array<string, string> $sinceIds Array indexed by widget Ids, contains date/id from which we want the new items
* @param int $limit Limit number of result items per widget
* @psalm-param int<1, 30> $limit
- * @param string[] $widgets Limit results to specific widgets
- * @return DataResponse<Http::STATUS_OK, array<string, DashboardWidgetItem[]>, array{}>
+ * @param list<string> $widgets Limit results to specific widgets
+ * @return DataResponse<Http::STATUS_OK, array<string, list<DashboardWidgetItem>>, array{}>
*
* 200: Widget items returned
*/
+ #[NoAdminRequired]
+ #[NoCSRFRequired]
#[ApiRoute(verb: 'GET', url: '/api/v1/widget-items')]
public function getWidgetItems(array $sinceIds = [], int $limit = 7, array $widgets = []): DataResponse {
$items = [];
@@ -96,19 +97,18 @@ class DashboardApiController extends OCSController {
}
/**
- * @NoAdminRequired
- * @NoCSRFRequired
- *
* Get the items for the widgets
*
* @param array<string, string> $sinceIds Array indexed by widget Ids, contains date/id from which we want the new items
* @param int $limit Limit number of result items per widget, not more than 30 are allowed
* @psalm-param int<1, 30> $limit
- * @param string[] $widgets Limit results to specific widgets
+ * @param list<string> $widgets Limit results to specific widgets
* @return DataResponse<Http::STATUS_OK, array<string, DashboardWidgetItems>, array{}>
*
* 200: Widget items returned
*/
+ #[NoAdminRequired]
+ #[NoCSRFRequired]
#[ApiRoute(verb: 'GET', url: '/api/v2/widget-items')]
public function getWidgetItemsV2(array $sinceIds = [], int $limit = 7, array $widgets = []): DataResponse {
$items = [];
@@ -127,13 +127,12 @@ class DashboardApiController extends OCSController {
/**
* Get the widgets
*
- * @NoAdminRequired
- * @NoCSRFRequired
- *
* @return DataResponse<Http::STATUS_OK, array<string, DashboardWidget>, array{}>
*
* 200: Widgets returned
*/
+ #[NoAdminRequired]
+ #[NoCSRFRequired]
#[ApiRoute(verb: 'GET', url: '/api/v1/widgets')]
public function getWidgets(): DataResponse {
$widgets = $this->dashboardManager->getWidgets();
@@ -180,11 +179,11 @@ class DashboardApiController extends OCSController {
/**
* Get the layout
*
- * @NoAdminRequired
* @return DataResponse<Http::STATUS_OK, array{layout: list<string>}, array{}>
*
* 200: Layout returned
*/
+ #[NoAdminRequired]
#[ApiRoute(verb: 'GET', url: '/api/v3/layout')]
public function getLayout(): DataResponse {
return new DataResponse(['layout' => $this->service->getLayout()]);
@@ -193,12 +192,12 @@ class DashboardApiController extends OCSController {
/**
* Update the layout
*
- * @NoAdminRequired
* @param list<string> $layout The new layout
* @return DataResponse<Http::STATUS_OK, array{layout: list<string>}, array{}>
*
* 200: Statuses updated successfully
*/
+ #[NoAdminRequired]
#[ApiRoute(verb: 'POST', url: '/api/v3/layout')]
public function updateLayout(array $layout): DataResponse {
$this->config->setUserValue($this->userId, 'dashboard', 'layout', implode(',', $layout));
@@ -208,11 +207,11 @@ class DashboardApiController extends OCSController {
/**
* Get the statuses
*
- * @NoAdminRequired
* @return DataResponse<Http::STATUS_OK, array{statuses: list<string>}, array{}>
*
* 200: Statuses returned
*/
+ #[NoAdminRequired]
#[ApiRoute(verb: 'GET', url: '/api/v3/statuses')]
public function getStatuses(): DataResponse {
return new DataResponse(['statuses' => $this->service->getStatuses()]);
@@ -221,12 +220,12 @@ class DashboardApiController extends OCSController {
/**
* Update the statuses
*
- * @NoAdminRequired
* @param list<string> $statuses The new statuses
* @return DataResponse<Http::STATUS_OK, array{statuses: list<string>}, array{}>
*
* 200: Statuses updated successfully
*/
+ #[NoAdminRequired]
#[ApiRoute(verb: 'POST', url: '/api/v3/statuses')]
public function updateStatuses(array $statuses): DataResponse {
$this->config->setUserValue($this->userId, 'dashboard', 'statuses', implode(',', $statuses));
diff --git a/apps/dashboard/lib/Controller/DashboardController.php b/apps/dashboard/lib/Controller/DashboardController.php
index 9c1ab7813f2..da7e0901115 100644
--- a/apps/dashboard/lib/Controller/DashboardController.php
+++ b/apps/dashboard/lib/Controller/DashboardController.php
@@ -10,17 +10,21 @@ namespace OCA\Dashboard\Controller;
use OCA\Dashboard\Service\DashboardService;
use OCP\AppFramework\Controller;
-use OCP\AppFramework\Http;
use OCP\AppFramework\Http\Attribute\FrontpageRoute;
+use OCP\AppFramework\Http\Attribute\NoAdminRequired;
+use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
use OCP\AppFramework\Http\Attribute\OpenAPI;
+use OCP\AppFramework\Http\FeaturePolicy;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\AppFramework\Services\IInitialState;
+use OCP\Dashboard\IIconWidget;
use OCP\Dashboard\IManager;
use OCP\Dashboard\IWidget;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\IConfig;
use OCP\IL10N;
use OCP\IRequest;
+use OCP\Util;
#[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)]
class DashboardController extends Controller {
@@ -40,20 +44,21 @@ class DashboardController extends Controller {
}
/**
- * @NoCSRFRequired
- * @NoAdminRequired
* @return TemplateResponse
*/
+ #[NoCSRFRequired]
+ #[NoAdminRequired]
#[FrontpageRoute(verb: 'GET', url: '/')]
public function index(): TemplateResponse {
- \OCP\Util::addStyle('dashboard', 'dashboard');
- \OCP\Util::addScript('dashboard', 'main', 'theming');
+ Util::addStyle('dashboard', 'dashboard');
+ Util::addScript('dashboard', 'main', 'theming');
$widgets = array_map(function (IWidget $widget) {
return [
'id' => $widget->getId(),
'title' => $widget->getTitle(),
'iconClass' => $widget->getIconClass(),
+ 'iconUrl' => $widget instanceof IIconWidget ? $widget->getIconUrl() : '',
'url' => $widget->getUrl()
];
}, $this->dashboardManager->getWidgets());
@@ -63,6 +68,7 @@ class DashboardController extends Controller {
$this->initialState->provideInitialState('layout', $this->service->getLayout());
$this->initialState->provideInitialState('appStoreEnabled', $this->config->getSystemValueBool('appstoreenabled', true));
$this->initialState->provideInitialState('firstRun', $this->config->getUserValue($this->userId, 'dashboard', 'firstRun', '1') === '1');
+ $this->initialState->provideInitialState('birthdate', $this->service->getBirthdate());
$this->config->setUserValue($this->userId, 'dashboard', 'firstRun', '0');
$response = new TemplateResponse('dashboard', 'index', [
@@ -72,7 +78,7 @@ class DashboardController extends Controller {
]);
// For the weather widget we should allow the geolocation
- $featurePolicy = new Http\FeaturePolicy();
+ $featurePolicy = new FeaturePolicy();
$featurePolicy->addAllowedGeoLocationDomain('\'self\'');
$response->setFeaturePolicy($featurePolicy);
diff --git a/apps/dashboard/lib/ResponseDefinitions.php b/apps/dashboard/lib/ResponseDefinitions.php
index df76efdab5a..be5a4d56883 100644
--- a/apps/dashboard/lib/ResponseDefinitions.php
+++ b/apps/dashboard/lib/ResponseDefinitions.php
@@ -18,13 +18,13 @@ namespace OCA\Dashboard;
* icon_url: string,
* widget_url: ?string,
* item_icons_round: bool,
- * item_api_versions: int[],
+ * item_api_versions: list<int>,
* reload_interval: int,
- * buttons?: array{
+ * buttons?: list<array{
* type: string,
* text: string,
* link: string,
- * }[],
+ * }>,
* }
*
* @psalm-type DashboardWidgetItem = array{
@@ -37,7 +37,7 @@ namespace OCA\Dashboard;
* }
*
* @psalm-type DashboardWidgetItems = array{
- * items: DashboardWidgetItem[],
+ * items: list<DashboardWidgetItem>,
* emptyContentMessage: string,
* halfEmptyContentMessage: string,
* }
diff --git a/apps/dashboard/lib/Service/DashboardService.php b/apps/dashboard/lib/Service/DashboardService.php
index 041d4a5c772..bb5333c2cc7 100644
--- a/apps/dashboard/lib/Service/DashboardService.php
+++ b/apps/dashboard/lib/Service/DashboardService.php
@@ -9,12 +9,17 @@ declare(strict_types=1);
namespace OCA\Dashboard\Service;
use JsonException;
+use OCP\Accounts\IAccountManager;
+use OCP\Accounts\PropertyDoesNotExistException;
use OCP\IConfig;
+use OCP\IUserManager;
class DashboardService {
public function __construct(
private IConfig $config,
- private String $userId,
+ private ?string $userId,
+ private IUserManager $userManager,
+ private IAccountManager $accountManager,
) {
}
@@ -42,4 +47,25 @@ class DashboardService {
return array_values(array_filter(explode(',', $configStatuses), fn (string $value) => $value !== ''));
}
}
+
+ public function getBirthdate(): string {
+ if ($this->userId === null) {
+ return '';
+ }
+
+ $user = $this->userManager->get($this->userId);
+ if ($user === null) {
+ return '';
+ }
+
+ $account = $this->accountManager->getAccount($user);
+
+ try {
+ $birthdate = $account->getProperty(IAccountManager::PROPERTY_BIRTHDATE);
+ } catch (PropertyDoesNotExistException) {
+ return '';
+ }
+
+ return $birthdate->getValue();
+ }
}