1
0
mirror of https://github.com/flarum/core.git synced 2025-08-14 12:24:33 +02:00
This commit is contained in:
SychO9
2021-09-01 19:49:44 +01:00
parent 5d3804c7ca
commit 1d48c9878b
12 changed files with 179 additions and 112 deletions

View File

@@ -31,10 +31,8 @@ class RequireExtensionController extends AbstractCreateController
$actor = RequestUtil::getActor($request);
$package = Arr::get($request->getParsedBody(), 'data.package');
$this->bus->dispatch(
return $this->bus->dispatch(
new RequireExtension($actor, $package)
);
return null;
}
}

View File

@@ -33,10 +33,8 @@ class UpdateExtensionController extends AbstractShowController
$actor = RequestUtil::getActor($request);
$extensionId = Arr::get($request->getQueryParams(), 'id');
$this->bus->dispatch(
return $this->bus->dispatch(
new UpdateExtension($actor, $extensionId)
);
return null;
}
}

View File

@@ -0,0 +1,27 @@
<?php
namespace SychO\PackageManager\Api\Serializer;
use Flarum\Api\Serializer\AbstractSerializer;
use Flarum\Extension\Extension;
use InvalidArgumentException;
class ExtensionSerializer extends AbstractSerializer
{
protected $type = 'extensions';
protected function getDefaultAttributes($model)
{
if (is_array($model)) {
return $model;
}
if (! ($model instanceof Extension)) {
throw new InvalidArgumentException(
get_class($this).' can only serialize instances of '.Extension::class
);
}
return $model->toArray();
}
}

View File

@@ -2,25 +2,27 @@
namespace SychO\PackageManager\Command;
use Composer\Console\Application;
use Flarum\Extension\ExtensionManager;
use SychO\PackageManager\Extension\PackageManager;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\BufferedOutput;
class RemoveExtensionHandler
{
/**
* @var Application
*/
protected $composer;
/**
* @var ExtensionManager
*/
protected $extensions;
/**
* @var PackageManager
*/
protected $packages;
public function __construct(ExtensionManager $extensions, PackageManager $packages)
public function __construct(Application $composer, ExtensionManager $extensions,)
{
$this->composer = $composer;
$this->extensions = $extensions;
$this->packages = $packages;
}
/**
@@ -37,6 +39,12 @@ class RemoveExtensionHandler
// ... exception
}
$this->packages->removePackage($extension->name);
$output = new BufferedOutput();
$input = new ArrayInput([
'command' => 'remove',
'packages' => [$extension->name],
]);
$this->composer->run($input, $output);
}
}

View File

@@ -2,46 +2,34 @@
namespace SychO\PackageManager\Command;
use Composer\Command\RequireCommand;
use Composer\Config;
use Composer\Console\Application;
use Flarum\Extension\ExtensionManager;
use Flarum\Foundation\Paths;
use Illuminate\Contracts\Console\Kernel;
use SychO\PackageManager\Extension\ExtensionUtils;
use SychO\PackageManager\Extension\PackageManager;
use SychO\PackageManager\RequirePackageValidator;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Input\StringInput;
use Symfony\Component\Console\Output\BufferedOutput;
class RequireExtensionHandler
{
/**
* @var Application
*/
protected $composer;
/**
* @var ExtensionManager
*/
protected $extensions;
/**
* @var PackageManager
*/
protected $packages;
/**
* @var RequireCommand
*/
protected $command;
/**
* @var RequirePackageValidator
*/
protected $validator;
public function __construct(ExtensionManager $extensions, PackageManager $packages, RequireCommand $command, RequirePackageValidator $validator)
public function __construct(Application $composer, ExtensionManager $extensions, RequirePackageValidator $validator)
{
$this->composer = $composer;
$this->extensions = $extensions;
$this->packages = $packages;
$this->command = $command;
$this->validator = $validator;
}
@@ -56,36 +44,20 @@ class RequireExtensionHandler
$this->validator->assertValid(['package' => $command->package]);
$extensionId = ExtensionUtils::nameToId($command->package);
$extension = $this->extensions->getExtension($extensionId);
if (! empty($this->extensions->getExtension($extensionId))) {
if (! empty($extension)) {
// ... exception
}
// $this->packages->requirePackage($command->package);
$paths = resolve(Paths::class);
putenv("COMPOSER_HOME={$paths->storage}/.composer");
putenv("COMPOSER={$paths->base}/composer.json");
Config::$defaultConfig['vendor-dir'] = $paths->base.'/vendor';
@ini_set('memory_limit', '1G');
@set_time_limit(5 * 60);
$application = new Application();
$application->setAutoExit(false);
$output = new BufferedOutput();
$input = new ArrayInput([
'command' => 'require',
'packages' => [$command->package],
// '--dry-run' => true,
]);
$application->run($input, $output);
$this->composer->run($input, $output);
error_log('nandeeeeeeeeeeeeeee');
throw new \Exception($output->fetch());
return ['id' => $extensionId];
}
}

View File

@@ -0,0 +1,38 @@
<?php
namespace SychO\PackageManager;
use Composer\Config;
use Composer\Console\Application;
use Flarum\Foundation\AbstractServiceProvider;
use Flarum\Foundation\Paths;
use Illuminate\Contracts\Container\Container;
class PackageManagerServiceProvider extends AbstractServiceProvider
{
public function register()
{
$this->container->singleton(Application::class, function (Container $container) {
// This should only ever be resolved when running composer commands,
// because we modify other environment configurations.
$composer = new Application();
$composer->setAutoExit(false);
$paths = $container->make(Paths::class);
putenv("COMPOSER_HOME={$paths->storage}/.composer");
putenv("COMPOSER={$paths->base}/composer.json");
Config::$defaultConfig['vendor-dir'] = $paths->base.'/vendor';
// When running simple require, update and remove commands on packages,
// composer 2 doesn't really need this much unless the extensions are very loaded dependency wise,
// but this is necessary for running flarum updates.
@ini_set('memory_limit', '1G');
@set_time_limit(5 * 60);
return $composer;
});
$this->container->alias(Application::class, 'flarum.composer');
}
}