From 8fdd34c245bf450de6ad9db7196e879cba53bd9d Mon Sep 17 00:00:00 2001 From: Matias Griese Date: Fri, 30 Nov 2018 23:04:34 +0200 Subject: [PATCH] Added support for `task:action` (like task but works without nonce) --- CHANGELOG.md | 1 + system/src/Grav/Common/Processors/TasksProcessor.php | 7 +++++-- system/src/Grav/Common/Service/TaskServiceProvider.php | 9 +++++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a1b03494c..9eaf71d12 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ * Added `orderBy()` and `limit()` methods to `ObjectCollectionInterface` and its base classes * Flex: Added support for custom object index classes (API compatibility break) * Added `user-data://` which is a writable stream (`user://data` is not and should be avoided) + * Added support for `task:action` (like task but works without nonce) 1. [](#improved) * Improve Flex storage 1. [](#bugfix) diff --git a/system/src/Grav/Common/Processors/TasksProcessor.php b/system/src/Grav/Common/Processors/TasksProcessor.php index 7b5adddc1..0bcf29b36 100644 --- a/system/src/Grav/Common/Processors/TasksProcessor.php +++ b/system/src/Grav/Common/Processors/TasksProcessor.php @@ -24,7 +24,8 @@ class TasksProcessor extends ProcessorBase $this->startTimer(); $task = $this->container['task']; - if ($task) { + $action = $this->container['action']; + if ($task || $action) { $attributes = $request->getAttribute('controller'); $controllerClass = $attributes['class'] ?? null; @@ -38,7 +39,9 @@ class TasksProcessor extends ProcessorBase } } - $this->container->fireEvent('onTask.' . $task); + if ($task) { + $this->container->fireEvent('onTask.' . $task); + } } $this->stopTimer(); diff --git a/system/src/Grav/Common/Service/TaskServiceProvider.php b/system/src/Grav/Common/Service/TaskServiceProvider.php index d42661fa9..a714efb0a 100644 --- a/system/src/Grav/Common/Service/TaskServiceProvider.php +++ b/system/src/Grav/Common/Service/TaskServiceProvider.php @@ -24,5 +24,14 @@ class TaskServiceProvider implements ServiceProviderInterface return $task ?: null; }; + + $container['action'] = function (Grav $c) { + $action = $_POST['action'] ?? $c['uri']->param('action'); + if (null !== $action) { + $action = filter_var($action, FILTER_SANITIZE_STRING); + } + + return $action ?: null; + }; } }