1
0
mirror of https://github.com/flarum/core.git synced 2025-08-09 09:57:06 +02:00
This commit is contained in:
Daniel Klabbers
2021-07-13 22:47:50 +02:00
committed by David Wheatley
parent 2dd9e17568
commit 06e5922be5
6 changed files with 109 additions and 1 deletions

View File

@@ -75,6 +75,15 @@ export default class AdminNav extends Component {
</LinkButton> </LinkButton>
); );
if (app.data.settings['advanced_settings_pane_enabled']) {
items.add(
'advanced',
<LinkButton href={app.route('advanced')} icon="fas fa-rocket" title={app.translator.trans('core.admin.nav.advanced_title')}>
{app.translator.trans('core.admin.nav.advanced_button')}
</LinkButton>
);
}
items.add( items.add(
'mail', 'mail',
<LinkButton href={app.route('mail')} icon="fas fa-envelope" title={app.translator.trans('core.admin.nav.email_title')}> <LinkButton href={app.route('mail')} icon="fas fa-envelope" title={app.translator.trans('core.admin.nav.email_title')}>

View File

@@ -0,0 +1,41 @@
import FieldSet from '../../common/components/FieldSet';
import ItemList from '../../common/utils/ItemList';
import AdminPage from './AdminPage';
export default class AdvancedPage extends AdminPage {
oninit(vnode) {
super.oninit(vnode);
this.queueOptions = [];
}
headerInfo() {
return {
className: 'AdvancedPage',
icon: 'fas fa-rocket',
title: app.translator.trans('core.admin.advanced.title'),
description: app.translator.trans('core.admin.advanced.description'),
};
}
content() {
return [
<div className="Form">
{Object.keys(this.queueOptions).length > 1
? [
this.buildSettingComponent({
type: 'select',
setting: 'default_locale',
options: this.localeOptions,
label: app.translator.trans('core.admin.advanced.queue_driver_heading'),
})
]
: ''}
{this.submitButton()}
</div>,
];
}
}

View File

@@ -1,4 +1,5 @@
import DashboardPage from './components/DashboardPage'; import DashboardPage from './components/DashboardPage';
import AdvancedPage from './components/AdvancedPage';
import BasicsPage from './components/BasicsPage'; import BasicsPage from './components/BasicsPage';
import PermissionsPage from './components/PermissionsPage'; import PermissionsPage from './components/PermissionsPage';
import AppearancePage from './components/AppearancePage'; import AppearancePage from './components/AppearancePage';
@@ -16,6 +17,7 @@ export default function (app) {
app.routes = { app.routes = {
dashboard: { path: '/', component: DashboardPage }, dashboard: { path: '/', component: DashboardPage },
basics: { path: '/basics', component: BasicsPage }, basics: { path: '/basics', component: BasicsPage },
advanced: { path: '/advanced', component: AdvancedPage },
permissions: { path: '/permissions', component: PermissionsPage }, permissions: { path: '/permissions', component: PermissionsPage },
appearance: { path: '/appearance', component: AppearancePage }, appearance: { path: '/appearance', component: AppearancePage },
mail: { path: '/mail', component: MailPage }, mail: { path: '/mail', component: MailPage },

View File

@@ -112,7 +112,7 @@ class ApiServiceProvider extends AbstractServiceProvider
HttpMiddleware\AuthenticateWithSession::class, HttpMiddleware\AuthenticateWithSession::class,
HttpMiddleware\AuthenticateWithHeader::class, HttpMiddleware\AuthenticateWithHeader::class,
HttpMiddleware\CheckCsrfToken::class, HttpMiddleware\CheckCsrfToken::class,
HttpMiddleware\RememberFromCookie::class, // HttpMiddleware\RememberFromCookie::class,
]; ];
}); });

View File

@@ -131,6 +131,7 @@ class InstalledSite implements SiteInterface
$laravel->register(NotificationServiceProvider::class); $laravel->register(NotificationServiceProvider::class);
$laravel->register(PostServiceProvider::class); $laravel->register(PostServiceProvider::class);
$laravel->register(QueueServiceProvider::class); $laravel->register(QueueServiceProvider::class);
$laravel->register(ScalabilityServiceProvider::class);
$laravel->register(SearchServiceProvider::class); $laravel->register(SearchServiceProvider::class);
$laravel->register(SessionServiceProvider::class); $laravel->register(SessionServiceProvider::class);
$laravel->register(SettingsServiceProvider::class); $laravel->register(SettingsServiceProvider::class);

View File

@@ -0,0 +1,55 @@
<?php
namespace Flarum\Foundation;
use Flarum\Settings\Event\Deserializing;
use Flarum\Settings\SettingsRepositoryInterface;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Contracts\Events\Dispatcher;
use Illuminate\Contracts\Queue\Queue;
use Illuminate\Queue\Events\JobProcessing;
use Illuminate\Queue\SyncQueue;
class ScalabilityServiceProvider extends AbstractServiceProvider
{
public function boot(Dispatcher $events, Queue $queue)
{
if ($queue instanceof SyncQueue) {
$events->listen(JobProcessing::class, [$this, 'trackQueueLoad']);
}
$events->listen(Deserializing::class, [$this, 'recommendations']);
}
public function trackQueueLoad(JobProcessing $event)
{
/** @var Repository $cache */
$cache = resolve('cache.store');
// Retrieve existing queue load.
$count = (int) $cache->get('flarum.scalability.queue-load', 0);
$count++;
// Store the queue load, but only for one minute.
$cache->set('flarum.scalability.queue-load', $count, 60);
// If within that minute 10 queue tasks were fired, we need to suggest an alternative driver.
if ($count > 10) {
/** @var SettingsRepositoryInterface $settings */
$settings = resolve(SettingsRepositoryInterface::class);
$settings->set('flarum.scalability.queue-recommended', true);
}
}
public function recommendations(Deserializing $event)
{
/** @var Config $config */
$config = resolve(Config::class);
// Toggles the advanced pane for admins.
$event->settings['advanced_settings_pane_enabled'] = $event->settings['flarum.scalability.queue-recommended']
?? $config->offsetGet('advanced-settings')
?? false;
}
}