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