]> source.dussan.org Git - nextcloud-server.git/commitdiff
fix(theming): fix admin images migration
authorJohn Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
Fri, 20 Jan 2023 10:35:17 +0000 (11:35 +0100)
committerSimon L. (Rebase PR Action) <szaimen@e.mail.de>
Mon, 23 Jan 2023 09:09:46 +0000 (09:09 +0000)
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
apps/theming/appinfo/info.xml
apps/theming/lib/Migration/CleanupOldCache.php [deleted file]
apps/theming/lib/Migration/MigrateAdminConfig.php [new file with mode: 0644]

index 0374037d2d4ad7093025e475fd9d13be72d6710f..8fef23fb89acb1619497442989e801ed4be2edc1 100644 (file)
 
        <repair-steps>
                <pre-migration>
+                       <step>OCA\Theming\Migration\MigrateAdminConfig</step>
                        <step>OCA\Theming\Migration\MigrateUserConfig</step>
                </pre-migration>
                <post-migration>
                        <step>OCA\Theming\Migration\InitBackgroundImagesMigration</step>
-                       <step>OCA\Theming\Migration\CleanupOldCache</step>
                </post-migration>
        </repair-steps>
 
diff --git a/apps/theming/lib/Migration/CleanupOldCache.php b/apps/theming/lib/Migration/CleanupOldCache.php
deleted file mode 100644 (file)
index 2c3a3d8..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-/**
- * @copyright 2022 Christopher Ng <chrng8@gmail.com>
- *
- * @author Christopher Ng <chrng8@gmail.com>
- *
- * @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 <http://www.gnu.org/licenses/>.
- *
- */
-
-namespace OCA\Theming\Migration;
-
-use OCP\Files\IAppData;
-use OCP\Files\SimpleFS\ISimpleFolder;
-use OCP\IL10N;
-use OCP\Migration\IOutput;
-use OCP\Migration\IRepairStep;
-use Throwable;
-
-class CleanupOldCache implements IRepairStep {
-       private const CACHE_FOLDERS = [
-               'global',
-               'users',
-       ];
-
-       private IAppData $appData;
-       private IL10N $l10n;
-
-       public function __construct(
-               IAppData $appData,
-               IL10N $l10n
-       ) {
-               $this->appData = $appData;
-               $this->l10n = $l10n;
-       }
-
-       public function getName(): string {
-               return $this->l10n->t('Cleanup old theming cache');
-       }
-
-       public function run(IOutput $output): void {
-               $folders = array_filter(
-                       $this->appData->getDirectoryListing(),
-                       fn (ISimpleFolder $folder): bool => !in_array($folder->getName(), static::CACHE_FOLDERS, true),
-               );
-
-               $output->startProgress(count($folders));
-
-               foreach ($folders as $folder) {
-                       try {
-                               $folder->delete();
-                       } catch (Throwable $e) {
-                               $output->warning($this->l10n->t('Failed to delete folder: "%1$s", error: %2$s', [$folder->getName(), $e->getMessage()]));
-                       }
-                       $output->advance();
-               }
-
-               $output->finishProgress();
-       }
-}
diff --git a/apps/theming/lib/Migration/MigrateAdminConfig.php b/apps/theming/lib/Migration/MigrateAdminConfig.php
new file mode 100644 (file)
index 0000000..2af24cd
--- /dev/null
@@ -0,0 +1,101 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright 2022 Christopher Ng <chrng8@gmail.com>
+ *
+ * @author Christopher Ng <chrng8@gmail.com>
+ *
+ * @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 <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Theming\Migration;
+
+use OCP\Files\IAppData;
+use OCP\Files\NotFoundException;
+use OCP\Files\SimpleFS\ISimpleFolder;
+use OCP\IL10N;
+use OCP\Migration\IOutput;
+use OCP\Migration\IRepairStep;
+use Throwable;
+
+class MigrateAdminConfig implements IRepairStep {
+       private IAppData $appData;
+       private IL10N $l10n;
+
+       public function __construct(
+               IAppData $appData,
+               IL10N $l10n
+       ) {
+               $this->appData = $appData;
+               $this->l10n = $l10n;
+       }
+
+       public function getName(): string {
+               return $this->l10n->t('Migrate and cleanup admin theming images');
+       }
+
+       public function run(IOutput $output): void {
+               $output->info('Migrating admin images');
+               $this->migrateAdminImages($output);
+               $this->cleanupAdminImages($output);
+       }
+
+       private function migrateAdminImages(IOutput $output): void {
+               try {
+                       $images = $this->appData->getFolder('images');
+                       $output->info('Migrating admin images');
+
+                               // get or init the global folder if any
+                       try {
+                               $global = $this->appData->getFolder('global');
+                       } catch (NotFoundException $e) {
+                               $global = $this->appData->newFolder('global');
+                       }
+
+                       // get or init the new images folder if any
+                       try {
+                               $newImages = $global->getFolder('images');
+                       } catch (NotFoundException $e) {
+                               $newImages = $global->newFolder('images');
+                       }
+                       
+                       $files = $images->getDirectoryListing();
+                       $output->startProgress(count($files));
+                       foreach($files as $file) {
+                               $newImages->newFile($file->getName(), $file->getContent());
+                               $output->advance();
+                       }
+
+                       $output->finishProgress();
+               } catch(NotFoundException $e) {
+                       $output->info('No admin images to migrate');
+               }
+       }
+
+
+       private function cleanupAdminImages(IOutput $output): void {
+               try {
+                       $images = $this->appData->getFolder('images');
+                       $images->delete();
+               } catch (NotFoundException $e) {
+               } catch (Throwable $e) {
+                       $output->warning($this->l10n->t('Failed to cleanup the old admin image folder', [$e->getMessage()]));
+               }
+       }
+}