Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
798 commits
Select commit Hold shift + click to select a range
0df64df
Fixed that Select2-dropdown in advanced-search won't be over the navi…
cz-lucas Nov 17, 2025
266426e
Merge pull request #94 from imbus/bugfix-SIT145-select-menu-z-index
cz-lucas Nov 17, 2025
72f9eb2
Fixed that search always sents the assignedTo field
cz-lucas Nov 17, 2025
b85d2f2
Moved if-statement to fix failing test
cz-lucas Nov 17, 2025
751259d
Fixed that the group-select-dropdown is in the background
cz-lucas Nov 18, 2025
7ee5fff
Merge remote-tracking branch 'upstream/develop' into rebase-20251118
cz-lucas Nov 18, 2025
b6778bb
Merge pull request #96 from imbus/rebase-20251118
cz-lucas Nov 18, 2025
fc140a3
Filter dropdown is now set when applying a predefined filter over the…
cz-lucas Nov 18, 2025
c796cd4
adjusted parameters for UpdateModal in Settingspage
JonasGoseberg Nov 18, 2025
2229dd8
Build JS
cz-lucas Nov 18, 2025
f8101eb
Merge pull request #95 from imbus/bugfix-SIT159-wrong-zindex-modal-dr…
cz-lucas Nov 18, 2025
34b1a1d
Fixed failing test
cz-lucas Nov 18, 2025
3859235
Improved fix of failing test
cz-lucas Nov 18, 2025
e2b7f80
Merge pull request #97 from imbus/bugfix-SIT165-filter-dropdown-not-s…
cz-lucas Nov 18, 2025
f643ac1
Hotfix: predefinedfilter-dropdown won't be set
cz-lucas Nov 18, 2025
465867a
Merge pull request #98 from imbus/SIT-157-updateModalSettingsPage
JonasGoseberg Nov 19, 2025
abe1ec6
predefinedfilter update
Klausw-1 Nov 19, 2025
d5e0ad0
refactored predefinedFilterService
JonasGoseberg Nov 20, 2025
3997932
changed some formatting things to align with sonarqubes standard
JonasGoseberg Nov 20, 2025
a560e9e
Updated CSS-build so that there are only two css-files loaded
cz-lucas Nov 20, 2025
69994b3
Moved search-inouts-js in it's own file ouside of the blade
cz-lucas Nov 20, 2025
43117af
Merge pull request #99 from imbus/refactor-advanced-search-css-build
JonasGoseberg Nov 20, 2025
de6a353
refactored Modal.php
JonasGoseberg Nov 20, 2025
e229482
Moved CSS and JS from hardware/index in its own files
cz-lucas Nov 20, 2025
20d8094
Merge remote-tracking branch 'origin/develop' into refactor-js-build
cz-lucas Nov 20, 2025
39f4a27
Moved JS for the advanced search in its own file
cz-lucas Nov 20, 2025
dbc6e4e
Removed todo
cz-lucas Nov 20, 2025
11ad95d
refactored Filterservice
JonasGoseberg Nov 20, 2025
fcd6380
Some smaler improvements
cz-lucas Nov 20, 2025
29586c9
Merge pull request #100 from imbus/refactor-js-build
cz-lucas Nov 20, 2025
ec98755
Merge pull request #101 from imbus/SIT-72-cleanup-FilterService
JonasGoseberg Nov 20, 2025
aa459a4
made some formatting changes
JonasGoseberg Nov 21, 2025
8e19e08
Merge pull request #102 from imbus/SIT-149-changedVisibilityInSetting…
JonasGoseberg Nov 21, 2025
1222994
Merge remote-tracking branch 'upstream/develop' into rebase-20251121
cz-lucas Nov 21, 2025
a0af53c
Merge pull request #103 from imbus/rebase-20251121
cz-lucas Nov 21, 2025
f1f0f1d
factory rebuilding
Klausw-1 Nov 21, 2025
f5f6d45
cleancode
Klausw-1 Nov 21, 2025
12491f2
adjusted Tests
JonasGoseberg Nov 21, 2025
b9933cd
implemented LegacyAdvancedSearch again
JonasGoseberg Nov 21, 2025
6dac618
Added advanced search policy
cz-lucas Nov 21, 2025
11abcd7
Added permssion to view
cz-lucas Nov 21, 2025
fd76410
Merge pull request #105 from imbus/SIT-173-OldAdvancedSearchDoesntWor…
cz-lucas Nov 21, 2025
546b83f
Added advanced-search in selectlist-gate
cz-lucas Nov 24, 2025
5859377
Fixed that user without advanced-search permssions can view it using …
cz-lucas Nov 24, 2025
0cc0f67
adjusted l10n for advancedsearch
JonasGoseberg Nov 24, 2025
5b8b540
Updated frontend for new data structure
cz-lucas Nov 24, 2025
d0048d4
WIP adjusted Filter_data to show a name
JonasGoseberg Nov 24, 2025
39f2ca7
added functionality for missing models
JonasGoseberg Nov 24, 2025
3d07c38
adjusted to sonarQube Rules
JonasGoseberg Nov 24, 2025
cb52239
Added 404 for unkown predfined filters
cz-lucas Nov 24, 2025
fea2888
Merge remote-tracking branch 'upstream/develop' into rebase-20251124
cz-lucas Nov 24, 2025
d778a24
Merge pull request #108 from imbus/rebase-20251124
cz-lucas Nov 24, 2025
275b916
Merge pull request #107 from imbus/SIT174-advanced-search-permissions
JonasGoseberg Nov 25, 2025
d017f80
Delete on_decode($f->filter_data, true);
Klausw-1 Nov 25, 2025
624d183
Merge pull request #104 from imbus/feature/predefined-filter-seeder-u…
Klausw-1 Nov 25, 2025
102c2f0
some improvements to Sonarcube and artisan insights
JonasGoseberg Nov 25, 2025
f97e92f
Started with changes for better darkmode support
cz-lucas Nov 25, 2025
990fd03
Updated CSS for darkmode for floatingbutton-menu
cz-lucas Nov 26, 2025
17ea022
Updated CSS for darkmode for dropdowns
cz-lucas Nov 26, 2025
a401c19
Merge pull request #110 from imbus/bugfix-advancedsearch-darkmode
cz-lucas Nov 26, 2025
aafcf79
Delete PredefinedFilter::truncate();
cz-lucas Nov 26, 2025
e039740
removed unused keys
JonasGoseberg Nov 26, 2025
cc9d999
Merge pull request #109 from imbus/SIT-72-cleanup
JonasGoseberg Nov 27, 2025
19b5236
added a method to explicit return the name of the models
JonasGoseberg Nov 27, 2025
dc0d963
Merge pull request #112 from imbus/SIT-190-bugfix-failed-to-apply
cz-lucas Nov 27, 2025
74883dd
some change requests - typos
JonasGoseberg Nov 27, 2025
a3351bf
fixed some typos
JonasGoseberg Nov 27, 2025
16ea4e9
Merge pull request #111 from imbus/Sit72-unifyl10n
JonasGoseberg Nov 27, 2025
cf60d21
eol pipeline fail test fix
Klausw-1 Nov 27, 2025
e948836
eol customfieldtest fail fix
Klausw-1 Nov 27, 2025
bdaf5f4
PredefinedFilter fix
Klausw-1 Nov 27, 2025
99d2312
removed color:green
JonasGoseberg Nov 27, 2025
08b171a
removed outcommented code
JonasGoseberg Nov 28, 2025
f854af4
Merge pull request #113 from imbus/SIT-195-hotfix-green-text
JonasGoseberg Nov 28, 2025
28cb957
Merge branch 'develop' into Sit-72-remove-outcommented-code
JonasGoseberg Nov 28, 2025
b81c143
Merge remote-tracking branch 'upstream/develop' into develop
cz-lucas Nov 28, 2025
ea34021
translated german comments
JonasGoseberg Nov 28, 2025
919d393
Added length-limit for the predefinedfilter-name
cz-lucas Nov 28, 2025
9d968b0
added prevention to update or delete a deleted filter
JonasGoseberg Nov 28, 2025
0fb2cd3
Fixed broken test
cz-lucas Nov 28, 2025
0bf3937
Merge pull request #114 from imbus/Sit-72-remove-outcommented-code
JonasGoseberg Nov 28, 2025
37563af
Implemented improvments from @JonasGoseberg
cz-lucas Nov 28, 2025
99eb6e7
Merge pull request #115 from imbus/bugfix-SIT198-filter-length-limit
cz-lucas Nov 28, 2025
dd0079c
Merge branch 'develop' into sit-199-deleted-Filter-could-be-updated
JonasGoseberg Nov 28, 2025
6d222e5
Merge pull request #116 from imbus/sit-199-deleted-Filter-could-be-up…
JonasGoseberg Nov 28, 2025
128140b
Removed files
cz-lucas Nov 28, 2025
a89f75b
Removed uploads
cz-lucas Nov 28, 2025
618508e
fixed using undefined variable and removed some old stuff
JonasGoseberg Nov 28, 2025
dabd04e
Implemented some of the improvements from codacy
cz-lucas Nov 28, 2025
a17ad1f
adjusted Tests to fixed behavior
JonasGoseberg Nov 28, 2025
6829639
Merge branch 'pre-merge' into SIT-202-avoidUsingUndefinedVariables
JonasGoseberg Nov 28, 2025
4b56105
fix variable names to match other commits
JonasGoseberg Dec 1, 2025
23721e7
fixed race condition
JonasGoseberg Dec 1, 2025
70f25ec
Renamed variables in frontend
cz-lucas Dec 2, 2025
2d5f865
use logging
JonasGoseberg Dec 2, 2025
c249592
adjusted variable names accordingly to codacy
JonasGoseberg Dec 2, 2025
a1197ee
Some more changes
cz-lucas Dec 2, 2025
52e79f8
Build js
cz-lucas Dec 2, 2025
b0b9f5d
Added missing bracket
cz-lucas Dec 2, 2025
9bfed0e
Merge pull request #119 from imbus/some-more-renaming-stuff
cz-lucas Dec 2, 2025
54684f4
Merge pull request #117 from imbus/SIT-202-avoidUsingUndefinedVariables
JonasGoseberg Dec 2, 2025
339332c
Merge branch 'pre-merge' into SIT-213-bugfix-racecondition-filterinput
JonasGoseberg Dec 2, 2025
515b166
Merge pull request #118 from imbus/SIT-213-bugfix-racecondition-filte…
JonasGoseberg Dec 2, 2025
50b5375
Merge pull request #120 from imbus/Sit-202-use-logging-and-avoid-dupl…
JonasGoseberg Dec 2, 2025
bdb6a36
fixed generic onject injection sink warning
JonasGoseberg Dec 2, 2025
cf82c13
Renamed tests
cz-lucas Dec 2, 2025
106a93e
Some more minor changes
cz-lucas Dec 2, 2025
5bc8034
Merge pull request #121 from imbus/rename-testcases
cz-lucas Dec 2, 2025
44fbccf
run npm
JonasGoseberg Dec 2, 2025
c7b86aa
removed unused code
JonasGoseberg Dec 2, 2025
2a30ea2
And more code-style fixes
cz-lucas Dec 2, 2025
234da5a
refactored some testclasses
JonasGoseberg Dec 2, 2025
bf193f7
Decreased code-complxity
cz-lucas Dec 2, 2025
9b7d764
Fixed missing function
cz-lucas Dec 2, 2025
ee9a325
Merge pull request #122 from imbus/SIT-202-cleanup-codacy
JonasGoseberg Dec 2, 2025
9bb0c70
Added
cz-lucas Dec 2, 2025
01171a2
Merge branch 'pre-merge' into and-more-codestyle-improvements
cz-lucas Dec 2, 2025
3212a89
Merge pull request #123 from imbus/and-more-codestyle-improvements
cz-lucas Dec 2, 2025
7dce4aa
Fix comprehensibility issues
cz-lucas Dec 2, 2025
5a1d992
Merge remote-tracking branch 'upstream/develop' into more-minor-impro…
cz-lucas Dec 2, 2025
fe2030c
More formatting stuff later...
cz-lucas Dec 2, 2025
916aea1
next round of codacy improvements
JonasGoseberg Dec 2, 2025
70517a3
npm run prod
JonasGoseberg Dec 2, 2025
a8bd4ec
Merge pull request #124 from imbus/SIT-202-more-codacy-cleanup
JonasGoseberg Dec 2, 2025
77c9e9a
Added escaping
cz-lucas Dec 2, 2025
8422362
Merge branch 'pre-merge' of github.com:imbus/snipe-it into more-minor…
cz-lucas Dec 2, 2025
f2a5f4c
Fixed unresolved merged conflict
cz-lucas Dec 2, 2025
4a28351
Merge pull request #125 from imbus/more-minor-improvements
cz-lucas Dec 2, 2025
d7ae9e4
hotfix error on modal open
JonasGoseberg Dec 3, 2025
dd259cb
Fixed some more very minor issues
cz-lucas Dec 3, 2025
3bcbfdc
Merge pull request #126 from imbus/hotfix-modal-open
cz-lucas Dec 3, 2025
cdfce7b
Removed uploads
cz-lucas Nov 28, 2025
4c22815
fixed using undefined variable and removed some old stuff
JonasGoseberg Nov 28, 2025
1e09c61
Implemented some of the improvements from codacy
cz-lucas Nov 28, 2025
b177479
adjusted Tests to fixed behavior
JonasGoseberg Nov 28, 2025
4d4fcef
Merge branch 'pre-merge' into SIT-202-avoidUsingUndefinedVariables
JonasGoseberg Nov 28, 2025
3aa1633
Added endpoint & use_path_style_endpoint configs for public/private S3
Valinwolf Nov 28, 2025
d6d120f
Merge pull request #18266 from Valinwolf/develop
snipe Nov 28, 2025
3f89e66
fix variable names to match other commits
JonasGoseberg Dec 1, 2025
7fd2c0c
fixed race condition
JonasGoseberg Dec 1, 2025
fe8aab0
Renamed variables in frontend
cz-lucas Dec 2, 2025
1d52ed9
use logging
JonasGoseberg Dec 2, 2025
0f88217
adjusted variable names accordingly to codacy
JonasGoseberg Dec 2, 2025
59d5463
Some more changes
cz-lucas Dec 2, 2025
f15e6f7
Build js
cz-lucas Dec 2, 2025
7ad83a1
Added missing bracket
cz-lucas Dec 2, 2025
f984880
Merge pull request #119 from imbus/some-more-renaming-stuff
cz-lucas Dec 2, 2025
f966f31
Merge pull request #117 from imbus/SIT-202-avoidUsingUndefinedVariables
JonasGoseberg Dec 2, 2025
eff079f
Merge branch 'pre-merge' into SIT-213-bugfix-racecondition-filterinput
JonasGoseberg Dec 2, 2025
6392fbb
Merge pull request #118 from imbus/SIT-213-bugfix-racecondition-filte…
JonasGoseberg Dec 2, 2025
609d4d8
Merge pull request #120 from imbus/Sit-202-use-logging-and-avoid-dupl…
JonasGoseberg Dec 2, 2025
a4d2470
fixed generic onject injection sink warning
JonasGoseberg Dec 2, 2025
39fc4af
Renamed tests
cz-lucas Dec 2, 2025
220b11f
Some more minor changes
cz-lucas Dec 2, 2025
92f97cc
Merge pull request #121 from imbus/rename-testcases
cz-lucas Dec 2, 2025
c22152b
run npm
JonasGoseberg Dec 2, 2025
6c2b179
removed unused code
JonasGoseberg Dec 2, 2025
2d376ed
And more code-style fixes
cz-lucas Dec 2, 2025
5feae98
refactored some testclasses
JonasGoseberg Dec 2, 2025
7abbeff
Decreased code-complxity
cz-lucas Dec 2, 2025
11f4a19
Fixed missing function
cz-lucas Dec 2, 2025
47d1773
Merge pull request #122 from imbus/SIT-202-cleanup-codacy
JonasGoseberg Dec 2, 2025
50d5220
Added
cz-lucas Dec 2, 2025
21a35bd
Merge branch 'pre-merge' into and-more-codestyle-improvements
cz-lucas Dec 2, 2025
f1207e7
Merge pull request #123 from imbus/and-more-codestyle-improvements
cz-lucas Dec 2, 2025
a751225
Fix comprehensibility issues
cz-lucas Dec 2, 2025
86100bf
Merge remote-tracking branch 'upstream/develop' into more-minor-impro…
cz-lucas Dec 2, 2025
798585d
More formatting stuff later...
cz-lucas Dec 2, 2025
095e378
next round of codacy improvements
JonasGoseberg Dec 2, 2025
fdff227
npm run prod
JonasGoseberg Dec 2, 2025
bb6a57a
Merge pull request #124 from imbus/SIT-202-more-codacy-cleanup
JonasGoseberg Dec 2, 2025
1ee7ca1
Added escaping
cz-lucas Dec 2, 2025
0361c21
Merge branch 'pre-merge' of github.com:imbus/snipe-it into more-minor…
cz-lucas Dec 2, 2025
950ae1a
Fixed unresolved merged conflict
cz-lucas Dec 2, 2025
ff11240
Merge pull request #125 from imbus/more-minor-improvements
cz-lucas Dec 2, 2025
61ee5ef
hotfix error on modal open
JonasGoseberg Dec 3, 2025
d35e59e
Fixed some more very minor issues
cz-lucas Dec 3, 2025
12224ba
Merge pull request #126 from imbus/hotfix-modal-open
cz-lucas Dec 3, 2025
0439867
npm run prod
JonasGoseberg Dec 3, 2025
5d64cdb
Merge pull request #127 from imbus/preDevelop2
cz-lucas Dec 3, 2025
9b02a52
Merge from upstream/develop
cz-lucas Dec 3, 2025
fe98dc7
Fixed some more minor stuff
cz-lucas Dec 3, 2025
9fb3a2b
Merge branch 'develop' into pre-merge
cz-lucas Dec 3, 2025
c0ca955
finally fixed the asset_eol_date test bug
JonasGoseberg Dec 3, 2025
556bd66
finally fixed the asset_eol_date test bug
JonasGoseberg Dec 3, 2025
2b7c715
added explanation
JonasGoseberg Dec 3, 2025
ea2787d
Merge pull request #128 from imbus/bugfix-finally-fixed-eol_date_tests
cz-lucas Dec 4, 2025
a261b85
Deleted build-files, dev-environment files, our .gitignore-files and …
cz-lucas Dec 4, 2025
8957b16
Remove our translations
cz-lucas Dec 4, 2025
7588038
first round of revert formatting
JonasGoseberg Dec 4, 2025
90edfac
Removed notifications
cz-lucas Dec 4, 2025
7b7f532
Merge upstream/develop into rebase-2025-12-04-develop
cz-lucas Dec 4, 2025
127ce61
Merge pull request #129 from imbus/rebase-20251204-develop
cz-lucas Dec 4, 2025
9a7b59e
Removed notifications
cz-lucas Dec 4, 2025
932e577
Remove our translations
cz-lucas Dec 4, 2025
3faa1ea
Fixed some more minor stuff
cz-lucas Dec 3, 2025
474ba88
Deleted build-files, dev-environment files, our .gitignore-files and …
cz-lucas Dec 4, 2025
4cc2715
Remove our translations
cz-lucas Dec 4, 2025
8259c79
Removed notifications
cz-lucas Dec 4, 2025
0497676
Removed unused assignedTo-dropdown
cz-lucas Dec 5, 2025
fc95521
Removed unused assignedTo-dropdown
cz-lucas Dec 5, 2025
6f38ff9
forgot to update notifications.php file
cz-lucas Dec 5, 2025
2a8e610
second round of revert formatting
JonasGoseberg Dec 5, 2025
9cec70a
Merge branch 'develop' into SIT-214-revert-only-formatting-changes
JonasGoseberg Dec 5, 2025
098f25c
third round of revert formatting
JonasGoseberg Dec 5, 2025
d0ae9df
fourth round of revert formatting
JonasGoseberg Dec 5, 2025
a950fde
revert formatting related to asset.php
JonasGoseberg Dec 5, 2025
fd6ebb7
fifth round of revert formatting
JonasGoseberg Dec 5, 2025
0d35cf7
next round of reverting formatting
JonasGoseberg Dec 5, 2025
25eec1d
next round of revert formatting
JonasGoseberg Dec 5, 2025
32052b9
more code formatting stuff
JonasGoseberg Dec 5, 2025
6a60271
reformatted x-select.blade
JonasGoseberg Dec 5, 2025
24e6f6c
reverted some files
JonasGoseberg Dec 8, 2025
fbe983f
reverted formatting of hardware/index
JonasGoseberg Dec 8, 2025
4f69c2e
more formatting stuff
JonasGoseberg Dec 8, 2025
c41a0c7
Fixed 500-error because of missing notification-component
cz-lucas Dec 8, 2025
8bdea04
reverted assetscontroller
JonasGoseberg Dec 8, 2025
55629f0
Merge pull request #133 from imbus/bugfix-modal-error
cz-lucas Dec 8, 2025
51b8ff6
Fixed colors for floating buttons
cz-lucas Dec 8, 2025
87bbd30
more reverting stuff
JonasGoseberg Dec 8, 2025
52e61e0
reverting formatting stuff
JonasGoseberg Dec 8, 2025
473e5a5
next round of reverting
JonasGoseberg Dec 8, 2025
4a98d42
some more formatting stuff
JonasGoseberg Dec 8, 2025
b9a26b5
Fixed CSS for multiple-select dropdowns
cz-lucas Dec 8, 2025
504ecb0
some more formatting
JonasGoseberg Dec 8, 2025
7cf9032
fixed selectlistTransformer
JonasGoseberg Dec 8, 2025
48fba49
Merge branch 'develop' into SIT-214-revert-only-formatting-changes
JonasGoseberg Dec 8, 2025
46dc88f
Fixed CSS of the single-select dropdowns (kind of)
cz-lucas Dec 8, 2025
30842e1
Merge remote-tracking branch 'origin/develop' into remove-unused-assi…
cz-lucas Dec 8, 2025
ef724e0
Merge pull request #134 from imbus/bugfix-css-floatingbuttons-dropdown
cz-lucas Dec 8, 2025
6bbfc29
Merge branch 'develop' of github.com:imbus/snipe-it into remove-unuse…
cz-lucas Dec 8, 2025
8e3e9bb
Merge pull request #131 from imbus/remove-unused-assignedTo-dropown-code
cz-lucas Dec 8, 2025
fd2aa20
Merge remote-tracking branch 'upstream/develop' into rebase-20251208
cz-lucas Dec 8, 2025
133eab0
Merge pull request #135 from imbus/rebase-20251208
cz-lucas Dec 8, 2025
e473897
Merge branch 'develop' into SIT-214-revert-only-formatting-changes
JonasGoseberg Dec 9, 2025
6269d79
adjusted formatting
JonasGoseberg Dec 9, 2025
cecbc47
another formattion adjustment
JonasGoseberg Dec 9, 2025
f5964b5
small formatting adjustement
JonasGoseberg Dec 9, 2025
752f467
Fixed 500-error on profile-edit-page
cz-lucas Dec 9, 2025
d45ce77
Merge pull request #136 from imbus/bugfix-500-error-profile-page
cz-lucas Dec 9, 2025
854a3ae
Merge pull request #132 from imbus/SIT-214-revert-only-formatting-cha…
JonasGoseberg Dec 9, 2025
9b499fa
Merge branch 'pre-merge' into dev-pre-merge
JonasGoseberg Dec 9, 2025
e9eb84d
fixed merge
JonasGoseberg Dec 9, 2025
ae8c2f4
adjusted formatting
JonasGoseberg Dec 9, 2025
75f1440
Sync public assets with upstream/develop except the ones we created o…
cz-lucas Dec 9, 2025
9f3efa1
Removed skins
cz-lucas Dec 9, 2025
e78e47a
Merge pull request #137 from imbus/dev-pre-merge
cz-lucas Dec 9, 2025
f85d38e
Reverted permissions of gitignore files
cz-lucas Dec 9, 2025
a48d41a
Merge pull request #138 from imbus/dev-pre-merge
cz-lucas Dec 9, 2025
9396ddd
reverted l10n back
JonasGoseberg Dec 10, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions app/Console/Commands/Purge.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
use App\Models\License;
use App\Models\Location;
use App\Models\Manufacturer;
use App\Models\PredefinedFilter;
use App\Models\Statuslabel;
use App\Models\Supplier;
use App\Models\User;
Expand Down Expand Up @@ -178,6 +179,14 @@ public function handle()
$this->info('- Status Label "'.$status_label->name.'" deleted.');
$status_label->forceDelete();
}

$predefinedFilters = PredefinedFilter::whereNotNull('deleted_at')->withTrashed()->get();
$this->info($predefinedFilters->count().' predefined filters purged.');
foreach ($predefinedFilters as $predefinedFilter) {
$this->info('- Predefined Filter "'.$predefinedFilter->name.'" deleted.');
$predefinedFilter->forceDelete();
}

} else {
$this->info('Action canceled. Nothing was purged.');
}
Expand Down
2 changes: 2 additions & 0 deletions app/Exceptions/Handler.php
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,8 @@ public function render($request, Throwable $e)
$route = 'licenses.index';
} elseif (($route === 'customfieldsets.index') || ($route === 'customfields.index')) {
$route = 'fields.index';
} elseif ($route === 'predefinedfilters.index') {
$route = 'predefined-filters.index';
}

return redirect()
Expand Down
24 changes: 22 additions & 2 deletions app/Http/Controllers/Api/AssetsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
use App\Models\License;
use App\Models\LicenseSeat;
use App\Models\Location;
use App\Models\PredefinedFilter;
use App\Models\Setting;
use App\Models\User;
use App\View\Label;
Expand Down Expand Up @@ -145,11 +146,17 @@ public function index(FilterRequest $request, $action = null, $upcoming_status =

if ($request->filled('filter')) {
$filter = json_decode($request->input('filter'), true);
}

$filter = array_filter($filter, function ($key) use ($allowed_columns) {
if (!isset($filter[0]['field'])) {
$filter = array_filter($filter, function ($key) use ($allowed_columns){
return in_array($key, $allowed_columns);
}, ARRAY_FILTER_USE_KEY);
}

$all_custom_fields = CustomField::all(); //used as a 'cache' of custom fields throughout this page load
foreach ($all_custom_fields as $field) {
$allowed_columns[] = $field->db_column_name();
}

$assets = Asset::select('assets.*')
Expand Down Expand Up @@ -409,6 +416,7 @@ public function index(FilterRequest $request, $action = null, $upcoming_status =
break;
case 'location':
$assets->OrderLocation($order);
break;
case 'rtd_location':
$assets->OrderRtdLocation($order);
break;
Expand Down Expand Up @@ -453,6 +461,18 @@ public function index(FilterRequest $request, $action = null, $upcoming_status =
break;
}

// Filter with predefinedFilter if one is given
if (isset($request->predefinedFilter)) {
$id = $request->predefinedFilter;
$predefinedFilters = PredefinedFilter::where('id', $id)
->where('created_by', auth()->user()->id)
->first();

if ($predefinedFilters) {
$assets = $predefinedFilters->filterAssets($assets);
}
}


// Make sure the offset and limit are actually integers and do not exceed system limits
$offset = ($request->input('offset') > $assets->count()) ? $assets->count() : app('api_offset_value');
Expand Down Expand Up @@ -1392,7 +1412,7 @@ public function getLabels(Request $request): JsonResponse


$label = new Label();

if (!$label) {
throw new \Exception('Label object could not be created');
}
Expand Down
30 changes: 30 additions & 0 deletions app/Http/Controllers/Api/GroupsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use App\Helpers\Helper;
use App\Http\Controllers\Controller;
use App\Http\Transformers\GroupsTransformer;
use App\Http\Transformers\SelectlistTransformer;
use App\Models\Group;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
Expand Down Expand Up @@ -145,4 +146,33 @@ public function destroy($id) : JsonResponse

return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/groups/message.delete.success')));
}

/**
* Selectlist method that returns all groups wherere the user is member of
*/
public function selectlist(Request $request): array
{
$user = auth()->user();

$this->authorize('superadmin');
$this->authorize('view', Group::class);

// Start with groups the user belongs to
$groups = Group::whereHas('users', function ($query) use ($user) {
$query->where('user_id', $user->id);
})
->select('id', 'name');

// Search filter
if ($request->filled('search')) {
$groups = $groups->where('permission_groups.name', 'LIKE', '%' . $request->get('search') . '%');
}

// Apply sorting
$groups = $groups->orderBy('name', 'ASC')->paginate(50);

// Transform output to match selectlist style
return (new SelectlistTransformer)->transformSelectlist($groups);
}

}
180 changes: 180 additions & 0 deletions app/Http/Controllers/Api/PredefinedFilterController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,180 @@
<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Transformers\PredefinedFiltersTransformer;
use App\Http\Transformers\SelectlistTransformer;
use App\Models\PredefinedFilter;
use App\Services\PredefinedFilterService;
use Auth;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use App\Helpers\Helper;

class PredefinedFilterController extends Controller
{

protected PredefinedFilterService $service;

public function __construct(PredefinedFilterService $service)
{
$this->service = $service;
}

public function index(Request $request) : JsonResponse | array
{
$filters = $this->service->getAllViewableFilters();

if ($request->filled('search')) {
$search = strtolower($request->get('search'));
$filters = $filters->filter(fn($filter) =>
str_contains(strtolower($filter->name), $search)
);
}

// --- Sorting ---
$sort = $request->input('sort', 'name');
$order = $request->input('order', 'asc');

$allowedColumns = ['id', 'name', 'is_public', 'created_by'];

if (!in_array($sort, $allowedColumns)) {
$sort = 'name';
}

$filters = $order === 'desc'
? $filters->sortByDesc(fn($f) => strtolower(data_get($f, $sort, '')))
: $filters->sortBy(fn($f) => strtolower(data_get($f, $sort, '')));

// --- Pagination ---
$total = $filters->count();
$offset = (int) $request->input('offset', 0);
$limit = (int) $request->input('limit', config('app.max_results', 50));

$filters = $filters->slice($offset, $limit)->values();

return (new PredefinedFiltersTransformer)->transformPredefinedFilters($filters, $total);
}



public function show(int $id)
{
$filter = $this->service->getFilterWithIdAndNameValues($id);

if (!$filter) {
return response()->json(['message' => trans('admin/predefinedFilters/message.does_not_exist')], 404);
}

if ($filter->userHasPermission(Auth::user(), 'view')) {
return response()->json($filter->toArray());
}

return response()->json(['message' => trans('admin/predefinedFilters/message.show.not_allowed')], 403);
}

public function store(Request $request): JsonResponse | array
{

$user = auth()->user();

$validator = Validator::make($request->all(), [
'name' => 'required|string|max:191',
'filter_data' => 'required|array',
'is_public' => 'sometimes|boolean'
]);

if ($validator->fails()) {
return response()->json(Helper::formatStandardApiResponse(422, null, $validator->errors()),422);
}

$validated = $validator->validated();

if (!empty($validated['is_public']) && !$user->hasAccess('predefinedFilter.create')) {
return response()->json(['message' => trans('admin/predefinedFilters/message.create.not_allowed')], 403);
}

$filter = $this->service->createFilter($validated);

return response()->json([
'message' => trans('admin/predefinedFilters/message.create.success'),
'filter_data' => $filter,
], 201);
}

public function update(Request $request, int $id): JsonResponse
{
$user = auth()->user();
$filter = PredefinedFilter::find($id);

if (!$filter) {
return response()->json(['message' => trans('admin/predefinedFilters/message.does_not_exist')], 404);
}

$validator = Validator::make($request->all(), [
'name' => 'required|string|max:191',
'filter_data' => 'required|array',
'is_public' => 'sometimes|boolean'
]);

if ($validator->fails()) {
return response()->json(Helper::formatStandardApiResponse(422, null, $validator->errors()),422);
}

$validated = $validator->validated();

$updatedPermission = $this->updatePermissions($validated, $filter, $user);
if ($updatedPermission !== null) {
return $updatedPermission;
}

$updated = $this->service->updateFilter($filter, $validated);

return response()->json([
'message' => trans('admin/predefinedFilters/message.update.success'),
'filter_data' => $updated,
]);
}

public function destroy(int $id)
{
$user = auth()->user();
$filter = PredefinedFilter::find($id);

if (!$filter) {
return response()->json(['message' => trans('admin/predefinedFilters/message.does_not_exist')], 404);
}

if ($filter->userHasPermission($user, 'delete')) {
$this->service->deleteFilter($filter);
return response()->json(['message' => trans('admin/predefinedFilters/message.delete.success')]);
}

return response()->json(['message' => trans('admin/predefinedFilters/message.delete.not_allowed_to_delete')], 403);
}

public function selectlist(Request $request)
{
$filters = $this->service->selectList($request, true);
return (new SelectlistTransformer)->transformSelectlist($filters);
}

private function updatePermissions($validated, $filter, $user) {
$newIsPublic = $validated['is_public'] ?? $filter->is_public;
$currentIsPublic = $filter->is_public;

if (!$filter->userHasPermission($user, 'edit')) {
return response()->json(['message' => trans('admin/predefinedFilters/message.not_allowed_to_edit')], 403);
}

//create permission
if ((!$currentIsPublic && $newIsPublic)
&& !$filter->userHasPermission($user, 'create')) {
return response()->json(['message' => trans('admin/predefinedFilters/message.update.not_allowed_to_change_isPublic')], 403);
}

return null;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\PredefinedFilter;
use App\Models\PredefinedFilterPermission;
use App\Services\PredefinedFilterPermissionService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;

class PredefinedFilterPermissionController extends Controller
{

protected PredefinedFilterPermissionService $service;

public function __construct(PredefinedFilterPermissionService $service)
{
$this->service = $service;
}

public function store(Request $request): JsonResponse
{
$this->authorize('edit', PredefinedFilter::class);

$model = new PredefinedFilterPermission();
$validated = $request->validate($model->getRules());

$filter = PredefinedFilter::findOrFail($validated['predefined_filter_id']);
$this->authorize('update', $filter);

// Granular Permission
if (!$filter->userHasPermission($request->user(), 'edit')) {
return response()->json(['error' => 'Unauthorized'], 403);
}

$permission = $this->service->store($validated);

return response()->json([
'message' => __('admin/reports/message.create.success'),
'data' => $permission,
]);
}

public function show(int $id): JsonResponse
{
$this->authorize('view', PredefinedFilter::class);

$permission = $this->service->show($id);

$filter = $permission->filter;

if (!$filter) {
return response()->json(['message' => trans('NotFound')], 404);
}

$this->authorize('view', $filter);

return response()->json($permission);
}

public function destroy(int $id): JsonResponse
{
$this->authorize('delete', PredefinedFilterPermission::class);

$permission = PredefinedFilterPermission::findOrFail($id);
$this->authorize('delete', $permission->filter);

$this->service->delete($id);

return response()->json([
'message' => __('admin/reports/message.delete.success'),
], 204);
}
}
Loading