diff --git a/app/Http/Controllers/PlayerController.php b/app/Http/Controllers/PlayerController.php index 00a4f830..41f28cfe 100644 --- a/app/Http/Controllers/PlayerController.php +++ b/app/Http/Controllers/PlayerController.php @@ -132,7 +132,7 @@ class PlayerController extends Controller $dispatcher->dispatch('player.renaming', [$player, $newName]); - $can = $filter->apply('can_rename_player', [$player, $newName]); + $can = $filter->apply('user_can_rename_player', true, [$player, $newName]); if ($can instanceof Rejection) { return json($can->getReason(), 1); } diff --git a/app/Services/Filter.php b/app/Services/Filter.php index 8867f893..cc60c5e1 100644 --- a/app/Services/Filter.php +++ b/app/Services/Filter.php @@ -22,21 +22,17 @@ class Filter ]); } - public function apply(string $hook, array $payload) + public function apply(string $hook, $init, $args = []) { $listeners = $this->getListeners($hook); if ($listeners->isNotEmpty()) { - $value = $payload[0]; - unset($payload[0]); - $args = array_values($payload); - return $this->listeners[$hook] ->sortByDesc('priority') ->reduce(function ($carry, $item) use ($args) { return call_user_func($item['callback'], $carry, ...$args); - }, $value); + }, $init); } else { - return $payload[0]; + return $init; } } diff --git a/tests/PlayerControllerTest.php b/tests/PlayerControllerTest.php index 5705c63f..8dbe6180 100644 --- a/tests/PlayerControllerTest.php +++ b/tests/PlayerControllerTest.php @@ -192,7 +192,7 @@ class PlayerControllerTest extends TestCase // Rejected by filter $filter = resolve(Filter::class); $pid = $player->pid; - $filter->add('can_rename_player', function ($player, $newName) { + $filter->add('user_can_rename_player', function ($can, $player, $newName) { $this->assertEquals('new', $newName); return new Rejection('rejected'); }); @@ -202,7 +202,7 @@ class PlayerControllerTest extends TestCase 'code' => 1, 'message' => 'rejected', ]); - $filter->remove('can_rename_player'); + $filter->remove('user_can_rename_player'); // Success Event::fake(); diff --git a/tests/ServicesTest/FilterTest.php b/tests/ServicesTest/FilterTest.php index 25122a02..1a6335ee 100644 --- a/tests/ServicesTest/FilterTest.php +++ b/tests/ServicesTest/FilterTest.php @@ -17,7 +17,7 @@ class FilterTest extends TestCase public function testApply() { $filter = new Filter(); - $this->assertEquals('value', $filter->apply('hook', ['value', 'add'])); + $this->assertEquals('value', $filter->apply('hook', 'value', ['add'])); $filter->add('hook', function ($value, $addition) { $this->assertEquals('add', $addition); @@ -29,7 +29,7 @@ class FilterTest extends TestCase $filter->add('hook', function ($value) { return $value.'_high'; }, 30); - $this->assertEquals('value_high_medium_low', $filter->apply('hook', ['value', 'add'])); + $this->assertEquals('value_high_medium_low', $filter->apply('hook', 'value', ['add'])); } public function testRemove()