diff options
author | John Molakvoæ <skjnldsv@users.noreply.github.com> | 2023-01-23 21:26:12 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-23 21:26:12 +0100 |
commit | a3aa81d2caa801b6a01d11a6443a3d3cd9819214 (patch) | |
tree | fd9369be19ae73cc8baa12dd1a8768c306627912 /apps | |
parent | ecad09b38a152957c771139562e61f7ecb1a6879 (diff) | |
parent | 34824e2f8da715cdf421201f164e61435cfdbd56 (diff) | |
download | nextcloud-server-a3aa81d2caa801b6a01d11a6443a3d3cd9819214.tar.gz nextcloud-server-a3aa81d2caa801b6a01d11a6443a3d3cd9819214.zip |
Merge pull request #36277 from nextcloud/backport/36272/master
[master] fix(theming): fix admin images migration
Diffstat (limited to 'apps')
-rw-r--r-- | apps/theming/appinfo/info.xml | 2 | ||||
-rw-r--r-- | apps/theming/lib/Migration/CleanupOldCache.php | 76 | ||||
-rw-r--r-- | apps/theming/lib/Migration/MigrateAdminConfig.php | 101 |
3 files changed, 102 insertions, 77 deletions
diff --git a/apps/theming/appinfo/info.xml b/apps/theming/appinfo/info.xml index 0374037d2d4..8fef23fb89a 100644 --- a/apps/theming/appinfo/info.xml +++ b/apps/theming/appinfo/info.xml @@ -29,11 +29,11 @@ <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 index 2c3a3d8c94c..00000000000 --- a/apps/theming/lib/Migration/CleanupOldCache.php +++ /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 index 00000000000..392b014474e --- /dev/null +++ b/apps/theming/lib/Migration/MigrateAdminConfig.php @@ -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('Failed to clean up the old admin theming images folder'); + } + + 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()])); + } + } +} |