From 883d60b9c73002c474294d9a024f8a2e1ab1f575 Mon Sep 17 00:00:00 2001 From: Lupacescu Eduard Date: Thu, 25 Nov 2021 14:50:10 +0200 Subject: [PATCH 1/4] fix: Fixing query matches. (#439) --- config/config.php | 7 +++++++ src/Filters/MatchesCollection.php | 11 ++++++++--- src/Http/Requests/ActionRequest.php | 2 +- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/config/config.php b/config/config.php index f64be64f7..51c73f510 100644 --- a/config/config.php +++ b/config/config.php @@ -116,6 +116,13 @@ 'related' => \Binaryk\LaravelRestify\Repositories\Casts\RelatedCast::class, ], + 'search' => [ + /* + | Allow Restify to check the post payload in order to receive matchable filters. + */ + 'matchable_using_post_payload' => true, + ], + /* |-------------------------------------------------------------------------- | Restify Logs diff --git a/src/Filters/MatchesCollection.php b/src/Filters/MatchesCollection.php index 7cbbfbf44..ae081b0f3 100644 --- a/src/Filters/MatchesCollection.php +++ b/src/Filters/MatchesCollection.php @@ -50,8 +50,8 @@ public function inQuery(RestifyRequest $request): self { return $this->filter(function (MatchFilter $filter) use ($request) { $possibleKeys = collect([ - $filter->getColumn(), - "-{$filter->getColumn()}", + $filter->column(), + "-{$filter->column()}", ]); if ($filters = collect($request->input('filter', []))) { @@ -60,7 +60,12 @@ public function inQuery(RestifyRequest $request): self } } - return $request->has("-{$filter->getColumn()}") || $request->has($filter->getColumn()); + if (! config('restify.search.matchable_using_post_payload')) { + return (bool) ($request->query("-{$filter->column()}") || $request->query($filter->column())); + } + + + return $request->has("-{$filter->column()}") || $request->has($filter->column()); }); } diff --git a/src/Http/Requests/ActionRequest.php b/src/Http/Requests/ActionRequest.php index 7daf4d8e2..a4707f355 100644 --- a/src/Http/Requests/ActionRequest.php +++ b/src/Http/Requests/ActionRequest.php @@ -45,7 +45,7 @@ public function builder(Action $action, int $size): Builder ->latest($this->model()->getKeyName()); } - public function collectRepositories(Action $action, $count, Closure $callback) + public function collectRepositories(Action $action, $count, Closure $callback): array { $output = []; From a4b41b9097e9fb3231032eb4c9d5401b54151304 Mon Sep 17 00:00:00 2001 From: Eduard Lupacescu Date: Thu, 25 Nov 2021 14:52:51 +0200 Subject: [PATCH 2/4] fix: Use only query params for matching. --- config/config.php | 7 ------- src/Filters/MatchesCollection.php | 7 +------ 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/config/config.php b/config/config.php index 51c73f510..f64be64f7 100644 --- a/config/config.php +++ b/config/config.php @@ -116,13 +116,6 @@ 'related' => \Binaryk\LaravelRestify\Repositories\Casts\RelatedCast::class, ], - 'search' => [ - /* - | Allow Restify to check the post payload in order to receive matchable filters. - */ - 'matchable_using_post_payload' => true, - ], - /* |-------------------------------------------------------------------------- | Restify Logs diff --git a/src/Filters/MatchesCollection.php b/src/Filters/MatchesCollection.php index ae081b0f3..c0a6e252a 100644 --- a/src/Filters/MatchesCollection.php +++ b/src/Filters/MatchesCollection.php @@ -60,12 +60,7 @@ public function inQuery(RestifyRequest $request): self } } - if (! config('restify.search.matchable_using_post_payload')) { - return (bool) ($request->query("-{$filter->column()}") || $request->query($filter->column())); - } - - - return $request->has("-{$filter->column()}") || $request->has($filter->column()); + return (bool) ($request->query("-{$filter->column()}") || $request->query($filter->column())); }); } From 30a17586e03424e4988856ef511b3e8e67e0bb07 Mon Sep 17 00:00:00 2001 From: Eduard Lupacescu Date: Thu, 25 Nov 2021 15:32:43 +0200 Subject: [PATCH 3/4] fix: Conditional action loggable. --- src/Actions/Action.php | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/src/Actions/Action.php b/src/Actions/Action.php index 0c455f4f1..e78e8b534 100644 --- a/src/Actions/Action.php +++ b/src/Actions/Action.php @@ -5,6 +5,7 @@ use Binaryk\LaravelRestify\Http\Requests\ActionRequest; use Binaryk\LaravelRestify\Http\Requests\RestifyRequest; use Binaryk\LaravelRestify\Models\ActionLog; +use Binaryk\LaravelRestify\Models\Concerns\HasActionLogs; use Binaryk\LaravelRestify\Restify; use Binaryk\LaravelRestify\Traits\AuthorizedToSee; use Binaryk\LaravelRestify\Traits\Make; @@ -82,8 +83,8 @@ public function uriKey() /** * Determine if the action is executable for the given request. * - * @param Request $request - * @param Model $model + * @param Request $request + * @param Model $model * @return bool */ public function authorizedToRun(Request $request, $model) @@ -94,7 +95,7 @@ public function authorizedToRun(Request $request, $model) /** * Set the callback to be run to authorize running the action. * - * @param Closure $callback + * @param Closure $callback * @return $this */ public function canRun(Closure $callback) @@ -107,8 +108,8 @@ public function canRun(Closure $callback) /** * Get the payload available on the action. * - * @deprecated Use rules instead * @return array + * @deprecated Use rules instead */ public function payload(): array { @@ -128,7 +129,7 @@ public function rules(): array /** * Make current action being standalone. No model query will be performed. * - * @param bool $standalone + * @param bool $standalone * @return self */ public function standalone(bool $standalone = true): self @@ -152,22 +153,26 @@ public function isStandalone(): bool public function handleRequest(ActionRequest $request) { - if (! method_exists($this, 'handle')) { + if (!method_exists($this, 'handle')) { throw new Exception('Missing handle method from the action.'); } if ($this->isStandalone()) { - return Transaction::run(fn () => $this->handle($request)); + return Transaction::run(fn() => $this->handle($request)); } $response = null; - if (! $request->isForRepositoryRequest()) { + if (!$request->isForRepositoryRequest()) { $request->collectRepositories($this, static::$chunkCount, function ($models) use ($request, &$response) { Transaction::run(function () use ($models, $request, &$response) { $response = $this->handle($request, $models); - $models->each(fn (Model $model) => ActionLog::forRepositoryAction($this, $model, $request->user())->save()); + $models->each(function (Model $model) use ($request) { + if (in_array(HasActionLogs::class, class_uses_recursive($model), true)) { + Restify::actionLog()::forRepositoryAction($this, $model, $request->user())->save(); + } + }); }); }); } else { @@ -179,11 +184,14 @@ public function handleRequest(ActionRequest $request) })->firstOrFail() ); - Restify::actionLog()::forRepositoryAction( - $this, - $model, - $request->user() - )->save(); + if (in_array(HasActionLogs::class, class_uses_recursive($model), true)) { + Restify::actionLog()::forRepositoryAction( + $this, + $model, + $request->user() + )->save(); + } + }); } From 0c0e1f68794b874cc253c755ff30d035e31b4569 Mon Sep 17 00:00:00 2001 From: binaryk Date: Thu, 25 Nov 2021 13:33:04 +0000 Subject: [PATCH 4/4] Fix styling --- src/Actions/Action.php | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/Actions/Action.php b/src/Actions/Action.php index e78e8b534..81c15afab 100644 --- a/src/Actions/Action.php +++ b/src/Actions/Action.php @@ -4,7 +4,6 @@ use Binaryk\LaravelRestify\Http\Requests\ActionRequest; use Binaryk\LaravelRestify\Http\Requests\RestifyRequest; -use Binaryk\LaravelRestify\Models\ActionLog; use Binaryk\LaravelRestify\Models\Concerns\HasActionLogs; use Binaryk\LaravelRestify\Restify; use Binaryk\LaravelRestify\Traits\AuthorizedToSee; @@ -153,17 +152,17 @@ public function isStandalone(): bool public function handleRequest(ActionRequest $request) { - if (!method_exists($this, 'handle')) { + if (! method_exists($this, 'handle')) { throw new Exception('Missing handle method from the action.'); } if ($this->isStandalone()) { - return Transaction::run(fn() => $this->handle($request)); + return Transaction::run(fn () => $this->handle($request)); } $response = null; - if (!$request->isForRepositoryRequest()) { + if (! $request->isForRepositoryRequest()) { $request->collectRepositories($this, static::$chunkCount, function ($models) use ($request, &$response) { Transaction::run(function () use ($models, $request, &$response) { $response = $this->handle($request, $models); @@ -191,7 +190,6 @@ public function handleRequest(ActionRequest $request) $request->user() )->save(); } - }); }