From af5a650311beed4ac181869dc610f124abe68a7b Mon Sep 17 00:00:00 2001 From: joshuaruesweg Date: Thu, 7 Jan 2021 17:19:32 +0100 Subject: [PATCH] Add rank image upload migration script --- com.woltlab.wcf/package.xml | 3 + ...om.woltlab.wcf_5.4_migrate_rank_images.php | 44 +++++++++++ .../job/DownloadRankImageJob.class.php | 73 +++++++++++++++++++ 3 files changed, 120 insertions(+) create mode 100644 wcfsetup/install/files/acp/update_com.woltlab.wcf_5.4_migrate_rank_images.php create mode 100644 wcfsetup/install/files/lib/system/background/job/DownloadRankImageJob.class.php diff --git a/com.woltlab.wcf/package.xml b/com.woltlab.wcf/package.xml index e228e351f4..f0c44823e7 100644 --- a/com.woltlab.wcf/package.xml +++ b/com.woltlab.wcf/package.xml @@ -101,5 +101,8 @@ tar cvf com.woltlab.wcf/files_pre.tar -C wcfsetup/install/files/ \ acp/update_com.woltlab.wcf_5.4_migrate_multifactor.php + + + acp/update_com.woltlab.wcf_5.4_migrate_rank_images.php diff --git a/wcfsetup/install/files/acp/update_com.woltlab.wcf_5.4_migrate_rank_images.php b/wcfsetup/install/files/acp/update_com.woltlab.wcf_5.4_migrate_rank_images.php new file mode 100644 index 0000000000..c466b5a09a --- /dev/null +++ b/wcfsetup/install/files/acp/update_com.woltlab.wcf_5.4_migrate_rank_images.php @@ -0,0 +1,44 @@ + + * @package WoltLabSuite\Core + */ +$rankList = new UserRankList(); +$rankList->readObjects(); + +foreach ($rankList as $rank) { + if (!empty($rank->rankImage)) { + if (Url::is($rank->rankImage)) { + BackgroundQueueHandler::getInstance()->enqueueIn(new DownloadRankImageJob($rank), 60); + continue; + } + + $rankEditor = new UserRankEditor($rank); + + if (file_exists(WCF_DIR . $rank->rankImage)) { + $newImageName = WCF_DIR . UserRank::RANK_IMAGE_DIR . $rank->rankID .'-'. basename($rank->rankImage); + copy(WCF_DIR . $rank->rankImage, $newImageName); + + $rankEditor->update([ + 'rankImage' => basename($newImageName) + ]); + } + else { + $rankEditor->update([ + 'rankImage' => "" + ]); + } + } +} diff --git a/wcfsetup/install/files/lib/system/background/job/DownloadRankImageJob.class.php b/wcfsetup/install/files/lib/system/background/job/DownloadRankImageJob.class.php new file mode 100644 index 0000000000..00e42381bb --- /dev/null +++ b/wcfsetup/install/files/lib/system/background/job/DownloadRankImageJob.class.php @@ -0,0 +1,73 @@ + + * @package WoltLabSuite\Core\System\Background\Job + * @since 5.4 + * @deprecated 5.4 - This background job is used for the upgrade from 5.3 to 5.4 and will be removed with 5.5. + */ +class DownloadRankImageJob extends AbstractBackgroundJob { + /** + * @inheritDoc + */ + const MAX_FAILURES = 5; + + /** + * @var int + */ + protected $userRankID; + + public function __construct(UserRank $userRank) { + $this->userRankID = $userRank->rankID; + } + + /** + * @return int every 10 minutes + */ + public function retryAfter() { + return 10 * 60; + } + + /** + * @inheritDoc + */ + public function perform() { + $rank = new UserRank($this->userRankID); + if (!$rank->rankID) return; + if (empty($rank->rankImage)) return; + if (!Url::is($rank->rankImage)) return; + + $rankEditor = new UserRankEditor($rank); + + $extension = pathinfo(Url::parse($rank->rankImage)['path'], PATHINFO_EXTENSION); + if (in_array($extension, ['gif','png','jpg','jpeg','svg','webp'])) { + $http = HttpFactory::makeClient([ + 'timeout' => 10, + ]); + + $imageDest = WCF_DIR . UserRank::RANK_IMAGE_DIR . $rank->rankID .'-rankImage.'. $extension; + $http->send(new Request('GET', $rank->rankImage), [ + 'sink' => $imageDest, + ]); + + $rankEditor->update([ + 'rankImage' => basename($imageDest) + ]); + } + else { + $rankEditor->update([ + 'rankImage' => "" + ]); + } + } +} -- 2.20.1