diff --git a/app/Models/Plugin.php b/app/Models/Plugin.php index 433012e33..1e1168c54 100644 --- a/app/Models/Plugin.php +++ b/app/Models/Plugin.php @@ -119,7 +119,7 @@ class Plugin extends Model implements HasPluginSettings $composerPackages = null; if (array_key_exists('composer_packages', $data)) { $composerPackages = $data['composer_packages']; - $composerPackages = is_array($composerPackages) ? implode(',', $composerPackages) : $composerPackages; + $composerPackages = is_array($composerPackages) ? json_encode($composerPackages, JSON_THROW_ON_ERROR) : $composerPackages; } $data = [ diff --git a/app/Services/Helpers/PluginService.php b/app/Services/Helpers/PluginService.php index f5fcfc855..ab80845f2 100644 --- a/app/Services/Helpers/PluginService.php +++ b/app/Services/Helpers/PluginService.php @@ -162,7 +162,13 @@ class PluginService public function requireComposerPackages(Plugin $plugin): void { if ($plugin->composer_packages) { - $success = $this->composer->requirePackages(explode(',', $plugin->composer_packages)); + $composerPackages = collect(json_decode($plugin->composer_packages, true, 512, JSON_THROW_ON_ERROR)) + ->map(fn ($version, $package) => "'$package:$version'") + ->flatten() + ->unique() + ->toArray(); + + $success = $this->composer->requirePackages($composerPackages); if (!$success) { throw new Exception("Could not require composer packages for plugin '{$plugin->id}'");