From 7aeb72e2a1b0625cae073a339d5ec32d89c9c28c Mon Sep 17 00:00:00 2001 From: Sven Reichel Date: Thu, 2 Oct 2025 00:37:46 +0200 Subject: [PATCH 01/16] Fix: correctly removing/adding TinyMCE license files --- .../ComposerPlugin/Copy/Plugins/TinyMce.php | 79 ++++++++++--------- 1 file changed, 40 insertions(+), 39 deletions(-) diff --git a/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php b/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php index 553eb09..a0c629b 100644 --- a/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php +++ b/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php @@ -14,6 +14,7 @@ use Composer\Package\BasePackage; use OpenMage\ComposerPlugin\Copy; use Symfony\Component\Filesystem\Exception\IOException; +use Symfony\Component\Filesystem\Filesystem; /** * Class TinyMce @@ -23,21 +24,6 @@ class TinyMce extends Copy\AbstractCopyPlugin implements Copy\CopyFromComposerIn public const TINYMCE_LICENSE_FILE = 'LICENSE_TINYMCE.txt'; public const TINYMCE_LICENSE_NOTE = 'LICENSE_TINYMCE_OPENMAGE.txt'; - public const TINYMCE_LICENSE_FILE_TEXT = <<event)) { - return; - } - $package = $this->getComposerPackage(); if (!$package instanceof BasePackage) { + $this->removedTinyMceLicenseFiles(); return; } $version = $package->getVersion(); - switch ((int) $version[0]) { + $versionMain = explode('.', $version, 1); + $versionMain = (int) $version[0]; + + switch ($versionMain) { case 6: $this->removedTinyMceLicenseFiles(); break; - case 7: + case $versionMain >= 7: $this->addTinyMceLicenseFile(); $this->addTinyMceLicenseNote(); break; @@ -85,20 +71,37 @@ public function processComposerInstall(): void private function addTinyMceLicenseFile(): void { + $content = <<getFileSystem()->dumpFile($this->getCwd() . '/' . self::TINYMCE_LICENSE_FILE, self::TINYMCE_LICENSE_FILE_TEXT); - if (!is_null($this->event) && $this->event->getIO()->isVerbose()) { + $filesystem->dumpFile($this->getCwd() . '/' . self::TINYMCE_LICENSE_FILE, $content); + if ($this->event->getIO()->isVerbose()) { $this->event->getIO()->write(sprintf('Added %s', self::TINYMCE_LICENSE_FILE)); } - } catch (IOException $exception) { - if (!is_null($this->event)) { - $this->event->getIO()->write($exception->getMessage()); - } + } catch (IOException $IOException) { + $this->event->getIO()->write($IOException->getMessage()); } } private function addTinyMceLicenseNote(): void { + $content = <<getFileSystem()->dumpFile($filePath, self::TINYMCE_LICENSE_NOTE_TEXT); - if (!is_null($this->event) && $this->event->getIO()->isVerbose()) { + $filesystem->dumpFile($filePath, $content); + if ($this->event->getIO()->isVerbose()) { $this->event->getIO()->write(sprintf('Added %s', self::TINYMCE_LICENSE_NOTE)); } - } catch (IOException $exception) { - if (!is_null($this->event)) { - $this->event->getIO()->write($exception->getMessage()); - } + } catch (IOException $IOException) { + $this->event->getIO()->write($IOException->getMessage()); } } @@ -125,15 +126,15 @@ private function removedTinyMceLicenseFiles(): void $this->getComposerSource() . '/' . self::TINYMCE_LICENSE_NOTE, ]; + $filesystem = new Filesystem(); + try { - $this->getFileSystem()->remove($files); - if (!is_null($this->event) && $this->event->getIO()->isVeryVerbose()) { + $filesystem->remove($files); + if ($this->event->getIO()->isVeryVerbose()) { $this->event->getIO()->write(sprintf('Removed %s and %s', self::TINYMCE_LICENSE_FILE, self::TINYMCE_LICENSE_NOTE)); } - } catch (IOException $exception) { - if (!is_null($this->event)) { - $this->event->getIO()->write($exception->getMessage()); - } + } catch (IOException $IOException) { + $this->event->getIO()->write($IOException->getMessage()); } } } From bc869a32b6c4729294b1192a6d1dc9d8e84c5608 Mon Sep 17 00:00:00 2001 From: Sven Reichel Date: Thu, 2 Oct 2025 01:01:28 +0200 Subject: [PATCH 02/16] Update src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php b/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php index a0c629b..bcd612f 100644 --- a/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php +++ b/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php @@ -53,8 +53,8 @@ public function processComposerInstall(): void } $version = $package->getVersion(); - $versionMain = explode('.', $version, 1); - $versionMain = (int) $version[0]; + $versionParts = explode('.', $version); + $versionMain = (int) $versionParts[0]; switch ($versionMain) { case 6: From 846596855bcca8aff7c478f6e702d053786d67db Mon Sep 17 00:00:00 2001 From: Sven Reichel Date: Thu, 2 Oct 2025 01:10:03 +0200 Subject: [PATCH 03/16] Fix 1 --- .../ComposerPlugin/Copy/Plugins/TinyMce.php | 73 ++++++++++--------- 1 file changed, 38 insertions(+), 35 deletions(-) diff --git a/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php b/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php index bcd612f..746ff03 100644 --- a/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php +++ b/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php @@ -14,7 +14,6 @@ use Composer\Package\BasePackage; use OpenMage\ComposerPlugin\Copy; use Symfony\Component\Filesystem\Exception\IOException; -use Symfony\Component\Filesystem\Filesystem; /** * Class TinyMce @@ -24,6 +23,21 @@ class TinyMce extends Copy\AbstractCopyPlugin implements Copy\CopyFromComposerIn public const TINYMCE_LICENSE_FILE = 'LICENSE_TINYMCE.txt'; public const TINYMCE_LICENSE_NOTE = 'LICENSE_TINYMCE_OPENMAGE.txt'; + public const TINYMCE_LICENSE_FILE_TEXT = <<event)) { + return; + } + $package = $this->getComposerPackage(); if (!$package instanceof BasePackage) { $this->removedTinyMceLicenseFiles(); @@ -60,7 +78,7 @@ public function processComposerInstall(): void case 6: $this->removedTinyMceLicenseFiles(); break; - case $versionMain >= 7: + default: $this->addTinyMceLicenseFile(); $this->addTinyMceLicenseNote(); break; @@ -71,37 +89,20 @@ public function processComposerInstall(): void private function addTinyMceLicenseFile(): void { - $content = <<dumpFile($this->getCwd() . '/' . self::TINYMCE_LICENSE_FILE, $content); - if ($this->event->getIO()->isVerbose()) { + $this->getFileSystem()->dumpFile($this->getCwd() . '/' . self::TINYMCE_LICENSE_FILE, self::TINYMCE_LICENSE_FILE_TEXT); + if (!is_null($this->event) && $this->event->getIO()->isVerbose()) { $this->event->getIO()->write(sprintf('Added %s', self::TINYMCE_LICENSE_FILE)); } - } catch (IOException $IOException) { - $this->event->getIO()->write($IOException->getMessage()); + } catch (IOException $exception) { + if (!is_null($this->event)) { + $this->event->getIO()->write($exception->getMessage()); + } } } private function addTinyMceLicenseNote(): void { - $content = <<dumpFile($filePath, $content); - if ($this->event->getIO()->isVerbose()) { + $this->getFileSystem()->dumpFile($filePath, self::TINYMCE_LICENSE_NOTE_TEXT); + if (!is_null($this->event) && $this->event->getIO()->isVerbose()) { $this->event->getIO()->write(sprintf('Added %s', self::TINYMCE_LICENSE_NOTE)); } - } catch (IOException $IOException) { - $this->event->getIO()->write($IOException->getMessage()); + } catch (IOException $exception) { + if (!is_null($this->event)) { + $this->event->getIO()->write($exception->getMessage()); + } } } @@ -126,15 +129,15 @@ private function removedTinyMceLicenseFiles(): void $this->getComposerSource() . '/' . self::TINYMCE_LICENSE_NOTE, ]; - $filesystem = new Filesystem(); - try { - $filesystem->remove($files); - if ($this->event->getIO()->isVeryVerbose()) { + $this->getFileSystem()->remove($files); + if (!is_null($this->event) && $this->event->getIO()->isVeryVerbose()) { $this->event->getIO()->write(sprintf('Removed %s and %s', self::TINYMCE_LICENSE_FILE, self::TINYMCE_LICENSE_NOTE)); } - } catch (IOException $IOException) { - $this->event->getIO()->write($IOException->getMessage()); + } catch (IOException $exception) { + if (!is_null($this->event)) { + $this->event->getIO()->write($exception->getMessage()); + } } } } From d0dffa5d138260d6ba7ec5ae650244d7e1cd0009 Mon Sep 17 00:00:00 2001 From: Sven Reichel Date: Thu, 2 Oct 2025 01:26:29 +0200 Subject: [PATCH 04/16] Refactor version extraction for TinyMce plugin --- src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php b/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php index 746ff03..be72869 100644 --- a/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php +++ b/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php @@ -72,10 +72,10 @@ public function processComposerInstall(): void $version = $package->getVersion(); $versionParts = explode('.', $version); - $versionMain = (int) $versionParts[0]; + $versionMain = (int) array_first($versionParts); switch ($versionMain) { - case 6: + case $versionMain <= 6: $this->removedTinyMceLicenseFiles(); break; default: From 6b389f5dba8237a164e8f3adcd7e27541fbf9a6f Mon Sep 17 00:00:00 2001 From: Sven Reichel Date: Thu, 2 Oct 2025 01:27:17 +0200 Subject: [PATCH 05/16] Add symfony/polyfill-php85 to composer.json --- composer.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 705353f..c003467 100644 --- a/composer.json +++ b/composer.json @@ -33,7 +33,8 @@ "phpstan/phpstan-phpunit": "^2.0", "phpunit/phpunit": "^9.6", "phpmd/phpmd": "^2.15", - "friendsofphp/php-cs-fixer": "^3.67" + "friendsofphp/php-cs-fixer": "^3.67", + "symfony/polyfill-php85": "^v1.33.0" }, "extra": { "class": "OpenMage\\ComposerPlugin\\Plugin" From 2960a1b6febf182ff8396c22f520e910c4f6e76a Mon Sep 17 00:00:00 2001 From: Sven Reichel Date: Thu, 2 Oct 2025 01:31:24 +0200 Subject: [PATCH 06/16] Add symfony/polyfill-php85 to composer.json --- composer.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index c003467..4048ece 100644 --- a/composer.json +++ b/composer.json @@ -23,7 +23,8 @@ "php": ">=7.4", "composer-plugin-api": "^2.0", "symfony/filesystem": "*", - "symfony/finder": "*" + "symfony/finder": "*", + "symfony/polyfill-php85": "^v1.33.0" }, "require-dev": { "composer/composer": "^2.8", @@ -33,8 +34,7 @@ "phpstan/phpstan-phpunit": "^2.0", "phpunit/phpunit": "^9.6", "phpmd/phpmd": "^2.15", - "friendsofphp/php-cs-fixer": "^3.67", - "symfony/polyfill-php85": "^v1.33.0" + "friendsofphp/php-cs-fixer": "^3.67" }, "extra": { "class": "OpenMage\\ComposerPlugin\\Plugin" From 2db33c1a03e97620cc7e783f5fa00a50e3fecc8a Mon Sep 17 00:00:00 2001 From: Sven Reichel Date: Thu, 2 Oct 2025 01:33:08 +0200 Subject: [PATCH 07/16] Fix switch case for TinyMCE version handling --- src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php b/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php index be72869..ed36d66 100644 --- a/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php +++ b/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php @@ -75,7 +75,7 @@ public function processComposerInstall(): void $versionMain = (int) array_first($versionParts); switch ($versionMain) { - case $versionMain <= 6: + case 6: $this->removedTinyMceLicenseFiles(); break; default: From bcfe88577a9f820da19771f8252b2aa79a9295d6 Mon Sep 17 00:00:00 2001 From: Sven Reichel Date: Thu, 2 Oct 2025 01:39:11 +0200 Subject: [PATCH 08/16] Refactor version extraction for TinyMce plugin --- src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php b/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php index ed36d66..746ff03 100644 --- a/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php +++ b/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php @@ -72,7 +72,7 @@ public function processComposerInstall(): void $version = $package->getVersion(); $versionParts = explode('.', $version); - $versionMain = (int) array_first($versionParts); + $versionMain = (int) $versionParts[0]; switch ($versionMain) { case 6: From 1dd4aad2eea1fbad40a00df1daca0fcdce51d26f Mon Sep 17 00:00:00 2001 From: Sven Reichel Date: Thu, 2 Oct 2025 01:39:38 +0200 Subject: [PATCH 09/16] Fix formatting in composer.json dependencies --- composer.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 4048ece..705353f 100644 --- a/composer.json +++ b/composer.json @@ -23,8 +23,7 @@ "php": ">=7.4", "composer-plugin-api": "^2.0", "symfony/filesystem": "*", - "symfony/finder": "*", - "symfony/polyfill-php85": "^v1.33.0" + "symfony/finder": "*" }, "require-dev": { "composer/composer": "^2.8", From 59641e63ce962ef4f4b8c041e65319501432c4c6 Mon Sep 17 00:00:00 2001 From: Sven Reichel Date: Thu, 2 Oct 2025 02:01:03 +0200 Subject: [PATCH 10/16] Updated tests --- .php-cs-fixer.dist.php | 2 +- tests/unit/Copy/AbstractCopyPluginTest.php | 2 +- tests/unit/Copy/Plugins/ChartJsTest.php | 18 +++++++++--------- tests/unit/Copy/Plugins/FlatpickrTest.php | 12 ++++++------ tests/unit/Copy/Plugins/FlowJsTest.php | 8 ++++---- tests/unit/Copy/Plugins/JQueryTest.php | 8 ++++---- .../unit/Copy/Plugins/TinyMceLanguagesTest.php | 10 +++++----- tests/unit/Copy/Plugins/TinyMceTest.php | 8 ++++---- tests/unit/Copy/Unpkg/ConfigTest.php | 12 ++++++------ tests/unit/Copy/Unpkg/GenericTest.php | 10 +++++----- tests/unit/PluginTest.php | 4 ++-- 11 files changed, 47 insertions(+), 47 deletions(-) diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php index 7675a54..930aa14 100644 --- a/.php-cs-fixer.dist.php +++ b/.php-cs-fixer.dist.php @@ -9,7 +9,7 @@ 'modernize_types_casting' => true, 'nullable_type_declaration_for_default_null_value' => true, 'single_quote' => true, - 'php_unit_test_case_static_method_calls' => true, + 'php_unit_test_case_static_method_calls' => ['call_type' => 'self'], 'trailing_comma_in_multiline' => ['after_heredoc' => true, 'elements' => ['arguments', 'array_destructuring', 'arrays']], ]) ->setFinder( diff --git a/tests/unit/Copy/AbstractCopyPluginTest.php b/tests/unit/Copy/AbstractCopyPluginTest.php index 878b998..1b85117 100644 --- a/tests/unit/Copy/AbstractCopyPluginTest.php +++ b/tests/unit/Copy/AbstractCopyPluginTest.php @@ -35,6 +35,6 @@ public function setUp(): void */ public function testGetFileSystem(): void { - static::assertInstanceOf(Filesystem::class, $this->subject->getFileSystem()); + self::assertInstanceOf(Filesystem::class, $this->subject->getFileSystem()); } } diff --git a/tests/unit/Copy/Plugins/ChartJsTest.php b/tests/unit/Copy/Plugins/ChartJsTest.php index f37ad4d..fd59289 100644 --- a/tests/unit/Copy/Plugins/ChartJsTest.php +++ b/tests/unit/Copy/Plugins/ChartJsTest.php @@ -35,7 +35,7 @@ public function setUp(): void */ public function testGetUnpkgName(): void { - static::assertSame('chart.js', $this->subject->getUnpkgName()); + self::assertSame('chart.js', $this->subject->getUnpkgName()); } /** @@ -45,9 +45,9 @@ public function testGetUnpkgName(): void public function testGetUnpkgVersion(): void { try { - static::assertIsString($this->subject->getUnpkgVersion()); + self::assertIsString($this->subject->getUnpkgVersion()); } catch (OutOfBoundsException $exception) { - static::assertSame('Package "nnnick/chartjs" is not installed', $exception->getMessage()); + self::assertSame('Package "nnnick/chartjs" is not installed', $exception->getMessage()); } } @@ -56,7 +56,7 @@ public function testGetUnpkgVersion(): void */ public function testGetUnpkgSource(): void { - static::assertSame('dist', $this->subject->getUnpkgSource()); + self::assertSame('dist', $this->subject->getUnpkgSource()); } @@ -71,7 +71,7 @@ public function testGetUnpkgFiles(): void 2 => 'helpers.js', 3 => 'helpers.js.map', ]; - static::assertSame($result, $this->subject->getUnpkgFiles()); + self::assertSame($result, $this->subject->getUnpkgFiles()); } /** @@ -79,7 +79,7 @@ public function testGetUnpkgFiles(): void */ public function testGetComposerName(): void { - static::assertSame('nnnick/chartjs', $this->subject->getComposerName()); + self::assertSame('nnnick/chartjs', $this->subject->getComposerName()); } /** @@ -87,7 +87,7 @@ public function testGetComposerName(): void */ public function testGetComposerSource(): void { - static::assertSame('dist', $this->subject->getComposerSource()); + self::assertSame('dist', $this->subject->getComposerSource()); } /** @@ -95,7 +95,7 @@ public function testGetComposerSource(): void */ public function testGetComposerFiles(): void { - static::assertSame(['*.js', '*.map'], $this->subject->getComposerFiles()); + self::assertSame(['*.js', '*.map'], $this->subject->getComposerFiles()); } /** @@ -103,6 +103,6 @@ public function testGetComposerFiles(): void */ public function testGetCopyTarget(): void { - static::assertSame('js/lib/chartjs', $this->subject->getCopyTarget()); + self::assertSame('js/lib/chartjs', $this->subject->getCopyTarget()); } } diff --git a/tests/unit/Copy/Plugins/FlatpickrTest.php b/tests/unit/Copy/Plugins/FlatpickrTest.php index a900916..f2f31b2 100644 --- a/tests/unit/Copy/Plugins/FlatpickrTest.php +++ b/tests/unit/Copy/Plugins/FlatpickrTest.php @@ -35,7 +35,7 @@ public function setUp(): void */ public function testGetUnpkgName(): void { - static::assertSame('flatpickr', $this->subject->getUnpkgName()); + self::assertSame('flatpickr', $this->subject->getUnpkgName()); } /** @@ -44,9 +44,9 @@ public function testGetUnpkgName(): void public function testGetUnpkgVersion(): void { try { - static::assertIsString($this->subject->getUnpkgVersion()); + self::assertIsString($this->subject->getUnpkgVersion()); } catch (OutOfBoundsException $exception) { - static::assertSame('Package "nnnick/chartjs" is not installed', $exception->getMessage()); + self::assertSame('Package "nnnick/chartjs" is not installed', $exception->getMessage()); } } @@ -55,7 +55,7 @@ public function testGetUnpkgVersion(): void */ public function testGetUnpkgSource(): void { - static::assertSame('dist', $this->subject->getUnpkgSource()); + self::assertSame('dist', $this->subject->getUnpkgSource()); } /** @@ -67,7 +67,7 @@ public function testGetUnpkgFiles(): void 0 => 'flatpickr.min.css', 1 => 'flatpickr.min.js', ]; - static::assertSame($result, $this->subject->getUnpkgFiles()); + self::assertSame($result, $this->subject->getUnpkgFiles()); } /** @@ -75,6 +75,6 @@ public function testGetUnpkgFiles(): void */ public function testGetCopyTarget(): void { - static::assertSame('js/lib/flatpickr', $this->subject->getCopyTarget()); + self::assertSame('js/lib/flatpickr', $this->subject->getCopyTarget()); } } diff --git a/tests/unit/Copy/Plugins/FlowJsTest.php b/tests/unit/Copy/Plugins/FlowJsTest.php index 3b537c6..4202fb6 100644 --- a/tests/unit/Copy/Plugins/FlowJsTest.php +++ b/tests/unit/Copy/Plugins/FlowJsTest.php @@ -34,7 +34,7 @@ public function setUp(): void */ public function testGetComposerName(): void { - static::assertSame('flowjs/flowjs', $this->subject->getComposerName()); + self::assertSame('flowjs/flowjs', $this->subject->getComposerName()); } /** @@ -42,7 +42,7 @@ public function testGetComposerName(): void */ public function testGetComposerSource(): void { - static::assertSame('dist', $this->subject->getComposerSource()); + self::assertSame('dist', $this->subject->getComposerSource()); } /** @@ -50,7 +50,7 @@ public function testGetComposerSource(): void */ public function testGetComposerFiles(): void { - static::assertSame(['*.js'], $this->subject->getComposerFiles()); + self::assertSame(['*.js'], $this->subject->getComposerFiles()); } /** @@ -58,6 +58,6 @@ public function testGetComposerFiles(): void */ public function testGetCopyTarget(): void { - static::assertSame('js/lib/uploader', $this->subject->getCopyTarget()); + self::assertSame('js/lib/uploader', $this->subject->getCopyTarget()); } } diff --git a/tests/unit/Copy/Plugins/JQueryTest.php b/tests/unit/Copy/Plugins/JQueryTest.php index 4ea3dc1..3590794 100644 --- a/tests/unit/Copy/Plugins/JQueryTest.php +++ b/tests/unit/Copy/Plugins/JQueryTest.php @@ -34,7 +34,7 @@ public function setUp(): void */ public function testGetComposerName(): void { - static::assertSame('components/jquery', $this->subject->getComposerName()); + self::assertSame('components/jquery', $this->subject->getComposerName()); } /** @@ -42,7 +42,7 @@ public function testGetComposerName(): void */ public function testGetComposerSource(): void { - static::assertSame('', $this->subject->getComposerSource()); + self::assertSame('', $this->subject->getComposerSource()); } /** @@ -50,7 +50,7 @@ public function testGetComposerSource(): void */ public function testGetComposerFiles(): void { - static::assertSame(['*.js', '*.map'], $this->subject->getComposerFiles()); + self::assertSame(['*.js', '*.map'], $this->subject->getComposerFiles()); } /** @@ -58,6 +58,6 @@ public function testGetComposerFiles(): void */ public function testGetCopyTarget(): void { - static::assertSame('js/lib/jquery', $this->subject->getCopyTarget()); + self::assertSame('js/lib/jquery', $this->subject->getCopyTarget()); } } diff --git a/tests/unit/Copy/Plugins/TinyMceLanguagesTest.php b/tests/unit/Copy/Plugins/TinyMceLanguagesTest.php index 7454238..c782389 100644 --- a/tests/unit/Copy/Plugins/TinyMceLanguagesTest.php +++ b/tests/unit/Copy/Plugins/TinyMceLanguagesTest.php @@ -35,7 +35,7 @@ public function setUp(): void */ public function testGetComposerName(): void { - static::assertSame('mklkj/tinymce-i18n', $this->subject->getComposerName()); + self::assertSame('mklkj/tinymce-i18n', $this->subject->getComposerName()); } /** @@ -44,9 +44,9 @@ public function testGetComposerName(): void public function testGetComposerSource(): void { try { - static::assertSame('langs7', $this->subject->getComposerSource()); + self::assertSame('langs7', $this->subject->getComposerSource()); } catch (OutOfBoundsException $exception) { - static::assertSame('Package "tinymce/tinymce" is not installed', $exception->getMessage()); + self::assertSame('Package "tinymce/tinymce" is not installed', $exception->getMessage()); } } @@ -55,7 +55,7 @@ public function testGetComposerSource(): void */ public function testGetComposerFiles(): void { - static::assertSame(['*.css', '*.js'], $this->subject->getComposerFiles()); + self::assertSame(['*.css', '*.js'], $this->subject->getComposerFiles()); } /** @@ -63,6 +63,6 @@ public function testGetComposerFiles(): void */ public function testGetCopyTarget(): void { - static::assertSame('js/lib/tinymce/langs', $this->subject->getCopyTarget()); + self::assertSame('js/lib/tinymce/langs', $this->subject->getCopyTarget()); } } diff --git a/tests/unit/Copy/Plugins/TinyMceTest.php b/tests/unit/Copy/Plugins/TinyMceTest.php index 0e7f306..11e342f 100644 --- a/tests/unit/Copy/Plugins/TinyMceTest.php +++ b/tests/unit/Copy/Plugins/TinyMceTest.php @@ -34,7 +34,7 @@ public function setUp(): void */ public function testGetComposerName(): void { - static::assertSame('tinymce/tinymce', $this->subject->getComposerName()); + self::assertSame('tinymce/tinymce', $this->subject->getComposerName()); } /** @@ -42,7 +42,7 @@ public function testGetComposerName(): void */ public function testGetComposerSource(): void { - static::assertSame('', $this->subject->getComposerSource()); + self::assertSame('', $this->subject->getComposerSource()); } /** @@ -50,7 +50,7 @@ public function testGetComposerSource(): void */ public function testGetComposerFiles(): void { - static::assertSame(['*.css', '*.js'], $this->subject->getComposerFiles()); + self::assertSame(['*.css', '*.js'], $this->subject->getComposerFiles()); } /** @@ -58,6 +58,6 @@ public function testGetComposerFiles(): void */ public function testGetCopyTarget(): void { - static::assertSame('js/lib/tinymce', $this->subject->getCopyTarget()); + self::assertSame('js/lib/tinymce', $this->subject->getCopyTarget()); } } diff --git a/tests/unit/Copy/Unpkg/ConfigTest.php b/tests/unit/Copy/Unpkg/ConfigTest.php index c597708..acead66 100644 --- a/tests/unit/Copy/Unpkg/ConfigTest.php +++ b/tests/unit/Copy/Unpkg/ConfigTest.php @@ -36,7 +36,7 @@ public function setUp(): void */ public function testGetValidatedConfig(?array $expectedResult, $packageConfig): void { - static::assertSame($expectedResult, $this->subject->getValidatedConfig($packageConfig)); + self::assertSame($expectedResult, $this->subject->getValidatedConfig($packageConfig)); } public function provideGetValidatedConfig(): Generator @@ -152,7 +152,7 @@ public function testUnpkgName(): void { $source = ''; $this->subject->setUnpkgName($source); - static::assertSame($source, $this->subject->getUnpkgName()); + self::assertSame($source, $this->subject->getUnpkgName()); } /** @@ -163,7 +163,7 @@ public function testUnpkgVersion(): void { $source = ''; $this->subject->setUnpkgVersion($source); - static::assertSame($source, $this->subject->getUnpkgVersion()); + self::assertSame($source, $this->subject->getUnpkgVersion()); } /** @@ -174,7 +174,7 @@ public function testUnpkgSource(): void { $source = ''; $this->subject->setUnpkgSource($source); - static::assertSame($source, $this->subject->getUnpkgSource()); + self::assertSame($source, $this->subject->getUnpkgSource()); } /** @@ -185,7 +185,7 @@ public function testCopyTarget(): void { $target = ''; $this->subject->setCopyTarget($target); - static::assertSame($target, $this->subject->getCopyTarget()); + self::assertSame($target, $this->subject->getCopyTarget()); } /** @@ -196,6 +196,6 @@ public function testUnpkgFiles(): void { $files = []; $this->subject->setUnpkgFiles($files); - static::assertSame($files, $this->subject->getUnpkgFiles()); + self::assertSame($files, $this->subject->getUnpkgFiles()); } } diff --git a/tests/unit/Copy/Unpkg/GenericTest.php b/tests/unit/Copy/Unpkg/GenericTest.php index b93f8e3..589ac00 100644 --- a/tests/unit/Copy/Unpkg/GenericTest.php +++ b/tests/unit/Copy/Unpkg/GenericTest.php @@ -50,7 +50,7 @@ public function setUp(): void */ public function testGetUnpkgName(): void { - static::assertSame('name', $this->subject->getUnpkgName()); + self::assertSame('name', $this->subject->getUnpkgName()); } /** @@ -66,7 +66,7 @@ public function testGetUnpkgName(): void */ public function testGetUnpkgVersion(): void { - static::assertSame('version', $this->subject->getUnpkgVersion()); + self::assertSame('version', $this->subject->getUnpkgVersion()); } /** @@ -81,7 +81,7 @@ public function testGetUnpkgVersion(): void */ public function testGetUnpkgSource(): void { - static::assertSame('source', $this->subject->getUnpkgSource()); + self::assertSame('source', $this->subject->getUnpkgSource()); } /** @@ -96,7 +96,7 @@ public function testGetUnpkgSource(): void */ public function testGetUnpkgFiles(): void { - static::assertSame([], $this->subject->getUnpkgFiles()); + self::assertSame([], $this->subject->getUnpkgFiles()); } /** @@ -111,6 +111,6 @@ public function testGetUnpkgFiles(): void */ public function testGetCopyTarget(): void { - static::assertSame('target', $this->subject->getCopyTarget()); + self::assertSame('target', $this->subject->getCopyTarget()); } } diff --git a/tests/unit/PluginTest.php b/tests/unit/PluginTest.php index faa36ac..e82effa 100644 --- a/tests/unit/PluginTest.php +++ b/tests/unit/PluginTest.php @@ -46,7 +46,7 @@ public function testGetSubscribedEvents(): void ], ], ]; - static::assertSame($events, $this->subject->getSubscribedEvents()); + self::assertSame($events, $this->subject->getSubscribedEvents()); } /** @@ -71,6 +71,6 @@ public function testGetSubscribedEvents(): void */ public function testProcessCopy(): void { - static::assertNull($this->subject->processCopy(null)); + self::assertNull($this->subject->processCopy(null)); } } From 39a8d516edefe5a7371f05279f0848b6290b1cb5 Mon Sep 17 00:00:00 2001 From: Sven Reichel Date: Thu, 2 Oct 2025 02:29:10 +0200 Subject: [PATCH 11/16] Updated tests --- tests/unit/Copy/AbstractCopyPluginTest.php | 6 +++--- tests/unit/Copy/Plugins/ChartJsTest.php | 8 ++++---- tests/unit/Copy/Plugins/FlatpickrTest.php | 8 ++++---- tests/unit/Copy/Plugins/FlowJsTest.php | 4 ++-- tests/unit/Copy/Plugins/JQueryTest.php | 4 ++-- tests/unit/Copy/Plugins/TinyMceLanguagesTest.php | 8 ++++---- tests/unit/Copy/Plugins/TinyMceTest.php | 4 ++-- tests/unit/Copy/Unpkg/ConfigTest.php | 6 +++--- tests/unit/Copy/Unpkg/GenericTest.php | 4 ++-- tests/unit/PluginTest.php | 4 ++-- 10 files changed, 28 insertions(+), 28 deletions(-) diff --git a/tests/unit/Copy/AbstractCopyPluginTest.php b/tests/unit/Copy/AbstractCopyPluginTest.php index 1b85117..283c4da 100644 --- a/tests/unit/Copy/AbstractCopyPluginTest.php +++ b/tests/unit/Copy/AbstractCopyPluginTest.php @@ -21,11 +21,11 @@ use PHPUnit\Framework\TestCase; use Symfony\Component\Filesystem\Filesystem; -class AbstractCopyPluginTest extends TestCase +final class AbstractCopyPluginTest extends TestCase { - public Subject $subject; + public \PHPUnit\Framework\MockObject\MockObject $subject; - public function setUp(): void + protected function setUp(): void { $this->subject = $this->getMockForAbstractClass(Subject::class, [], '', false); } diff --git a/tests/unit/Copy/Plugins/ChartJsTest.php b/tests/unit/Copy/Plugins/ChartJsTest.php index fd59289..d88fe8a 100644 --- a/tests/unit/Copy/Plugins/ChartJsTest.php +++ b/tests/unit/Copy/Plugins/ChartJsTest.php @@ -21,11 +21,11 @@ use OutOfBoundsException; use PHPUnit\Framework\TestCase; -class ChartJsTest extends TestCase +final class ChartJsTest extends TestCase { public Subject $subject; - public function setUp(): void + protected function setUp(): void { $this->subject = new Subject(null); } @@ -46,8 +46,8 @@ public function testGetUnpkgVersion(): void { try { self::assertIsString($this->subject->getUnpkgVersion()); - } catch (OutOfBoundsException $exception) { - self::assertSame('Package "nnnick/chartjs" is not installed', $exception->getMessage()); + } catch (OutOfBoundsException $outOfBoundsException) { + self::assertSame('Package "nnnick/chartjs" is not installed', $outOfBoundsException->getMessage()); } } diff --git a/tests/unit/Copy/Plugins/FlatpickrTest.php b/tests/unit/Copy/Plugins/FlatpickrTest.php index f2f31b2..2629815 100644 --- a/tests/unit/Copy/Plugins/FlatpickrTest.php +++ b/tests/unit/Copy/Plugins/FlatpickrTest.php @@ -21,11 +21,11 @@ use OutOfBoundsException; use PHPUnit\Framework\TestCase; -class FlatpickrTest extends TestCase +final class FlatpickrTest extends TestCase { public Subject $subject; - public function setUp(): void + protected function setUp(): void { $this->subject = new Subject(null); } @@ -45,8 +45,8 @@ public function testGetUnpkgVersion(): void { try { self::assertIsString($this->subject->getUnpkgVersion()); - } catch (OutOfBoundsException $exception) { - self::assertSame('Package "nnnick/chartjs" is not installed', $exception->getMessage()); + } catch (OutOfBoundsException $outOfBoundsException) { + self::assertSame('Package "nnnick/chartjs" is not installed', $outOfBoundsException->getMessage()); } } diff --git a/tests/unit/Copy/Plugins/FlowJsTest.php b/tests/unit/Copy/Plugins/FlowJsTest.php index 4202fb6..f2382b0 100644 --- a/tests/unit/Copy/Plugins/FlowJsTest.php +++ b/tests/unit/Copy/Plugins/FlowJsTest.php @@ -20,11 +20,11 @@ use OpenMage\ComposerPlugin\Copy\Plugins\FlowJs as Subject; use PHPUnit\Framework\TestCase; -class FlowJsTest extends TestCase +final class FlowJsTest extends TestCase { public Subject $subject; - public function setUp(): void + protected function setUp(): void { $this->subject = new Subject(null); } diff --git a/tests/unit/Copy/Plugins/JQueryTest.php b/tests/unit/Copy/Plugins/JQueryTest.php index 3590794..7fb9aac 100644 --- a/tests/unit/Copy/Plugins/JQueryTest.php +++ b/tests/unit/Copy/Plugins/JQueryTest.php @@ -20,11 +20,11 @@ use OpenMage\ComposerPlugin\Copy\Plugins\JQuery as Subject; use PHPUnit\Framework\TestCase; -class JQueryTest extends TestCase +final class JQueryTest extends TestCase { public Subject $subject; - public function setUp(): void + protected function setUp(): void { $this->subject = new Subject(null); } diff --git a/tests/unit/Copy/Plugins/TinyMceLanguagesTest.php b/tests/unit/Copy/Plugins/TinyMceLanguagesTest.php index c782389..7cf9e99 100644 --- a/tests/unit/Copy/Plugins/TinyMceLanguagesTest.php +++ b/tests/unit/Copy/Plugins/TinyMceLanguagesTest.php @@ -21,11 +21,11 @@ use OutOfBoundsException; use PHPUnit\Framework\TestCase; -class TinyMceLanguagesTest extends TestCase +final class TinyMceLanguagesTest extends TestCase { public Subject $subject; - public function setUp(): void + protected function setUp(): void { $this->subject = new Subject(null); } @@ -45,8 +45,8 @@ public function testGetComposerSource(): void { try { self::assertSame('langs7', $this->subject->getComposerSource()); - } catch (OutOfBoundsException $exception) { - self::assertSame('Package "tinymce/tinymce" is not installed', $exception->getMessage()); + } catch (OutOfBoundsException $outOfBoundsException) { + self::assertSame('Package "tinymce/tinymce" is not installed', $outOfBoundsException->getMessage()); } } diff --git a/tests/unit/Copy/Plugins/TinyMceTest.php b/tests/unit/Copy/Plugins/TinyMceTest.php index 11e342f..0c03a9a 100644 --- a/tests/unit/Copy/Plugins/TinyMceTest.php +++ b/tests/unit/Copy/Plugins/TinyMceTest.php @@ -20,11 +20,11 @@ use OpenMage\ComposerPlugin\Copy\Plugins\TinyMce as Subject; use PHPUnit\Framework\TestCase; -class TinyMceTest extends TestCase +final class TinyMceTest extends TestCase { public Subject $subject; - public function setUp(): void + protected function setUp(): void { $this->subject = new Subject(null); } diff --git a/tests/unit/Copy/Unpkg/ConfigTest.php b/tests/unit/Copy/Unpkg/ConfigTest.php index acead66..87853f5 100644 --- a/tests/unit/Copy/Unpkg/ConfigTest.php +++ b/tests/unit/Copy/Unpkg/ConfigTest.php @@ -21,11 +21,11 @@ use OpenMage\ComposerPlugin\Copy\Unpkg\Config as Subject; use PHPUnit\Framework\TestCase; -class ConfigTest extends TestCase +final class ConfigTest extends TestCase { public Subject $subject; - public function setUp(): void + protected function setUp(): void { $this->subject = new Subject(null); } @@ -34,7 +34,7 @@ public function setUp(): void * @covers \OpenMage\ComposerPlugin\Copy\Unpkg\Config::getValidatedConfig() * @dataProvider provideGetValidatedConfig */ - public function testGetValidatedConfig(?array $expectedResult, $packageConfig): void + public function testGetValidatedConfig(?array $expectedResult, ?array $packageConfig): void { self::assertSame($expectedResult, $this->subject->getValidatedConfig($packageConfig)); } diff --git a/tests/unit/Copy/Unpkg/GenericTest.php b/tests/unit/Copy/Unpkg/GenericTest.php index 589ac00..4bba0f3 100644 --- a/tests/unit/Copy/Unpkg/GenericTest.php +++ b/tests/unit/Copy/Unpkg/GenericTest.php @@ -21,11 +21,11 @@ use OpenMage\ComposerPlugin\Copy\Unpkg\Generic as Subject; use PHPUnit\Framework\TestCase; -class GenericTest extends TestCase +final class GenericTest extends TestCase { public Subject $subject; - public function setUp(): void + protected function setUp(): void { $config = new Config(); $config->setUnpkgName('name'); diff --git a/tests/unit/PluginTest.php b/tests/unit/PluginTest.php index e82effa..51a1f5c 100644 --- a/tests/unit/PluginTest.php +++ b/tests/unit/PluginTest.php @@ -20,11 +20,11 @@ use OpenMage\ComposerPlugin\Plugin as Subject; use PHPUnit\Framework\TestCase; -class PluginTest extends TestCase +final class PluginTest extends TestCase { public Subject $subject; - public function setUp(): void + protected function setUp(): void { $this->subject = new Subject(); } From 9770593085ece6bb863be37eab07ac28f35c8c99 Mon Sep 17 00:00:00 2001 From: Sven Reichel Date: Thu, 2 Oct 2025 02:30:03 +0200 Subject: [PATCH 12/16] Added rector --- .github/workflows/rector.yml | 49 ++++++++++++++++++++++++++++++++++++ .gitignore | 1 + .rector.php | 47 ++++++++++++++++++++++++++++++++++ composer.json | 11 +++++--- 4 files changed, 105 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/rector.yml create mode 100644 .rector.php diff --git a/.github/workflows/rector.yml b/.github/workflows/rector.yml new file mode 100644 index 0000000..595f673 --- /dev/null +++ b/.github/workflows/rector.yml @@ -0,0 +1,49 @@ +name: Rector + +on: [push, pull_request] + +jobs: + rector: + name: Rector + runs-on: [ubuntu-latest] + + steps: + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: 8.1 + + - name: Checkout code + uses: actions/checkout@v5 + + - name: Get composer cache directory + id: composer-cache + run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT + + - name: Cache dependencies + uses: actions/cache@v4 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: ${{ runner.os }}-composer- + + - name: Install dependencies + run: composer install --prefer-dist --no-progress --ignore-platform-req=ext-* + + - name: Restore result cache + uses: actions/cache/restore@v4 + with: + path: .rector.result.cache + key: rector-result-cache-${{ github.run_id }} + restore-keys: | + rector-result-cache- + + - name: Rector + run: php vendor/bin/rector process --config .rector.php --dry-run + + - name: Save result cache + uses: actions/cache/save@v4 + if: always() + with: + path: .rector.result.cache + key: rector-result-cache-${{ github.run_id }} diff --git a/.gitignore b/.gitignore index fc32c58..2acd102 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ /vendor /.phpstan.cache /.phpunit.cache +/.rector.result.cache .php-cs-fixer.cache .phpmd.result-cache.php composer.lock diff --git a/.rector.php b/.rector.php new file mode 100644 index 0000000..e0835aa --- /dev/null +++ b/.rector.php @@ -0,0 +1,47 @@ +withFileExtensions(['php']) + ->withCache( + cacheDirectory: '.rector.result.cache', + cacheClass: FileCacheStorage::class, + ) + ->withPhpSets( + php81: true, + ) + ->withPaths([ + __DIR__, + ]) + ->withSkipPath(__DIR__ . '/vendor') + ->withSkip([ + # skip: use static methods + PreferPHPUnitThisCallRector::class + ]) + ->withPreparedSets( + deadCode: true, + codeQuality: true, + codingStyle: true, + typeDeclarations: true, + privatization: true, + naming: true, + instanceOf: true, + earlyReturn: true, + strictBooleans: false, + carbon: true, + rectorPreset: true, + phpunitCodeQuality: true, + doctrineCodeQuality: false, + symfonyCodeQuality: false, + symfonyConfigs: false, + ); +} catch (InvalidConfigurationException $exception) { + echo $exception->getMessage(); + exit(1); +} diff --git a/composer.json b/composer.json index 705353f..8b94696 100644 --- a/composer.json +++ b/composer.json @@ -33,7 +33,8 @@ "phpstan/phpstan-phpunit": "^2.0", "phpunit/phpunit": "^9.6", "phpmd/phpmd": "^2.15", - "friendsofphp/php-cs-fixer": "^3.67" + "friendsofphp/php-cs-fixer": "^3.67", + "rector/rector": "^2.1.2" }, "extra": { "class": "OpenMage\\ComposerPlugin\\Plugin" @@ -46,7 +47,9 @@ "phpstan:baseline": "XDEBUG_MODE=off php vendor/bin/phpstan analyze -b .phpstan.dist.baseline.neon", "phpunit:test": "XDEBUG_MODE=off php vendor/bin/phpunit --configuration .phpunit.dist.xml --no-coverage", "phpunit:coverage": "XDEBUG_MODE=coverage php vendor/bin/phpunit --configuration .phpunit.dist.xml --testdox", - "phpunit:coverage-local": "XDEBUG_MODE=coverage php vendor/bin/phpunit --configuration .phpunit.dist.xml --coverage-html build/coverage-composer-plugin --testdox" + "phpunit:coverage-local": "XDEBUG_MODE=coverage php vendor/bin/phpunit --configuration .phpunit.dist.xml --coverage-html build/coverage-composer-plugin --testdox", + "rector:test": "vendor/bin/rector process --config .rector.php --dry-run", + "rector:fix": "vendor/bin/rector process --config .rector.php" }, "scripts-descriptions": { "php-cs-fixer:test": "Run php-cs-fixer", @@ -56,7 +59,9 @@ "phpstan:baseline": "Run phpstan and update baseline", "phpunit:test": "Run PHPUnit", "phpunit:coverage": "Run PHPUnit with code coverage (requires XDEBUG enabled)", - "phpunit:coverage-local": "Run PHPUnit with local HTML code coverage (requires XDEBUG enabled)" + "phpunit:coverage-local": "Run PHPUnit with local HTML code coverage (requires XDEBUG enabled)", + "rector:test": "Run rector", + "rector:fix": "Run rector and fix issues" }, "funding": [ { From 02712c61d7db7c73cc3b6a828e18bfe82b80521b Mon Sep 17 00:00:00 2001 From: Sven Reichel Date: Thu, 2 Oct 2025 02:35:26 +0200 Subject: [PATCH 13/16] rector --- .../Copy/AbstractCopyPlugin.php | 69 ++++++++----------- .../ComposerPlugin/Copy/CopyInterface.php | 2 + .../ComposerPlugin/Copy/Plugins/TinyMce.php | 13 ++-- .../Copy/Plugins/TinyMceLanguages.php | 1 + .../ComposerPlugin/Copy/Unpkg/Config.php | 10 +++ src/OpenMage/ComposerPlugin/Plugin.php | 16 +++-- 6 files changed, 61 insertions(+), 50 deletions(-) diff --git a/src/OpenMage/ComposerPlugin/Copy/AbstractCopyPlugin.php b/src/OpenMage/ComposerPlugin/Copy/AbstractCopyPlugin.php index 1ab8a48..b10c38c 100644 --- a/src/OpenMage/ComposerPlugin/Copy/AbstractCopyPlugin.php +++ b/src/OpenMage/ComposerPlugin/Copy/AbstractCopyPlugin.php @@ -59,7 +59,7 @@ public function __construct(?Event $event) public function processComposerInstall(): void { $package = $this->getComposerPackage(); - if (!$package || !$this instanceof CopyFromComposerInterface) { + if (!$package instanceof \Composer\Package\BasePackage || !$this instanceof CopyFromComposerInterface) { return; } @@ -74,13 +74,14 @@ public function processComposerInstall(): void $filesystem = $this->getFileSystem(); if (!$filesystem->exists($copySourcePath) && $this instanceof CopyFromUnpkgInterface) { - if ($event && $event->getIO()->isVerbose()) { + if ($event instanceof Event && $event->getIO()->isVerbose()) { $event->getIO()->write(sprintf( 'Fallback to Unpkg %s for %s', $this->getUnpkgName(), $this->getComposerName(), )); } + $this->processUnpkgInstall(); return; } @@ -96,11 +97,11 @@ public function processComposerInstall(): void try { $filesystem->copy($copySource, $copytarget); - if ($event && $event->getIO()->isVeryVerbose()) { + if ($event instanceof Event && $event->getIO()->isVeryVerbose()) { $event->getIO()->write(sprintf('Copy %s to %s', $copySource, $copytarget)); } } catch (IOException $exception) { - if ($event) { + if ($event instanceof Event) { $event->getIO()->write($exception->getMessage()); } } @@ -119,7 +120,7 @@ public function processUnpkgInstall(): void $event = $this->getEvent(); $sourcePath = $this->getUnpkSourcePath(); - if ($event && $event->getIO()->isVerbose()) { + if ($event instanceof Event && $event->getIO()->isVerbose()) { $event->getIO()->write(sprintf( 'Trying to download %s %s from %s', $this->getUnpkgName(), @@ -133,29 +134,32 @@ public function processUnpkgInstall(): void try { $content = file_get_contents($sourceFilePath); } catch (ErrorException $errorException) { - if ($event) { + if ($event instanceof Event) { $event->getIO()->write($errorException->getMessage()); } + return; } if (!$content) { - if ($event) { + if ($event instanceof Event) { $event->getIO()->write(sprintf('Could not read from %s', $sourceFilePath)); } + return; } try { $targetFilePath = $this->getCopyTargetPath() . '/' . $fileName; $this->getFileSystem()->dumpFile($targetFilePath, $content); - if ($event && $event->getIO()->isVerbose()) { + if ($event instanceof Event && $event->getIO()->isVerbose()) { $event->getIO()->write(sprintf('Added %s', $targetFilePath)); } } catch (IOException $exception) { - if ($event) { + if ($event instanceof Event) { $event->getIO()->write($exception->getMessage()); } + return; } } @@ -169,27 +173,29 @@ public function getComposerPackage(): ?BasePackage $vendorName = $this->getComposerName(); $module = $this->getInstalledComposerPackage($vendorName); - if ($module) { + if ($module instanceof \Composer\Package\BasePackage) { return $module; } $event = $this->getEvent(); - if (!$event) { + if (!$event instanceof Event) { return null; } $locker = $event->getComposer()->getLocker(); - $repo = $locker->getLockedRepository(); + $lockArrayRepository = $locker->getLockedRepository(); - foreach ($repo->getPackages() as $package) { - if ($package->getName() === $vendorName) { - $this->setInstalledComposerPackage($vendorName, $package); + foreach ($lockArrayRepository->getPackages() as $basePackage) { + if ($basePackage->getName() === $vendorName) { + $this->setInstalledComposerPackage($vendorName, $basePackage); if ($event->getIO()->isVerbose()) { - $event->getIO()->write(sprintf('%s found with version %s', $vendorName, $package->getVersion())); + $event->getIO()->write(sprintf('%s found with version %s', $vendorName, $basePackage->getVersion())); } + return $this->getInstalledComposerPackage($vendorName); } } + return null; } @@ -202,8 +208,9 @@ protected function getUnpkSourcePath(): string $search = ['{{package}}', '{{version}}']; $replace = [$this->getUnpkgName(), $this->getUnpkgVersion()]; $path = str_replace($search, $replace, CopyFromUnpkgInterface::UNPKG_URL); - return $path . ($this->getUnpkgSource() ? $this->getUnpkgSource() . '/' : ''); + return $path . ($this->getUnpkgSource() !== '' && $this->getUnpkgSource() !== '0' ? $this->getUnpkgSource() . '/' : ''); } + return ''; } @@ -216,6 +223,7 @@ protected function getCwd(): string if ($cwd === false) { throw new Exception('This should not happen.'); } + return $cwd; } @@ -225,7 +233,7 @@ protected function getCwd(): string protected function getVendorDirectoryFromComposer(): string { $event = $this->getEvent(); - if (!$event) { + if (!$event instanceof Event) { return ''; } @@ -240,29 +248,17 @@ protected function getVendorDirectoryFromComposer(): string protected function getMageRootDirectoryFromComposer(): string { $event = $this->getEvent(); - if (!$event) { + if (!$event instanceof Event) { return ''; } $composerExtra = $event->getComposer()->getPackage()->getExtra(); - $magentoRootDir = ''; - if (array_key_exists(self::EXTRA_MAGENTO_ROOT_DIR, $composerExtra) && - $composerExtra[self::EXTRA_MAGENTO_ROOT_DIR] !== '.' - ) { - $magentoRootDir = $composerExtra[self::EXTRA_MAGENTO_ROOT_DIR] . '/'; + $composerExtra[self::EXTRA_MAGENTO_ROOT_DIR] !== '.') { + return $composerExtra[self::EXTRA_MAGENTO_ROOT_DIR] . '/'; } - return $magentoRootDir; - } - private function getCopyTargetPath(): string - { - return sprintf( - '%s/%s%s', - $this->getCwd(), - $this->getMageRootDirectoryFromComposer(), - $this->getCopyTarget(), - ); + return ''; } protected function getInstalledComposerPackage(string $vendorName): ?BasePackage @@ -270,11 +266,6 @@ protected function getInstalledComposerPackage(string $vendorName): ?BasePackage return $this->composerPackages[$vendorName] ?? null; } - private function setInstalledComposerPackage(string $vendorName, BasePackage $package): void - { - $this->composerPackages[$vendorName] = $package; - } - public function getFileSystem(): Filesystem { return new Filesystem(); diff --git a/src/OpenMage/ComposerPlugin/Copy/CopyInterface.php b/src/OpenMage/ComposerPlugin/Copy/CopyInterface.php index 6f292d1..9ce67ee 100644 --- a/src/OpenMage/ComposerPlugin/Copy/CopyInterface.php +++ b/src/OpenMage/ComposerPlugin/Copy/CopyInterface.php @@ -17,7 +17,9 @@ interface CopyInterface { public const EXTRA_MAGENTO_ROOT_DIR = 'magento-root-dir'; + public const EXTRA_UNPKG_PACKAGES = 'openmage-unpkg-packages'; + public const VENDOR_DIR = 'vendor-dir'; public function getCopyTarget(): string; diff --git a/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php b/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php index 746ff03..788ecbd 100644 --- a/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php +++ b/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMce.php @@ -21,6 +21,7 @@ class TinyMce extends Copy\AbstractCopyPlugin implements Copy\CopyFromComposerInterface { public const TINYMCE_LICENSE_FILE = 'LICENSE_TINYMCE.txt'; + public const TINYMCE_LICENSE_NOTE = 'LICENSE_TINYMCE_OPENMAGE.txt'; public const TINYMCE_LICENSE_FILE_TEXT = <<event) && $this->event->getIO()->isVerbose()) { $this->event->getIO()->write(sprintf('Added %s', self::TINYMCE_LICENSE_FILE)); } - } catch (IOException $exception) { + } catch (IOException $ioException) { if (!is_null($this->event)) { - $this->event->getIO()->write($exception->getMessage()); + $this->event->getIO()->write($ioException->getMessage()); } } } @@ -115,9 +116,9 @@ private function addTinyMceLicenseNote(): void if (!is_null($this->event) && $this->event->getIO()->isVerbose()) { $this->event->getIO()->write(sprintf('Added %s', self::TINYMCE_LICENSE_NOTE)); } - } catch (IOException $exception) { + } catch (IOException $ioException) { if (!is_null($this->event)) { - $this->event->getIO()->write($exception->getMessage()); + $this->event->getIO()->write($ioException->getMessage()); } } } @@ -134,9 +135,9 @@ private function removedTinyMceLicenseFiles(): void if (!is_null($this->event) && $this->event->getIO()->isVeryVerbose()) { $this->event->getIO()->write(sprintf('Removed %s and %s', self::TINYMCE_LICENSE_FILE, self::TINYMCE_LICENSE_NOTE)); } - } catch (IOException $exception) { + } catch (IOException $ioException) { if (!is_null($this->event)) { - $this->event->getIO()->write($exception->getMessage()); + $this->event->getIO()->write($ioException->getMessage()); } } } diff --git a/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMceLanguages.php b/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMceLanguages.php index c69b270..7ed8da3 100644 --- a/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMceLanguages.php +++ b/src/OpenMage/ComposerPlugin/Copy/Plugins/TinyMceLanguages.php @@ -54,6 +54,7 @@ public function processComposerInstall(): void if (!InstalledVersions::isInstalled(self::TINYMCE)) { return; } + parent::processComposerInstall(); } } diff --git a/src/OpenMage/ComposerPlugin/Copy/Unpkg/Config.php b/src/OpenMage/ComposerPlugin/Copy/Unpkg/Config.php index 8aa1080..7eb744b 100644 --- a/src/OpenMage/ComposerPlugin/Copy/Unpkg/Config.php +++ b/src/OpenMage/ComposerPlugin/Copy/Unpkg/Config.php @@ -19,13 +19,19 @@ class Config implements Copy\CopyFromUnpkgInterface { public const CONFIG_FILES = 'files'; + public const CONFIG_SOURCE = 'source'; + public const CONFIG_TARGET = 'target'; + public const CONFIG_VERSION = 'version'; private string $name = ''; + private string $version = ''; + private string $source = ''; + private string $target = ''; /** @@ -75,6 +81,7 @@ private function validateConfigFiles(array $packageConfig): ?array $files = $packageConfig[self::CONFIG_FILES]; return $files; } + return null; } @@ -86,6 +93,7 @@ private function validateConfigVersion(array $packageConfig): ?string if (array_key_exists(self::CONFIG_VERSION, $packageConfig) && is_string($packageConfig[self::CONFIG_VERSION])) { return trim($packageConfig[self::CONFIG_VERSION]); } + return null; } @@ -97,6 +105,7 @@ private function validateConfigSource(array $packageConfig): string if (array_key_exists(self::CONFIG_SOURCE, $packageConfig) && is_string($packageConfig[self::CONFIG_SOURCE])) { return trim($packageConfig[self::CONFIG_SOURCE]); } + return ''; } @@ -109,6 +118,7 @@ private function validateConfigTarget(array $packageConfig): string $target = str_replace(['../', './'], '', $packageConfig[self::CONFIG_TARGET]); return trim($target); } + return ''; } diff --git a/src/OpenMage/ComposerPlugin/Plugin.php b/src/OpenMage/ComposerPlugin/Plugin.php index bfc713f..0782bc9 100644 --- a/src/OpenMage/ComposerPlugin/Plugin.php +++ b/src/OpenMage/ComposerPlugin/Plugin.php @@ -86,6 +86,7 @@ public function processCopy(?Event $event): void $pluginLoaded->processComposerInstall(); continue; } + if ($pluginLoaded instanceof Copy\AbstractCopyPlugin && $pluginLoaded instanceof Copy\CopyFromUnpkgInterface ) { @@ -93,14 +94,14 @@ public function processCopy(?Event $event): void continue; } - if ($this->io) { + if ($this->io instanceof IOInterface) { $this->io->write('Could not load ' . $plugin); } } $plugins = $this->getUnpkgPackagesFromConfig(); - foreach ($plugins as $pluginConfig) { - $pluginLoaded = new Generic($event, $pluginConfig); + foreach ($plugins as $plugin) { + $pluginLoaded = new Generic($event, $plugin); $pluginLoaded->processUnpkgInstall(); } } @@ -125,9 +126,10 @@ private function getUnpkgPackagesFromConfig(): array $config = $extra[CopyInterface::EXTRA_UNPKG_PACKAGES]; if (!is_array($config)) { - if ($this->io) { + if ($this->io instanceof IOInterface) { $this->io->write(sprintf('Configuration is invalid for %s', CopyInterface::EXTRA_UNPKG_PACKAGES)); } + return $packages; } @@ -135,9 +137,10 @@ private function getUnpkgPackagesFromConfig(): array $config = new Config(); $packageConfig = $config->getValidatedConfig($packageConfig); if (!$packageConfig) { - if ($this->io) { + if ($this->io instanceof IOInterface) { $this->io->write(sprintf('Configuration is invalid for %s', $packageName)); } + continue; } @@ -150,6 +153,7 @@ private function getUnpkgPackagesFromConfig(): array $packages[] = $config; } + return $packages; } @@ -163,6 +167,7 @@ private function getPlugins(string $path): array foreach ($filenames as $filename) { $namespaces[] = $this->getFullNamespace($filename) . '\\' . $this->getClassName($filename); } + return $namespaces; } @@ -198,6 +203,7 @@ private function getFilenames(string $path): array foreach ($finderFiles as $finderFile) { $filenames[] = $finderFile->getRealPath(); } + return $filenames; } } From c8a8cfecffca0f2ed8fbc46b94ce712f4f6d930d Mon Sep 17 00:00:00 2001 From: Sven Reichel Date: Thu, 2 Oct 2025 03:00:53 +0200 Subject: [PATCH 14/16] fix --- .../ComposerPlugin/Copy/AbstractCopyPlugin.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/OpenMage/ComposerPlugin/Copy/AbstractCopyPlugin.php b/src/OpenMage/ComposerPlugin/Copy/AbstractCopyPlugin.php index b10c38c..c4fd73f 100644 --- a/src/OpenMage/ComposerPlugin/Copy/AbstractCopyPlugin.php +++ b/src/OpenMage/ComposerPlugin/Copy/AbstractCopyPlugin.php @@ -261,11 +261,26 @@ protected function getMageRootDirectoryFromComposer(): string return ''; } + protected function getCopyTargetPath(): string + { + return sprintf( + '%s/%s%s', + $this->getCwd(), + $this->getMageRootDirectoryFromComposer(), + $this->getCopyTarget(), + ); + } + protected function getInstalledComposerPackage(string $vendorName): ?BasePackage { return $this->composerPackages[$vendorName] ?? null; } + protected function setInstalledComposerPackage(string $vendorName, BasePackage $package): void + { + $this->composerPackages[$vendorName] = $package; + } + public function getFileSystem(): Filesystem { return new Filesystem(); From 411f8450c1bb99c539cad0a69fa297d14685ad7b Mon Sep 17 00:00:00 2001 From: Sven Reichel Date: Thu, 2 Oct 2025 03:03:34 +0200 Subject: [PATCH 15/16] fix --- src/OpenMage/ComposerPlugin/Copy/AbstractCopyPlugin.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/OpenMage/ComposerPlugin/Copy/AbstractCopyPlugin.php b/src/OpenMage/ComposerPlugin/Copy/AbstractCopyPlugin.php index c4fd73f..3d1556b 100644 --- a/src/OpenMage/ComposerPlugin/Copy/AbstractCopyPlugin.php +++ b/src/OpenMage/ComposerPlugin/Copy/AbstractCopyPlugin.php @@ -59,7 +59,7 @@ public function __construct(?Event $event) public function processComposerInstall(): void { $package = $this->getComposerPackage(); - if (!$package instanceof \Composer\Package\BasePackage || !$this instanceof CopyFromComposerInterface) { + if (!$package instanceof BasePackage || !$this instanceof CopyFromComposerInterface) { return; } @@ -173,7 +173,7 @@ public function getComposerPackage(): ?BasePackage $vendorName = $this->getComposerName(); $module = $this->getInstalledComposerPackage($vendorName); - if ($module instanceof \Composer\Package\BasePackage) { + if ($module instanceof BasePackage) { return $module; } From da12869b1feba69924a970b9b663cb7b8037bc2d Mon Sep 17 00:00:00 2001 From: Sven Reichel Date: Thu, 2 Oct 2025 03:04:42 +0200 Subject: [PATCH 16/16] rector --- src/OpenMage/ComposerPlugin/Copy/AbstractCopyPlugin.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/OpenMage/ComposerPlugin/Copy/AbstractCopyPlugin.php b/src/OpenMage/ComposerPlugin/Copy/AbstractCopyPlugin.php index 3d1556b..45821ca 100644 --- a/src/OpenMage/ComposerPlugin/Copy/AbstractCopyPlugin.php +++ b/src/OpenMage/ComposerPlugin/Copy/AbstractCopyPlugin.php @@ -276,9 +276,9 @@ protected function getInstalledComposerPackage(string $vendorName): ?BasePackage return $this->composerPackages[$vendorName] ?? null; } - protected function setInstalledComposerPackage(string $vendorName, BasePackage $package): void + protected function setInstalledComposerPackage(string $vendorName, BasePackage $basePackage): void { - $this->composerPackages[$vendorName] = $package; + $this->composerPackages[$vendorName] = $basePackage; } public function getFileSystem(): Filesystem