diff --git a/app/Abstracts/Http/Controller.php b/app/Abstracts/Http/Controller.php index 40f7153e6..f4ec9e300 100644 --- a/app/Abstracts/Http/Controller.php +++ b/app/Abstracts/Http/Controller.php @@ -16,6 +16,9 @@ use Illuminate\Pagination\Paginator; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Routing\Controller as BaseController; +/** + * @property string $type + */ abstract class Controller extends BaseController { use AuthorizesRequests, Jobs, Permissions, Relationships, SearchString, ValidatesRequests; @@ -114,6 +117,19 @@ abstract class Controller extends BaseController } } + if (! request()->has('list_records') && request()->has('search')) { + $status = $this->getSearchStringValue('status'); + + if (empty($status)) { + $tab_pins = setting('favorites.tab.' . user()->id, []); + $tab_pins = ! empty($tab_pins) ? json_decode($tab_pins, true) : []; + + if (! empty($tab_pins) && (($tab_pins[$this->type] ?? null) === 'all')) { + request()->offsetSet('list_records', 'all'); + } + } + } + if (request()->get('list_records') == 'all') { return; } @@ -152,6 +168,41 @@ abstract class Controller extends BaseController } } } + + if (! request()->has('list_records') && request()->has('search')) { + $type = $this->getSearchStringValue('type'); + + if (empty($type)) { + $tab_pins = setting('favorites.tab.' . user()->id, []); + $tab_pins = ! empty($tab_pins) ? json_decode($tab_pins, true) : []; + + if (! empty($tab_pins) && (($tab_pins['transactions'] ?? null) === 'all')) { + request()->offsetSet('list_records', 'all'); + } + } + } + + if (request()->get('list_records') == 'all') { + return; + } + + $type = $this->getSearchStringValue('type'); + + if (empty($type)) { + $search = config('type.transaction.transactions.route.params.income.search'); + + request()->offsetSet('search', $search); + request()->offsetSet('programmatic', '1'); + } else { + $income = str_replace('type:', 'income', config('type.transaction.transactions.route.params.income.search')); + $expense = str_replace('type:', 'expense', config('type.transaction.transactions.route.params.expense.search')); + + if (($type == $income) || ($type == $expense)) { + return; + } + + request()->offsetSet('list_records', 'all'); + } } public function setActiveTabForCategories(): void @@ -171,6 +222,19 @@ abstract class Controller extends BaseController } } + if (! request()->has('list_records') && request()->has('search')) { + $type = $this->getSearchStringValue('type'); + + if (empty($type)) { + $tab_pins = setting('favorites.tab.' . user()->id, []); + $tab_pins = ! empty($tab_pins) ? json_decode($tab_pins, true) : []; + + if (! empty($tab_pins) && (($tab_pins['categories'] ?? null) === 'all')) { + request()->offsetSet('list_records', 'all'); + } + } + } + if (request()->get('list_records') == 'all') { return; } @@ -186,6 +250,7 @@ abstract class Controller extends BaseController request()->offsetSet('list_records', $tab); $currentSearch = request('search', ''); + $searchParts = array_filter(explode(' ', $currentSearch), function($part) { return !empty(trim($part)) && !str_starts_with(trim($part), 'type:'); }); @@ -194,6 +259,7 @@ abstract class Controller extends BaseController request()->offsetSet('search', implode(' ', $searchParts)); request()->offsetSet('programmatic', '1'); + return; } }