1
0
mirror of https://github.com/flarum/core.git synced 2025-08-13 20:04:24 +02:00
This commit is contained in:
SychO9
2021-09-01 17:20:06 +01:00
commit 5d3804c7ca
36 changed files with 5496 additions and 0 deletions

View File

@@ -0,0 +1,25 @@
<?php
namespace SychO\PackageManager\Api\Controller;
use Flarum\Http\RequestUtil;
use SychO\PackageManager\Api\Serializer\TaskSerializer;
use SychO\PackageManager\Task;
use Flarum\Api\Controller\AbstractListController;
use Psr\Http\Message\ServerRequestInterface;
use Tobscure\JsonApi\Document;
class ListTaskController extends AbstractListController
{
public $serializer = TaskSerializer::class;
/**
* @throws \Flarum\User\Exception\PermissionDeniedException
*/
protected function data(ServerRequestInterface $request, Document $document)
{
RequestUtil::getActor($request)->assertAdmin();
return Task::query()->orderBy('created_at', 'desc')->get();
}
}

View File

@@ -0,0 +1,39 @@
<?php
namespace SychO\PackageManager\Api\Controller;
use Flarum\Api\Controller\AbstractDeleteController;
use Flarum\Bus\Dispatcher;
use Flarum\Http\RequestUtil;
use Illuminate\Support\Arr;
use SychO\PackageManager\Api\Serializer\ExtensionSerializer;
use Psr\Http\Message\ServerRequestInterface;
use SychO\PackageManager\Command\RemoveExtension;
class RemoveExtensionController extends AbstractDeleteController
{
public $serializer = ExtensionSerializer::class;
/**
* @var Dispatcher
*/
protected $bus;
public function __construct(Dispatcher $bus)
{
$this->bus = $bus;
}
/**
* @throws \Flarum\User\Exception\PermissionDeniedException
*/
protected function delete(ServerRequestInterface $request)
{
$actor = RequestUtil::getActor($request);
$extensionId = Arr::get($request->getQueryParams(), 'id');
$this->bus->dispatch(
new RemoveExtension($actor, $extensionId)
);
}
}

View File

@@ -0,0 +1,40 @@
<?php
namespace SychO\PackageManager\Api\Controller;
use Flarum\Bus\Dispatcher;
use SychO\PackageManager\Api\Serializer\ExtensionSerializer;
use SychO\PackageManager\Command\RequireExtension;
use SychO\PackageManager\Extension\ExtensionUtils;
use Flarum\Api\Controller\AbstractCreateController;
use Flarum\Http\RequestUtil;
use Illuminate\Support\Arr;
use Psr\Http\Message\ServerRequestInterface;
use Tobscure\JsonApi\Document;
class RequireExtensionController extends AbstractCreateController
{
public $serializer = ExtensionSerializer::class;
/**
* @var Dispatcher
*/
protected $bus;
public function __construct(Dispatcher $bus)
{
$this->bus = $bus;
}
protected function data(ServerRequestInterface $request, Document $document)
{
$actor = RequestUtil::getActor($request);
$package = Arr::get($request->getParsedBody(), 'data.package');
$this->bus->dispatch(
new RequireExtension($actor, $package)
);
return null;
}
}

View File

@@ -0,0 +1,42 @@
<?php
namespace SychO\PackageManager\Api\Controller;
use Flarum\Bus\Dispatcher;
use Flarum\Http\RequestUtil;
use SychO\PackageManager\Api\Serializer\ExtensionSerializer;
use Flarum\Api\Controller\AbstractShowController;
use Illuminate\Support\Arr;
use Psr\Http\Message\ServerRequestInterface;
use SychO\PackageManager\Command\UpdateExtension;
use Tobscure\JsonApi\Document;
class UpdateExtensionController extends AbstractShowController
{
public $serializer = ExtensionSerializer::class;
/**
* @var Dispatcher
*/
protected $bus;
public function __construct(Dispatcher $bus)
{
$this->bus = $bus;
}
/**
* @throws \Flarum\User\Exception\PermissionDeniedException
*/
protected function data(ServerRequestInterface $request, Document $document)
{
$actor = RequestUtil::getActor($request);
$extensionId = Arr::get($request->getQueryParams(), 'id');
$this->bus->dispatch(
new UpdateExtension($actor, $extensionId)
);
return null;
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace SychO\PackageManager\Command;
use Flarum\User\User;
class RemoveExtension
{
/**
* @var User
*/
public $actor;
/**
* @var string
*/
public $extensionId;
public function __construct(User $actor, string $extensionId)
{
$this->actor = $actor;
$this->extensionId = $extensionId;
}
}

View File

@@ -0,0 +1,42 @@
<?php
namespace SychO\PackageManager\Command;
use Flarum\Extension\ExtensionManager;
use SychO\PackageManager\Extension\PackageManager;
class RemoveExtensionHandler
{
/**
* @var ExtensionManager
*/
protected $extensions;
/**
* @var PackageManager
*/
protected $packages;
public function __construct(ExtensionManager $extensions, PackageManager $packages)
{
$this->extensions = $extensions;
$this->packages = $packages;
}
/**
* @throws \Flarum\User\Exception\PermissionDeniedException
* @throws \Exception
*/
public function handle(RemoveExtension $command)
{
$command->actor->assertAdmin();
$extension = $this->extensions->getExtension($command->extensionId);
if (empty($extension)) {
// ... exception
}
$this->packages->removePackage($extension->name);
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace SychO\PackageManager\Command;
use Flarum\User\User;
class RequireExtension
{
/**
* @var User
*/
public $actor;
/**
* @var string
*/
public $package;
public function __construct(User $actor, string $package)
{
$this->actor = $actor;
$this->package = $package;
}
}

View File

@@ -0,0 +1,91 @@
<?php
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 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)
{
$this->extensions = $extensions;
$this->packages = $packages;
$this->command = $command;
$this->validator = $validator;
}
/**
* @throws \Flarum\User\Exception\PermissionDeniedException
* @throws \Exception
*/
public function handle(RequireExtension $command)
{
$command->actor->assertAdmin();
$this->validator->assertValid(['package' => $command->package]);
$extensionId = ExtensionUtils::nameToId($command->package);
if (! empty($this->extensions->getExtension($extensionId))) {
// ... 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);
error_log('nandeeeeeeeeeeeeeee');
throw new \Exception($output->fetch());
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace SychO\PackageManager\Command;
use Flarum\User\User;
class UpdateExtension
{
/**
* @var User
*/
public $actor;
/**
* @var string
*/
public $extensionId;
public function __construct(User $actor, string $extensionId)
{
$this->actor = $actor;
$this->extensionId = $extensionId;
}
}

View File

@@ -0,0 +1,42 @@
<?php
namespace SychO\PackageManager\Command;
use Flarum\Extension\ExtensionManager;
use SychO\PackageManager\Extension\PackageManager;
class UpdateExtensionHandler
{
/**
* @var ExtensionManager
*/
protected $extensions;
/**
* @var PackageManager
*/
protected $packages;
public function __construct(ExtensionManager $extensions, PackageManager $packages)
{
$this->extensions = $extensions;
$this->packages = $packages;
}
/**
* @throws \Flarum\User\Exception\PermissionDeniedException
* @throws \Exception
*/
public function handle(UpdateExtension $command)
{
$command->actor->assertAdmin();
$extension = $this->extensions->getExtension($command->extensionId);
if (empty($extension)) {
// ... exception
}
$this->packages->updatePackage($extension->name);
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace SychO\PackageManager;
use Flarum\Foundation\Paths;
use Illuminate\Contracts\Container\Container;
use SychO\PackageManager\Composer\ComposerEnvironment;
use Flarum\Foundation\AbstractServiceProvider;
use Illuminate\Filesystem\Filesystem;
class ComposerEnvironmentProvider extends AbstractServiceProvider
{
public function register()
{
$this->container->singleton(ComposerEnvironment::class, function(Container $container) {
return new ComposerEnvironment(
$container->make(Paths::class)->base,
$container->make(Paths::class)->storage.'/composer-home',
$container->make(Filesystem::class),
$container->make(Paths::class)
);
});
}
}

View File

@@ -0,0 +1,18 @@
<?php
namespace SychO\PackageManager\Extension\Event;
use Flarum\Extension\Extension;
class Installed
{
/**
* @var Extension
*/
public $extension;
public function __construct(Extension $extension)
{
$this->extension = $extension;
}
}

View File

@@ -0,0 +1,18 @@
<?php
namespace SychO\PackageManager\Extension\Event;
use Flarum\Extension\Extension;
class Removed
{
/**
* @var Extension
*/
public $extension;
public function __construct(Extension $extension)
{
$this->extension = $extension;
}
}

View File

@@ -0,0 +1,18 @@
<?php
namespace SychO\PackageManager\Extension\Event;
use Flarum\Extension\Extension;
class Updated
{
/**
* @var Extension
*/
public $extension;
public function __construct(Extension $extension)
{
$this->extension = $extension;
}
}

View File

@@ -0,0 +1,14 @@
<?php
namespace SychO\PackageManager\Extension;
class ExtensionUtils
{
public static function nameToId(string $name): string
{
[$vendor, $package] = explode('/', $name);
$package = str_replace(['flarum-ext-', 'flarum-'], '', $package);
return "$vendor-$package";
}
}

View File

@@ -0,0 +1,15 @@
<?php
namespace SychO\PackageManager;
use Flarum\Foundation\AbstractValidator;
class RequirePackageValidator extends AbstractValidator
{
/**
* {@inheritdoc}
*/
protected $rules = [
'package' => 'required|string'
];
}