Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(settings): Cleanup IManager and Manager type annotations #41662

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 21 additions & 18 deletions lib/private/Settings/Manager.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author sualko <klaus@jsxc.org>
* @author Carl Schwan <carl@carlschwan.eu>
* @author Kate Döen <kate.doeen@nextcloud.com>
*
* @license GNU AGPL version 3 or any later version
*
Expand Down Expand Up @@ -90,17 +91,14 @@ public function __construct(
$this->subAdmin = $subAdmin;
}

/** @var array */
/** @var array<self::SETTINGS_*, list<class-string<IIconSection>>> */
protected $sectionClasses = [];

/** @var array */
/** @var array<self::SETTINGS_*, array<string, IIconSection>> */
protected $sections = [];

/**
* @param string $type 'admin' or 'personal'
* @param string $section Class must implement OCP\Settings\IIconSection
*
* @return void
* @inheritdoc
*/
public function registerSection(string $type, string $section) {
if (!isset($this->sectionClasses[$type])) {
Expand All @@ -111,7 +109,7 @@ public function registerSection(string $type, string $section) {
}

/**
* @param string $type 'admin' or 'personal'
* @psalm-param self::SETTINGS_* $type
*
* @return IIconSection[]
*/
Expand Down Expand Up @@ -149,6 +147,9 @@ protected function getSections(string $type): array {
return $this->sections[$type];
}

/**
* @inheritdoc
*/
public function getSection(string $type, string $sectionId): ?IIconSection {
if (isset($this->sections[$type]) && isset($this->sections[$type][$sectionId])) {
return $this->sections[$type][$sectionId];
Expand All @@ -163,27 +164,23 @@ protected function isKnownDuplicateSectionId(string $sectionID): bool {
], true);
}

/** @var array */
/** @var array<class-string<ISettings>, self::SETTINGS_*> */
protected $settingClasses = [];

/** @var array */
/** @var array<self::SETTINGS_*, array<string, list<ISettings>>> */
protected $settings = [];

/**
* @psam-param 'admin'|'personal' $type The type of the setting.
* @param string $setting Class must implement OCP\Settings\ISettings
* @param bool $allowedDelegation
*
* @return void
* @inheritdoc
*/
public function registerSetting(string $type, string $setting) {
$this->settingClasses[$setting] = $type;
}

/**
* @param string $type 'admin' or 'personal'
* @psalm-param self::SETTINGS_* $type The type of the setting.
* @param string $section
* @param Closure $filter optional filter to apply on all loaded ISettings
* @param ?Closure $filter optional filter to apply on all loaded ISettings
*
* @return ISettings[]
*/
Expand Down Expand Up @@ -258,7 +255,7 @@ public function getAdminSections(): array {
/**
* @inheritdoc
*/
public function getAdminSettings($section, bool $subAdminOnly = false): array {
public function getAdminSettings(string $section, bool $subAdminOnly = false): array {
if ($subAdminOnly) {
$subAdminSettingsFilter = function (ISettings $settings) {
return $settings instanceof ISubAdminSettings;
Expand Down Expand Up @@ -329,7 +326,7 @@ private function hasLegacyPersonalSettingsToRender(array $forms): bool {
/**
* @inheritdoc
*/
public function getPersonalSettings($section): array {
public function getPersonalSettings(string $section): array {
$settings = [];
$appSettings = $this->getSettings('personal', $section);

Expand All @@ -344,6 +341,9 @@ public function getPersonalSettings($section): array {
return $settings;
}

/**
* @inheritdoc
*/
public function getAllowedAdminSettings(string $section, IUser $user): array {
$isAdmin = $this->groupManager->isAdmin($user->getUID());
if ($isAdmin) {
Expand Down Expand Up @@ -375,6 +375,9 @@ public function getAllowedAdminSettings(string $section, IUser $user): array {
return $settings;
}

/**
* @inheritdoc
*/
public function getAllAllowedAdminSettings(IUser $user): array {
$this->getSettings('admin', ''); // Make sure all the settings are loaded
$settings = [];
Expand Down
38 changes: 27 additions & 11 deletions lib/public/Settings/IManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
* @author Christoph Wurst <christoph@winzerhof-wurst.at>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Kate Döen <kate.doeen@nextcloud.com>
*
* @license GNU AGPL version 3 or any later version
*
Expand Down Expand Up @@ -34,50 +35,64 @@
interface IManager {
/**
* @since 9.1.0
* @depreacted 29.0.0 Use {@see self::SETTINGS_ADMIN} instead
*/
public const KEY_ADMIN_SETTINGS = 'admin';

/**
* @since 9.1.0
* @depreacted 29.0.0 Use {@see self::SETTINGS_ADMIN} instead
*/
public const KEY_ADMIN_SECTION = 'admin-section';

/**
* @since 13.0.0
* @depreacted 29.0.0 Use {@see self::SETTINGS_PERSONAL} instead
*/
public const KEY_PERSONAL_SETTINGS = 'personal';

/**
* @since 13.0.0
* @depreacted 29.0.0 Use {@see self::SETTINGS_PERSONAL} instead
*/
public const KEY_PERSONAL_SECTION = 'personal-section';

/**
* @param string $type 'admin-section' or 'personal-section'
* @param string $section Class must implement OCP\Settings\ISection
* @since 29.0.0
*/
public const SETTINGS_ADMIN = 'admin';

/**
* @since 29.0.0
*/
public const SETTINGS_PERSONAL = 'personal';

/**
* @psalm-param self::SETTINGS_* $type
* @param class-string<IIconSection> $section
* @since 14.0.0
*/
public function registerSection(string $type, string $section);

/**
* @param string $type 'admin' or 'personal'
* @param string $setting Class must implement OCP\Settings\ISettings
* @psalm-param self::SETTINGS_* $type
* @param class-string<ISettings> $setting
* @since 14.0.0
*/
public function registerSetting(string $type, string $setting);

/**
* returns a list of the admin sections
*
* @return array<int, array<int, IIconSection>> array from IConSection[] where key is the priority
* @return array<int, list<IIconSection>> list of sections with priority as key
* @since 9.1.0
*/
public function getAdminSections(): array;

/**
* returns a list of the personal sections
*
* @return array array of ISection[] where key is the priority
* @return array<int, list<IIconSection>> list of sections with priority as key
* @since 13.0.0
*/
public function getPersonalSections(): array;
Expand All @@ -87,10 +102,10 @@ public function getPersonalSections(): array;
*
* @param string $section the section id for which to load the settings
* @param bool $subAdminOnly only return settings sub admins are supposed to see (since 17.0.0)
* @return array<int, array<int, ISettings>> array of ISettings[] where key is the priority
* @return array<int, list<ISettings>> list of settings with priority as key
* @since 9.1.0
*/
public function getAdminSettings($section, bool $subAdminOnly = false): array;
public function getAdminSettings(string $section, bool $subAdminOnly = false): array;

/**
* Returns a list of admin settings that the given user can use for the give section
Expand All @@ -103,7 +118,7 @@ public function getAllowedAdminSettings(string $section, IUser $user): array;
/**
* Returns a list of admin settings that the given user can use.
*
* @return array<int, list<ISettings>> The array of admin settings there admin delegation is allowed.
* @return list<ISettings> The array of admin settings there admin delegation is allowed.
provokateurin marked this conversation as resolved.
Show resolved Hide resolved
* @since 23.0.0
*/
public function getAllAllowedAdminSettings(IUser $user): array;
Expand All @@ -112,13 +127,14 @@ public function getAllAllowedAdminSettings(IUser $user): array;
* returns a list of the personal settings
*
* @param string $section the section id for which to load the settings
* @return array array of ISettings[] where key is the priority
* @return array<int, list<ISettings>> list of settings with priority as key
* @since 13.0.0
*/
public function getPersonalSettings($section): array;
public function getPersonalSettings(string $section): array;

/**
* Get a specific section by type and id
* @psalm-param self::SETTINGS_* $type
* @since 25.0.0
*/
public function getSection(string $type, string $sectionId): ?IIconSection;
Expand Down
Loading