You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
1.2 KiB

  1. <?php
  2. declare(strict_types=1);
  3. /**
  4. * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
  5. * SPDX-License-Identifier: AGPL-3.0-or-later
  6. */
  7. namespace OC\Core\AppInfo;
  8. use OCP\Capabilities\ICapability;
  9. use OCP\Config\IUserConfig;
  10. use OCP\IDateTimeZone;
  11. use OCP\IGroupManager;
  12. use OCP\IUserSession;
  13. use OCP\Server;
  14. class Capabilities implements ICapability {
  15. public function __construct(
  16. private IUserSession $session,
  17. private IUserConfig $userConfig,
  18. private IGroupManager $groupManager,
  19. ) {
  20. }
  21. /**
  22. * Return the core capabilities
  23. *
  24. * @return array{core: array{'user'?: array{language: string, locale: string, timezone: string} } }
  25. */
  26. public function getCapabilities(): array {
  27. $capabilities = [];
  28. $user = $this->session->getUser();
  29. if ($user !== null) {
  30. $timezone = Server::get(IDateTimeZone::class)->getTimeZone();
  31. $capabilities['user'] = [
  32. 'language' => $this->userConfig->getValueString($user->getUID(), Application::APP_ID, ConfigLexicon::USER_LANGUAGE),
  33. 'locale' => $this->userConfig->getValueString($user->getUID(), Application::APP_ID, ConfigLexicon::USER_LOCALE),
  34. 'timezone' => $timezone->getName(),
  35. ];
  36. }
  37. return [
  38. 'core' => $capabilities,
  39. ];
  40. }
  41. }