1
0
mirror of https://github.com/flarum/core.git synced 2025-08-06 16:36:47 +02:00

chore: light tweaks

This commit is contained in:
Sami Mazouz
2023-12-07 14:23:38 +01:00
parent b4a82e81fc
commit e3553e231d
20 changed files with 122 additions and 102 deletions

View File

@@ -6,6 +6,7 @@ import { ComponentAttrs } from 'flarum/common/Component';
import Installer from './Installer'; import Installer from './Installer';
import Updater from './Updater'; import Updater from './Updater';
import Mithril from 'mithril'; import Mithril from 'mithril';
import Form from 'flarum/common/components/Form';
export default class ControlSection extends Component<ComponentAttrs> { export default class ControlSection extends Component<ComponentAttrs> {
oninit(vnode: Mithril.Vnode<ComponentAttrs, this>) { oninit(vnode: Mithril.Vnode<ComponentAttrs, this>) {
@@ -22,10 +23,10 @@ export default class ControlSection extends Component<ComponentAttrs> {
</div> </div>
<div className="container"> <div className="container">
{app.data['flarum-package-manager.writable_dirs'] ? ( {app.data['flarum-package-manager.writable_dirs'] ? (
<> <Form>
<Installer /> <Installer />
<Updater /> <Updater />
</> </Form>
) : ( ) : (
<div className="Form-group"> <div className="Form-group">
<Alert type="warning" dismissible={false}> <Alert type="warning" dismissible={false}>

View File

@@ -13,6 +13,7 @@ import WhyNotModal from './WhyNotModal';
import ExtensionItem from './ExtensionItem'; import ExtensionItem from './ExtensionItem';
import { AsyncBackendResponse } from '../shims'; import { AsyncBackendResponse } from '../shims';
import jumpToQueue from '../utils/jumpToQueue'; import jumpToQueue from '../utils/jumpToQueue';
import classList from 'flarum/common/utils/classList';
export interface MajorUpdaterAttrs extends ComponentAttrs { export interface MajorUpdaterAttrs extends ComponentAttrs {
coreUpdate: UpdatedPackage; coreUpdate: UpdatedPackage;
@@ -33,7 +34,12 @@ export default class MajorUpdater<T extends MajorUpdaterAttrs = MajorUpdaterAttr
view(): Mithril.Children { view(): Mithril.Children {
// @todo move Form-group--danger class to core for reuse // @todo move Form-group--danger class to core for reuse
return ( 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'} /> <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> <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> <p className="helpText">{app.translator.trans('flarum-package-manager.admin.major_updater.description')}</p>

View File

@@ -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 ( return (
<div className="PackageManager-extensions"> <div className="PackageManager-extensions">
<Alert type="success" dismissible={false}> <span className="helpText">{app.translator.trans('flarum-package-manager.admin.updater.up_to_date')}</span>
{app.translator.trans('flarum-package-manager.admin.updater.up_to_date')}
</Alert>
</div> </div>
); );
} }
@@ -69,10 +69,10 @@ export default class Updater extends Component<IUpdaterAttrs> {
return ( return (
<div className="PackageManager-extensions"> <div className="PackageManager-extensions">
<div className="PackageManager-extensions-grid"> <div className="PackageManager-extensions-grid">
{state.coreUpdate ? ( {hasMinorCoreUpdate ? (
<ExtensionItem <ExtensionItem
extension={state.coreUpdate.extension} extension={state.coreUpdate!.extension}
updates={state.coreUpdate.package} updates={state.coreUpdate!.package}
isCore={true} isCore={true}
onClickUpdate={() => state.updateCoreMinor()} onClickUpdate={() => state.updateCoreMinor()}
whyNotWarning={state.lastUpdateRun.limitedPackages().includes('flarum/core')} whyNotWarning={state.lastUpdateRun.limitedPackages().includes('flarum/core')}

View File

@@ -15,10 +15,12 @@
} }
.PackageManager-extensions { .PackageManager-extensions {
width: 100%;
&-grid { &-grid {
--gap: 12px; --gap: 12px;
display: grid; display: grid;
grid-template-columns: repeat(auto-fit, calc(~"100% / 3 - var(--gap)")); grid-template-columns: repeat(auto-fit, 310px);
gap: var(--gap); gap: var(--gap);
} }
} }
@@ -83,14 +85,37 @@
--space: 16px; --space: 16px;
padding: var(--space); padding: var(--space);
display: grid; display: grid;
grid-template-areas:
"title logo"
"helpText logo"
"controls logo";
column-gap: 0 var(--space);
align-items: center;
&--failed&--incompatibleExtensions {
grid-template-areas: grid-template-areas:
"title logo" "title logo"
"helpText logo" "helpText logo"
"controls logo" "controls logo"
"extensions extensions" "extensions extensions"
"failure failure"; "failure failure";
grid-gap: 0 var(--space); }
align-items: center;
&--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 { > img {
grid-area: logo; grid-area: logo;
@@ -116,6 +141,10 @@
padding-top: var(--space); padding-top: var(--space);
border-top: 1px solid var(--control-bg); border-top: 1px solid var(--control-bg);
} }
.PackageManager-updaterControls {
margin: 0;
}
} }
.WhyNotModal { .WhyNotModal {
@@ -131,3 +160,7 @@
width: 300px; width: 300px;
} }
} }
.PackageManager-controlSection .container {
max-width: 900px;
}

View File

@@ -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 The package manager requires read and write permissions on the following files and directories: composer.json, composer.lock, vendor, storage, storage/.composer
major_updater: 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: 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. 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: failure:

View File

@@ -13,7 +13,7 @@ use Flarum\Api\Controller\AbstractListController;
use Flarum\Http\RequestUtil; use Flarum\Http\RequestUtil;
use Flarum\Http\UrlGenerator; use Flarum\Http\UrlGenerator;
use Flarum\PackageManager\Api\Serializer\TaskSerializer; use Flarum\PackageManager\Api\Serializer\TaskSerializer;
use Flarum\PackageManager\Task\TaskRepository; use Flarum\PackageManager\Task\Task;
use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Message\ServerRequestInterface;
use Tobscure\JsonApi\Document; use Tobscure\JsonApi\Document;
@@ -23,7 +23,6 @@ class ListTasksController extends AbstractListController
public function __construct( public function __construct(
protected UrlGenerator $url, protected UrlGenerator $url,
protected TaskRepository $repository
) { ) {
} }
@@ -36,14 +35,13 @@ class ListTasksController extends AbstractListController
$limit = $this->extractLimit($request); $limit = $this->extractLimit($request);
$offset = $this->extractOffset($request); $offset = $this->extractOffset($request);
$results = $this->repository $results = Task::query()
->query()
->latest() ->latest()
->offset($offset) ->offset($offset)
->limit($limit) ->limit($limit)
->get(); ->get();
$total = $this->repository->query()->count(); $total = Task::query()->count();
$document->addMeta('total', (string) $total); $document->addMeta('total', (string) $total);

View File

@@ -9,6 +9,7 @@
namespace Flarum\PackageManager\Command; namespace Flarum\PackageManager\Command;
use Flarum\PackageManager\Task\Operation;
use Flarum\PackageManager\Task\Task; use Flarum\PackageManager\Task\Task;
abstract class AbstractActionCommand abstract class AbstractActionCommand
@@ -16,5 +17,5 @@ abstract class AbstractActionCommand
public ?Task $task = null; public ?Task $task = null;
public ?string $package = null; public ?string $package = null;
abstract public function getOperationName(): string; abstract public function getOperationName(): Operation;
} }

View File

@@ -9,7 +9,7 @@
namespace Flarum\PackageManager\Command; namespace Flarum\PackageManager\Command;
use Flarum\PackageManager\Task\Task; use Flarum\PackageManager\Task\Operation;
use Flarum\User\User; use Flarum\User\User;
class CheckForUpdates extends AbstractActionCommand 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;
} }
} }

View File

@@ -9,7 +9,7 @@
namespace Flarum\PackageManager\Command; namespace Flarum\PackageManager\Command;
use Flarum\PackageManager\Task\Task; use Flarum\PackageManager\Task\Operation;
use Flarum\User\User; use Flarum\User\User;
class GlobalUpdate extends AbstractActionCommand 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;
} }
} }

View File

@@ -9,7 +9,7 @@
namespace Flarum\PackageManager\Command; namespace Flarum\PackageManager\Command;
use Flarum\PackageManager\Task\Task; use Flarum\PackageManager\Task\Operation;
use Flarum\User\User; use Flarum\User\User;
class MajorUpdate extends AbstractActionCommand 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;
} }
} }

View File

@@ -9,7 +9,7 @@
namespace Flarum\PackageManager\Command; namespace Flarum\PackageManager\Command;
use Flarum\PackageManager\Task\Task; use Flarum\PackageManager\Task\Operation;
use Flarum\User\User; use Flarum\User\User;
class MinorUpdate extends AbstractActionCommand 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;
} }
} }

View File

@@ -9,7 +9,7 @@
namespace Flarum\PackageManager\Command; namespace Flarum\PackageManager\Command;
use Flarum\PackageManager\Task\Task; use Flarum\PackageManager\Task\Operation;
use Flarum\User\User; use Flarum\User\User;
class RemoveExtension extends AbstractActionCommand 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;
} }
} }

View File

@@ -9,7 +9,7 @@
namespace Flarum\PackageManager\Command; namespace Flarum\PackageManager\Command;
use Flarum\PackageManager\Task\Task; use Flarum\PackageManager\Task\Operation;
use Flarum\User\User; use Flarum\User\User;
class RequireExtension extends AbstractActionCommand 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;
} }
} }

View File

@@ -9,7 +9,7 @@
namespace Flarum\PackageManager\Command; namespace Flarum\PackageManager\Command;
use Flarum\PackageManager\Task\Task; use Flarum\PackageManager\Task\Operation;
use Flarum\User\User; use Flarum\User\User;
class UpdateExtension extends AbstractActionCommand 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;
} }
} }

View File

@@ -9,7 +9,7 @@
namespace Flarum\PackageManager\Command; namespace Flarum\PackageManager\Command;
use Flarum\PackageManager\Task\Task; use Flarum\PackageManager\Task\Operation;
use Flarum\User\User; use Flarum\User\User;
class WhyNot extends AbstractActionCommand 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;
} }
} }

View File

@@ -23,7 +23,7 @@ class Dispatcher
* Runs synchronously regardless of user setting if set true. * Runs synchronously regardless of user setting if set true.
* Asynchronously if set false. * Asynchronously if set false.
*/ */
protected ?bool $runSyncOverride; protected ?bool $runSyncOverride = null;
public function __construct( public function __construct(
protected Bus $bus, protected Bus $bus,

View 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';
}

View 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';
}

View File

@@ -14,8 +14,8 @@ use Flarum\Database\AbstractModel;
/** /**
* @property int $id * @property int $id
* @property int $status * @property Status $status
* @property string $operation * @property Operation $operation
* @property string $command * @property string $command
* @property string $package * @property string $package
* @property string $output * @property string $output
@@ -26,26 +26,6 @@ use Flarum\Database\AbstractModel;
*/ */
class Task extends 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; public const UPDATED_AT = null;
protected $table = 'package_manager_tasks'; protected $table = 'package_manager_tasks';
@@ -58,15 +38,17 @@ class Task extends AbstractModel
self::CREATED_AT => 'datetime', self::CREATED_AT => 'datetime',
'started_at' => 'datetime', 'started_at' => 'datetime',
'finished_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 = new static;
$task->operation = $operation; $task->operation = $operation;
$task->package = $package; $task->package = $package;
$task->status = static::PENDING; $task->status = Status::PENDING;
$task->created_at = Carbon::now(); $task->created_at = Carbon::now();
$task->save(); $task->save();
@@ -76,7 +58,7 @@ class Task extends AbstractModel
public function start(): bool public function start(): bool
{ {
$this->status = static::RUNNING; $this->status = Status::RUNNING;
$this->started_at = Carbon::now(); $this->started_at = Carbon::now();
return $this->save(); return $this->save();
@@ -84,7 +66,7 @@ class Task extends AbstractModel
public function end(bool $success): bool 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->finished_at = Carbon::now();
$this->peak_memory_used = round(memory_get_peak_usage() / 1024); $this->peak_memory_used = round(memory_get_peak_usage() / 1024);

View File

@@ -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);
}
}