]> source.dussan.org Git - nextcloud-server.git/commitdiff
fix: Add repair step to restore primary color after separating primary and background
authorFerdinand Thiessen <opensource@fthiessen.de>
Wed, 28 Aug 2024 18:14:28 +0000 (20:14 +0200)
committerFerdinand Thiessen <opensource@fthiessen.de>
Wed, 11 Sep 2024 13:19:17 +0000 (15:19 +0200)
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
apps/theming/appinfo/info.xml
apps/theming/composer/composer/autoload_classmap.php
apps/theming/composer/composer/autoload_static.php
apps/theming/lib/Migration/SeparatePrimaryColorAndBackground.php [new file with mode: 0644]

index 94fced6c2b790d58a283ca4f5f60229b1005aaa4..4f1c47110acb36a2930ac1a0ad954492a6d3b852 100644 (file)
@@ -34,6 +34,7 @@
        <repair-steps>
                <post-migration>
                        <step>OCA\Theming\Migration\InitBackgroundImagesMigration</step>
+                       <step>OCA\Theming\Migration\SeparatePrimaryColorAndBackground</step>
                </post-migration>
        </repair-steps>
 
index a68410ce3ce28aa4133a7e2b020b9aa3e7771a20..e69caafb0070af4d4b7af6811cb4d4f00cab7aa8 100644 (file)
@@ -20,6 +20,7 @@ return array(
     'OCA\\Theming\\Listener\\BeforePreferenceListener' => $baseDir . '/../lib/Listener/BeforePreferenceListener.php',
     'OCA\\Theming\\Listener\\BeforeTemplateRenderedListener' => $baseDir . '/../lib/Listener/BeforeTemplateRenderedListener.php',
     'OCA\\Theming\\Migration\\InitBackgroundImagesMigration' => $baseDir . '/../lib/Migration/InitBackgroundImagesMigration.php',
+    'OCA\\Theming\\Migration\\SeparatePrimaryColorAndBackground' => $baseDir . '/../lib/Migration/SeparatePrimaryColorAndBackground.php',
     'OCA\\Theming\\ResponseDefinitions' => $baseDir . '/../lib/ResponseDefinitions.php',
     'OCA\\Theming\\Service\\BackgroundService' => $baseDir . '/../lib/Service/BackgroundService.php',
     'OCA\\Theming\\Service\\JSDataService' => $baseDir . '/../lib/Service/JSDataService.php',
index 17b195827f9707a8fd3e9bb64524e20279a44948..df1c0579b00ccfe219ea4175417fdaf2ed252190 100644 (file)
@@ -35,6 +35,7 @@ class ComposerStaticInitTheming
         'OCA\\Theming\\Listener\\BeforePreferenceListener' => __DIR__ . '/..' . '/../lib/Listener/BeforePreferenceListener.php',
         'OCA\\Theming\\Listener\\BeforeTemplateRenderedListener' => __DIR__ . '/..' . '/../lib/Listener/BeforeTemplateRenderedListener.php',
         'OCA\\Theming\\Migration\\InitBackgroundImagesMigration' => __DIR__ . '/..' . '/../lib/Migration/InitBackgroundImagesMigration.php',
+        'OCA\\Theming\\Migration\\SeparatePrimaryColorAndBackground' => __DIR__ . '/..' . '/../lib/Migration/SeparatePrimaryColorAndBackground.php',
         'OCA\\Theming\\ResponseDefinitions' => __DIR__ . '/..' . '/../lib/ResponseDefinitions.php',
         'OCA\\Theming\\Service\\BackgroundService' => __DIR__ . '/..' . '/../lib/Service/BackgroundService.php',
         'OCA\\Theming\\Service\\JSDataService' => __DIR__ . '/..' . '/../lib/Service/JSDataService.php',
diff --git a/apps/theming/lib/Migration/SeparatePrimaryColorAndBackground.php b/apps/theming/lib/Migration/SeparatePrimaryColorAndBackground.php
new file mode 100644 (file)
index 0000000..cfe475e
--- /dev/null
@@ -0,0 +1,64 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+namespace OCA\Theming\Migration;
+
+use OCA\Theming\AppInfo\Application;
+use OCP\IConfig;
+use OCP\IDBConnection;
+use OCP\Migration\IOutput;
+
+class SeparatePrimaryColorAndBackground implements \OCP\Migration\IRepairStep {
+
+       public function __construct(
+               private IConfig $config,
+               private IDBConnection $connection,
+       ) {
+       }
+
+       public function getName() {
+               return 'Restore custom primary color after separating primary color from background color';
+       }
+
+       public function run(IOutput $output) {
+               $defaultColor = $this->config->getAppValue(Application::APP_ID, 'color', '');
+               if ($defaultColor !== '') {
+                       // Restore legacy value into new field
+                       $this->config->setAppValue(Application::APP_ID, 'background_color', $defaultColor);
+                       $this->config->setAppValue(Application::APP_ID, 'primary_color', $defaultColor);
+                       // Delete legacy field
+                       $this->config->deleteAppValue(Application::APP_ID, 'color');
+                       // give some feedback
+                       $output->info('Global primary color restored');
+               }
+
+               // This can only be executed once because `background_color` is again used with Nextcloud 30,
+               // so this part only works when updating -> Nextcloud 29 -> 30
+               $migrated = $this->config->getAppValue('theming', 'nextcloud_30_migration', 'false') === 'true';
+               if ($migrated) {
+                       return;
+               }
+
+               $userThemingEnabled = $this->config->getAppValue('theming', 'disable-user-theming', 'no') !== 'yes';
+               if ($userThemingEnabled) {
+                       $output->info('Restoring user primary color');
+                       // For performance let the DB handle this
+                       $qb = $this->connection->getQueryBuilder();
+                       // Rename the `background_color` config to `primary_color` as this was the behavior on Nextcloud 29 and older
+                       // with Nextcloud 30 `background_color` is a new option to define the background color independent of the primary color.
+                       $qb->update('preferences')
+                               ->set('configkey', $qb->createNamedParameter('primary_color'))
+                               ->where($qb->expr()->eq('appid', $qb->createNamedParameter(Application::APP_ID)))
+                               ->andWhere($qb->expr()->eq('configkey', $qb->createNamedParameter('background_color')));
+                       $qb->executeStatement();
+                       $output->info('Primary color of users restored');
+               }
+               $this->config->setAppValue('theming', 'nextcloud_30_migration', 'true');
+       }
+}