mirror of
https://github.com/flarum/core.git
synced 2025-08-13 20:04:24 +02:00
init
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
@@ -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)
|
||||
);
|
||||
}
|
||||
}
|
@@ -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;
|
||||
}
|
||||
}
|
@@ -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;
|
||||
}
|
||||
}
|
24
extensions/package-manager/src/Command/RemoveExtension.php
Normal file
24
extensions/package-manager/src/Command/RemoveExtension.php
Normal 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;
|
||||
}
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
24
extensions/package-manager/src/Command/RequireExtension.php
Normal file
24
extensions/package-manager/src/Command/RequireExtension.php
Normal 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;
|
||||
}
|
||||
}
|
@@ -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());
|
||||
}
|
||||
}
|
24
extensions/package-manager/src/Command/UpdateExtension.php
Normal file
24
extensions/package-manager/src/Command/UpdateExtension.php
Normal 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;
|
||||
}
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
@@ -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)
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
18
extensions/package-manager/src/Extension/Event/Installed.php
Normal file
18
extensions/package-manager/src/Extension/Event/Installed.php
Normal 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;
|
||||
}
|
||||
}
|
18
extensions/package-manager/src/Extension/Event/Removed.php
Normal file
18
extensions/package-manager/src/Extension/Event/Removed.php
Normal 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;
|
||||
}
|
||||
}
|
18
extensions/package-manager/src/Extension/Event/Updated.php
Normal file
18
extensions/package-manager/src/Extension/Event/Updated.php
Normal 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;
|
||||
}
|
||||
}
|
14
extensions/package-manager/src/Extension/ExtensionUtils.php
Normal file
14
extensions/package-manager/src/Extension/ExtensionUtils.php
Normal 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";
|
||||
}
|
||||
}
|
15
extensions/package-manager/src/RequirePackageValidator.php
Normal file
15
extensions/package-manager/src/RequirePackageValidator.php
Normal file
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace SychO\PackageManager;
|
||||
|
||||
use Flarum\Foundation\AbstractValidator;
|
||||
|
||||
class RequirePackageValidator extends AbstractValidator
|
||||
{
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected $rules = [
|
||||
'package' => 'required|string'
|
||||
];
|
||||
}
|
Reference in New Issue
Block a user