diff --git a/js/src/admin/components/StatusWidget.js b/js/src/admin/components/StatusWidget.js index 508f52850..a3bad9ece 100644 --- a/js/src/admin/components/StatusWidget.js +++ b/js/src/admin/components/StatusWidget.js @@ -8,9 +8,11 @@ */ import DashboardWidget from './DashboardWidget'; -import icon from '../../common/helpers/icon'; import listItems from '../../common/helpers/listItems'; import ItemList from '../../common/utils/ItemList'; +import Dropdown from '../../common/components/Dropdown'; +import Button from '../../common/components/Button'; +import LoadingModal from './LoadingModal'; export default class StatusWidget extends DashboardWidget { className() { @@ -26,10 +28,16 @@ export default class StatusWidget extends DashboardWidget { items() { const items = new ItemList(); - items.add('help', ( - - {icon('fas fa-question-circle')} {app.translator.trans('core.admin.dashboard.help_link')} - + items.add('tools', ( + + + )); items.add('version-flarum', [Flarum,
, app.forum.attribute('version')]); @@ -38,4 +46,13 @@ export default class StatusWidget extends DashboardWidget { return items; } + + handleClearCache(e) { + app.modal.show(new LoadingModal()); + + app.request({ + method: 'DELETE', + url: app.forum.attribute('apiUrl') + '/cache' + }).then(() => window.location.reload()); + } } diff --git a/less/admin/DashboardPage.less b/less/admin/DashboardPage.less index 0ec7f6534..b5cc811e3 100644 --- a/less/admin/DashboardPage.less +++ b/less/admin/DashboardPage.less @@ -38,7 +38,7 @@ overflow: hidden; text-overflow: ellipsis; } - &.item-help { + &.item-tools { float: right; margin-right: 0; } diff --git a/src/Api/Controller/ClearCacheController.php b/src/Api/Controller/ClearCacheController.php new file mode 100644 index 000000000..606a2dfa9 --- /dev/null +++ b/src/Api/Controller/ClearCacheController.php @@ -0,0 +1,56 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Flarum\Api\Controller; + +use Flarum\Foundation\Application; +use Flarum\Foundation\Console\CacheClearCommand; +use Flarum\Settings\SettingsRepositoryInterface; +use Flarum\User\AssertPermissionTrait; +use League\Flysystem\Adapter\Local; +use League\Flysystem\Filesystem; +use Psr\Http\Message\ServerRequestInterface; +use Symfony\Component\Console\Input\ArrayInput; +use Symfony\Component\Console\Output\NullOutput; +use Zend\Diactoros\Response\EmptyResponse; + +class ClearCacheController extends AbstractDeleteController +{ + use AssertPermissionTrait; + + /** + * @var CacheClearCommand + */ + protected $command; + + /** + * @param CacheClearCommand $command + */ + public function __construct(CacheClearCommand $command) + { + $this->command = $command; + } + + /** + * {@inheritdoc} + */ + protected function delete(ServerRequestInterface $request) + { + $this->assertAdmin($request->getAttribute('actor')); + + $this->command->run( + new ArrayInput([]), + new NullOutput() + ); + + return new EmptyResponse(204); + } +} diff --git a/src/Api/routes.php b/src/Api/routes.php index 8e3ccd2f3..96dae18ae 100644 --- a/src/Api/routes.php +++ b/src/Api/routes.php @@ -301,4 +301,11 @@ return function (RouteCollection $map, RouteHandlerFactory $route) { 'favicon.delete', $route->toController(Controller\DeleteFaviconController::class) ); + + // Clear the cache + $map->delete( + '/cache', + 'cache.clear', + $route->toController(Controller\ClearCacheController::class) + ); };