From: John Molakvoæ Date: Wed, 20 Apr 2022 08:31:32 +0000 (+0200) Subject: Migrate old accessibility config X-Git-Tag: v25.0.0beta1~535^2~7 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=7b686abe7fb53c8475d8295a59167bdab95fccc9;p=nextcloud-server.git Migrate old accessibility config Signed-off-by: John Molakvoæ --- diff --git a/apps/theming/appinfo/info.xml b/apps/theming/appinfo/info.xml index 7b6e20a781f..b67b461c410 100644 --- a/apps/theming/appinfo/info.xml +++ b/apps/theming/appinfo/info.xml @@ -5,7 +5,7 @@ Theming Adjust the Nextcloud theme Adjust the Nextcloud theme - 1.16.0 + 2.0.0 agpl Nextcloud Theming @@ -28,6 +28,12 @@ OCA\Theming\Settings\PersonalSection + + + OCA\Theming\Migration\MigrateUserConfig + + + OCA\Theming\Command\UpdateConfig diff --git a/apps/theming/lib/Migration/MigrateUserConfig.php b/apps/theming/lib/Migration/MigrateUserConfig.php new file mode 100644 index 00000000000..0f8d982dfa7 --- /dev/null +++ b/apps/theming/lib/Migration/MigrateUserConfig.php @@ -0,0 +1,123 @@ + + * + * @author Christoph Wurst + * @author Janis Köhr + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +namespace OCA\Theming\Migration; + +use OCA\Theming\AppInfo\Application; +use OCA\Theming\Service\ThemesService; +use OCA\Theming\Themes\DarkHighContrastTheme; +use OCA\Theming\Themes\DarkTheme; +use OCA\Theming\Themes\DyslexiaFont; +use OCA\Theming\Themes\HighContrastTheme; +use OCP\IConfig; +use OCP\IUser; +use OCP\IUserManager; +use OCP\Migration\IOutput; +use OCP\Migration\IRepairStep; + +class MigrateUserConfig implements IRepairStep { + + protected IUserManager $userManager; + protected IConfig $config; + protected ThemesService $themesService; + protected DarkTheme $darkTheme; + protected DarkHighContrastTheme $darkHighContrastTheme; + protected HighContrastTheme $highContrastTheme; + protected DyslexiaFont $dyslexiaFont; + + /** + * MigrateUserConfig constructor. + */ + public function __construct(IConfig $config, + IUserManager $userManager, + ThemesService $themesService, + DarkTheme $darkTheme, + DarkHighContrastTheme $darkHighContrastTheme, + HighContrastTheme $highContrastTheme, + DyslexiaFont $dyslexiaFont) { + $this->config = $config; + $this->userManager = $userManager; + $this->themesService = $themesService; + + $this->darkTheme = $darkTheme; + $this->darkHighContrastTheme = $darkHighContrastTheme; + $this->highContrastTheme = $highContrastTheme; + $this->dyslexiaFont = $dyslexiaFont; + } + + /** + * Returns the step's name + * + * @return string + * @since 25.0.0 + */ + public function getName() { + return 'Migrate old user accessibility config'; + } + + /** + * Run repair step. + * Must throw exception on error. + * + * @param IOutput $output + * @throws \Exception in case of failure + * @since 25.0.0 + */ + public function run(IOutput $output) { + $output->startProgress(); + $this->userManager->callForSeenUsers(function (IUser $user) use ($output) { + $config = []; + + $font = $this->config->getUserValue($user->getUID(), 'accessibility', 'font', false); + $highcontrast = $this->config->getUserValue($user->getUID(), 'accessibility', 'highcontrast', false); + $theme = $this->config->getUserValue($user->getUID(), 'accessibility', 'theme', false); + + if ($highcontrast || $theme) { + if ($theme === 'dark' && $highcontrast === 'highcontrast') { + $config[] = $this->darkHighContrastTheme->getId(); + } else if ($theme === 'dark') { + $config[] = $this->darkTheme->getId(); + } else if ($highcontrast === 'highcontrast') { + $config[] = $this->highContrastTheme->getId(); + } + } + + if ($font === 'fontdyslexic') { + $config[] = $this->dyslexiaFont->getId(); + } + + if (!empty($config)) { + $this->config->setUserValue($user->getUID(), Application::APP_ID, 'enabled-themes', json_encode(array_unique($config))); + } + + $output->advance(); + }); + + $this->config->deleteAppFromAllUsers('accessibility'); + + $output->finishProgress(); + } +}