mirror of
https://github.com/flarum/core.git
synced 2025-08-06 08:27:42 +02:00
chore: light tweaks
This commit is contained in:
@@ -6,6 +6,7 @@ import { ComponentAttrs } from 'flarum/common/Component';
|
||||
import Installer from './Installer';
|
||||
import Updater from './Updater';
|
||||
import Mithril from 'mithril';
|
||||
import Form from 'flarum/common/components/Form';
|
||||
|
||||
export default class ControlSection extends Component<ComponentAttrs> {
|
||||
oninit(vnode: Mithril.Vnode<ComponentAttrs, this>) {
|
||||
@@ -22,10 +23,10 @@ export default class ControlSection extends Component<ComponentAttrs> {
|
||||
</div>
|
||||
<div className="container">
|
||||
{app.data['flarum-package-manager.writable_dirs'] ? (
|
||||
<>
|
||||
<Form>
|
||||
<Installer />
|
||||
<Updater />
|
||||
</>
|
||||
</Form>
|
||||
) : (
|
||||
<div className="Form-group">
|
||||
<Alert type="warning" dismissible={false}>
|
||||
|
@@ -13,6 +13,7 @@ import WhyNotModal from './WhyNotModal';
|
||||
import ExtensionItem from './ExtensionItem';
|
||||
import { AsyncBackendResponse } from '../shims';
|
||||
import jumpToQueue from '../utils/jumpToQueue';
|
||||
import classList from 'flarum/common/utils/classList';
|
||||
|
||||
export interface MajorUpdaterAttrs extends ComponentAttrs {
|
||||
coreUpdate: UpdatedPackage;
|
||||
@@ -33,7 +34,12 @@ export default class MajorUpdater<T extends MajorUpdaterAttrs = MajorUpdaterAttr
|
||||
view(): Mithril.Children {
|
||||
// @todo move Form-group--danger class to core for reuse
|
||||
return (
|
||||
<div className="Form-group Form-group--danger PackageManager-majorUpdate">
|
||||
<div
|
||||
className={classList('Form-group Form-group--danger PackageManager-majorUpdate', {
|
||||
'PackageManager-majorUpdate--failed': this.updateState.status === 'failure',
|
||||
'PackageManager-majorUpdate--incompatibleExtensions': this.updateState.incompatibleExtensions.length,
|
||||
})}
|
||||
>
|
||||
<img alt="flarum logo" src={app.forum.attribute('baseUrl') + '/assets/extensions/flarum-package-manager/flarum.svg'} />
|
||||
<label>{app.translator.trans('flarum-package-manager.admin.major_updater.title', { version: this.attrs.coreUpdate['latest-major'] })}</label>
|
||||
<p className="helpText">{app.translator.trans('flarum-package-manager.admin.major_updater.description')}</p>
|
||||
|
@@ -56,12 +56,12 @@ export default class Updater extends Component<IUpdaterAttrs> {
|
||||
);
|
||||
}
|
||||
|
||||
if (!(state.extensionUpdates.length || state.coreUpdate)) {
|
||||
const hasMinorCoreUpdate = state.coreUpdate && state.coreUpdate.package['latest-minor'];
|
||||
|
||||
if (!(state.extensionUpdates.length || hasMinorCoreUpdate)) {
|
||||
return (
|
||||
<div className="PackageManager-extensions">
|
||||
<Alert type="success" dismissible={false}>
|
||||
{app.translator.trans('flarum-package-manager.admin.updater.up_to_date')}
|
||||
</Alert>
|
||||
<span className="helpText">{app.translator.trans('flarum-package-manager.admin.updater.up_to_date')}</span>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -69,10 +69,10 @@ export default class Updater extends Component<IUpdaterAttrs> {
|
||||
return (
|
||||
<div className="PackageManager-extensions">
|
||||
<div className="PackageManager-extensions-grid">
|
||||
{state.coreUpdate ? (
|
||||
{hasMinorCoreUpdate ? (
|
||||
<ExtensionItem
|
||||
extension={state.coreUpdate.extension}
|
||||
updates={state.coreUpdate.package}
|
||||
extension={state.coreUpdate!.extension}
|
||||
updates={state.coreUpdate!.package}
|
||||
isCore={true}
|
||||
onClickUpdate={() => state.updateCoreMinor()}
|
||||
whyNotWarning={state.lastUpdateRun.limitedPackages().includes('flarum/core')}
|
||||
|
@@ -15,10 +15,12 @@
|
||||
}
|
||||
|
||||
.PackageManager-extensions {
|
||||
width: 100%;
|
||||
|
||||
&-grid {
|
||||
--gap: 12px;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, calc(~"100% / 3 - var(--gap)"));
|
||||
grid-template-columns: repeat(auto-fit, 310px);
|
||||
gap: var(--gap);
|
||||
}
|
||||
}
|
||||
@@ -86,12 +88,35 @@
|
||||
grid-template-areas:
|
||||
"title logo"
|
||||
"helpText logo"
|
||||
"controls logo"
|
||||
"extensions extensions"
|
||||
"failure failure";
|
||||
grid-gap: 0 var(--space);
|
||||
"controls logo";
|
||||
column-gap: 0 var(--space);
|
||||
align-items: center;
|
||||
|
||||
&--failed&--incompatibleExtensions {
|
||||
grid-template-areas:
|
||||
"title logo"
|
||||
"helpText logo"
|
||||
"controls logo"
|
||||
"extensions extensions"
|
||||
"failure failure";
|
||||
}
|
||||
|
||||
&--failed {
|
||||
grid-template-areas:
|
||||
"title logo"
|
||||
"helpText logo"
|
||||
"controls logo"
|
||||
"failure failure";
|
||||
}
|
||||
|
||||
&--incompatibleExtensions {
|
||||
grid-template-areas:
|
||||
"title logo"
|
||||
"helpText logo"
|
||||
"controls logo"
|
||||
"extensions extensions";
|
||||
}
|
||||
|
||||
> img {
|
||||
grid-area: logo;
|
||||
}
|
||||
@@ -116,6 +141,10 @@
|
||||
padding-top: var(--space);
|
||||
border-top: 1px solid var(--control-bg);
|
||||
}
|
||||
|
||||
.PackageManager-updaterControls {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.WhyNotModal {
|
||||
@@ -131,3 +160,7 @@
|
||||
width: 300px;
|
||||
}
|
||||
}
|
||||
|
||||
.PackageManager-controlSection .container {
|
||||
max-width: 900px;
|
||||
}
|
||||
|
@@ -25,7 +25,9 @@ flarum-package-manager:
|
||||
The package manager requires read and write permissions on the following files and directories: composer.json, composer.lock, vendor, storage, storage/.composer
|
||||
|
||||
major_updater:
|
||||
description: Major Flarum updates are not backwards compatible, meaning that some of your currently installed extensions, and manually made modifications might not work with this new version.
|
||||
description: >
|
||||
Major Flarum updates are not backwards compatible, meaning that some of your currently installed extensions, and manually made modifications might not work with this new version.
|
||||
Please make sure to make a backup of your database and files before proceeding.
|
||||
dry_run: Dry Run
|
||||
dry_run_help: A dry run emulates the update to see if your current setup can safely update, this does not mean that your manual made custom modifications will work in the newer version.
|
||||
failure:
|
||||
|
@@ -13,7 +13,7 @@ use Flarum\Api\Controller\AbstractListController;
|
||||
use Flarum\Http\RequestUtil;
|
||||
use Flarum\Http\UrlGenerator;
|
||||
use Flarum\PackageManager\Api\Serializer\TaskSerializer;
|
||||
use Flarum\PackageManager\Task\TaskRepository;
|
||||
use Flarum\PackageManager\Task\Task;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use Tobscure\JsonApi\Document;
|
||||
|
||||
@@ -23,7 +23,6 @@ class ListTasksController extends AbstractListController
|
||||
|
||||
public function __construct(
|
||||
protected UrlGenerator $url,
|
||||
protected TaskRepository $repository
|
||||
) {
|
||||
}
|
||||
|
||||
@@ -36,14 +35,13 @@ class ListTasksController extends AbstractListController
|
||||
$limit = $this->extractLimit($request);
|
||||
$offset = $this->extractOffset($request);
|
||||
|
||||
$results = $this->repository
|
||||
->query()
|
||||
$results = Task::query()
|
||||
->latest()
|
||||
->offset($offset)
|
||||
->limit($limit)
|
||||
->get();
|
||||
|
||||
$total = $this->repository->query()->count();
|
||||
$total = Task::query()->count();
|
||||
|
||||
$document->addMeta('total', (string) $total);
|
||||
|
||||
|
@@ -9,6 +9,7 @@
|
||||
|
||||
namespace Flarum\PackageManager\Command;
|
||||
|
||||
use Flarum\PackageManager\Task\Operation;
|
||||
use Flarum\PackageManager\Task\Task;
|
||||
|
||||
abstract class AbstractActionCommand
|
||||
@@ -16,5 +17,5 @@ abstract class AbstractActionCommand
|
||||
public ?Task $task = null;
|
||||
public ?string $package = null;
|
||||
|
||||
abstract public function getOperationName(): string;
|
||||
abstract public function getOperationName(): Operation;
|
||||
}
|
||||
|
@@ -9,7 +9,7 @@
|
||||
|
||||
namespace Flarum\PackageManager\Command;
|
||||
|
||||
use Flarum\PackageManager\Task\Task;
|
||||
use Flarum\PackageManager\Task\Operation;
|
||||
use Flarum\User\User;
|
||||
|
||||
class CheckForUpdates extends AbstractActionCommand
|
||||
@@ -19,8 +19,8 @@ class CheckForUpdates extends AbstractActionCommand
|
||||
) {
|
||||
}
|
||||
|
||||
public function getOperationName(): string
|
||||
public function getOperationName(): Operation
|
||||
{
|
||||
return Task::UPDATE_CHECK;
|
||||
return Operation::UPDATE_CHECK;
|
||||
}
|
||||
}
|
||||
|
@@ -9,7 +9,7 @@
|
||||
|
||||
namespace Flarum\PackageManager\Command;
|
||||
|
||||
use Flarum\PackageManager\Task\Task;
|
||||
use Flarum\PackageManager\Task\Operation;
|
||||
use Flarum\User\User;
|
||||
|
||||
class GlobalUpdate extends AbstractActionCommand
|
||||
@@ -19,8 +19,8 @@ class GlobalUpdate extends AbstractActionCommand
|
||||
) {
|
||||
}
|
||||
|
||||
public function getOperationName(): string
|
||||
public function getOperationName(): Operation
|
||||
{
|
||||
return Task::UPDATE_GLOBAL;
|
||||
return Operation::UPDATE_GLOBAL;
|
||||
}
|
||||
}
|
||||
|
@@ -9,7 +9,7 @@
|
||||
|
||||
namespace Flarum\PackageManager\Command;
|
||||
|
||||
use Flarum\PackageManager\Task\Task;
|
||||
use Flarum\PackageManager\Task\Operation;
|
||||
use Flarum\User\User;
|
||||
|
||||
class MajorUpdate extends AbstractActionCommand
|
||||
@@ -20,8 +20,8 @@ class MajorUpdate extends AbstractActionCommand
|
||||
) {
|
||||
}
|
||||
|
||||
public function getOperationName(): string
|
||||
public function getOperationName(): Operation
|
||||
{
|
||||
return Task::UPDATE_MAJOR;
|
||||
return Operation::UPDATE_MAJOR;
|
||||
}
|
||||
}
|
||||
|
@@ -9,7 +9,7 @@
|
||||
|
||||
namespace Flarum\PackageManager\Command;
|
||||
|
||||
use Flarum\PackageManager\Task\Task;
|
||||
use Flarum\PackageManager\Task\Operation;
|
||||
use Flarum\User\User;
|
||||
|
||||
class MinorUpdate extends AbstractActionCommand
|
||||
@@ -19,8 +19,8 @@ class MinorUpdate extends AbstractActionCommand
|
||||
) {
|
||||
}
|
||||
|
||||
public function getOperationName(): string
|
||||
public function getOperationName(): Operation
|
||||
{
|
||||
return Task::UPDATE_MINOR;
|
||||
return Operation::UPDATE_MINOR;
|
||||
}
|
||||
}
|
||||
|
@@ -9,7 +9,7 @@
|
||||
|
||||
namespace Flarum\PackageManager\Command;
|
||||
|
||||
use Flarum\PackageManager\Task\Task;
|
||||
use Flarum\PackageManager\Task\Operation;
|
||||
use Flarum\User\User;
|
||||
|
||||
class RemoveExtension extends AbstractActionCommand
|
||||
@@ -20,8 +20,8 @@ class RemoveExtension extends AbstractActionCommand
|
||||
) {
|
||||
}
|
||||
|
||||
public function getOperationName(): string
|
||||
public function getOperationName(): Operation
|
||||
{
|
||||
return Task::EXTENSION_REMOVE;
|
||||
return Operation::EXTENSION_REMOVE;
|
||||
}
|
||||
}
|
||||
|
@@ -9,7 +9,7 @@
|
||||
|
||||
namespace Flarum\PackageManager\Command;
|
||||
|
||||
use Flarum\PackageManager\Task\Task;
|
||||
use Flarum\PackageManager\Task\Operation;
|
||||
use Flarum\User\User;
|
||||
|
||||
class RequireExtension extends AbstractActionCommand
|
||||
@@ -20,8 +20,8 @@ class RequireExtension extends AbstractActionCommand
|
||||
) {
|
||||
}
|
||||
|
||||
public function getOperationName(): string
|
||||
public function getOperationName(): Operation
|
||||
{
|
||||
return Task::EXTENSION_INSTALL;
|
||||
return Operation::EXTENSION_INSTALL;
|
||||
}
|
||||
}
|
||||
|
@@ -9,7 +9,7 @@
|
||||
|
||||
namespace Flarum\PackageManager\Command;
|
||||
|
||||
use Flarum\PackageManager\Task\Task;
|
||||
use Flarum\PackageManager\Task\Operation;
|
||||
use Flarum\User\User;
|
||||
|
||||
class UpdateExtension extends AbstractActionCommand
|
||||
@@ -20,8 +20,8 @@ class UpdateExtension extends AbstractActionCommand
|
||||
) {
|
||||
}
|
||||
|
||||
public function getOperationName(): string
|
||||
public function getOperationName(): Operation
|
||||
{
|
||||
return Task::EXTENSION_UPDATE;
|
||||
return Operation::EXTENSION_UPDATE;
|
||||
}
|
||||
}
|
||||
|
@@ -9,7 +9,7 @@
|
||||
|
||||
namespace Flarum\PackageManager\Command;
|
||||
|
||||
use Flarum\PackageManager\Task\Task;
|
||||
use Flarum\PackageManager\Task\Operation;
|
||||
use Flarum\User\User;
|
||||
|
||||
class WhyNot extends AbstractActionCommand
|
||||
@@ -21,8 +21,8 @@ class WhyNot extends AbstractActionCommand
|
||||
) {
|
||||
}
|
||||
|
||||
public function getOperationName(): string
|
||||
public function getOperationName(): Operation
|
||||
{
|
||||
return Task::WHY_NOT;
|
||||
return Operation::WHY_NOT;
|
||||
}
|
||||
}
|
||||
|
@@ -23,7 +23,7 @@ class Dispatcher
|
||||
* Runs synchronously regardless of user setting if set true.
|
||||
* Asynchronously if set false.
|
||||
*/
|
||||
protected ?bool $runSyncOverride;
|
||||
protected ?bool $runSyncOverride = null;
|
||||
|
||||
public function __construct(
|
||||
protected Bus $bus,
|
||||
|
15
extensions/package-manager/src/Task/Operation.php
Normal file
15
extensions/package-manager/src/Task/Operation.php
Normal file
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace Flarum\PackageManager\Task;
|
||||
|
||||
enum Operation: string
|
||||
{
|
||||
case EXTENSION_INSTALL = 'extension_install';
|
||||
case EXTENSION_REMOVE = 'extension_remove';
|
||||
case EXTENSION_UPDATE = 'extension_update';
|
||||
case UPDATE_GLOBAL = 'update_global';
|
||||
case UPDATE_MINOR = 'update_minor';
|
||||
case UPDATE_MAJOR = 'update_major';
|
||||
case UPDATE_CHECK = 'update_check';
|
||||
case WHY_NOT = 'why_not';
|
||||
}
|
11
extensions/package-manager/src/Task/Status.php
Normal file
11
extensions/package-manager/src/Task/Status.php
Normal file
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace Flarum\PackageManager\Task;
|
||||
|
||||
enum Status: string
|
||||
{
|
||||
case PENDING = 'pending';
|
||||
case RUNNING = 'running';
|
||||
case FAILURE = 'failure';
|
||||
case SUCCESS = 'success';
|
||||
}
|
@@ -14,8 +14,8 @@ use Flarum\Database\AbstractModel;
|
||||
|
||||
/**
|
||||
* @property int $id
|
||||
* @property int $status
|
||||
* @property string $operation
|
||||
* @property Status $status
|
||||
* @property Operation $operation
|
||||
* @property string $command
|
||||
* @property string $package
|
||||
* @property string $output
|
||||
@@ -26,26 +26,6 @@ use Flarum\Database\AbstractModel;
|
||||
*/
|
||||
class Task extends AbstractModel
|
||||
{
|
||||
/**
|
||||
* Statuses (@todo use an enum with php8.1).
|
||||
*/
|
||||
public const PENDING = 'pending';
|
||||
public const RUNNING = 'running';
|
||||
public const FAILURE = 'failure';
|
||||
public const SUCCESS = 'success';
|
||||
|
||||
/**
|
||||
* Operations (@todo use an enum with php8.1).
|
||||
*/
|
||||
public const EXTENSION_INSTALL = 'extension_install';
|
||||
public const EXTENSION_REMOVE = 'extension_remove';
|
||||
public const EXTENSION_UPDATE = 'extension_update';
|
||||
public const UPDATE_GLOBAL = 'update_global';
|
||||
public const UPDATE_MINOR = 'update_minor';
|
||||
public const UPDATE_MAJOR = 'update_major';
|
||||
public const UPDATE_CHECK = 'update_check';
|
||||
public const WHY_NOT = 'why_not';
|
||||
|
||||
public const UPDATED_AT = null;
|
||||
|
||||
protected $table = 'package_manager_tasks';
|
||||
@@ -58,15 +38,17 @@ class Task extends AbstractModel
|
||||
self::CREATED_AT => 'datetime',
|
||||
'started_at' => 'datetime',
|
||||
'finished_at' => 'datetime',
|
||||
'status' => Status::class,
|
||||
'operation' => Operation::class,
|
||||
];
|
||||
|
||||
public static function build(string $operation, ?string $package): self
|
||||
public static function build(Operation $operation, ?string $package): self
|
||||
{
|
||||
$task = new static;
|
||||
|
||||
$task->operation = $operation;
|
||||
$task->package = $package;
|
||||
$task->status = static::PENDING;
|
||||
$task->status = Status::PENDING;
|
||||
$task->created_at = Carbon::now();
|
||||
|
||||
$task->save();
|
||||
@@ -76,7 +58,7 @@ class Task extends AbstractModel
|
||||
|
||||
public function start(): bool
|
||||
{
|
||||
$this->status = static::RUNNING;
|
||||
$this->status = Status::RUNNING;
|
||||
$this->started_at = Carbon::now();
|
||||
|
||||
return $this->save();
|
||||
@@ -84,7 +66,7 @@ class Task extends AbstractModel
|
||||
|
||||
public function end(bool $success): bool
|
||||
{
|
||||
$this->status = $success ? static::SUCCESS : static::FAILURE;
|
||||
$this->status = $success ? Status::SUCCESS : Status::FAILURE;
|
||||
$this->finished_at = Carbon::now();
|
||||
$this->peak_memory_used = round(memory_get_peak_usage() / 1024);
|
||||
|
||||
|
@@ -1,29 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Flarum.
|
||||
*
|
||||
* For detailed copyright and license information, please view the
|
||||
* LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Flarum\PackageManager\Task;
|
||||
|
||||
use Flarum\User\User;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
|
||||
class TaskRepository
|
||||
{
|
||||
/**
|
||||
* @return Builder
|
||||
*/
|
||||
public function query(): Builder
|
||||
{
|
||||
return Task::query();
|
||||
}
|
||||
|
||||
public function findOrFail(int $id, ?User $actor = null): Task
|
||||
{
|
||||
return Task::findOrFail($id);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user