Compare commits

...

1327 Commits

Author SHA1 Message Date
snipe
1abd669de5 Refactor custom fields handling for storage
Signed-off-by: snipe <snipe@snipe.net>
2024-07-08 14:00:15 +01:00
snipe
ac9df2fc08 Merge pull request #15043 from snipe/fixes/custom_fields_on_audit
Fixed #15037 - Removed custom fieldsets on auditing - it’s not used (yet)
2024-07-08 13:20:59 +01:00
snipe
eba24b9242 Removed custom fieldsets on auditing - it’s not used
Signed-off-by: snipe <snipe@snipe.net>
2024-07-08 13:19:05 +01:00
snipe
edd61705dc Merge pull request #15027 from snipe/feature/sc-26112/allow_default_avatar
Added #15015 - ability for admins to select default avatar
2024-07-04 17:10:10 +01:00
snipe
3f20e29901 Moved gthe settings for remote loading to the branding section
Signed-off-by: snipe <snipe@snipe.net>
2024-07-04 16:55:47 +01:00
snipe
36ae162626 Changed my mind :)
Signed-off-by: snipe <snipe@snipe.net>
2024-07-04 16:48:05 +01:00
snipe
00f7cb9dbb Reverse the order for default gravatar
Signed-off-by: snipe <snipe@snipe.net>
2024-07-04 16:46:12 +01:00
snipe
1ca3dc26eb Removed extra debugging
Signed-off-by: snipe <snipe@snipe.net>
2024-07-04 16:36:48 +01:00
snipe
2f3be267b3 Added some logic around deleting images
Signed-off-by: snipe <snipe@snipe.net>
2024-07-04 16:33:22 +01:00
snipe
5b8f6910fb Marked tests as incomplete :(
Signed-off-by: snipe <snipe@snipe.net>
2024-07-04 16:33:08 +01:00
snipe
9fe26ba814 Reverted the validation - might have an impact on quickstart setup
Signed-off-by: snipe <snipe@snipe.net>
2024-07-04 13:25:39 +01:00
snipe
5e97ed1c7e Added migration
Signed-off-by: snipe <snipe@snipe.net>
2024-07-04 13:24:11 +01:00
snipe
947fb7af7a Added tests
Signed-off-by: snipe <snipe@snipe.net>
2024-07-04 13:24:03 +01:00
snipe
44bcc157e5 Updated icon
Signed-off-by: snipe <snipe@snipe.net>
2024-07-04 13:23:46 +01:00
snipe
278bf3da13 Updated language
Signed-off-by: snipe <snipe@snipe.net>
2024-07-04 13:23:38 +01:00
snipe
446bc81d3a Updated presenter to use new avatar
Signed-off-by: snipe <snipe@snipe.net>
2024-07-04 13:23:31 +01:00
snipe
9527aac242 Make site name required at the model
Signed-off-by: snipe <snipe@snipe.net>
2024-07-04 13:23:17 +01:00
snipe
c57f1f9d7d Use null coalescence
Signed-off-by: snipe <snipe@snipe.net>
2024-07-04 13:22:56 +01:00
snipe
e372527d13 Added default_avatar to settings
Signed-off-by: snipe <snipe@snipe.net>
2024-07-04 13:22:36 +01:00
snipe
96be1e1275 Removed duplicate locale directive
Signed-off-by: snipe <snipe@snipe.net>
2024-07-04 02:14:10 +01:00
snipe
8ce17d0585 Merge pull request #15025 from snipe/security/upgrade_webpack
Upgrade webpack from 5.91.0 to 5.92.0 #15008
2024-07-04 01:08:17 +01:00
snipe
6af1eaa4e4 Updated webpack to 5.92
Signed-off-by: snipe <snipe@snipe.net>
2024-07-04 01:07:26 +01:00
snipe
da01487301 Merge pull request #15023 from snipe/improvements/optimize_queries_for_user_bulk_actions
Added files column to bulk user delete, optimized queries
2024-07-03 23:45:09 +01:00
snipe
708d7b5fc5 Use icons for consistency
Signed-off-by: snipe <snipe@snipe.net>
2024-07-03 23:43:44 +01:00
snipe
62b5a159a9 Added files column
Signed-off-by: snipe <snipe@snipe.net>
2024-07-03 23:31:09 +01:00
snipe
a6d04509a5 Merge pull request #15016 from snipe/improved_user_merge
Fixed #15005 - Improvements  on user merge
2024-07-03 23:19:50 +01:00
snipe
0071596274 Added upload count
Signed-off-by: snipe <snipe@snipe.net>
2024-07-03 23:18:43 +01:00
snipe
59f66051f8 More eager loading
Signed-off-by: snipe <snipe@snipe.net>
2024-07-03 23:18:37 +01:00
snipe
9f1e59cf78 Marcus’ nitpicks
Signed-off-by: snipe <snipe@snipe.net>
2024-07-03 23:01:41 +01:00
snipe
f1f68b8ef6 Merge pull request #15022 from spencerrlongg/livewire-delete-button
Resolved Potential Issue when Deleting Personal Access Tokens
2024-07-03 22:24:25 +01:00
snipe
f22c3cdda9 Merge pull request #15021 from snipe/fixes/removed_non_counts
Removed non-counts from allowed array
2024-07-03 22:21:17 +01:00
snipe
5e15cc3bbe Added markIncompleteIfSqlite() method
Signed-off-by: snipe <snipe@snipe.net>
2024-07-03 22:18:31 +01:00
spencerrlongg
a6690493b0 resolved 2024-07-03 16:12:55 -05:00
snipe
17a6335d13 Added test
Signed-off-by: snipe <snipe@snipe.net>
2024-07-03 22:12:06 +01:00
akemidx
ca57f6de85 adding in item=>asset, missed in first commit 2024-07-03 17:07:50 -04:00
snipe
aefaabdb1a Removed non-counts from allowed array
Signed-off-by: snipe <snipe@snipe.net>
2024-07-03 21:40:43 +01:00
snipe
9211c8d3b1 Fixed test
Signed-off-by: snipe <snipe@snipe.net>
2024-07-03 20:57:21 +01:00
snipe
eff1980df5 Added console test
Signed-off-by: snipe <snipe@snipe.net>
2024-07-03 20:52:22 +01:00
snipe
1553ba5630 Added null coalescence for admin id in case via cli
Signed-off-by: snipe <snipe@snipe.net>
2024-07-03 20:52:12 +01:00
snipe
ec24120d2a Allow admin to be nullable (for cli)
Signed-off-by: snipe <snipe@snipe.net>
2024-07-03 20:50:35 +01:00
snipe
50df750202 Add merge event
Signed-off-by: snipe <snipe@snipe.net>
2024-07-03 20:50:23 +01:00
snipe
dab4aced48 Renamed test
Signed-off-by: snipe <snipe@snipe.net>
2024-07-03 20:50:09 +01:00
snipe
1774952312 Added additional assertions
Signed-off-by: snipe <snipe@snipe.net>
2024-07-03 20:19:12 +01:00
snipe
d66d6e70a6 Added checkedOutToUser factory for consumables
Signed-off-by: snipe <snipe@snipe.net>
2024-07-03 20:18:53 +01:00
snipe
4635e9269d Added user update log factory
Signed-off-by: snipe <snipe@snipe.net>
2024-07-03 20:18:34 +01:00
snipe
574867536d Standardize query for merging
Signed-off-by: snipe <snipe@snipe.net>
2024-07-03 19:41:34 +01:00
snipe
5488a4d118 One more test
Signed-off-by: snipe <snipe@snipe.net>
2024-07-03 14:36:27 +01:00
snipe
e34f3c7c2c Fixed typo
Signed-off-by: snipe <snipe@snipe.net>
2024-07-03 14:32:41 +01:00
snipe
ceaff7b645 Added tests
Signed-off-by: snipe <snipe@snipe.net>
2024-07-03 14:30:11 +01:00
snipe
d27a025347 Added factories
Signed-off-by: snipe <snipe@snipe.net>
2024-07-03 14:30:06 +01:00
snipe
2b2853a183 Added acceptance model
Signed-off-by: snipe <snipe@snipe.net>
2024-07-03 14:29:58 +01:00
snipe
a25263f868 Transfer files and acceptances on merge
Signed-off-by: snipe <snipe@snipe.net>
2024-07-03 14:29:49 +01:00
snipe
4b9727067b Merge pull request #15010 from snipe/fixes/translation_strings
Added missing translations
2024-07-03 12:43:50 +01:00
snipe
00fc392a12 Added missing traslations
Signed-off-by: snipe <snipe@snipe.net>
2024-07-03 12:41:04 +01:00
snipe
1da90fe1ec Bumped version
Signed-off-by: snipe <snipe@snipe.net>
2024-07-02 09:37:05 +01:00
snipe
25ba50d6f7 Merge pull request #14870 from Galaxy102/feature/rotate-labels
Add Label Template: Use with endless 62mm Brother printer rolls
2024-07-02 08:45:42 +01:00
snipe
f22e99aec8 Merge pull request #14983 from snipe/fixes/use_more_modern_request_syntax_in_blades
Use more modern reference for input text
2024-07-02 08:43:34 +01:00
snipe
f027fd5f21 Merge pull request #14986 from marcusmoore/bug/sc-25926
Fixed extension requirement checking in upgrade script
2024-07-02 08:42:45 +01:00
snipe
37a038c24f Merge pull request #15001 from marcusmoore/features/link-user-table-counts-to-section
Added links on user table to tabs on show user page
2024-07-02 08:37:05 +01:00
Marcus Moore
3a8f825de5 Link user table counts to section in user show 2024-07-01 14:06:05 -07:00
snipe
d2df83cf2f Merge pull request #14999 from marcusmoore/fixes/hide-edit-profile-button
Removed "Edit Your Profile" button from View Assets page if user is not able to edit their profile
2024-07-01 18:15:47 +01:00
Marcus Moore
d481850d4c Add @can around Edit Your Profile button on view assets page 2024-07-01 10:11:27 -07:00
Konstantin Köhring
6c55e2bd9d Add a Brother compatible 62mm wide label.
Tested with QL-600. Set print mode to landscape.
2024-06-28 09:49:53 +02:00
Konstantin Köhring
2fd357c346 Add rotation attribute to Label class to allow rotation of the generated label PDF.
This is necessary when printing labels with width = label width.
2024-06-28 09:49:53 +02:00
Marcus Moore
0a5e58201a Correctly account for "or" dependent extensions in upgrade script 2024-06-27 12:38:50 -07:00
snipe
d687b20467 Use more modern reference for input text
Signed-off-by: snipe <snipe@snipe.net>
2024-06-27 15:05:47 +01:00
snipe
7dbcedad40 Merge pull request #14981 from uberbrady/fix_backup_translations
Fixed #14976, #14975, #14973 - Translation strings aren't always working
2024-06-27 14:36:52 +01:00
snipe
b6e8d28ed3 Merge pull request #14982 from snipe/fixes/check_for_user_on_patch_api
Check that the user exists before trying to fill the request
2024-06-27 14:36:21 +01:00
snipe
85ce47f5bb Updated tests
Signed-off-by: snipe <snipe@snipe.net>
2024-06-27 14:21:27 +01:00
snipe
55c98cc27a Check that the user exists before trying to fill the request
Signed-off-by: snipe <snipe@snipe.net>
2024-06-27 14:05:28 +01:00
snipe
422f3ec81e Updated assets
Signed-off-by: snipe <snipe@snipe.net>
2024-06-27 13:53:38 +01:00
snipe
54fb91c03b Merge pull request #14831 from marcusmoore/chore/sc-23725/livewire3
Updated Livewire to v3
2024-06-27 13:21:52 +01:00
Brady Wetherington
6df9742664 Built a workaround for backup notification translations 2024-06-27 13:17:16 +01:00
snipe
f23a221750 Merge pull request #14942 from snipe/updates/start_moving_from_collective_forms
WIP - First start at switching to regular html labels
2024-06-27 13:12:29 +01:00
snipe
4637accb51 Built assets, bumped version
Signed-off-by: snipe <snipe@snipe.net>
2024-06-26 13:35:24 +01:00
snipe
74f067d893 Merge pull request #14974 from uberbrady/improve_saml_behind_proxy
Fixed #14895 and #14919 - set SAML baseurl to a sensible default for docker users and users behind a reverse proxy
2024-06-26 13:34:18 +01:00
snipe
43773954cd Merge pull request #14966 from Godmartinz/css_issue
Fixed importer table background color
2024-06-26 13:33:14 +01:00
Brady Wetherington
30cafef9f2 Add a reasonable-looking SAML baseurl, mosty for users behind proxies 2024-06-26 13:25:11 +01:00
snipe
251f2d82b3 Updated language strings
Signed-off-by: snipe <snipe@snipe.net>
2024-06-26 12:53:03 +01:00
snipe
e905550778 Merge pull request #14971 from snipe/fixes/updated_translation_string
Fixes #14968 - translate forbidden page
2024-06-26 11:25:51 +01:00
snipe
adee99db34 Fixes #14968 - translate forbidden page
Signed-off-by: snipe <snipe@snipe.net>
2024-06-26 11:21:56 +01:00
Godfrey M
eda2eb2283 fixes all dark modes 2024-06-25 10:24:35 -07:00
Godfrey M
a7123a04ba fixes importer background color 2024-06-25 10:19:18 -07:00
Marcus Moore
8a562f1d15 Bump Livewire to 3.5.1 2024-06-25 10:16:44 -07:00
Marcus Moore
d4861a74df Merge branch 'develop' into chore/sc-23725/livewire3
# Conflicts:
#	composer.lock
2024-06-25 10:15:50 -07:00
snipe
8971cc4b8b Merge pull request #14963 from snipe/fixes/updated_translation_string
Added avif to translation string
2024-06-25 13:45:10 +01:00
snipe
bca6dd41d2 Added avif to translation string
Signed-off-by: snipe <snipe@snipe.net>
2024-06-25 13:39:36 +01:00
snipe
221c4eeb0c Dev assets
Signed-off-by: snipe <snipe@snipe.net>
2024-06-24 21:59:27 +01:00
snipe
bbb1fbfbe8 Bumped version
Signed-off-by: snipe <snipe@snipe.net>
2024-06-24 21:59:09 +01:00
snipe
5a874a90ac Merge pull request #14951 from snipe/features/disallow_profile_editing
Added ability to disallow profile editing
2024-06-24 14:11:48 +01:00
snipe
1c14c2fdef Added gates to controller
Signed-off-by: snipe <snipe@snipe.net>
2024-06-24 14:05:21 +01:00
snipe
73a038afd4 Save new setting
Signed-off-by: snipe <snipe@snipe.net>
2024-06-24 14:03:01 +01:00
snipe
4d55765e28 Added checkbox to settings
Signed-off-by: snipe <snipe@snipe.net>
2024-06-24 14:02:53 +01:00
snipe
2b43f3cb84 Added gate to auth service provider
Signed-off-by: snipe <snipe@snipe.net>
2024-06-24 14:02:40 +01:00
snipe
52c4885335 Added method for checking if the user can edit their own profile
Signed-off-by: snipe <snipe@snipe.net>
2024-06-24 14:02:17 +01:00
snipe
aa5fe52e89 Added gate in blade
Signed-off-by: snipe <snipe@snipe.net>
2024-06-24 14:01:56 +01:00
snipe
ce107dd688 New strings
Signed-off-by: snipe <snipe@snipe.net>
2024-06-24 14:01:39 +01:00
snipe
72affd7a5b Added migration
Signed-off-by: snipe <snipe@snipe.net>
2024-06-24 14:01:31 +01:00
snipe
ba4c51dd68 Removed duplicate key
Signed-off-by: snipe <snipe@snipe.net>
2024-06-24 14:01:25 +01:00
snipe
294fb1f774 Merge pull request #14925 from snipe/fixes/added_2fa_string
Additional translation strings
2024-06-24 12:11:45 +01:00
snipe
a846afe733 Merge pull request #14950 from snipe/localization/updated_strings_20240621
Updated translations
2024-06-24 11:44:06 +01:00
snipe
5fb3cea0bb Updated translations
Signed-off-by: snipe <snipe@snipe.net>
2024-06-24 11:41:20 +01:00
snipe
4ae89c23cd Merge pull request #14947 from snipe/dependabot/github_actions/develop/docker/build-push-action-6
Bump docker/build-push-action from 5 to 6
2024-06-24 11:27:04 +01:00
snipe
3d32fe662b Merge pull request #14949 from snipe/fixes/depreciation_format
Check that there is a depreciation date before formatting
2024-06-24 11:11:43 +01:00
snipe
468674a517 Check that there is a depreciation date before formatting
Signed-off-by: snipe <snipe@snipe.net>
2024-06-24 11:07:41 +01:00
dependabot[bot]
ebe4354a85 Bump docker/build-push-action from 5 to 6
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 5 to 6.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v5...v6)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-24 08:14:34 +00:00
snipe
f47bc5ea7d Updated hardware checkin
Signed-off-by: snipe <snipe@snipe.net>
2024-06-23 19:40:52 +01:00
snipe
427615f627 Fiest start at switching to regular html labels
Signed-off-by: snipe <snipe@snipe.net>
2024-06-23 18:24:23 +01:00
snipe
829b560794 Merge pull request #14941 from snipe/updates/updated_phpunit
Updated PHPunit
2024-06-23 17:43:29 +01:00
snipe
f97a15c5c3 Updated PHPunit
Signed-off-by: snipe <snipe@snipe.net>
2024-06-23 17:33:01 +01:00
snipe
25fcf523e3 Merge pull request #14937 from snipe/fixes/user_improvements
Fixed #14935 - improvements and more tests around user deletion
2024-06-22 21:41:07 +01:00
snipe
c1be94c4ad Added another base test
Signed-off-by: snipe <snipe@snipe.net>
2024-06-22 20:37:49 +01:00
snipe
3a05d72124 Based restore API test
Signed-off-by: snipe <snipe@snipe.net>
2024-06-22 20:35:40 +01:00
snipe
7ec44e46ce Added ability check for restoring users at all
Signed-off-by: snipe <snipe@snipe.net>
2024-06-22 20:35:28 +01:00
snipe
060b17df01 Pulled duplicated test
Signed-off-by: snipe <snipe@snipe.net>
2024-06-22 20:34:49 +01:00
snipe
74c78d7577 Added back in commented out test
Signed-off-by: snipe <snipe@snipe.net>
2024-06-22 20:09:04 +01:00
snipe
1ef0c1adac Fixed tests! And added more!!
Signed-off-by: snipe <snipe@snipe.net>
2024-06-22 20:07:46 +01:00
snipe
c2e649e2bf Fixed small permissions issue
Signed-off-by: snipe <snipe@snipe.net>
2024-06-22 20:07:37 +01:00
snipe
196db9718e Use class name instead
Signed-off-by: snipe <snipe@snipe.net>
2024-06-22 19:55:58 +01:00
snipe
9f5b264e04 Normalize the tests between UI and API
Signed-off-by: snipe <snipe@snipe.net>
2024-06-22 19:51:56 +01:00
snipe
3825f5fb61 Added more permissions tests to user delete UI
Signed-off-by: snipe <snipe@snipe.net>
2024-06-22 19:47:59 +01:00
snipe
e60dbc883c Removed test code
Signed-off-by: snipe <snipe@snipe.net>
2024-06-22 19:42:34 +01:00
snipe
bbbfa91db9 Fixed wonky rule
Signed-off-by: snipe <snipe@snipe.net>
2024-06-22 19:40:26 +01:00
snipe
5ec8e2da66 Breaking tests :(
Signed-off-by: snipe <snipe@snipe.net>
2024-06-22 19:33:44 +01:00
snipe
9e59bd5687 Cleaned up controller code a bit
Signed-off-by: snipe <snipe@snipe.net>
2024-06-22 19:33:36 +01:00
snipe
1d26ccac4e Check for the additional auth for that user
Signed-off-by: snipe <snipe@snipe.net>
2024-06-22 19:33:06 +01:00
snipe
0e2526f627 Removed comment
Signed-off-by: snipe <snipe@snipe.net>
2024-06-22 19:32:49 +01:00
snipe
dd9e9c7a6d Fixed return types
Signed-off-by: snipe <snipe@snipe.net>
2024-06-22 18:49:49 +01:00
snipe
e19922abd0 Cleaned up UI controller
Signed-off-by: snipe <snipe@snipe.net>
2024-06-22 18:49:35 +01:00
snipe
d27bde6047 Added deleted factory for tests
Signed-off-by: snipe <snipe@snipe.net>
2024-06-22 18:36:24 +01:00
snipe
61f76dedc6 Added test
Signed-off-by: snipe <snipe@snipe.net>
2024-06-22 18:36:08 +01:00
snipe
06737f45ad Added test
Signed-off-by: snipe <snipe@snipe.net>
2024-06-22 18:36:02 +01:00
snipe
65e8765bdd Added tests
Signed-off-by: snipe <snipe@snipe.net>
2024-06-22 17:45:42 +01:00
snipe
c6a0212384 Merge remote-tracking branch 'origin/master' into develop 2024-06-22 17:33:12 +01:00
snipe
e03614d91b Added withtrashed back in
Signed-off-by: snipe <snipe@snipe.net>
2024-06-22 16:40:32 +01:00
snipe
b82770d0a8 One more small fix
Signed-off-by: snipe <snipe@snipe.net>
2024-06-22 16:38:29 +01:00
snipe
55e1326164 Fixed #14935 - user does not exist
Signed-off-by: snipe <snipe@snipe.net>
2024-06-22 16:24:18 +01:00
snipe
b0aff68c8b Merge pull request #14934 from snipe/tests/added_workflow_for_php_8_3
Added php 8.3 test
2024-06-21 22:04:05 +01:00
snipe
6a99855c8c Added php 8.3 test
Signed-off-by: snipe <snipe@snipe.net>
2024-06-21 21:47:40 +01:00
snipe
665aa6eb23 Merge pull request #14924 from snipe/fixes/possible_nicer_handling_for_defaultStatusLabel
Possible fix for #14915 - error on import when status label is not provided and no deployable statuses can be found
2024-06-21 21:37:22 +01:00
snipe
42caacbaf9 Merge pull request #14932 from snipe/fixes/small_deprecations
Fixed small deprecation warnings for PHP8.2
2024-06-21 21:26:16 +01:00
snipe
3531256c3f Fixed deprecations
Signed-off-by: snipe <snipe@snipe.net>
2024-06-21 21:06:43 +01:00
snipe
9a0db72eb4 More strings
Signed-off-by: snipe <snipe@snipe.net>
2024-06-20 15:40:38 +01:00
snipe
e11a42cf68 Re-use login string
Signed-off-by: snipe <snipe@snipe.net>
2024-06-20 15:32:00 +01:00
snipe
114769c2d9 Made requestable items more generic in translations
Signed-off-by: snipe <snipe@snipe.net>
2024-06-20 15:26:45 +01:00
snipe
9594596b8a Fixed another hard-coded string
Signed-off-by: snipe <snipe@snipe.net>
2024-06-20 15:22:27 +01:00
snipe
69cf697aa3 Added 2fa translation string
Signed-off-by: snipe <snipe@snipe.net>
2024-06-20 15:20:52 +01:00
snipe
45dbe5cb77 Return the id, not the entire status label
Signed-off-by: snipe <snipe@snipe.net>
2024-06-20 15:05:38 +01:00
snipe
a1ff35f6ce Possible fix for #14915
Signed-off-by: snipe <snipe@snipe.net>
2024-06-20 14:47:46 +01:00
snipe
077a6949e2 docs: add @Tyree as a contributor 2024-06-20 14:42:19 +01:00
snipe
44022f07ca docs: update @bryanlopezinc as a contributor 2024-06-20 14:41:22 +01:00
snipe
30c1e1e86a Merge remote-tracking branch 'origin/develop' 2024-06-20 14:32:46 +01:00
snipe
9a90813877 Merge pull request #14923 from snipe/localizations/updated_strings
Updated language strings
2024-06-20 14:29:13 +01:00
snipe
1113218c6c Updated strings
Signed-off-by: snipe <snipe@snipe.net>
2024-06-20 14:23:15 +01:00
snipe
2556c80250 Merge pull request #14922 from snipe/fixes/incorrect_translation_path
Fixed incorrect translation path
2024-06-20 14:10:32 +01:00
snipe
8f8a5c639b Updated profile translation string path
Signed-off-by: snipe <snipe@snipe.net>
2024-06-20 14:09:25 +01:00
snipe
9e9c37c1e8 Fixed weird linebreaks
Signed-off-by: snipe <snipe@snipe.net>
2024-06-20 14:09:11 +01:00
snipe
6cbdbcb1f1 Merge pull request #14791 from Godmartinz/label-option-limit
Added some  style changes in label field selector for the `DefaultLabel` template
2024-06-20 13:51:49 +01:00
snipe
c8835bf5db Merge remote-tracking branch 'origin/develop' 2024-06-20 13:40:37 +01:00
snipe
6dfedac7a7 Merge pull request #14912 from bryanlopezinc/addIsWritableTest
Add storage path permissions test
2024-06-20 13:38:56 +01:00
snipe
83794eaf33 Merge pull request #14921 from snipe/fixes/14918_added_lastname_dot_firstname
Added lastname.firstname as email format
2024-06-20 13:38:30 +01:00
snipe
bd1f43f9ee Added lastname.firstname as email format
Signed-off-by: snipe <snipe@snipe.net>
2024-06-20 13:36:48 +01:00
snipe
66ffe21ce2 Merge remote-tracking branch 'origin/develop' 2024-06-20 13:09:54 +01:00
snipe
f2e86b7d30 Merge pull request #14920 from snipe/fixes/backup_notifications
Fixed backup notification translations
2024-06-20 13:09:26 +01:00
snipe
5251e6787d Use two-letter fallback code
Ugh, I hate this

Signed-off-by: snipe <snipe@snipe.net>
2024-06-20 12:58:00 +01:00
snipe
856aee0a72 Updated laravel-backup
Signed-off-by: snipe <snipe@snipe.net>
2024-06-20 12:57:35 +01:00
snipe
6b4c71f966 Updated config
Signed-off-by: snipe <snipe@snipe.net>
2024-06-20 12:57:25 +01:00
snipe
dd6d040da5 Added translations
Signed-off-by: snipe <snipe@snipe.net>
2024-06-20 12:56:43 +01:00
bryanlopezinc
203b60383f Added storage path permissions test for SettingsController@getSetupIndex 2024-06-19 17:46:59 +01:00
snipe
61ced0b221 Merge remote-tracking branch 'origin/develop' 2024-06-19 11:41:11 +01:00
snipe
ae7675fee0 Added audit date validation back in
Signed-off-by: snipe <snipe@snipe.net>
2024-06-19 11:37:15 +01:00
snipe
66ed26fbf9 Merge remote-tracking branch 'origin/develop' 2024-06-19 11:13:47 +01:00
snipe
98662c2a77 Merge pull request #14908 from snipe/fixes/importer_audit_date
Fixes/importer audit date
2024-06-19 11:12:12 +01:00
snipe
7099358985 Added accessor/mutator
Signed-off-by: snipe <snipe@snipe.net>
2024-06-19 11:11:50 +01:00
snipe
9a706b3e3e Removed datetime validation
Signed-off-by: snipe <snipe@snipe.net>
2024-06-19 11:05:31 +01:00
snipe
71c9b03779 Fixed incorrect field name
Signed-off-by: snipe <snipe@snipe.net>
2024-06-19 11:05:22 +01:00
snipe
dc7b9315b5 Merge remote-tracking branch 'origin/develop' 2024-06-19 10:35:54 +01:00
snipe
6c17b141db Removed duplicate locations_id search
Signed-off-by: snipe <snipe@snipe.net>
2024-06-19 10:35:21 +01:00
snipe
5d2cca855e Merge remote-tracking branch 'origin/develop'
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	config/version.php
2024-06-19 10:31:04 +01:00
snipe
61e10be04d Bumped version
Signed-off-by: snipe <snipe@snipe.net>
2024-06-19 10:29:50 +01:00
snipe
20d5587851 Merge remote-tracking branch 'origin/develop' 2024-06-19 10:23:18 +01:00
snipe
d8eccf03f1 Merge pull request #14896 from snipe/fixes/tls_loading
Possible fix for proxy/reverse proxy
2024-06-19 10:22:36 +01:00
snipe
6e40b58dc5 Merge remote-tracking branch 'origin/develop' 2024-06-19 01:21:52 +01:00
Marcus Moore
30dd8bcf2b Update Livewire 2024-06-18 15:10:59 -07:00
Marcus Moore
f0a11be0b8 Merge branch 'develop' into chore/sc-23725/livewire3
# Conflicts:
#	composer.lock
2024-06-18 15:10:46 -07:00
snipe
b8882fa00e Merge pull request #14900 from marcusmoore/fixes/81-install
Fixed unable to install on PHP 8.1
2024-06-18 21:53:30 +01:00
Marcus Moore
af337b7018 Move debugbar back to dev dependencies but without updating other packages 2024-06-18 09:46:08 -07:00
Marcus Moore
f60267d208 Revert "Reverted debugbar back into require vs require-dev"
This reverts commit ce338c632d.
2024-06-18 09:42:21 -07:00
snipe
a0c844f4f6 Merge remote-tracking branch 'origin/develop' 2024-06-18 16:12:20 +01:00
snipe
7b84b92e72 Merge pull request #14899 from snipe/fixes/revert_debugbar_dev
Fixed #14898 - (regression) Reverted debugbar back into require vs require-dev
2024-06-18 16:09:51 +01:00
snipe
ce338c632d Reverted debugbar back into require vs require-dev
Signed-off-by: snipe <snipe@snipe.net>
2024-06-18 16:06:38 +01:00
snipe
d9f70c16f7 Possible fix proxy/reverse proxy
Signed-off-by: snipe <snipe@snipe.net>
2024-06-18 14:44:35 +01:00
snipe
d0299de898 Merge remote-tracking branch 'origin/develop' 2024-06-18 11:25:55 +01:00
snipe
9380c9ec81 Merge pull request #14894 from snipe/fixes/14882_archived_scoping_on_models
Fixed #14882 - Properly scope archived based on settings
2024-06-18 11:24:55 +01:00
snipe
941582ac2a Properly scope archived based on settings
Signed-off-by: snipe <snipe@snipe.net>
2024-06-18 10:27:11 +01:00
snipe
04560b4475 Merge remote-tracking branch 'origin/develop' 2024-06-18 10:13:57 +01:00
snipe
0b30ad0da2 Removed test file - #14890
Signed-off-by: snipe <snipe@snipe.net>
2024-06-18 10:12:57 +01:00
snipe
cb6ea2c6fb Merge remote-tracking branch 'origin/develop' 2024-06-18 09:59:43 +01:00
snipe
89a5bbb10e Merge pull request #14893 from snipe/fixes/rb_3792_ambiguous_query
Prefaced fields with “users” for clarity
2024-06-18 09:58:44 +01:00
snipe
2f59bb74cd Prefaced fields with “users” for clarity
Signed-off-by: snipe <snipe@snipe.net>
2024-06-18 09:52:41 +01:00
snipe
6c6a3649ea Production assets
Signed-off-by: snipe <snipe@snipe.net>
2024-06-18 09:33:07 +01:00
snipe
05b97db747 Merge remote-tracking branch 'origin/develop'
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	config/version.php
2024-06-18 09:32:30 +01:00
snipe
543e4c0666 Bumped version file
Signed-off-by: snipe <snipe@snipe.net>
2024-06-18 09:31:49 +01:00
snipe
e28619f769 Bumped papaparse library
Signed-off-by: snipe <snipe@snipe.net>
2024-06-18 09:30:24 +01:00
snipe
4d8c2d3f4e Merge pull request #14886 from marcusmoore/fixes/debugbar
Bumped debugbar from v3.13.0 to v3.13.5 to fix issue with session messages
2024-06-18 09:22:18 +01:00
snipe
f53eeb8b33 Merge pull request #14887 from marcusmoore/fixes/fix-test-namespace
Fixed namespace for ViewUserTest
2024-06-18 09:20:58 +01:00
snipe
aba6d9b338 Merge pull request #14885 from marcusmoore/tests/asset-model-test-improvements
Added more tests around Asset Model
2024-06-18 09:20:45 +01:00
snipe
cd5bef414c Merge pull request #14884 from marcusmoore/fix/actionlogcontroller-fix
Fixed missing `}`
2024-06-18 09:20:26 +01:00
Marcus Moore
4f2d2ae4b8 Fix namespace for ViewUserTest 2024-06-17 16:37:24 -07:00
Marcus Moore
1bd0ab7389 Move barryvdh/laravel-debugbar from require to require-dev 2024-06-17 16:28:08 -07:00
Marcus Moore
8799276c6e Bump debugbar from v3.13.0 to v3.13.5 2024-06-17 16:25:39 -07:00
Marcus Moore
672aabf4ac Add more tests for Asset Model index and store methods 2024-06-17 14:51:59 -07:00
Marcus Moore
796d6909d5 Add missing } 2024-06-17 14:40:06 -07:00
Marcus Moore
a3dea99bbb Fix category edit form component 2024-06-17 14:24:16 -07:00
Marcus Moore
fc351a1896 Remove .live from oauth clients 2024-06-17 13:03:27 -07:00
Marcus Moore
d9164281ab Merge branch 'develop' into chore/sc-23725/livewire3
# Conflicts:
#	resources/views/livewire/oauth-clients.blade.php
2024-06-17 12:57:04 -07:00
snipe
cbb5b6e846 Merge remote-tracking branch 'origin/develop'
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	config/version.php
2024-06-17 15:58:27 +01:00
snipe
08bd39dbba Bumped version
Signed-off-by: snipe <snipe@snipe.net>
2024-06-17 15:57:32 +01:00
snipe
430808e180 Merge remote-tracking branch 'origin/develop' 2024-06-17 15:52:13 +01:00
snipe
6976dc2b26 Merge pull request #14879 from snipe/fixes/better_ui_for_oauth
Fixed weird layout in admin oauth [sc-25673]
2024-06-17 15:51:11 +01:00
snipe
27063d5bae Fix weird layout in admin oauth [sc-25673]
Signed-off-by: snipe <snipe@snipe.net>
2024-06-17 15:44:07 +01:00
snipe
5be86b9dbb Merge remote-tracking branch 'origin/develop' 2024-06-17 13:43:45 +01:00
snipe
afc78524fc Merge pull request #14877 from snipe/fixes/spatie-backup-config
Updated config
2024-06-17 13:42:02 +01:00
snipe
eb33a2451f Updated config
Signed-off-by: snipe <snipe@snipe.net>
2024-06-17 13:36:52 +01:00
snipe
891a0a0965 Merge branch 'develop' of https://github.com/snipe/snipe-it into develop 2024-06-17 13:05:31 +01:00
snipe
50f0797850 Added aria hidden to icon
Signed-off-by: snipe <snipe@snipe.net>
2024-06-17 13:05:27 +01:00
snipe
36cdf0e0be Merge pull request #14876 from snipe/fixes/small_footer_issues
Fixed small footer issues
2024-06-17 12:53:52 +01:00
snipe
d9cc3c3ec7 Removed extra divs
Signed-off-by: snipe <snipe@snipe.net>
2024-06-17 12:52:23 +01:00
snipe
069a1608de Merge remote-tracking branch 'origin/develop'
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	config/version.php
2024-06-17 12:10:13 +01:00
snipe
60accfd601 Bumped version file
Signed-off-by: snipe <snipe@snipe.net>
2024-06-17 12:09:30 +01:00
snipe
b1f2051b43 Merge remote-tracking branch 'origin/develop' 2024-06-17 11:58:11 +01:00
snipe
233e4af7f8 Added base asset models test
Signed-off-by: snipe <snipe@snipe.net>
2024-06-17 11:57:30 +01:00
snipe
dc1b808a28 Fixed static request
Signed-off-by: snipe <snipe@snipe.net>
2024-06-17 11:47:21 +01:00
snipe
91a423e60e Bumped php max version
Signed-off-by: snipe <snipe@snipe.net>
2024-06-17 11:27:55 +01:00
snipe
bd03a6d206 Production assets
Signed-off-by: snipe <snipe@snipe.net>
2024-06-17 11:18:44 +01:00
snipe
d87da78eb5 Merge remote-tracking branch 'origin/develop'
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	app/Http/Controllers/Users/UsersController.php
#	config/version.php
#	public/css/build/AdminLTE.css
#	public/css/build/app.css
#	public/css/build/overrides.css
#	public/css/dist/all.css
#	public/css/dist/bootstrap-table.css
#	public/js/build/app.js
#	public/js/build/vendor.js
#	public/js/dist/all-defer.js
#	public/js/dist/all.js
#	public/js/dist/bootstrap-table.js
#	public/mix-manifest.json
2024-06-17 11:18:33 +01:00
snipe
f3e82c2c80 Updated languages
Signed-off-by: snipe <snipe@snipe.net>
2024-06-17 10:59:17 +01:00
snipe
569f05a99e Built prod assets
Signed-off-by: snipe <snipe@snipe.net>
2024-06-17 10:45:04 +01:00
snipe
ece7c22df9 Bumped version
Signed-off-by: snipe <snipe@snipe.net>
2024-06-17 10:44:20 +01:00
snipe
4eefd39172 Bumped requirements
Signed-off-by: snipe <snipe@snipe.net>
2024-06-17 10:42:59 +01:00
snipe
daae5d6859 Merge pull request #14724 from phil-flip/develop
Added Proper Docker Compose and .env.docker-setup files
2024-06-16 15:49:15 +01:00
snipe
df76769a29 Merge pull request #14871 from marcusmoore/chore/move-test
Moved `AssetFilesTest`
2024-06-13 23:10:36 +01:00
Marcus Moore
fe72639925 Move AssetFilesTest 2024-06-13 14:25:25 -07:00
Marcus Moore
c3e6e1144f Merge branch 'develop' into chore/sc-23725/livewire3 2024-06-12 15:12:40 -07:00
snipe
cacb5d62dc Merge pull request #14800 from snipe/fixes/importer_tweaks
Importer tweaks
2024-06-12 12:51:11 +01:00
snipe
a8b47a55bc Merge pull request #14801 from snipe/fixes/companyable_trait_on_users
Allow CompanyableTrait trait on users
2024-06-12 12:42:56 +01:00
snipe
3159fdec9f FFS
Signed-off-by: snipe <snipe@snipe.net>
2024-06-12 12:40:43 +01:00
snipe
ea990a5381 Fixed tests
Signed-off-by: snipe <snipe@snipe.net>
2024-06-12 12:31:41 +01:00
snipe
134183ef16 Shuffled tests around again
Signed-off-by: snipe <snipe@snipe.net>
2024-06-12 12:12:15 +01:00
snipe
67ab2536bc Updated test names
Signed-off-by: snipe <snipe@snipe.net>
2024-06-12 12:03:33 +01:00
snipe
756a2ac25c Added API tests
Signed-off-by: snipe <snipe@snipe.net>
2024-06-12 11:58:12 +01:00
snipe
acaceb4103 Moved tests
Signed-off-by: snipe <snipe@snipe.net>
2024-06-12 11:57:50 +01:00
snipe
7e3d66ec53 Merge branch 'develop' into fixes/companyable_trait_on_users 2024-06-12 11:27:26 +01:00
snipe
1ca9bb5aa8 Merge pull request #14698 from Scarzy/features/asset_file_upload_from_api
Added #9413: Asset file upload from API
2024-06-12 11:18:06 +01:00
snipe
c641b733e1 Merge pull request #14834 from bryanlopezinc/AddAppUrlTest
Added test for app url config
2024-06-12 11:14:17 +01:00
snipe
16cf6bc852 Merge pull request #14843 from marcusmoore/chore/sc-25767
Added GitHub workflow for tests in Postgres
2024-06-12 09:53:55 +01:00
Marcus Moore
c51b7d7104 Inline variable 2024-06-10 12:22:23 -07:00
Marcus Moore
5c0ca92fd7 Switch to using workflow_dispatch for PostgreSQL tests 2024-06-10 10:24:10 -07:00
snipe
241e9bc253 Merge pull request #14847 from uberbrady/users_index_api_optimization
Optimization for listings of large numbers of users
2024-06-10 13:57:49 +01:00
Brady Wetherington
c8820adb56 Add two new 'with()' relationships to Users API index query 2024-06-10 13:29:53 +01:00
snipe
0f4c6dd5b0 Merge pull request #14830 from snipe/chore/sc-25756/better_validation_for_relations_on_delete
Better validation for relations on delete
2024-06-07 18:10:41 +01:00
snipe
f8ab9f62f6 Merge pull request #14842 from Godmartinz/adjust-preview-window
Fixed label preview window position
2024-06-07 18:09:56 +01:00
Phil
217ed03b8e add DB_PORT 2024-06-07 12:04:10 +02:00
Godfrey M
77e6058e4c remembers chosen label 2024-06-06 13:55:15 -07:00
Godfrey M
4a60026162 moves preview down by field definitions 2024-06-06 13:42:06 -07:00
Godfrey M
3621292a0e removes unnecessary height 2024-06-06 13:28:05 -07:00
Marcus Moore
6c296ccf8e Use "postgres" instead of "postgres:14" 2024-06-06 13:27:39 -07:00
Godfrey M
6df1c36011 oops 2024-06-06 13:24:02 -07:00
Marcus Moore
924da00f3e Add Postgres GitHub workflow for tests 2024-06-06 13:21:00 -07:00
Godfrey M
44dae22a3c adjust label preview window 2024-06-06 13:18:19 -07:00
bryanlopezinc
d35e251d6e Added test for app url config 2024-06-05 21:46:43 +01:00
snipe
e19d2d6ec9 Merge pull request #14832 from snipe/fixes/added_consumables_to_inventory_email
Fixed #14812 - added consumables to individual inventory report
2024-06-05 20:42:35 +01:00
snipe
871255f28c Fixed #14812 - added consumables to individual inventory report
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 20:40:45 +01:00
Marcus Moore
9044aa4ed9 Import class 2024-06-05 11:48:47 -07:00
Marcus Moore
60c7efae3c Remove commented code 2024-06-05 11:48:10 -07:00
Marcus Moore
48fc6ca60e Remove commented code 2024-06-05 11:46:57 -07:00
snipe
7ac315e1eb Fixed tests
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 14:50:45 +01:00
snipe
374c6845d6 Added test if user has assets
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 14:16:28 +01:00
snipe
c5cbe37007 Added view permissions for the redirects
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 14:13:51 +01:00
snipe
a2346e4666 Changed numbers
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 14:09:57 +01:00
snipe
2479ccc4c6 Fixed accessory assignment
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 14:07:18 +01:00
snipe
64dd8f5d65 Missed a use statement
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 14:03:33 +01:00
snipe
47420a802a More (failing) tests
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 14:02:04 +01:00
snipe
5cdb2b7163 Check that the user was not aready deleted
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 14:00:35 +01:00
snipe
d4c080c7e4 Use the form request on the UI controller
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 13:40:32 +01:00
snipe
065a47a446 Use the DeleteUser request
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 13:28:44 +01:00
snipe
5bd9ecb8df Created DeleteUser request
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 13:28:37 +01:00
snipe
1cdec61be6 Use more modern mutator/accessory syntax
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 10:56:54 +01:00
snipe
b0ddb26e73 Fixed variable name, $field
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 10:28:35 +01:00
snipe
181bafd012 Fixed tests
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 10:28:35 +01:00
snipe
e054fc1ef1 Removed noisy import debugging, made nicer output
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 10:28:35 +01:00
snipe
9d9ad86dd5 Added mutators and accessors for dates
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 10:28:35 +01:00
snipe
afe4e5d62e Added date parser
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 10:28:35 +01:00
snipe
52950f1322 Refactored date parsing
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 10:28:35 +01:00
snipe
026c80992e Pull the log reference
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 10:28:35 +01:00
snipe
0ee2b74ff3 Added date parsers for new date fields
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 10:28:35 +01:00
snipe
3a0f7eca54 Put asset EOL date back in the Item Importer
I have no idea why this is necessary

Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 10:28:35 +01:00
snipe
f4d530b4b1 Removed filename column since it’s never worked
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 10:28:35 +01:00
snipe
4ccbfb56a4 Make sure the status label is deployable
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 10:28:35 +01:00
snipe
d02904c9a3 Added new fields
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 10:28:35 +01:00
snipe
c8279c0b99 Moved asset-only date stuff into the asset importer
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 10:28:35 +01:00
snipe
f4f184e115 Removed noisy debugging
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 10:28:35 +01:00
snipe
b2a86e312b Added last_checkout and last_checkin as fillable
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 10:28:35 +01:00
snipe
9d56617caf Moved expected checkin date on view
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 10:28:35 +01:00
snipe
de7b8940fe Merge pull request #14828 from fe80/fix/controller-signature-s3
fix(ActionlogController): add missin class Illuminate\Support\Facades…
2024-06-05 09:58:03 +01:00
snipe
09e94ec176 Reordered withTrashed() and find()
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 09:57:24 +01:00
snipe
832ceeba56 Fixed missing endpush
Signed-off-by: snipe <snipe@snipe.net>
2024-06-05 09:57:10 +01:00
fe80
ea7c3c8485 fix(ActionlogController): add missing class Illuminate\Support\Facades\Storage 2024-06-05 10:55:27 +02:00
snipe
bc36c8074e Merge pull request #14807 from bryanlopezinc/AddTestToCheckEnvVisibility
Added test for .env visibility for setup page
2024-06-05 09:50:54 +01:00
snipe
9fccafa3ac Merge pull request #14816 from uberbrady/hotfix_autoincrement_workaround
Don't save next autoincrement base if it's going to fail, next
2024-06-05 09:47:40 +01:00
snipe
fa083098fc Merge pull request #14819 from snipe/localization/new_strings_2024_06_03
Updated strings
2024-06-05 09:46:41 +01:00
snipe
7688c437c0 Merge pull request #14824 from Godmartinz/select-2-redirect-fix
Fixed select 2 Behavior
2024-06-05 09:46:25 +01:00
snipe
697ac83040 Merge pull request #14825 from marcusmoore/chore/test-organization
Re-organized test suite
2024-06-05 09:46:08 +01:00
snipe
a742105c21 Merge pull request #14827 from fe80/fix/controller-signature-s3
fix(ActionlogController): correct signature image for s3 bucket
2024-06-05 09:40:21 +01:00
fe80
7a76ec9e02 fix(ActionlogController): correct signature image for s3 bucket 2024-06-05 10:08:15 +02:00
Marcus Moore
b2a0e7958b Inject alpine on label engine page 2024-06-04 17:03:36 -07:00
Marcus Moore
99439f0a5c Define property 2024-06-04 16:14:07 -07:00
Marcus Moore
ef91c8123e Remove unneeded re-render of select2 2024-06-04 15:49:57 -07:00
Marcus Moore
5eb5742b3d Define property 2024-06-04 15:49:39 -07:00
Marcus Moore
296cf3e34b Update OauthClients component 2024-06-04 15:37:41 -07:00
Marcus Moore
e98c3f92c1 Update domain name 2024-06-04 10:49:29 -07:00
Marcus Moore
d202dfc225 Organize API tests into domains 2024-06-04 10:48:53 -07:00
Godfrey M
6202f6157a fix select2 behavior 2024-06-04 08:41:00 -07:00
Marcus Moore
b1e8e5389b Make most test names singular 2024-06-03 16:54:59 -07:00
Marcus Moore
95f6381da4 Update tests names to VerbNounTest 2024-06-03 16:53:15 -07:00
Marcus Moore
b07e3b4a91 Remove API from test class name 2024-06-03 16:50:56 -07:00
Marcus Moore
86bd9a2674 Move test method to existing test 2024-06-03 16:49:44 -07:00
Marcus Moore
29a36839aa Move existing API checkin and checkout tests under domain directory 2024-06-03 16:29:53 -07:00
snipe
85cb7c92e7 Updated strings
Signed-off-by: snipe <snipe@snipe.net>
2024-06-03 20:44:40 +01:00
Brady Wetherington
e827bc9a07 Tests on asset tags that are maximum integers and *almost* maximum... 2024-06-03 17:31:56 +01:00
snipe
a6f19a1657 docs: add @U-H-T as a contributor 2024-06-03 17:06:43 +01:00
snipe
6229d0c616 Merge pull request #14758 from U-H-T/features/add_logo_support_for_Brother_TZe24
add logo support for Brother TZe24mm labels
2024-06-03 17:02:18 +01:00
snipe
bc6c969f21 Merge pull request #14814 from snipe/dependabot/github_actions/develop/crowdin/github-action-2
Bump crowdin/github-action from 1 to 2
2024-06-03 16:58:10 +01:00
snipe
8f4ede7785 Merge pull request #14817 from snipe/fixes/hotfix_for_14815
Fixes #14815 - Fixed translation string
2024-06-03 16:48:54 +01:00
snipe
877adb082c Fixed translation string
Signed-off-by: snipe <snipe@snipe.net>
2024-06-03 16:40:52 +01:00
Brady Wetherington
90818bb147 Don't save next autoincrement base if it's going to fail, next 2024-06-03 15:58:57 +01:00
dependabot[bot]
f767a94c84 Bump crowdin/github-action from 1 to 2
Bumps [crowdin/github-action](https://github.com/crowdin/github-action) from 1 to 2.
- [Release notes](https://github.com/crowdin/github-action/releases)
- [Commits](https://github.com/crowdin/github-action/compare/v1...v2)

---
updated-dependencies:
- dependency-name: crowdin/github-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-03 08:18:51 +00:00
bryanlopezinc
89e50b94d3 Fix Failing sqlite test 2024-06-03 08:09:05 +01:00
snipe
c4d97d095f Merge pull request #14809 from snipe/features/more_tests
Added a few more tests
2024-06-01 04:25:19 +01:00
snipe
67fb3f10d5 Tightened up tests with better checks
Signed-off-by: snipe <snipe@snipe.net>
2024-06-01 04:24:47 +01:00
snipe
ea8d390596 MOAR TESTS
Signed-off-by: snipe <snipe@snipe.net>
2024-06-01 04:01:09 +01:00
snipe
cff382605c Fixed some missing strings and checks
Signed-off-by: snipe <snipe@snipe.net>
2024-06-01 04:01:04 +01:00
snipe
52af8afac2 Added company scoping test
Signed-off-by: snipe <snipe@snipe.net>
2024-06-01 03:10:29 +01:00
snipe
03b0268dc2 Fixed typo
Signed-off-by: snipe <snipe@snipe.net>
2024-06-01 03:00:45 +01:00
snipe
c09e93e288 Updated delete users API tests, moved non-API tests
Signed-off-by: snipe <snipe@snipe.net>
2024-06-01 02:59:04 +01:00
snipe
694e3b7f3a Fixed typo
Signed-off-by: snipe <snipe@snipe.net>
2024-06-01 00:42:16 +01:00
snipe
32c367090b Updated test names
Signed-off-by: snipe <snipe@snipe.net>
2024-05-31 23:13:27 +01:00
snipe
abcfe2b757 Derp. Spelling.
Signed-off-by: snipe <snipe@snipe.net>
2024-05-31 23:12:13 +01:00
snipe
f7687008b7 Added more tests
Signed-off-by: snipe <snipe@snipe.net>
2024-05-31 23:10:59 +01:00
snipe
b156264684 Tidied up scoping to be better for testing
Signed-off-by: snipe <snipe@snipe.net>
2024-05-31 23:10:53 +01:00
snipe
3f9a80942e Removed manual companyable from non-API views
Signed-off-by: snipe <snipe@snipe.net>
2024-05-31 23:10:23 +01:00
snipe
dc62e393c3 Hotfix for user permissions
Signed-off-by: snipe <snipe@snipe.net>
2024-05-31 21:22:21 +01:00
snipe
46be0f6610 Merge pull request #14808 from snipe/fixes/small_redirect_tweaks
Small UI tweaks and redirects when asset model is invalid
2024-05-31 20:46:07 +01:00
snipe
dd0a16c3d5 Added tests
Signed-off-by: snipe <snipe@snipe.net>
2024-05-31 20:42:32 +01:00
snipe
a15ed6eaee Wrap disabled <a> links in a span for tooltips
Signed-off-by: snipe <snipe@snipe.net>
2024-05-31 19:29:29 +01:00
snipe
3005565bba Slight tweak to language
Signed-off-by: snipe <snipe@snipe.net>
2024-05-31 19:29:12 +01:00
snipe
cf45e7536f Redirect with error if model is invalid
Signed-off-by: snipe <snipe@snipe.net>
2024-05-31 18:51:58 +01:00
snipe
1d97d95c10 UI and styling tweaks
Signed-off-by: snipe <snipe@snipe.net>
2024-05-31 18:48:34 +01:00
snipe
4a1b1675cb Use storage helper
Signed-off-by: snipe <snipe@snipe.net>
2024-05-31 18:48:09 +01:00
snipe
8c5249ba4b Disable buttons on view page if model is invalid
Signed-off-by: snipe <snipe@snipe.net>
2024-05-31 18:47:53 +01:00
snipe
b936591240 Warn and disable on checkout if model is invalid
Signed-off-by: snipe <snipe@snipe.net>
2024-05-31 18:47:34 +01:00
snipe
76e664d647 Warn and disable the checkout button if model is invalid
Signed-off-by: snipe <snipe@snipe.net>
2024-05-31 18:47:18 +01:00
snipe
0253c2a756 Lauout tweaks, warn and disable button if model is invalid
Signed-off-by: snipe <snipe@snipe.net>
2024-05-31 18:46:57 +01:00
snipe
d27613f55c Updated strings
Signed-off-by: snipe <snipe@snipe.net>
2024-05-31 18:46:41 +01:00
snipe
ca8d478e87 Redirect if model is invalid
Signed-off-by: snipe <snipe@snipe.net>
2024-05-31 18:46:32 +01:00
bryanlopezinc
c63c17d49f Added test for .env visibility for setup page 2024-05-31 17:33:57 +01:00
snipe
801e58d52e Removed manual scoping
Signed-off-by: snipe <snipe@snipe.net>
2024-05-31 06:58:15 +01:00
snipe
06e9625c64 Use hasUser() to avoid table collisions and infinite loop
Signed-off-by: snipe <snipe@snipe.net>
2024-05-31 06:58:07 +01:00
snipe
5800e8d8e9 Added companyable trait
Signed-off-by: snipe <snipe@snipe.net>
2024-05-31 06:57:34 +01:00
snipe
623aa58163 Removed unused statement
Signed-off-by: snipe <snipe@snipe.net>
2024-05-31 06:57:25 +01:00
snipe
45cfec5b29 Merge pull request #14797 from bryanlopezinc/AddTestsForSettings
Added test for setup page
2024-05-31 02:31:35 +01:00
Marcus Moore
5a9a231359 Remove alpinejs 2024-05-30 16:57:20 -07:00
Marcus Moore
1736bf5510 Merge branch 'develop' into chore/sc-23725/livewire3
# Conflicts:
#	app/Livewire/LoginForm.php
#	package.json
#	resources/views/livewire/login-form.blade.php
2024-05-30 16:56:50 -07:00
snipe
ee8931f886 Merge pull request #14799 from marcusmoore/chore/remove-unused-component
Removed unused Livewire component
2024-05-31 00:54:43 +01:00
Marcus Moore
1a1b891309 Remove unused Login Livewire component 2024-05-30 16:49:05 -07:00
Marcus Moore
2eaac3d381 Fix select2 re-renders 2024-05-30 16:20:04 -07:00
Marcus Moore
f03249898a Update id syntax in custom fields component 2024-05-30 16:12:52 -07:00
snipe
0981cfa902 Built assets
Signed-off-by: snipe <snipe@snipe.net>
2024-05-30 20:22:50 +01:00
snipe
37fbcfa22b Merge pull request #14798 from Godmartinz/redirect_back_to_asset_fix
Fixed checkin option from appearing
2024-05-30 19:41:02 +01:00
Godfrey M
0ee441a976 adds hidden as well 2024-05-30 11:19:06 -07:00
Godfrey M
cf8de3baa9 fix checkin option from appearing 2024-05-30 11:11:35 -07:00
bryanlopezinc
404ee238a3 Added test for setup page 2024-05-30 14:37:24 +01:00
snipe
5a5d171ba2 Put session facade back - derp
Signed-off-by: snipe <snipe@snipe.net>
2024-05-30 14:15:08 +01:00
snipe
aadee068b3 Merge pull request #14740 from Godmartinz/redirect_back_to_asset
Added Redirect options to asset check in/out
2024-05-30 14:14:04 +01:00
snipe
a46e2ebfd8 Small tweaks to user export, user view translations
Signed-off-by: snipe <snipe@snipe.net>
2024-05-30 13:59:00 +01:00
snipe
f710b1aac3 Merge pull request #14614 from akemidx/feature/sc-19796
ADDED: Export User Permissions (Superuser & Admin)
2024-05-30 13:41:26 +01:00
snipe
f6fe6e70b9 Merge branch 'develop' into redirect_back_to_asset 2024-05-30 13:38:11 +01:00
snipe
bed8861179 Merge pull request #14796 from snipe/chore/sc-25715/axios
Upgraded axios
2024-05-30 13:17:23 +01:00
snipe
180d7b1b5b Upgraded axios
Signed-off-by: snipe <snipe@snipe.net>
2024-05-30 13:13:25 +01:00
snipe
386416ee5d Merge pull request #14795 from snipe/bug/sc-25687/papaparse
Upgraded papaparse
2024-05-30 13:04:00 +01:00
snipe
6b5aa91f3d Upgraded papaparse
Signed-off-by: snipe <snipe@snipe.net>
2024-05-30 13:00:57 +01:00
Marcus Moore
e80b80f5d1 Remove manual livewire tags 2024-05-29 16:04:05 -07:00
Marcus Moore
9e35441281 Importer fixes 2024-05-29 15:50:42 -07:00
Godfrey M
e28ad50bec fixes the color change 2024-05-29 15:34:08 -07:00
Scarzy
f48c5ee252 Fix an error message 2024-05-29 22:32:45 +01:00
Scarzy
98a94dec29 Change some errors to be 404
The asset or file was not found, so 500 wasn't the best choice of error
code
2024-05-29 22:17:36 +01:00
Marcus Moore
7d95e7765d Add a few .prevents 2024-05-29 14:13:29 -07:00
Marcus Moore
ee75b30683 Enable legacy_model_binding 2024-05-29 14:06:27 -07:00
Scarzy
ca9d4e3155 Get the tests for download and delete working 2024-05-29 22:01:49 +01:00
Scarzy
633bcbb6c4 Get the file upload test working
Added the upload functionality to the get and delete tests, but I
currently don't seem to be able to reference the correct file ID
2024-05-29 22:01:49 +01:00
Scarzy
2d4af61e6c Begin to add some tests
There is currently only really a test for listing, and only for the
empty list response
2024-05-29 22:01:49 +01:00
Scarzy
45329912e6 Give a better response to listing no files on an asset
HTTP500 was never a good choice. Now it sends back an empty array
2024-05-29 22:01:49 +01:00
Scarzy
b9d56a8ecc Fix some routes
Names of some of the routes overlapped with others in an incompatible
way. This makes the names more distinct
2024-05-29 22:01:48 +01:00
Scarzy
91c1e53e52 Fix the test file location 2024-05-29 22:01:48 +01:00
Scarzy
73a87a8ea8 Add the framework of a test 2024-05-29 22:01:48 +01:00
Scarzy
bb0a614c39 Update some comments 2024-05-29 22:01:48 +01:00
Scarzy
f11ea79406 Add some sanity checks that the asset actually exists 2024-05-29 22:01:48 +01:00
Scarzy
e817b20840 Fix some responses to be more appropriate
Error/success was mixed up
2024-05-29 22:01:48 +01:00
Scarzy
516f766a44 Remove some debug code 2024-05-29 22:01:48 +01:00
Scarzy
f5791c79a5 Change the returns to be API appropriate 2024-05-29 22:01:48 +01:00
Scarzy
f6a1a76095 Add an endpoint for deleting a file 2024-05-29 22:01:48 +01:00
Scarzy
bbb9145744 Add an API endpoint to download files 2024-05-29 22:01:48 +01:00
Scarzy
194853d860 Remove a redundant line 2024-05-29 22:01:48 +01:00
Scarzy
92670d5711 Add the ability to list files for an asset 2024-05-29 22:01:48 +01:00
Scarzy
8a2ea971e1 Add an API assets files controller
Based heavily on the Assets assets files controller.
Added errors related to to the files management.
Added the API endpoints for file upload and show, but only upload is
currently tested/works.
2024-05-29 22:01:48 +01:00
Marcus Moore
8d924b60d7 Replace references to @this in importer 2024-05-29 13:51:57 -07:00
Marcus Moore
34595c266d Update script tag 2024-05-29 13:16:30 -07:00
Marcus Moore
638ae9bdd5 Use new id method 2024-05-29 13:15:59 -07:00
Godfrey M
713ce7836f add some css in label field selector 2024-05-29 13:07:33 -07:00
Marcus Moore
093c6652a8 Update select2 snippet for Livewire 3 2024-05-29 12:58:24 -07:00
Marcus Moore
17f0ac1eae Set view correctly 2024-05-29 12:57:43 -07:00
Marcus Moore
43616d1874 Remove alpine reference from webpack 2024-05-29 12:30:20 -07:00
Marcus Moore
9dc4f2ca80 Migrate config 2024-05-29 12:24:17 -07:00
Marcus Moore
73e3ac7dd8 Migrate to $dispatch 2024-05-29 12:18:31 -07:00
Marcus Moore
8ff639913d Migrate away from dispatchBrowserEvent() 2024-05-29 12:17:36 -07:00
Marcus Moore
45419586fe Migrate away from wire:model.prevent 2024-05-29 12:11:33 -07:00
Marcus Moore
d8a480b2a8 Migrate to wire:model.blur 2024-05-29 12:11:02 -07:00
Marcus Moore
29d87246a2 Migrate away from wire:model.defer 2024-05-29 12:10:46 -07:00
Marcus Moore
58e638d3cb Migrate to wire:model.live 2024-05-29 12:08:25 -07:00
Marcus Moore
b52380f376 Migrate to new namespace 2024-05-29 12:07:48 -07:00
Marcus Moore
4ae74fb7f6 Remove alpinejs from package.json 2024-05-29 12:06:54 -07:00
Marcus Moore
7d1acd3d79 Update Livewire via composer 2024-05-29 12:04:06 -07:00
snipe
12e107a71b Merge pull request #13062 from ak-piracha/feature/snipe-12892-bulk-consumable-checkout
Bulk Consumable Checkout
2024-05-29 19:42:25 +01:00
snipe
fba72e1e8d Merge pull request #14789 from snipe/fixes/14781_broken_wrench_icon
Fixed #14781 - Fixed broken wrench icon on some browsers in manufacturer section
2024-05-29 19:23:21 +01:00
snipe
7bbee053c6 Updated fa icon call
Signed-off-by: snipe <snipe@snipe.net>
2024-05-29 19:19:45 +01:00
snipe
6ea1a3bacf Merge pull request #14788 from snipe/security/Snyk-Upgrade-jquery-ui-from-1.13.2-to-1.13.3-#14735
Updated jquery-UI
2024-05-29 18:47:39 +01:00
snipe
603afe4466 Updated jquery-UI
Signed-off-by: snipe <snipe@snipe.net>
2024-05-29 18:44:39 +01:00
snipe
037ee8c07a Merge pull request #14787 from snipe/fixes/return_redirect_fixes_for_docblock
Fixes path for redirect response
2024-05-29 18:28:00 +01:00
snipe
df1cef59d5 Fixes path for redirect response
Signed-off-by: snipe <snipe@snipe.net>
2024-05-29 18:01:40 +01:00
snipe
3fcd196c04 Merge pull request #14786 from snipe/security/upgrade_bs_tables
#14743 - Upgrade bootstrap-table from 1.22.3 to 1.22.5
2024-05-29 13:12:07 +01:00
snipe
8ee5e7cd0a #14743 - Upgrade bootstrap-table from 1.22.3 to 1.22.5
Signed-off-by: snipe <snipe@snipe.net>
2024-05-29 13:10:46 +01:00
snipe
1ec85063ee Merge pull request #14785 from snipe/fixes/updates_facade_paths
Fixed/updated facade paths
2024-05-29 13:03:13 +01:00
snipe
92ba889cae Updated/removed facades
Signed-off-by: snipe <snipe@snipe.net>
2024-05-29 12:53:51 +01:00
snipe
f17162c2e2 Use artisan facade
Signed-off-by: snipe <snipe@snipe.net>
2024-05-29 12:40:05 +01:00
snipe
fb233c0aa4 Cleaned up facade names and references
Signed-off-by: snipe <snipe@snipe.net>
2024-05-29 12:38:15 +01:00
snipe
369c819a27 Merge pull request #14754 from Godmartinz/footer_user_bug
Removed extra div from User Details.
2024-05-29 11:29:02 +01:00
snipe
f1eb4bd3a5 Merge pull request #14349 from snipe/jerm/update-mailer-configs
Update mailer configurations for Symfony mailer
2024-05-29 11:25:55 +01:00
snipe
2f828683da Merge pull request #14783 from snipe/fixes/fixed_category_test_depreciation_warning
Fixed deprecation warning on category test
2024-05-29 11:19:31 +01:00
snipe
13db151297 Fixed deprecation warning on category test
Signed-off-by: snipe <snipe@snipe.net>
2024-05-29 11:06:51 +01:00
snipe
bb95c231e5 Merge branch 'develop' of https://github.com/snipe/snipe-it into develop 2024-05-29 10:55:12 +01:00
snipe
dcea14fb99 Merge pull request #14778 from uberbrady/fix_8_3_compat
Allows Snipe-ITv7 to install on PHPv8.1-8.3
2024-05-29 10:55:02 +01:00
snipe
282fed27da Add @bryanlopezinc as a contributor 2024-05-29 10:46:59 +01:00
snipe
cf3ffe9c74 Merge pull request #14782 from bryanlopezinc/ReduceIDeErrors
Reduce IDE errors in App\Http\Controllers\SettingsController
2024-05-29 10:46:03 +01:00
bryanlopezinc
5d01a06245 Reduce IDE errors in App\Http\Controllers\SettingsController 2024-05-29 08:07:49 +01:00
snipe
02cdda56e2 Merge branch 'develop' of https://github.com/snipe/snipe-it into develop 2024-05-29 02:00:25 +01:00
snipe
ffecd97665 Bumped laravel in readme
Signed-off-by: snipe <snipe@snipe.net>
2024-05-29 02:00:21 +01:00
snipe
779cf9418e Merge pull request #14780 from marcusmoore/fixes/sqlite-tests-in-gh
Fixed sqlite tests in GitHub Actions
2024-05-29 01:59:12 +01:00
Marcus Moore
34b4452645 Skip "migrating" and run passport:keys for sqlite testing in GH 2024-05-28 17:41:01 -07:00
snipe
da1c4c23e6 Merge branch 'develop' of https://github.com/snipe/snipe-it into develop 2024-05-29 00:26:37 +01:00
snipe
a5d0a21757 Fixed string path
Signed-off-by: snipe <snipe@snipe.net>
2024-05-29 00:26:33 +01:00
snipe
29454f7288 Merge pull request #14779 from marcusmoore/fixes/fix-group-create-endpoint
Fixed Array to string conversion exception in group create api endpoint
2024-05-28 23:26:34 +01:00
Brady Wetherington
e271711c5b Added the clock-lts repo which allows use on php8.1-8.3 2024-05-28 22:50:09 +01:00
Marcus Moore
4c78da3bbf Re-add json encoding of permissions 2024-05-28 13:03:09 -07:00
Marcus Moore
71bab2c315 Improve test case 2024-05-28 13:02:44 -07:00
snipe
fceba13b03 Merge pull request #14777 from snipe/fixes/reportscontroller_optimizations
Reports controller query optimizations
2024-05-28 18:08:27 +01:00
snipe
8ac3937bf4 Commented model loading on asset model
Signed-off-by: snipe <snipe@snipe.net>
2024-05-28 18:03:19 +01:00
snipe
1c1729854e Use statics for location, supplier, etc
Signed-off-by: snipe <snipe@snipe.net>
2024-05-28 18:02:22 +01:00
snipe
14c78d9065 Use static for custom fields
Signed-off-by: snipe <snipe@snipe.net>
2024-05-28 18:02:09 +01:00
snipe
b1cb9259da Re-use total to avoid duplicate count
Signed-off-by: snipe <snipe@snipe.net>
2024-05-28 18:01:47 +01:00
snipe
7d2af61989 Merge pull request #14775 from snipe/bug/sc-25676/groups_api
Fixed #14771: improvements to groups API
2024-05-28 15:33:36 +01:00
snipe
03b5c2e246 Fixed bad translation string
Signed-off-by: snipe <snipe@snipe.net>
2024-05-28 15:21:28 +01:00
snipe
33d5d5e24f Added tests
Signed-off-by: snipe <snipe@snipe.net>
2024-05-28 15:21:13 +01:00
snipe
3df2a4a70b Removed debugging
Signed-off-by: snipe <snipe@snipe.net>
2024-05-28 15:16:44 +01:00
snipe
6b41970e97 Check that selected is an array
Signed-off-by: snipe <snipe@snipe.net>
2024-05-28 15:15:31 +01:00
snipe
92eb6eb1b6 Add unique constraint to name
Signed-off-by: snipe <snipe@snipe.net>
2024-05-28 15:09:31 +01:00
snipe
206238e83f Merge pull request #14773 from snipe/bug/sc-25674/location_currency_on_edit
Pass accessory's currency if set by location
2024-05-28 10:29:20 +01:00
snipe
df882bbcbc Pass item’s currency if set by location
Signed-off-by: snipe <snipe@snipe.net>
2024-05-28 10:24:10 +01:00
snipe
6c1c3a99dd Bumped current_snipeit_version
Signed-off-by: snipe <snipe@snipe.net>
2024-05-27 19:22:24 +01:00
snipe
54067ec449 Fixed pre-version in version.php
Signed-off-by: snipe <snipe@snipe.net>
2024-05-27 18:21:46 +01:00
snipe
4c11e97922 Bumped version to dev, bumped hash
Signed-off-by: snipe <snipe@snipe.net>
2024-05-27 18:20:32 +01:00
Brady Wetherington
8df9007a8e Merge branch 'snipeit_v7_laravel10' into develop 2024-05-27 18:08:27 +01:00
snipe
702b944698 Merge remote-tracking branch 'origin/develop' 2024-05-27 15:46:07 +01:00
snipe
172d24fd3c Merge pull request #14770 from uberbrady/add_locations_parent_index
Add index to 'parent_id' for users with large number of locations
2024-05-27 15:43:49 +01:00
Brady Wetherington
28b450fd3c Add index to 'parent_id' for users with large number of locations 2024-05-27 15:38:42 +01:00
snipe
485caf1d92 Merge pull request #14755 from marcusmoore/chore/sc-25103/add-tests-around-asset-checkout
Added tests around asset checkout
2024-05-25 11:33:33 +01:00
snipe
29cd75a6d2 Merge pull request #14766 from snipe/chore/sc-25656/minus_icon_for_fieldsets
Changed icon, added translation
2024-05-25 11:19:56 +01:00
snipe
b3fe10baa8 Merge branch 'snipeit_v7_laravel10' into chore/sc-25656/minus_icon_for_fieldsets 2024-05-25 11:19:43 +01:00
snipe
093cc9faf0 Merge pull request #14767 from snipe/chore/sc-25657/improved-translations
Improved translations
2024-05-25 11:19:14 +01:00
snipe
be4e809254 Merge pull request #14762 from marcusmoore/chore/update-v7-test
Fixed test by removing non-existent trait
2024-05-25 11:18:54 +01:00
snipe
dc5e15f919 Added translation for external link
Signed-off-by: snipe <snipe@snipe.net>
2024-05-25 11:02:07 +01:00
snipe
ad7b291062 Added translations
Signed-off-by: snipe <snipe@snipe.net>
2024-05-25 10:55:48 +01:00
snipe
b54c1caa74 Improved translation
Signed-off-by: snipe <snipe@snipe.net>
2024-05-25 10:43:28 +01:00
snipe
c3cf123189 Better translation for custom fields
Signed-off-by: snipe <snipe@snipe.net>
2024-05-25 10:39:47 +01:00
snipe
3a2900621c Changed icon, added translation
Signed-off-by: snipe <snipe@snipe.net>
2024-05-25 10:20:52 +01:00
Marcus Moore
639cbf6d53 Remove passport:install command 2024-05-23 15:56:58 -07:00
Marcus Moore
e03b5754a8 Combine steps 2024-05-23 15:54:32 -07:00
Marcus Moore
4ce86a061f Set DB_CONNECTION 2024-05-23 15:43:59 -07:00
Marcus Moore
fa6e170feb Install passport 2024-05-23 14:01:06 -07:00
Marcus Moore
51f72daba1 Debugging step 2024-05-23 13:55:03 -07:00
Marcus Moore
a130033480 Revert "Add Install Passport step"
This reverts commit ef95ede833.
2024-05-23 12:45:38 -07:00
Marcus Moore
ef95ede833 Add Install Passport step 2024-05-23 12:32:34 -07:00
Marcus Moore
d06e5f25b0 Remove old trait from test 2024-05-23 11:51:08 -07:00
U-H-T
2777ac96cc add logo support for Brother TZe24mm labels 2024-05-23 11:10:23 +02:00
snipe
fd42f1ef24 Merge remote-tracking branch 'origin/develop' 2024-05-23 08:39:31 +01:00
snipe
8b3ff5a82d Handle potentially deleted admin users in license export
Signed-off-by: snipe <snipe@snipe.net>
2024-05-23 08:39:15 +01:00
Marcus Moore
482ebfbb68 Implement test 2024-05-22 17:21:29 -07:00
Marcus Moore
67c4fa2966 Improve event assertions 2024-05-22 17:14:10 -07:00
Marcus Moore
a3389a31cd Update test name and add todo 2024-05-22 17:10:16 -07:00
Marcus Moore
8d74a976a1 Merge branch 'develop' into chore/sc-25103/add-tests-around-asset-checkout 2024-05-22 16:09:27 -07:00
Marcus Moore
6d104251b3 Remove todo 2024-05-22 15:40:54 -07:00
Marcus Moore
f16c79bb9a Improve event assertions 2024-05-22 15:38:23 -07:00
Marcus Moore
1fe22e4b7b Re-order scenarios 2024-05-22 13:33:41 -07:00
Marcus Moore
c7fa2c04ad Add scenario 2024-05-22 13:33:12 -07:00
Marcus Moore
8ca882d1c8 Complete a scenario 2024-05-22 13:23:49 -07:00
Marcus Moore
5d368990dc Fix assertion 2024-05-22 13:15:51 -07:00
Brady Wetherington
4adbd7af4c Merge branch 'develop' into snipeit_v7_laravel10 2024-05-22 21:02:11 +01:00
Marcus Moore
1935a4aca3 Improve scenario naming 2024-05-22 12:47:33 -07:00
Godfrey M
c4d96f6ea3 removed extra div 2024-05-22 12:35:32 -07:00
snipe
986d5641f6 Merge remote-tracking branch 'origin/develop' 2024-05-22 18:39:25 +01:00
snipe
e163d5cfc7 Merge pull request #14753 from snipe/chore/sc-24895/add_exif_to_upgrade_php_file
Added exif to required extensions
2024-05-22 18:31:47 +01:00
snipe
b1e7c772ae Added exif to required extensions
Signed-off-by: snipe <snipe@snipe.net>
2024-05-22 18:27:52 +01:00
snipe
dce1854ac4 Merge remote-tracking branch 'origin/develop' 2024-05-22 18:04:53 +01:00
snipe
c4b4923ff8 Add @LeePorte as a contributor 2024-05-22 18:04:24 +01:00
snipe
c20d10d4f2 Merge remote-tracking branch 'origin/develop'
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	config/version.php
2024-05-22 17:50:14 +01:00
snipe
b0479d543d Merge branch 'develop' of https://github.com/snipe/snipe-it into develop 2024-05-22 17:49:33 +01:00
snipe
81704c1d40 Bumped version
Signed-off-by: snipe <snipe@snipe.net>
2024-05-22 17:49:29 +01:00
snipe
d3798bf251 Merge pull request #14752 from snipe/fixes/better_handle_data_file_mismatch_in_user_files
Nicer handling of erroring when filename+log do not match
2024-05-22 17:47:39 +01:00
snipe
4bb7c1701f Fiddled with storage facade a little more
Signed-off-by: snipe <snipe@snipe.net>
2024-05-22 17:44:49 +01:00
snipe
5fd0f56258 Use proper storage facade for checking if the file exists
Signed-off-by: snipe <snipe@snipe.net>
2024-05-22 17:38:49 +01:00
snipe
37d7e89e93 Fixed error message
Signed-off-by: snipe <snipe@snipe.net>
2024-05-22 17:29:43 +01:00
snipe
3ab197075a Nicer handling of erroring when filename+log do not match
Signed-off-by: snipe <snipe@snipe.net>
2024-05-22 17:20:03 +01:00
Brady Wetherington
12e8ac8b41 Merge pull request #14751 from uberbrady/docker-permissions-fix-rebased
Fixed #12299: permissions on storage dir in Docker (rebased)
2024-05-22 16:57:35 +01:00
Lee Porte
6783dc1312 Fixed #12299: permissions on storage dir in Docker
Fixes #12299, where currently there is no recursive permissions set on
/var/www/html/storage/ during build time. As a result this requires
users to run an exec into the container and change the permissions
before they are able to initiate the setup. Without this a 500 error is
thrown and little is evident in the docker logs as to what the issue
is.
2024-05-22 16:54:07 +01:00
snipe
b489c71fa2 Removed generated file
Signed-off-by: snipe <snipe@snipe.net>
2024-05-22 13:09:02 +01:00
snipe
cf5f6f9b13 Created by OWASP Threat Dragon 2024-05-22 13:06:32 +01:00
snipe
860432acc5 Merge remote-tracking branch 'origin/develop' 2024-05-22 12:45:26 +01:00
snipe
c9f7847fb3 Merge pull request #14745 from snipe/fixes/self_api_endpoint
Refactor group syncing on user edit API endpoint
2024-05-22 12:43:22 +01:00
snipe
6fad085a7d Removed debug in test
Signed-off-by: snipe <snipe@snipe.net>
2024-05-22 12:37:49 +01:00
snipe
4b23ef4021 Added new test
Signed-off-by: snipe <snipe@snipe.net>
2024-05-22 12:35:03 +01:00
snipe
bb96a190fd Moved validator
Signed-off-by: snipe <snipe@snipe.net>
2024-05-22 12:34:48 +01:00
snipe
e1eb457f3d Update tests/Feature/Api/Users/UpdateUserApiTest.php
Co-authored-by: Marcus Moore <contact@marcusmoore.io>
2024-05-22 11:03:46 +01:00
snipe
51025aad57 Update tests/Feature/Api/Users/UpdateUserApiTest.php
Co-authored-by: Marcus Moore <contact@marcusmoore.io>
2024-05-22 11:03:38 +01:00
snipe
14c4765be2 Update tests/Feature/Api/Users/UpdateUserApiTest.php
Co-authored-by: Marcus Moore <contact@marcusmoore.io>
2024-05-22 11:00:52 +01:00
snipe
3afe996755 Update tests/Feature/Api/Users/UpdateUserApiTest.php
Co-authored-by: Marcus Moore <contact@marcusmoore.io>
2024-05-22 11:00:47 +01:00
snipe
0891bd747a Update tests/Feature/Api/Users/UpdateUserApiTest.php
Co-authored-by: Marcus Moore <contact@marcusmoore.io>
2024-05-22 11:00:31 +01:00
Godfrey M
f2693ee957 conditionally fixed redirect select option 2024-05-21 14:08:35 -07:00
Godfrey M
0327e71f0f made message the keys, cleaned up array 2024-05-21 13:26:29 -07:00
Godfrey M
69c2cf2c4f fixed assetcheckin test, created redirect option test 2024-05-21 13:13:25 -07:00
Godfrey M
9f02be0823 removed extra div 2024-05-21 10:15:18 -07:00
Godfrey M
b5553af8ed rename variable 2024-05-21 10:11:53 -07:00
Godfrey M
4d6f4303f5 fixed partial up 2024-05-21 10:11:01 -07:00
snipe
34f1ea1c0e Re-order gating and refactor group syncing
Signed-off-by: snipe <snipe@snipe.net>
2024-05-21 10:00:49 +01:00
snipe
e3561ad38e Added tests
Signed-off-by: snipe <snipe@snipe.net>
2024-05-21 09:56:57 +01:00
snipe
a7ccf0efff Added translation
Signed-off-by: snipe <snipe@snipe.net>
2024-05-21 09:56:51 +01:00
snipe
f422c2ecad Merge pull request #14741 from Godmartinz/footer-issue
removed extra div tags
2024-05-20 20:44:27 +01:00
Godfrey M
db9c435ae0 removed extra div tags 2024-05-20 10:48:57 -07:00
Godfrey M
a53f89cd2c remove license checkout changes p2 2024-05-20 10:26:45 -07:00
Godfrey M
280c03dcad remove license checkout changes 2024-05-20 10:25:59 -07:00
Godfrey M
e70fb42f87 remove license redirects 2024-05-20 10:22:01 -07:00
Brady Wetherington
f633dbba64 Merge branch 'develop' into snipeit_v7_laravel10 2024-05-20 12:55:29 +01:00
snipe
cc0f2d7074 Merge remote-tracking branch 'origin/develop' 2024-05-20 11:22:34 +01:00
snipe
a820f248c8 Merge pull request #14736 from snipe/fixes/small_translation_additions
Fixes/small translation additions
2024-05-20 11:21:47 +01:00
snipe
6a6272ace3 Translate no records found message
Signed-off-by: snipe <snipe@snipe.net>
2024-05-20 11:19:47 +01:00
snipe
bcb747f886 Added string
Signed-off-by: snipe <snipe@snipe.net>
2024-05-20 11:19:37 +01:00
snipe
771c85e347 Translated account save message
Signed-off-by: snipe <snipe@snipe.net>
2024-05-20 11:19:31 +01:00
snipe
e5c358a1fe Merge pull request #14731 from snipe/features/csp_env
Fixed #14664 - allow additional urls in env for CSP
2024-05-16 22:25:11 +01:00
snipe
52c906f6b8 Added to env.example
Signed-off-by: snipe <snipe@snipe.net>
2024-05-16 22:21:52 +01:00
snipe
ca1555d962 Fixed #14664 - allow additional urls in env for CSP
Signed-off-by: snipe <snipe@snipe.net>
2024-05-16 22:19:18 +01:00
snipe
0d4f13219b Merge remote-tracking branch 'origin/develop'
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	config/version.php
2024-05-16 22:00:07 +01:00
snipe
7fdbbc846e Bumped hash
Signed-off-by: snipe <snipe@snipe.net>
2024-05-16 21:59:38 +01:00
snipe
dbbbb103a0 Merge pull request #14730 from snipe/localizations/updated_strings
Updated translations
2024-05-16 21:58:24 +01:00
snipe
2182ea1ce8 Updated translations
Signed-off-by: snipe <snipe@snipe.net>
2024-05-16 21:57:19 +01:00
snipe
f2cc9ec1dd Merge remote-tracking branch 'origin/develop' 2024-05-16 19:57:46 +01:00
snipe
54b24434e1 Set file name variable
Signed-off-by: snipe <snipe@snipe.net>
2024-05-16 19:56:58 +01:00
snipe
653ad562a4 Updated codacy link
Signed-off-by: snipe <snipe@snipe.net>
2024-05-16 18:56:44 +01:00
snipe
7743b03129 Merge remote-tracking branch 'origin/develop' 2024-05-16 18:51:27 +01:00
snipe
84a601f364 Merge pull request #14729 from snipe/fixes/attribute_for_purchase_date
Sets purchase date as date (versus datetime) in labels
2024-05-16 18:49:49 +01:00
snipe
88d131666c Sets purchase date as date (versus datetime) in labels
Signed-off-by: snipe <snipe@snipe.net>
2024-05-16 18:40:49 +01:00
snipe
d691f3b315 Merge remote-tracking branch 'origin/develop' 2024-05-16 16:37:47 +01:00
snipe
00a9d5f33e Merge pull request #14719 from snipe/fixes/add_next_audit_date_to_assets_form
Added next audit date to assets form
2024-05-16 16:33:49 +01:00
snipe
eb0fd2f519 Removed stricter validation :(
Signed-off-by: snipe <snipe@snipe.net>
2024-05-16 16:29:11 +01:00
snipe
81efaa7481 Merge branch 'develop' into fixes/add_next_audit_date_to_assets_form 2024-05-16 16:13:21 +01:00
snipe
2539c9e697 Updated assets
Signed-off-by: snipe <snipe@snipe.net>
2024-05-16 16:01:41 +01:00
snipe
3dfd471fa4 Merge remote-tracking branch 'origin/develop'
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	public/js/dist/all-defer.js
#	public/mix-manifest.json
2024-05-16 15:33:50 +01:00
snipe
4119526889 Merge pull request #14728 from snipe/fixes/smarter_decryption_in_activity
Only attempt to decrypt custom fields in activity log if the value is not empty
2024-05-16 15:31:18 +01:00
snipe
6b3346d90c Only attempt to decrypt if there is a value
Signed-off-by: snipe <snipe@snipe.net>
2024-05-16 15:28:25 +01:00
snipe
312ce51de6 Removed more debugging
Signed-off-by: snipe <snipe@snipe.net>
2024-05-16 15:25:57 +01:00
snipe
09914f508f Removed more debugging
Signed-off-by: snipe <snipe@snipe.net>
2024-05-16 15:16:52 +01:00
snipe
45eda0f611 Removed debug lines
Signed-off-by: snipe <snipe@snipe.net>
2024-05-16 15:09:27 +01:00
snipe
de088d452f Merge pull request #14451 from Godmartinz/add_decline_note_to_acceptance
Adds a note text area to asset acceptances/declines
2024-05-16 15:06:05 +01:00
snipe
2f18430ce4 Merge pull request #14725 from snipe/features/added_security_dot_txt
Added security.txt file
2024-05-16 09:59:46 +01:00
snipe
8d67e02d63 Added security.txt file
Signed-off-by: snipe <snipe@snipe.net>
2024-05-16 09:56:11 +01:00
Phil
1b85eea28e added new compose and env files 2024-05-16 02:13:31 +02:00
Godfrey M
fb9a5f928f removed license changes 2024-05-15 16:39:26 -07:00
Phil
4459483862 moved env. to own dev-file 2024-05-16 01:06:47 +02:00
Phil
a0cf7ecc98 moved file to dev-specific naming-scheme 2024-05-16 00:05:59 +02:00
snipe
8e35a56386 Updated dev assets
Signed-off-by: snipe <snipe@snipe.net>
2024-05-15 20:01:04 +01:00
snipe
30f738646e Merge pull request #14700 from marcusmoore/chore/sc-25471
Updated alpine to the latest version (3.13.10)
2024-05-15 19:59:51 +01:00
snipe
55281313d8 Merge pull request #14474 from Godmartinz/asset-location-update-bug
Fixed user assets not updating when a user changes location
2024-05-15 19:20:14 +01:00
Godfrey M
786799225c remove dd 2024-05-15 10:37:07 -07:00
snipe
c137fafa97 Updated language
Signed-off-by: snipe <snipe@snipe.net>
2024-05-15 18:10:43 +01:00
snipe
cb22a3d556 Updated comments again :-/
Signed-off-by: snipe <snipe@snipe.net>
2024-05-15 17:52:50 +01:00
snipe
c7accb4599 Added comments
Signed-off-by: snipe <snipe@snipe.net>
2024-05-15 17:38:42 +01:00
snipe
72c85f93b6 Fixed test
Signed-off-by: snipe <snipe@snipe.net>
2024-05-15 16:47:45 +01:00
snipe
c1d5b8713b Removed debugging
Signed-off-by: snipe <snipe@snipe.net>
2024-05-15 16:33:48 +01:00
snipe
8310b91e00 Use UploadFileRequest for audit files
Signed-off-by: snipe <snipe@snipe.net>
2024-05-15 16:33:48 +01:00
snipe
71b5bf2eef Added visual on the hardware view screen
Signed-off-by: snipe <snipe@snipe.net>
2024-05-15 16:33:48 +01:00
snipe
ab8b40745e Added next audit date to create/edit asset screen
Signed-off-by: snipe <snipe@snipe.net>
2024-05-15 16:33:48 +01:00
snipe
16ec47573b Added help text to bulk edit blade
Signed-off-by: snipe <snipe@snipe.net>
2024-05-15 16:33:48 +01:00
snipe
556d0b44a3 Added asset
Signed-off-by: snipe <snipe@snipe.net>
2024-05-15 16:33:48 +01:00
snipe
0734d5b0b6 Added help text
Signed-off-by: snipe <snipe@snipe.net>
2024-05-15 16:33:48 +01:00
snipe
f158a369a4 Added/updated string
Signed-off-by: snipe <snipe@snipe.net>
2024-05-15 16:33:47 +01:00
snipe
bdbfb0f2a1 Added accessor and mutator for next_audit_date
Signed-off-by: snipe <snipe@snipe.net>
2024-05-15 16:33:47 +01:00
snipe
e5653eaa93 Save new data
Signed-off-by: snipe <snipe@snipe.net>
2024-05-15 16:33:47 +01:00
snipe
3c4098038d Fail early if no tag
Signed-off-by: snipe <snipe@snipe.net>
2024-05-15 16:33:47 +01:00
snipe
8841e21dc9 Removed quickscan header
Signed-off-by: snipe <snipe@snipe.net>
2024-05-15 16:33:47 +01:00
snipe
f5e03b264f Show additional help text if help text is given
Signed-off-by: snipe <snipe@snipe.net>
2024-05-15 16:33:47 +01:00
snipe
eb09a99eb0 Merge pull request #14707 from spencerrlongg/bug/sc-24912
Bulk Edit Tests and Tweaks
2024-05-15 11:22:31 +01:00
Godfrey M
dc418a7033 need to make variables names uniform 2024-05-14 14:09:54 -07:00
Godfrey M
15cc4345ab adds dynamic redirects to Assets 2024-05-14 13:25:52 -07:00
Godfrey Martinez
5272824d85 Merge branch 'develop' into asset-location-update-bug 2024-05-13 10:47:25 -07:00
snipe
9bce0f2ff7 Format fix
Signed-off-by: snipe <snipe@snipe.net>
2024-05-13 18:19:14 +01:00
snipe
d2e7e11dca Removed debug line
Signed-off-by: snipe <snipe@snipe.net>
2024-05-13 12:48:28 +01:00
snipe
6823aabf92 Merge remote-tracking branch 'origin/develop'
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	config/version.php
2024-05-13 10:53:07 +01:00
snipe
f2dddc1226 Bumped version
Signed-off-by: snipe <snipe@snipe.net>
2024-05-13 10:51:44 +01:00
snipe
957becabb9 Merge pull request #14715 from snipe/dependabot/github_actions/develop/codacy/codacy-analysis-cli-action-4.4.1
Bump codacy/codacy-analysis-cli-action from 4.4.0 to 4.4.1
2024-05-13 10:26:33 +01:00
dependabot[bot]
7df03722ee Bump codacy/codacy-analysis-cli-action from 4.4.0 to 4.4.1
Bumps [codacy/codacy-analysis-cli-action](https://github.com/codacy/codacy-analysis-cli-action) from 4.4.0 to 4.4.1.
- [Release notes](https://github.com/codacy/codacy-analysis-cli-action/releases)
- [Commits](https://github.com/codacy/codacy-analysis-cli-action/compare/v4.4.0...v4.4.1)

---
updated-dependencies:
- dependency-name: codacy/codacy-analysis-cli-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-13 08:53:06 +00:00
snipe
4642f50d6b Merge remote-tracking branch 'origin/develop' 2024-05-11 15:14:57 +01:00
snipe
2decc3d6d3 Merge pull request #14711 from snipe/jerm/fix-all-query-in-sidebar-middleware
Fix memory-hog query in AssetCountForSidebar middleware
2024-05-11 01:35:09 +01:00
Jeremy Price
2adc4ffa96 Fix memory-hog query in AssetCountForSidebar middleware
https://github.com/snipe/snipe-it/pull/14702/files introduced a bug
where instead of doing a quick `select count(*)` of assets, it did a `select *` of
assets, moving the count from the database to the PHP process.

This caused OOM issues in memory-constrained environments with lots of
assets, and also presented a speed issue even when memory limited were
increased.

Additionally, given this populates the sidebar, this was likely an issue
on every page load that included the sidebar.

The fix is simply removing the `all()->`, ending up with Asset::count(),
which yields the desired `select count(*)` DB query.
2024-05-10 12:54:40 -07:00
snipe
c8fbf7640c Merge remote-tracking branch 'origin/develop'
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	public/css/build/app.css
#	public/css/build/overrides.css
#	public/css/dist/all.css
#	public/mix-manifest.json
2024-05-08 12:16:17 +01:00
snipe
46779ca865 Merge pull request #14697 from snipe/bug/sc-25502/disable_delete_if_not_deletable_user
Fixed UI where delete button was not disabled even if the user couldn't be deleted
2024-05-08 12:06:33 +01:00
snipe
86661e79d1 Merge pull request #14702 from Toreg87/fixes/total_asset_count
Fixes #14701 - wrong total asset count
2024-05-08 11:52:46 +01:00
Tobias Regnery
b2a5d86e30 Fixes #14701 - wrong total asset count
The total asset count in the sidenav shows the ready to deploy count instead of the total count.
Fix this by adjusting the query to all assets. Also respect the setting for archived assets.
Add a default value for total assets, since we are now using the settings-variable, which is not available during the setup process.

While at it, move the block for total assets before the ready to deploy assets to match the ordering of the sidenav.

Signed-off-by: Tobias Regnery <tobias.regnery@gmail.com>
2024-05-08 09:34:35 +02:00
Marcus Moore
d7f0ee49b7 Update Alpine to 3.13.10
Includes fix to new label engine.
2024-05-07 17:08:05 -07:00
spencerrlongg
5b86ee7291 a couple more tests 2024-05-07 17:19:00 -05:00
spencerrlongg
ad2ba252ee two new test 2024-05-07 15:11:33 -05:00
spencerrlongg
17ef20ea92 alright, in a working place 2024-05-07 14:08:47 -05:00
snipe
8c327e6523 Handle user not found properly
Signed-off-by: snipe <snipe@snipe.net>
2024-05-07 19:16:56 +01:00
snipe
386b2839e8 Added tests
Signed-off-by: snipe <snipe@snipe.net>
2024-05-07 18:59:24 +01:00
snipe
934593e0b6 Updated icon
Signed-off-by: snipe <snipe@snipe.net>
2024-05-07 18:09:55 +01:00
snipe
a7aa178f24 Used localized strings
Signed-off-by: snipe <snipe@snipe.net>
2024-05-07 17:56:07 +01:00
snipe
69122034e7 Fixed icon table headers
Signed-off-by: snipe <snipe@snipe.net>
2024-05-07 17:55:33 +01:00
snipe
1117f4289d Added string
Signed-off-by: snipe <snipe@snipe.net>
2024-05-07 17:55:10 +01:00
snipe
97bc4a092f Removed debugging
Signed-off-by: snipe <snipe@snipe.net>
2024-05-07 17:40:48 +01:00
snipe
d942b8f1fb Fixed alias names
Signed-off-by: snipe <snipe@snipe.net>
2024-05-07 17:40:35 +01:00
snipe
49dc9767b6 Added debugging :(
Signed-off-by: snipe <snipe@snipe.net>
2024-05-07 15:54:43 +01:00
snipe
482965197d Added users, locations to presenter, transformer
Signed-off-by: snipe <snipe@snipe.net>
2024-05-07 12:07:41 +01:00
snipe
410b547f3c Added users and locatipon count to API
Signed-off-by: snipe <snipe@snipe.net>
2024-05-07 12:07:28 +01:00
snipe
f769e8247f Added ManagedUsers method, additional checks in isDeletable()
Signed-off-by: snipe <snipe@snipe.net>
2024-05-07 12:07:15 +01:00
snipe
2b4a536f85 Added CSS for users, locations
Signed-off-by: snipe <snipe@snipe.net>
2024-05-07 12:06:54 +01:00
snipe
92ae069629 Disable button in UI if user cannot be deleted
Signed-off-by: snipe <snipe@snipe.net>
2024-05-07 12:06:35 +01:00
snipe
6f40b21986 Merge remote-tracking branch 'origin/develop' 2024-05-07 08:38:09 +01:00
snipe
3084521521 Merge pull request #14693 from snipe/fixes/14692_view_share_undefined
Fixes #14692 - set default variables for sidebar totals
2024-05-07 08:37:10 +01:00
snipe
4f12c86e74 Fixes #14692 - set default variables for sidebar totals
Signed-off-by: snipe <snipe@snipe.net>
2024-05-07 08:34:22 +01:00
snipe
204de99a64 Merge remote-tracking branch 'origin/develop' 2024-05-07 08:12:31 +01:00
snipe
fd929f5dd9 Merge pull request #14690 from marcusmoore/import-settings-properly
Load settings in `SendUpcomingAuditReport` command
2024-05-07 07:42:34 +01:00
Marcus Moore
7e9c8ba290 Remove duplicate settings call 2024-05-06 17:08:16 -07:00
Marcus Moore
6f639f7bf0 Load settings properly in SendUpcomingAuditReport command 2024-05-06 16:44:14 -07:00
snipe
3594ed67d1 Removed back buttons on settings index
Signed-off-by: snipe <snipe@snipe.net>
2024-05-06 20:48:32 +01:00
snipe
d36a06d8e1 Merge remote-tracking branch 'origin/develop' 2024-05-06 20:34:49 +01:00
snipe
c816b960b5 Fixed stray closing paren
Signed-off-by: snipe <snipe@snipe.net>
2024-05-06 20:34:36 +01:00
Brady Wetherington
5b02a43957 Merge branch 'develop' into snipeit_v7_laravel10 2024-05-06 18:44:03 +01:00
snipe
4913e56086 Merge remote-tracking branch 'origin/develop'
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	config/version.php
2024-05-06 18:43:48 +01:00
snipe
4d00bb98d1 Bumped version
Signed-off-by: snipe <snipe@snipe.net>
2024-05-06 18:39:55 +01:00
snipe
db2baae758 Merge remote-tracking branch 'origin/develop'
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	public/css/dist/all.css
#	public/js/dist/bootstrap-table.js
#	public/mix-manifest.json
2024-05-06 18:37:52 +01:00
snipe
fdecdf4b15 Merge pull request #14689 from KorvinSzanto/develop
Capitalize `N` instead of `y` since no is default
2024-05-06 17:48:16 +01:00
Korvin Szanto
5c1d4aff23 Capitalize N instead of y since no is default 2024-05-06 09:00:33 -07:00
snipe
bf0edcb92e docs: add @gitgrimbo as a contributor 2024-05-06 12:59:26 +01:00
snipe
39fa8ef3c0 docs: add @chandanchowdhury as a contributor 2024-05-06 12:55:47 +01:00
snipe
9e8a369bc8 docs: add @PP-JN-RL as a contributor 2024-05-06 12:54:35 +01:00
snipe
3f3fe8935f docs: add @jeffclay as a contributor 2024-05-06 12:54:20 +01:00
snipe
82387630c7 docs: add @squintfox as a contributor 2024-05-06 12:54:06 +01:00
snipe
16c5033514 docs: add @Q4kK as a contributor 2024-05-06 12:53:34 +01:00
snipe
46ffaee1e4 docs: add @franceslui as a contributor 2024-05-06 12:53:06 +01:00
snipe
d936f92a7d docs: add @mustafa-online as a contributor 2024-05-06 12:52:46 +01:00
snipe
b424ddf42d docs: add @koiakoia as a contributor 2024-05-06 12:51:40 +01:00
snipe
b3d5a893fc Fixed text
via (@koiakoia )

Signed-off-by: snipe <snipe@snipe.net>
2024-05-06 12:49:54 +01:00
snipe
69ea6eebae Merge pull request #14688 from snipe/security/Upgrade-tableexport.jquery.plugin-from-1.28.0-to-1.30.0
[Snyk] Upgrade tableexport.jquery.plugin from 1.28.0 to 1.30.0 #14656
2024-05-06 12:47:01 +01:00
snipe
0892c34125 [Snyk] Upgrade tableexport.jquery.plugin from 1.28.0 to 1.30.0 #14656
Signed-off-by: snipe <snipe@snipe.net>
2024-05-06 12:45:33 +01:00
snipe
52e14d501f Merge pull request #14687 from snipe/security/upgrade_fontawesome_from-6.5.1-to-6.5.2
Upgrade fontawesome from 6.5.1 to 6.5.2
2024-05-06 12:22:50 +01:00
snipe
4d093160fc Upgrade @fortawesome/fontawesome-free from 6.5.1 to 6.5.2 #14647
Signed-off-by: snipe <snipe@snipe.net>
2024-05-06 12:21:34 +01:00
snipe
0bcca99573 Merge pull request #14686 from snipe/security/upgrade_alpine_to_3.13.8
[Snyk] Upgrade alpinejs from 3.13.5 to 3.13.8 #14646
2024-05-06 12:16:00 +01:00
snipe
63516c4a4f [Snyk] Upgrade alpinejs from 3.13.5 to 3.13.8 #14646
Signed-off-by: snipe <snipe@snipe.net>
2024-05-06 12:12:59 +01:00
snipe
19fb79ffff Merge pull request #14661 from ubc-cpsc/bugfix/CVE-2024-32489
Upgrade tecnickcom/tcpdf from version 6.7.4 to 6.7.5 to address the security vulnerability CVE-2024-22640
2024-05-06 11:58:31 +01:00
snipe
02835de13d Merge pull request #14679 from mustafa-online/develop
Improve RTL support
2024-05-04 15:47:14 +01:00
Mustafa Online
55b004d53d Improve RTL support 2024-05-04 13:32:42 +02:00
Mustafa Online
c1b72a8ce6 Revert "Improve RTL support"
This reverts commit fa0bea87e6.
2024-05-04 13:31:52 +02:00
Mustafa Online
fa0bea87e6 Improve RTL support
I'm starting to make some improvements to RTL support, more PR's to come to address other parts.
2024-05-04 13:17:48 +02:00
Godfrey M
c94a7613ca dropdown redirect options, helper function and session variable added 2024-05-02 12:16:20 -07:00
snipe
d146426dd8 Updated prod assets
Signed-off-by: snipe <snipe@snipe.net>
2024-05-02 14:02:53 +01:00
snipe
1e1782c232 Merge remote-tracking branch 'origin/develop'
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	public/css/build/app.css
#	public/css/build/overrides.css
#	public/css/dist/all.css
#	public/mix-manifest.json
2024-05-02 14:02:36 +01:00
snipe
dab5874fd7 Merge pull request #14391 from snipe/features/add_Brother_188mm_tape_label
Added Brother 18mm label type
2024-05-02 13:14:04 +01:00
snipe
4850227c04 Merge pull request #14655 from snipe/feature/sc-25381/simpler_overdue_endpoints
Refactored due/overdue for audit, added due/overdue for checkin API endpoint and GUI
2024-05-02 13:11:51 +01:00
snipe
eb9a654cc3 Moved settings call higher
Signed-off-by: snipe <snipe@snipe.net>
2024-05-02 12:37:41 +01:00
snipe
4224bc0c43 Removed extra settings param
Signed-off-by: snipe <snipe@snipe.net>
2024-05-02 12:36:57 +01:00
snipe
f893b23129 Refactored title blade areas
Signed-off-by: snipe <snipe@snipe.net>
2024-05-02 12:35:52 +01:00
snipe
8c65880504 Changed badge to span in default blade
Signed-off-by: snipe <snipe@snipe.net>
2024-05-02 12:35:41 +01:00
snipe
53cadf80fa Removed assertions for factories
Signed-off-by: snipe <snipe@snipe.net>
2024-05-02 12:24:31 +01:00
spencerrlongg
e177993bcc notes and some playing around, push for eod 2024-05-01 16:57:11 -05:00
spencerrlongg
6a7f3ecc2e new test not quite working, almost there 2024-05-01 16:12:56 -05:00
spencerrlongg
39cc99c89b all initial attributes set in test 2024-04-30 22:22:59 -05:00
spencerrlongg
25480293dc change keys to values, add test 2024-04-30 18:03:26 -05:00
Frances Lui
8b3bfc6bc9 Fixes CVE-2024-32489 2024-04-29 16:33:00 -07:00
snipe
19cff25300 Merge pull request #14651 from marcusmoore/bug/sc-25402
Fixed `purchase_cost` not being allowed to be a string when creating asset via api
2024-04-27 03:39:10 +01:00
snipe
848e1fe1f6 Refactored audit alerts
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 21:26:00 +01:00
snipe
fe147adec3 Refactor checkin alert
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 21:10:54 +01:00
snipe
103809b65f Removed debugging
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 21:01:43 +01:00
snipe
a398496dd4 Added comments
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 21:01:27 +01:00
snipe
839db8ef44 Refactored due-or-overdue methods
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 20:59:27 +01:00
snipe
bfd0530597 Fixed notification
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 20:59:13 +01:00
snipe
494ec5cd9c Added tests for due-or-overdue
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 20:59:04 +01:00
snipe
fc61a4b88d Fixed badge HTML
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 19:50:58 +01:00
snipe
50d8b02f8b Removed unused scope
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 19:23:27 +01:00
snipe
860764a436 Use totals for sidebar
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 19:12:21 +01:00
snipe
52d6a8990a Check that the asset is not already checked in
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 19:06:46 +01:00
snipe
87de67e4a9 Fixed test for checkin
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 19:06:26 +01:00
snipe
8356b57fb4 Added translations
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 19:01:34 +01:00
snipe
3f04afee5c Removed unused method
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 19:01:26 +01:00
snipe
2117f61e8c More view sharing for sidebar
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 19:01:15 +01:00
snipe
d40604b574 Removed debugging, added date cast
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 19:01:05 +01:00
snipe
76129e9011 Use trans_choice for title
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 18:59:13 +01:00
snipe
9c8411c7ff Added checkin due blade
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 18:58:56 +01:00
snipe
c661d732b3 Refactored sidenav links for audit
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 18:58:44 +01:00
snipe
fbe9daace6 Use pattern in API route
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 18:58:29 +01:00
snipe
651001bf6e Removed duplicate routes
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 18:58:15 +01:00
snipe
9167f8a3ba Cleaned up tests
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 18:57:07 +01:00
snipe
6dc9ccffcd Refactor api for handling audit/expected checkins
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 18:56:57 +01:00
snipe
4b4e3badb7 Removed hardware audit overdue blade
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 18:53:36 +01:00
snipe
fe4dd23d39 Removed “all” text
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 15:49:12 +01:00
snipe
de6d71cc3b Use plural api endpoints in blades
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 15:47:19 +01:00
snipe
9e44052709 Switch to plural route name for API endpoint
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 15:46:58 +01:00
snipe
2d112f227a Call the asset factory directly
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 15:44:37 +01:00
snipe
bd8737d986 Changed sidenav badge class
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 15:44:21 +01:00
snipe
4b6d236eb7 Added class for sidebar menu badges
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 15:44:06 +01:00
snipe
bf058bd5c6 Use updated scopes
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 14:02:56 +01:00
snipe
dfaf01e8aa Updated asset counters
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 14:02:47 +01:00
snipe
2888dd6fd8 Added translation
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 14:02:37 +01:00
snipe
2e92ee8eee Switch to whereBetween so tests run on sqlite
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 14:02:23 +01:00
snipe
14b6a75507 Updated routes
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 14:01:38 +01:00
snipe
2484a9db2c Added tests
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 14:01:29 +01:00
snipe
bfc30794c5 Updated badge styling
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 14:01:22 +01:00
snipe
27bc7a847b Updated routes
Signed-off-by: snipe <snipe@snipe.net>
2024-04-26 14:01:11 +01:00
Marcus Moore
2a71877bec Add additional condition 2024-04-25 17:04:07 -07:00
Marcus Moore
30bd920497 Add conditional 2024-04-25 16:24:12 -07:00
Marcus Moore
1d5b48b88d Add comment and improve method 2024-04-25 16:22:15 -07:00
Marcus Moore
4295bad12f Separate test cases 2024-04-25 14:07:56 -07:00
Marcus Moore
3a2eeaea7a WIP: Future-proof rules being converted to array syntax 2024-04-24 17:40:40 -07:00
Marcus Moore
12418ae91b WIP: allow EU style purchase cost via api 2024-04-24 17:18:29 -07:00
Marcus Moore
783a24eb68 Add test for ParseCurrencyMethod 2024-04-24 17:17:42 -07:00
Brady Wetherington
3f5c5cbe82 Merge branch 'develop' into snipeit_v7_laravel10 2024-04-24 16:24:43 +01:00
snipe
2439758ef3 Merge pull request #14587 from Godmartinz/License-export-button
Added a License Export function and button
2024-04-24 04:42:56 +01:00
akemidx
ac4aa97103 develop reheading 2024-04-23 17:05:50 -04:00
akemidx
0bc93c6a1e space 2024-04-23 15:31:37 -04:00
snipe
685f1cbfb8 Merge pull request #14499 from Godmartinz/remove_encrpyt_from_labels
Removed encrypted fields from label options
2024-04-23 13:31:38 +01:00
snipe
e2d1e6b0c5 Merge pull request #14608 from akemidx/bug/sc-25232
Left Sidebar Was Not Respecting Theme
2024-04-23 12:32:48 +01:00
snipe
56cb9a0f4e Merge remote-tracking branch 'origin/develop'
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	config/version.php
#	public/css/dist/skins/skin-black-dark.css
#	public/css/dist/skins/skin-black-dark.min.css
#	public/css/dist/skins/skin-blue-dark.css
#	public/css/dist/skins/skin-blue-dark.min.css
#	public/css/dist/skins/skin-green-dark.css
#	public/css/dist/skins/skin-green-dark.min.css
#	public/css/dist/skins/skin-orange-dark.css
#	public/css/dist/skins/skin-orange-dark.min.css
#	public/css/dist/skins/skin-purple-dark.css
#	public/css/dist/skins/skin-purple-dark.min.css
#	public/css/dist/skins/skin-red-dark.css
#	public/css/dist/skins/skin-red-dark.min.css
#	public/css/dist/skins/skin-yellow-dark.css
#	public/css/dist/skins/skin-yellow-dark.min.css
#	public/mix-manifest.json
2024-04-23 10:28:50 +01:00
snipe
c8c81a360c Dev assets
Signed-off-by: snipe <snipe@snipe.net>
2024-04-23 10:26:43 +01:00
snipe
bdd43b7134 Merge pull request #14602 from uberbrady/fix_saving_encrypted_custom_fields
Re-enabled updating encrypted custom fields via API [sc-41465]
2024-04-23 10:20:55 +01:00
snipe
c50d5a678a Merge pull request #14616 from akemidx/bug/sc-25235
REMOVED: Dark Theme Button Text Coloring
2024-04-23 09:20:57 +01:00
Godfrey M
96b3af7cbc fixed view from sending all custom fields 2024-04-22 18:27:34 -07:00
Godfrey Martinez
9e7bbc968d Merge pull request #15 from Godmartinz/License-export-button_p2
adds licenses available, updated teranslations
2024-04-22 17:59:52 -07:00
Godfrey M
5fc6771543 adds licenses available, updated teranslations 2024-04-22 17:58:49 -07:00
akemidx
0d049a0be7 conflict resolution 2024-04-22 20:09:40 -04:00
akemidx
01c24ab4cd translating text 2024-04-22 19:16:14 -04:00
Marcus Moore
155f5f35cd Remove todo 2024-04-22 15:47:05 -07:00
snipe
7ad6caf30a Merge pull request #14632 from marcusmoore/bug/sc-25384
Added "select" option to top of data sources in new label engine
2024-04-22 20:40:31 +01:00
Marcus Moore
ac8aab0043 Add default "select an option" to data source options 2024-04-22 12:22:10 -07:00
Godfrey M
14ddf36d46 removed two duplicate translations 2024-04-22 10:43:11 -07:00
Godfrey M
25f1167c9d adds company scoping to license export 2024-04-22 10:38:55 -07:00
Godfrey M
420225c2d5 Merge branch 'refs/heads/develop' into License-export-button 2024-04-22 10:33:30 -07:00
Marcus Moore
45f5eaac5b Extract CanSkipTests trait 2024-04-22 10:32:37 -07:00
snipe
5229dd65ce Merge remote-tracking branch 'origin/develop' 2024-04-22 15:02:51 +01:00
snipe
cfe39afc11 Merge pull request #14630 from snipe/bug/sc-25377/double_encoding_assets_and_model_notes_on_upload
Removed escaping on notes for file uploads
2024-04-22 14:59:55 +01:00
snipe
2aa3ce15bd Removed escaping on notes for file uploads
Signed-off-by: snipe <snipe@snipe.net>
2024-04-22 14:55:02 +01:00
snipe
c9873da732 Merge pull request #14628 from snipe/bug/sc-25375/icon_mimetype_validation_fix
Added `ico`, `image/x-icon`, `image/vnd.microsoft.icon` to favicon validation
2024-04-22 13:58:08 +01:00
snipe
8dd71f99cc Added ico, image/x-icon,image/vnd.microsoft.icon to favicon validation
Signed-off-by: snipe <snipe@snipe.net>
2024-04-22 13:54:19 +01:00
Brady Wetherington
ab45975883 Mark custom fields tests as 'incomplete' if the DB is mysql 2024-04-22 13:11:36 +01:00
snipe
7f38ca239e Merge remote-tracking branch 'origin/develop'
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	public/css/build/app.css
#	public/css/build/overrides.css
#	public/css/dist/all.css
#	public/mix-manifest.json
2024-04-19 16:24:32 +01:00
snipe
c3b982e759 Merge pull request #14622 from snipe/bug/sc-25363/z-index-bs-table-check-boxes-fix
Reeduced z-index of bs table override
2024-04-19 16:11:21 +01:00
snipe
e330e80c46 Reeduced z-index of bs table override
Signed-off-by: snipe <snipe@snipe.net>
2024-04-19 16:06:43 +01:00
akemidx
f0836d4d3a changes for button hover, removing text color changes. also added in a border for yellow and black themes 2024-04-18 19:36:35 -04:00
akemidx
1289920217 black button border 2024-04-18 19:29:56 -04:00
snipe
a6a58094c9 Merge remote-tracking branch 'origin/develop' 2024-04-18 14:26:53 +01:00
snipe
424cbd3248 Removed noisy debug
Signed-off-by: snipe <snipe@snipe.net>
2024-04-18 14:25:54 +01:00
snipe
e59b9627c7 Merge pull request #14511 from jeffclay/features/14508_pdo_ssl_verify
Fixed #14508: Added PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT options to database.php …
2024-04-18 14:23:00 +01:00
snipe
f080c0cdcd Merge pull request #14578 from Q4kK/features/add_no_interactive
Feat: add no-interactive flag for `upgrade.php`
2024-04-18 14:19:38 +01:00
snipe
29bda2ef7d Merge pull request #14613 from marcusmoore/additional-test-cases
Added test cases around modifying user groups via api
2024-04-18 13:53:03 +01:00
akemidx
e8d9701a26 array key existing 2024-04-17 19:16:25 -04:00
Marcus Moore
1d64692fd6 Add two test cases 2024-04-17 15:23:26 -07:00
snipe
6f195cb8ec Merge pull request #14591 from snipe/bug/sc-25258/naive_fix_for_user_scoping
First fix for user FMCS scoping
2024-04-17 21:49:53 +01:00
snipe
4c02a63acc Removed activated attribute on test users
Signed-off-by: snipe <snipe@snipe.net>
2024-04-17 20:29:51 +01:00
snipe
0fc9fc7516 Minor updates to tests
Signed-off-by: snipe <snipe@snipe.net>
2024-04-17 20:29:01 +01:00
snipe
4450351b75 Only sync groups if API user is superadmin
Signed-off-by: snipe <snipe@snipe.net>
2024-04-17 11:06:50 +01:00
snipe
9bb15aaf1b Added individual gates to keep response consistent with other company-ed things
Signed-off-by: snipe <snipe@snipe.net>
2024-04-17 10:57:49 +01:00
snipe
65dd729e19 Additional gates
Signed-off-by: snipe <snipe@snipe.net>
2024-04-17 10:57:20 +01:00
snipe
c21142605d Added strings
Signed-off-by: snipe <snipe@snipe.net>
2024-04-17 10:47:56 +01:00
snipe
86e274faa3 Added API tests
Signed-off-by: snipe <snipe@snipe.net>
2024-04-17 10:47:48 +01:00
snipe
5e8c129c7f Revert accidental commit
Signed-off-by: snipe <snipe@snipe.net>
2024-04-17 09:26:50 +01:00
snipe
ab3b5ca4ef Fixed tests
Signed-off-by: snipe <snipe@snipe.net>
2024-04-17 09:26:07 +01:00
Marcus Moore
60a5afd752 Merge branch 'factory-refactors' into fix_saving_encrypted_custom_fields 2024-04-16 17:15:22 -07:00
Marcus Moore
9d0ea857fe Import facade 2024-04-16 17:14:17 -07:00
Marcus Moore
f763aea4fc Update tests to send post request 2024-04-16 17:13:18 -07:00
Marcus Moore
e16c04250e Improve model factories 2024-04-16 16:58:28 -07:00
Marcus Moore
ad99aa460b Remove unneeded imports 2024-04-16 15:09:49 -07:00
Marcus Moore
e47f64f62d Separate test methods 2024-04-16 15:03:05 -07:00
Marcus Moore
c6d9da1571 Remove unneeded fields in factory state 2024-04-16 12:36:41 -07:00
Marcus Moore
ab561d1ce8 Simplify factory state 2024-04-16 12:36:13 -07:00
akemidx
f39ba0136c errant carraige return 2024-04-16 14:26:18 -04:00
akemidx
df60045bfe sidebar hover fix 2024-04-16 14:21:47 -04:00
akemidx
5e122f780f sidebar_hover_color 2024-04-16 14:00:20 -04:00
Marcus Moore
eefe377159 Correct order of arguments 2024-04-16 10:51:33 -07:00
q4kK
20920c262d Feat: add no-interactive flag for upgrade.php
Having a no-interactive flag is useful because attempting
to automate snipe-it upgrades is currently extremely janky.
You have to either:
  a) read the prompts and pass in the input (the "correct" way)
  b) pipe in input, e.g. `yes` and hope no new prompts
  are added.

With the `no-interactive` flag, this can be fixed by both
allowing new prompts to be added without conflict
to user prompts, but also allowing automated upgrades (you could
choose to crash, or assign defaults).
2024-04-16 11:54:50 -05:00
Brady Wetherington
870612be1c Break 'update' API statements into its own test file. Split tests up 2024-04-16 15:34:28 +01:00
Brady Wetherington
266424ff0e Some simple renames for better readability as suggested by Marcus 2024-04-16 15:17:02 +01:00
snipe
a8d48b758e Merge pull request #14594 from marcusmoore/bug/sc-25314/multiple-label-fields-on-one-row
Fixed label fields only showing first option
2024-04-15 18:53:03 +01:00
Brady Wetherington
67a8e0b5c6 This re-enables the ability to update encrypted custom fields via the API 2024-04-15 18:46:11 +01:00
snipe
7b7d424962 Merge pull request #13880 from Godmartinz/department-validation-bug
Fixed department validation to allow updates
2024-04-12 10:50:26 +01:00
Marcus Moore
a4e959818a Add comment 2024-04-11 17:23:28 -07:00
Marcus Moore
c3a71cc182 Improve variable names and add comment 2024-04-11 16:44:13 -07:00
Marcus Moore
da03cfdbe5 Formatting 2024-04-11 16:39:29 -07:00
Marcus Moore
2b137d76fa Trim string to avoid leading whitespace if label is empty 2024-04-11 16:38:22 -07:00
Marcus Moore
81b8c111ca Allow multiple fields to be displayed in one row 2024-04-11 15:00:14 -07:00
snipe
fce98b9ca4 Merge remote-tracking branch 'origin/develop'
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	public/css/dist/skins/skin-black-dark.css
#	public/css/dist/skins/skin-black-dark.min.css
#	public/css/dist/skins/skin-blue-dark.css
#	public/css/dist/skins/skin-blue-dark.min.css
#	public/css/dist/skins/skin-green-dark.css
#	public/css/dist/skins/skin-green-dark.min.css
#	public/css/dist/skins/skin-orange-dark.css
#	public/css/dist/skins/skin-orange-dark.min.css
#	public/css/dist/skins/skin-purple-dark.css
#	public/css/dist/skins/skin-purple-dark.min.css
#	public/css/dist/skins/skin-red-dark.css
#	public/css/dist/skins/skin-red-dark.min.css
#	public/css/dist/skins/skin-yellow-dark.css
#	public/css/dist/skins/skin-yellow-dark.min.css
#	public/mix-manifest.json
2024-04-11 18:58:50 +01:00
snipe
c0dcae16f7 Updated dev assets
Signed-off-by: snipe <snipe@snipe.net>
2024-04-11 18:57:06 +01:00
snipe
c604f08749 Small tweaks for troubleshooting :(
Signed-off-by: snipe <snipe@snipe.net>
2024-04-11 18:47:55 +01:00
snipe
da21424416 Merge pull request #14581 from marcusmoore/bug/sc-25237
Fixed assigned to field in new label engine
2024-04-11 15:36:18 +01:00
snipe
b5c83721ad Merge pull request #14577 from Godmartinz/signature_pad_upgrade
Upgraded Signature-pad.js  && Fixed Resizing Canvas on mobile
2024-04-11 15:35:47 +01:00
snipe
9b21fca1a0 Merge pull request #14558 from akemidx/bug/sc-25192
Fixed: Header Dropdown Menus had no hover coloring in dark themes
2024-04-11 15:35:33 +01:00
snipe
af94b07771 Merge pull request #14582 from akemidx/feature/sc-25288
Reduce Extra Space in Header Dropdown
2024-04-11 15:35:11 +01:00
snipe
0d23d28a65 Added comments
Signed-off-by: snipe <snipe@snipe.net>
2024-04-11 15:15:56 +01:00
snipe
710370ac24 Added scoping for destroy
Signed-off-by: snipe <snipe@snipe.net>
2024-04-11 14:58:25 +01:00
snipe
ed0a441e4d Refactor destroy method
Signed-off-by: snipe <snipe@snipe.net>
2024-04-11 14:52:03 +01:00
snipe
24e87cc0bb Updated comment
Signed-off-by: snipe <snipe@snipe.net>
2024-04-11 14:51:49 +01:00
snipe
460693c153 Added comment
Signed-off-by: snipe <snipe@snipe.net>
2024-04-11 14:40:13 +01:00
snipe
f54a94bd4c Refactorered methods
Signed-off-by: snipe <snipe@snipe.net>
2024-04-11 14:40:00 +01:00
snipe
a19b86add0 Re-ordered scoping for admins, added comments
Signed-off-by: snipe <snipe@snipe.net>
2024-04-11 14:39:37 +01:00
snipe
570944a48b Updated translation
Signed-off-by: snipe <snipe@snipe.net>
2024-04-11 14:38:52 +01:00
snipe
5829b02323 Added translation
Signed-off-by: snipe <snipe@snipe.net>
2024-04-11 14:38:47 +01:00
Marcus Moore
5567a1e9ac Formatting 2024-04-10 17:37:11 -07:00
Marcus Moore
fa5016713f Implement test 2024-04-10 17:29:44 -07:00
Marcus Moore
f28a82de71 Implement some tests, scaffold others 2024-04-10 17:27:07 -07:00
Marcus Moore
7c2fae7b9d Scaffold api test cases 2024-04-10 17:08:45 -07:00
Marcus Moore
70934e54cf Remove unneeded comment 2024-04-10 16:34:14 -07:00
Marcus Moore
f6ad275030 Clean ups 2024-04-10 16:28:48 -07:00
Marcus Moore
6666a78936 Organization 2024-04-10 16:19:04 -07:00
Marcus Moore
bbb2cdcceb Add note 2024-04-10 16:15:43 -07:00
Marcus Moore
6b6e18695f Account for null asset in factory state 2024-04-10 16:12:47 -07:00
Marcus Moore
b63962e90b Add additional assertions 2024-04-10 16:01:15 -07:00
Marcus Moore
4434de6241 Add test case 2024-04-10 15:47:26 -07:00
Godfrey M
a2bca0e358 fixed comments 2024-04-10 15:05:21 -07:00
Marcus Moore
6d572424ac Add validation around dates 2024-04-10 14:02:25 -07:00
Marcus Moore
d371d14c1f Implement test 2024-04-10 13:49:07 -07:00
Marcus Moore
72eda1e909 Improve naming 2024-04-10 13:29:31 -07:00
Marcus Moore
7dbf8a8a8e Add tests for asset and location check out 2024-04-10 13:28:52 -07:00
Godfrey M
133fdd7a37 fix conditional 2024-04-10 12:31:04 -07:00
Godfrey M
0849262243 fixed notes 2024-04-10 12:19:34 -07:00
Godfrey M
17095feb33 fix typo 2024-04-10 12:15:48 -07:00
Godfrey M
f42ae46338 exports all licenses 2024-04-10 12:14:44 -07:00
Marcus Moore
37ebf1827f Organization 2024-04-10 12:12:44 -07:00
Marcus Moore
e65252725a Add simple test for LogListener 2024-04-10 11:52:59 -07:00
Marcus Moore
6f53f2ac64 Finish implementing test case 2024-04-10 11:43:50 -07:00
Godfrey M
e2679852ce added export button, half the logic for export method 2024-04-10 11:31:30 -07:00
Marcus Moore
deaba46e1c Merge branch 'develop' into chore/sc-25103/add-tests-around-asset-checkout 2024-04-10 11:01:35 -07:00
snipe
989dab6259 Moved company scoping methods to group them together
Signed-off-by: snipe <snipe@snipe.net>
2024-04-10 14:35:13 +01:00
snipe
adacdc038d Apply company scoping for users
Signed-off-by: snipe <snipe@snipe.net>
2024-04-10 12:34:32 +01:00
akemidx
f0aefaac42 padding fix 2024-04-09 17:51:42 -04:00
Marcus Moore
1aeaa0094a Fix assigned to in labels 2024-04-09 13:52:54 -07:00
akemidx
6d3fa12f37 white texty for dropdown lists 2024-04-09 14:52:43 -04:00
Godfrey M
052f1eedd0 fixes signature canvas refresh on mobile 2024-04-09 10:30:33 -07:00
Godfrey M
858da800be attempting to lock screen orientation 2024-04-09 09:40:39 -07:00
snipe
954cac3af7 Merge remote-tracking branch 'origin/develop' 2024-04-08 10:56:04 +01:00
snipe
d0f171ebc6 Merge pull request #14567 from snipe/bug/sc-25257
Remove city as required field on location modal
2024-04-08 10:54:09 +01:00
snipe
90cf612ac7 Remove city as required field on location modal
Signed-off-by: snipe <snipe@snipe.net>
2024-04-08 10:50:52 +01:00
snipe
802b5863ab Merge remote-tracking branch 'origin/develop' 2024-04-08 08:49:54 +01:00
snipe
4baa949a99 Merge pull request #14557 from Godmartinz/add-audit-date-to-labels
Added audit dates to label options
2024-04-08 04:59:53 +01:00
snipe
3bed04a6d3 Merge pull request #14559 from Godmartinz/ldap_location_bug
Fixed  ldap location syncing incorrect locations for users.
2024-04-08 04:59:27 +01:00
Godfrey M
d548b800d5 nullifies location after ldap user sync 2024-04-04 15:43:33 -07:00
akemidx
f7f199d929 black hover bg for dark yellow theme 2024-04-04 15:51:46 -04:00
akemidx
5519fddb78 new clean branch for color change 2024-04-04 15:50:30 -04:00
Godfrey M
a9ed748fb2 adds audit dates to label options 2024-04-04 11:39:49 -07:00
snipe
dcba2bfd25 Merge pull request #14529 from mauro-miatello/develop
Hide/Show encrypted values in hardware list
2024-04-04 15:07:58 +01:00
snipe
72c91ead8b Merge remote-tracking branch 'origin/develop'
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	public/css/build/app.css
#	public/css/build/overrides.css
#	public/css/dist/all.css
#	public/mix-manifest.json
2024-04-04 15:06:37 +01:00
snipe
774d0aa90c Updated dev assets
Signed-off-by: snipe <snipe@snipe.net>
2024-04-04 15:05:35 +01:00
snipe
2eea67ce34 Merge pull request #14547 from Godmartinz/user-dropdown-media-change
Fixed alignment of dropdown menu for user in nav bar
2024-04-04 15:04:36 +01:00
snipe
db1c44f921 Merge pull request #14552 from snipe/bug/sc-25229/redirect_if_already_checked_in
Redirect on checkin if the asset is already checked in
2024-04-04 15:01:43 +01:00
snipe
e11287ec25 Redirect on checkin if the asset is already checked in
Signed-off-by: snipe <snipe@snipe.net>
2024-04-04 15:00:55 +01:00
snipe
4f10adfb76 Merge remote-tracking branch 'origin/develop' 2024-04-04 14:27:35 +01:00
snipe
f22803c59f Merge pull request #14551 from snipe/bug/sc-25221/ambiguous_id_in_custom_report
Fixed ambiguous id clause in custom report
2024-04-04 14:25:43 +01:00
snipe
a72d4e5dc1 Fixed ambiguous id clause in custom report
Signed-off-by: snipe <snipe@snipe.net>
2024-04-04 14:23:58 +01:00
Godfrey M
08f9aae8ae adds note to log listener and checkout accept notif 2024-04-03 11:59:47 -07:00
Godfrey M
43c32fa1bf fix class name in migration 2024-04-03 11:47:08 -07:00
Godfrey M
5afe024644 changed translation on asset acceptancen blade 2024-04-03 11:40:48 -07:00
Godfrey M
c01bdb42fc renamed migration 2024-04-03 11:39:17 -07:00
Godfrey M
e3ef8d295f Merge remote-tracking branch 'origin/add_decline_note_to_acceptance' into add_decline_note_to_acceptance 2024-04-03 11:37:05 -07:00
Godfrey M
ce1d677cdc adds note to acceptance 2024-04-03 11:36:03 -07:00
Godfrey M
df5cacf8a2 removed front end if statement 2024-04-03 11:06:05 -07:00
Godfrey M
bb2c73348d only grabs custom Fields that are not encrpyted 2024-04-03 11:03:58 -07:00
Godfrey M
4327653d70 remove db cleaner for encrypted selections 2024-04-03 10:57:41 -07:00
Godfrey M
5f7f4c9b91 aligns dropdown menu for user in nav 2024-04-03 10:41:50 -07:00
snipe
d44202e55b Merge remote-tracking branch 'origin/develop'
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	public/css/build/app.css
#	public/css/build/overrides.css
#	public/css/dist/all.css
#	public/mix-manifest.json
2024-04-03 13:09:48 +01:00
snipe
df95447ea4 New dev assets
Signed-off-by: snipe <snipe@snipe.net>
2024-04-03 13:08:08 +01:00
snipe
01852c7188 Merge pull request #14520 from Godmartinz/loading_overlap_bug
fixes z-index of table load
2024-04-03 13:07:14 +01:00
snipe
79c5697042 Fixed dev - take 2!
Signed-off-by: snipe <snipe@snipe.net>
2024-04-03 13:06:49 +01:00
Brady Wetherington
65e21faa3e Merge branch 'develop' into snipeit_v7_laravel10
Hopefully, last merge?
2024-04-02 20:34:04 +01:00
MrM
658ba092e2 Hide encrypted values in hardware list
Encrypted values are now hidden also in hardware list, clicking on them show the decrypted value
2024-03-31 18:55:58 +02:00
MrM
b221d99e7b Encrypted values enhancement
Show asterisks instead of the value, respecting the length of the field
2024-03-31 12:27:35 +02:00
snipe
b7af049589 Merge remote-tracking branch 'origin/develop'
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	config/version.php
2024-03-29 13:20:22 +00:00
snipe
c2d863da99 Bumped version
Signed-off-by: snipe <snipe@snipe.net>
2024-03-29 13:19:22 +00:00
snipe
6f9ba6ede4 Merge remote-tracking branch 'origin/develop' 2024-03-29 12:49:22 +00:00
snipe
df4e6a0023 Fixed typo in Polish
I will fix this in CrowdIn shortly

Signed-off-by: snipe <snipe@snipe.net>
2024-03-29 12:47:43 +00:00
snipe
d60fa65f85 Merge remote-tracking branch 'origin/develop' 2024-03-28 21:59:36 +00:00
snipe
8081a82fe4 Merge branch 'develop' of https://github.com/snipe/snipe-it into develop 2024-03-28 21:58:58 +00:00
snipe
f42e5d5292 Reverting the store/update asset API responses for now
This currently breaks the Jamf integration - need a better longer term plan.

Signed-off-by: snipe <snipe@snipe.net>
2024-03-28 21:58:49 +00:00
snipe
5a3f5b03d0 Merge pull request #14456 from akemidx/feature/sc-25079/legacy-locations
Default Locale value changed to en-US
2024-03-28 21:47:40 +00:00
akemidx
721902c2d4 committed for later 2024-03-28 16:44:44 -04:00
Godfrey M
a450530c74 fixes z-index of table load 2024-03-28 11:44:55 -07:00
snipe
2b4886f37f Commented out Heroic deploy for now 2024-03-28 17:43:18 +00:00
snipe
b45de3e17f Update README.md
Added alert notations
2024-03-28 17:41:46 +00:00
snipe
b2eea3e5a5 Merge remote-tracking branch 'origin/develop'
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	public/js/dist/all-defer.js
#	public/mix-manifest.json
2024-03-28 13:02:51 +00:00
snipe
f411c0fdd8 Merge pull request #14518 from snipe/fixes/downgrade_alpine
Downgrade alpine to 3.13.5
2024-03-28 12:59:52 +00:00
snipe
74d8431d01 Downgrade alpine to 3.13.5
Signed-off-by: snipe <snipe@snipe.net>
2024-03-28 12:58:43 +00:00
snipe
3ea0cd75a5 Merge remote-tracking branch 'origin/develop' 2024-03-28 12:27:24 +00:00
snipe
5f6c746d25 Merge pull request #14517 from snipe/bug/sc-25186/label_index
Check that the array key exists in the label engine
2024-03-28 12:26:20 +00:00
snipe
1f2d30ebf4 Check that the array key exists
Signed-off-by: snipe <snipe@snipe.net>
2024-03-28 12:25:29 +00:00
akemidx
e6b366020a lots of attempts and syntax, but no go 2024-03-27 19:05:59 -04:00
snipe
6dd6b45829 Merge remote-tracking branch 'origin/develop' 2024-03-27 20:43:34 +00:00
snipe
e5800a2dac Merge pull request #14516 from snipe/fixes/fixed_sorting_on_last_checkin_assets_api
Fixes/fixed sorting on last checkin assets api
2024-03-27 20:39:12 +00:00
snipe
0d3d172108 Make last_checkin searchable and fillable
Signed-off-by: snipe <snipe@snipe.net>
2024-03-27 20:37:40 +00:00
snipe
86677b5f13 Make last_checkin sortable
Signed-off-by: snipe <snipe@snipe.net>
2024-03-27 20:37:25 +00:00
snipe
3f5b94f8ad Merge remote-tracking branch 'origin/develop' 2024-03-27 19:52:23 +00:00
snipe
cf8cb8521b Merge pull request #14515 from squintfox/fixes-results-not-limited-by-api-params
Fixes #14289: /reports/activity API endpoint returns too many results due to orwhere
2024-03-27 19:51:58 +00:00
Robert Spadaro
ccd00caa70 Wrap where logic in additional where statement to protect appended params 2024-03-27 15:36:00 -04:00
snipe
57010b4c23 Merge pull request #14500 from Godmartinz/add-accessory-signature-to-print-all
Added signature to user print report for Accessories and Consumables
2024-03-27 19:02:59 +00:00
snipe
545a185614 Merge pull request #14262 from akemidx/bug/sc-24812
Last Checkin Date added to Hardware View and Index
2024-03-27 19:02:25 +00:00
snipe
1572e339f9 Merge pull request #14514 from snipe/localizations/new_translations_march_224
Updated translations
2024-03-27 19:01:23 +00:00
snipe
7782e5cc93 Updated translations
Signed-off-by: snipe <snipe@snipe.net>
2024-03-27 18:59:28 +00:00
Godfrey Martinez
bcdda551b3 Merge pull request #12 from Godmartinz/remove_jquery
removes jquery and updates translation
2024-03-27 11:58:11 -07:00
Godfrey M
bc66c0f223 removes jquery and updates translation 2024-03-27 11:56:47 -07:00
Jeff Clay
1b8c7ff4ec Added PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT options to database.php and updated .env files to provide value for the new option. 2024-03-27 11:38:13 -05:00
snipe
3bb81d1e4d Merge remote-tracking branch 'origin/develop'
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	public/js/dist/all-defer.js
#	public/mix-manifest.json
2024-03-27 16:18:28 +00:00
snipe
756c44fcba Merge pull request #14510 from snipe/snyk/Upgrade-alpinejs-from-3.13.5-to-3.13.6
[Snyk] Upgrade alpinejs from 3.13.5 to 3.13.6
2024-03-27 16:14:53 +00:00
snipe
befa4428d0 Merge pull request #14509 from snipe/feature/sc-25173/filter_assigned_user_assets_by_category_id
Added ability to filter in user's assigned assets by category ID and model ID
2024-03-27 16:13:51 +00:00
snipe
60c678680a [Snyk] Upgrade alpinejs from 3.13.5 to 3.13.6
Signed-off-by: snipe <snipe@snipe.net>
2024-03-27 16:12:57 +00:00
snipe
8bc9688d71 Added ability to filter on category ID and model ID from user’s asset API
Signed-off-by: snipe <snipe@snipe.net>
2024-03-27 16:04:00 +00:00
Godfrey M
aa8af2220c trying to remove an encrypted field but not all fields 2024-03-26 16:10:08 -07:00
akemidx
b124b9af4d adding in change to settings table 2024-03-26 16:50:39 -04:00
snipe
ae403da8c1 Merge pull request #14502 from marcusmoore/bug/sc-25004/pwd_secure_complexity-validation
Added validation around `pwd_secure_complexity`
2024-03-26 20:05:04 +00:00
Marcus Moore
b5b8777c94 Extract translation string 2024-03-26 12:23:57 -07:00
snipe
850f85ff59 Merge pull request #14369 from spencerrlongg/bug/sc-24343
Add new validator for custom field checkboxes and fix asset model default updates
2024-03-26 19:22:29 +00:00
Godfrey M
84cc88831d adds signature for components 2024-03-26 12:18:10 -07:00
Godfrey M
f4f9b165a7 moves signature check inside of td 2024-03-26 11:24:34 -07:00
Godfrey M
3222d4c8df adds signature check 2024-03-26 09:18:34 -07:00
Godfrey M
3173ead2e7 adds accessory signature to user print report 2024-03-26 09:11:54 -07:00
Godfrey M
040f826c52 removes encrypted fields as a selectable option for labels 2024-03-26 08:57:18 -07:00
snipe
89d733d442 Merge remote-tracking branch 'origin/develop' 2024-03-26 14:53:24 +00:00
snipe
df49e8350f Merge pull request #14498 from snipe/features/limit_report_by_admin
Fixed #14495 - Allow user_id to be passed to limit to only specific admins
2024-03-26 14:52:03 +00:00
snipe
3ced85080a Fixed #14495 - Allow user_id to be passed to limit to only specific admins
Signed-off-by: snipe <snipe@snipe.net>
2024-03-26 14:45:20 +00:00
snipe
0611ab9b4c Merge remote-tracking branch 'origin/develop' 2024-03-26 12:29:39 +00:00
snipe
f450cafe3e Fixed missing div
Signed-off-by: snipe <snipe@snipe.net>
2024-03-26 12:29:25 +00:00
snipe
1f29eb1875 Merge pull request #14494 from snipe/features/add_supplier_address_to_licenses
Added supplier details to license view
2024-03-26 12:20:57 +00:00
snipe
a4e5ae0938 Removed duplicates
Signed-off-by: snipe <snipe@snipe.net>
2024-03-26 12:20:27 +00:00
snipe
77dacfcc30 Show if deleted supplier
Signed-off-by: snipe <snipe@snipe.net>
2024-03-26 12:19:29 +00:00
snipe
0d9b6eaf71 Added supplier details to license view
Signed-off-by: snipe <snipe@snipe.net>
2024-03-26 12:18:04 +00:00
snipe
7060ffaf34 Merge remote-tracking branch 'origin/develop'
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	config/version.php
#	public/js/dist/bootstrap-table.js
#	public/mix-manifest.json
2024-03-26 11:17:07 +00:00
snipe
02a37e2f89 Bumped hash
Signed-off-by: snipe <snipe@snipe.net>
2024-03-26 10:16:46 +00:00
snipe
9c1b1bc2b5 Removed fre-order columns - it’s not currently used
Signed-off-by: snipe <snipe@snipe.net>
2024-03-26 10:15:46 +00:00
snipe
b34156ca25 Merge remote-tracking branch 'origin/develop'
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	public/js/dist/bootstrap-table.js
#	public/mix-manifest.json
2024-03-26 09:58:35 +00:00
snipe
61bdb57b5d Merge pull request #14492 from snipe/feature/sc-25142/deeplink_search_urls
Fixed #14483 - adds deeplinking to search/sort/pagination
2024-03-26 09:55:50 +00:00
snipe
9df84e235c Check for config variable
Signed-off-by: snipe <snipe@snipe.net>
2024-03-26 09:54:40 +00:00
snipe
566ba4783e Fixed #14483 - adds deeplinking to search/sort/pagination
Signed-off-by: snipe <snipe@snipe.net>
2024-03-26 09:50:01 +00:00
snipe
b41b4b1732 Merge remote-tracking branch 'origin/develop' 2024-03-26 08:48:44 +00:00
snipe
ccf9457c45 Merge pull request #14491 from PP-JN-RL/patch-1
Added Dymo Labelwriter 1933081
2024-03-26 08:46:03 +00:00
snipe
53aabdab66 Merge remote-tracking branch 'origin/develop' 2024-03-26 08:33:40 +00:00
snipe
8ff85c952e Fixed labelwriter 2112283 namespace
Signed-off-by: snipe <snipe@snipe.net>
2024-03-26 08:33:30 +00:00
Phil J R
afe1cb8234 Create LabelWriter_1933081.php
Added a longer version of the existing label (25 x 54mm vs. 25 x 89mm) due to better availability and to support longer asset names.
2024-03-26 08:29:47 +00:00
snipe
bd42505799 Merge remote-tracking branch 'origin/develop' 2024-03-26 08:23:40 +00:00
snipe
6c735c97c6 Merge pull request #14490 from snipe/bug/sc-25141/bad_method_call_model_restore_from_view
Fixed #14482 - bad method call model restore from view
2024-03-26 08:21:27 +00:00
snipe
31a57cdf14 Fixed #14482 - bad method call on restore from view
Signed-off-by: snipe <snipe@snipe.net>
2024-03-26 08:18:59 +00:00
snipe
7ebbef25e7 Standardize button styling
Signed-off-by: snipe <snipe@snipe.net>
2024-03-26 08:18:36 +00:00
Phil J R
f836342194 Rename Label_Writer_2112283.php to LabelWriter_2112283.php
Fix the name of LabelWWriter_2112283 to be consistent with the existing one.
2024-03-26 08:16:00 +00:00
spencerrlongg
5cf1a6c300 new validator for radio buttons 2024-03-25 21:03:13 -05:00
Marcus Moore
bd506820b7 Display error message 2024-03-25 17:59:39 -07:00
Marcus Moore
5815607924 Add validation for pwd_secure_complexity 2024-03-25 17:45:41 -07:00
spencerrlongg
9b40c9788f rm commented tests 2024-03-25 18:58:49 -05:00
snipe
67b5e9093e Merge pull request #14488 from marcusmoore/bug/pass-last-audit-date-through-for-validation
Handle badly formatted `last_audit_date` in `StoreAssetRequest`
2024-03-25 20:57:20 +00:00
Marcus Moore
57d1c036ec Improve method name 2024-03-25 13:53:30 -07:00
Marcus Moore
71722b753d Little bit of clean up 2024-03-25 13:49:03 -07:00
Marcus Moore
a2625c889a Improve comment 2024-03-25 13:48:32 -07:00
Marcus Moore
c98b9da612 Pass last_audit_date through for model level validation if not a date 2024-03-25 13:47:24 -07:00
Marcus Moore
675717ff82 Add failing test 2024-03-25 13:46:22 -07:00
snipe
83ef7c6fe8 Merge pull request #14486 from marcusmoore/bug/sc-25139
Fixes `last_audit_date` not being stored via API correctly
2024-03-25 19:49:54 +00:00
Marcus Moore
5f4c964309 Account for last_audit_date not being provided 2024-03-25 12:45:11 -07:00
Marcus Moore
66ba96d531 Set last_audit_date to valid format in StoreAssetRequest 2024-03-25 12:38:12 -07:00
snipe
d67b2da064 Merge pull request #14485 from PP-JN-RL/patch-1
Created Dymo LabelWriter Label 2112283
2024-03-25 16:50:10 +00:00
Phil J R
e45fd4088f Created Dymo LabelWriter Label 2112283
I have added the layout for the Dymo LabelWriter 2112283 Labels.
They are: DYMO 2112283 DURABLE SMALL MULTI PURPOSE LABELS (160 LABELS) - 25 X 54MM
2024-03-25 16:31:20 +00:00
spencerrlongg
7e4a0eedf0 rm dumb note 2024-03-25 10:46:26 -05:00
snipe
3f812f696d Merge pull request #14472 from snipe/fixes/last_audit_date_via_api
Added validation for last_audit_date and next_audit_date
2024-03-25 14:35:42 +00:00
Godfrey M
633249b08a user assets get updated when a user changes location 2024-03-21 15:15:40 -07:00
Godfrey M
21c3b1fbd2 rename declined message to note, increased width of textarea 2024-03-21 14:03:25 -07:00
snipe
e9e6f925bf Updated validation
Signed-off-by: snipe <snipe@snipe.net>
2024-03-21 18:34:39 +00:00
snipe
828b84084d Added validation for last_audit_date and next_audit_date
Signed-off-by: snipe <snipe@snipe.net>
2024-03-21 18:29:38 +00:00
snipe
a6a0bfacc2 Merge remote-tracking branch 'origin/develop' 2024-03-21 18:03:19 +00:00
snipe
c4b7e77498 Merge pull request #14089 from spencerrlongg/bug/escaped_quotes_in_listbox
Use `htmlentities()` instead of `htmlspecialcharacters()` on Custom Field Listbox Values
2024-03-21 12:55:25 +00:00
snipe
91c7180bfd Merge pull request #14469 from snipe/feature/sc-19515/2fa_reset_log
Added 2FA reset log entry
2024-03-21 12:52:22 +00:00
Marcus Moore
b368acf941 Implement test case 2024-03-20 17:46:09 -07:00
snipe
7c39f516b9 Merge pull request #14421 from marcusmoore/fixes/add-minimal-validation-around-asset-tags
Adds a minimal amount of validation around asset_tags in AssetsController
2024-03-21 00:04:44 +00:00
snipe
ce1ddcfcee Merge pull request #14438 from marcusmoore/chore/sc-25071
Removed the need to add `InteractsWithSettings` to each test case
2024-03-21 00:03:34 +00:00
snipe
945e8b402f Only offer the 2FA reset if the user already has 2FA set up
Signed-off-by: snipe <snipe@snipe.net>
2024-03-20 23:52:51 +00:00
snipe
5ed2bd0fb7 Skip the normal edit observer
Signed-off-by: snipe <snipe@snipe.net>
2024-03-20 23:52:22 +00:00
snipe
bc908b854d Added icon
Signed-off-by: snipe <snipe@snipe.net>
2024-03-20 23:44:47 +00:00
snipe
2067b1138a Added the log item
Signed-off-by: snipe <snipe@snipe.net>
2024-03-20 23:43:58 +00:00
snipe
1ffbdee156 Updated 2FA text to not be google authenticator specific
Signed-off-by: snipe <snipe@snipe.net>
2024-03-20 23:43:30 +00:00
snipe
bd2812cac1 Added new string
Signed-off-by: snipe <snipe@snipe.net>
2024-03-20 23:43:12 +00:00
snipe
f2a5eac256 Tightened up 2FA text
Signed-off-by: snipe <snipe@snipe.net>
2024-03-20 23:43:05 +00:00
snipe
b4e647dbd1 Merge remote-tracking branch 'origin/develop' 2024-03-20 21:31:04 +00:00
Marcus Moore
530291f81c Implement some tests 2024-03-20 14:28:27 -07:00
snipe
de18e449a6 Merge pull request #14464 from snipe/features/toggle_all_columns
Added "toggle all" to column selector
2024-03-20 21:26:23 +00:00
snipe
dce19e0bea Set names and actions to switchable = false
Signed-off-by: snipe <snipe@snipe.net>
2024-03-20 21:25:50 +00:00
snipe
1f586d3102 Removed data-show-columns-toggle-all data attribute
Signed-off-by: snipe <snipe@snipe.net>
2024-03-20 21:25:16 +00:00
snipe
e5d01170d2 Fixed locale, added showColumnsToggleAll and minimumCountColumns
Signed-off-by: snipe <snipe@snipe.net>
2024-03-20 21:24:59 +00:00
Marcus Moore
393dc51167 Add assertions around the event dispatch 2024-03-20 13:44:26 -07:00
Marcus Moore
984cc7a4f2 Scaffold tests around asset checkout via web 2024-03-20 13:29:25 -07:00
snipe
0f11963127 Merge remote-tracking branch 'origin/develop' 2024-03-20 19:01:03 +00:00
snipe
d8378f2a10 Merge pull request #14468 from snipe/features/added_default_location_to_print_all_assigned
Added default location to print all assigned
2024-03-20 18:57:01 +00:00
snipe
a0a5480c97 Added default location to print all assigned
Signed-off-by: snipe <snipe@snipe.net>
2024-03-20 18:55:47 +00:00
snipe
3391108551 Merge remote-tracking branch 'origin/develop' 2024-03-20 12:57:30 +00:00
snipe
52551dad0f Merge pull request #14465 from snipe/features/14460_add_avif_format
Added #14460 add avif format
2024-03-20 12:39:14 +00:00
snipe
321414f6e3 Updated comment
Signed-off-by: snipe <snipe@snipe.net>
2024-03-20 12:38:48 +00:00
snipe
7787fe42c8 Added avif to helpers
Signed-off-by: snipe <snipe@snipe.net>
2024-03-20 12:30:28 +00:00
snipe
3b66912742 Fixed #14460 - added support for avif
Signed-off-by: snipe <snipe@snipe.net>
2024-03-20 12:25:02 +00:00
snipe
278a25c63b Added toggle all to column selector
Signed-off-by: snipe <snipe@snipe.net>
2024-03-20 12:14:41 +00:00
snipe
0d124bb5a1 Fixed indent
Signed-off-by: snipe <snipe@snipe.net>
2024-03-20 12:08:35 +00:00
snipe
417caae589 Added translation
Signed-off-by: snipe <snipe@snipe.net>
2024-03-20 12:07:18 +00:00
snipe
3d306aacc5 Fixed mismatched HTML tag
Signed-off-by: snipe <snipe@snipe.net>
2024-03-20 11:52:51 +00:00
snipe
ea4ecaea03 Merge remote-tracking branch 'origin/develop'
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	public/css/dist/all.css
#	public/css/dist/bootstrap-table.css
#	public/js/dist/bootstrap-table.js
#	public/mix-manifest.json
2024-03-20 11:04:34 +00:00
snipe
6c90f9e395 Merge pull request #14462 from snipe/fixes/small_ui_tweaks_for_country_dropdown
Wider country dropdown
2024-03-20 11:01:39 +00:00
snipe
ddf81ba135 Wider country dropdown
Signed-off-by: snipe <snipe@snipe.net>
2024-03-20 11:00:06 +00:00
snipe
8ebb41caa6 Merge pull request #14461 from snipe/security/update_bs_tables
[Snyk] Upgrade bootstrap-table from 1.22.2 to 1.22.3 #14455
2024-03-20 10:39:05 +00:00
snipe
faf48b1684 [Snyk] Upgrade bootstrap-table from 1.22.2 to 1.22.3 #14455
Signed-off-by: snipe <snipe@snipe.net>
2024-03-20 10:37:53 +00:00
snipe
b8232d205b Merge pull request #14457 from Godmartinz/bulk_delete_locations_bug
Fixed Bulk delete locations bug
2024-03-20 10:35:45 +00:00
Godfrey M
62745923cf fixes API location delete 2024-03-19 15:25:28 -07:00
Godfrey M
090466123f add withCount to query instead 2024-03-19 15:18:18 -07:00
Godfrey M
38a3e36cd6 fixes translation usage 2024-03-19 14:32:21 -07:00
Godfrey M
e8dc634a40 fixes translation usage 2024-03-19 14:30:53 -07:00
Godfrey M
0d0984a400 Bulk Delete Locations does not work [sc-25100] 2024-03-19 14:26:40 -07:00
akemidx
8640cad033 was using lcoations and not locale. fixed 2024-03-19 16:11:32 -04:00
akemidx
dc29717623 fixing default 2024-03-19 15:51:05 -04:00
snipe
814914924f Merge remote-tracking branch 'origin/develop' 2024-03-19 15:51:07 +00:00
snipe
c7083488b2 Merge pull request #14447 from snipe/feature/sc-25020_better_print_view
Add additional options to print all assigned view
2024-03-19 15:01:50 +00:00
snipe
4b4d383509 Removed - it’s for another PR
Signed-off-by: snipe <snipe@snipe.net>
2024-03-19 15:00:26 +00:00
Godfrey M
b9986033cc removed abbr. of variable, changed variable types in migration 2024-03-18 16:03:40 -07:00
akemidx
3680e04817 migration to set legacy locations to an standardized format 2024-03-18 18:29:59 -04:00
snipe
21e23baa37 Fixed ternary
Signed-off-by: snipe <snipe@snipe.net>
2024-03-18 21:28:46 +00:00
snipe
fcd130ae15 Layout improvements
Signed-off-by: snipe <snipe@snipe.net>
2024-03-18 21:17:46 +00:00
Godfrey M
8b52d5da85 fixed typos, reordered jquery, fixed migrations 2024-03-18 12:36:54 -07:00
Marcus Moore
d1dffb84dc Remove InteractsWithSettings trait for remaining tests 2024-03-18 12:33:45 -07:00
Marcus Moore
541350916d Merge branch 'develop' into chore/sc-25071
# Conflicts:
#	tests/Feature/Api/Users/UpdateUserApiTest.php
#	tests/Feature/Notifications/AccessoryWebhookTest.php
#	tests/Feature/Notifications/AssetWebhookTest.php
#	tests/Feature/Notifications/ComponentWebhookTest.php
#	tests/Feature/Notifications/ConsumableWebhookTest.php
#	tests/Feature/Notifications/LicenseWebhookTest.php
2024-03-18 12:33:31 -07:00
Godfrey M
01afa9a749 declined notes are reflected in the action logs 2024-03-18 10:50:15 -07:00
Godfrey M
57f5d4a570 deleted_msg saves to db 2024-03-18 10:45:47 -07:00
Godfrey M
4588393b76 adds declined msg to mail notif, updates lang files and checkout acceptance controller 2024-03-18 10:25:55 -07:00
Godfrey M
0fd99d410e adds a text field and jquery to show/hide text field 2024-03-18 09:36:09 -07:00
snipe
002fd4ce30 Nicer formatting for signoff
Signed-off-by: snipe <snipe@snipe.net>
2024-03-18 13:44:51 +00:00
snipe
7b4ecb275f Use trans choice for language
Signed-off-by: snipe <snipe@snipe.net>
2024-03-18 13:29:01 +00:00
snipe
2df5d3a8ff Fixed column selector
Signed-off-by: snipe <snipe@snipe.net>
2024-03-18 13:06:08 +00:00
snipe
7070bad53b Merge remote-tracking branch 'origin/develop'
Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	public/css/build/app.css
#	public/css/build/overrides.css
#	public/css/dist/all.css
#	public/mix-manifest.json
2024-03-18 12:32:22 +00:00
snipe
da62d6af26 Merge pull request #14445 from snipe/fixes/check_for_valid_license_category_on_view_assets
Make sure the category is still valid before displaying on view assets
2024-03-18 12:30:15 +00:00
snipe
d0d4d14787 Make sure the category is still valid before displaying on view assets
Signed-off-by: snipe <snipe@snipe.net>
2024-03-18 12:29:00 +00:00
snipe
09d69b214b Merge pull request #14436 from marcusmoore/chore/sc-24901
Organized notification test cases
2024-03-18 12:20:23 +00:00
snipe
0e2aaebda4 Merge pull request #14406 from mauro-miatello/develop
Hide/Show ecnrypted values when click on the lock icon
2024-03-18 12:19:54 +00:00
snipe
ec2c58163f Merge pull request #14437 from marcusmoore/chore/sc-25070
Removed dead test code
2024-03-18 12:19:35 +00:00
Marcus Moore
a28bee86ba Extract method 2024-03-14 16:33:49 -07:00
Marcus Moore
fb64892971 Re-order 2024-03-14 16:26:27 -07:00
Marcus Moore
95ff692b14 Improve InteractsWithSettings name 2024-03-14 15:06:52 -07:00
Marcus Moore
8003615b1f Move InteractsWithSettings to TestCase 2024-03-14 14:15:11 -07:00
Marcus Moore
948dc3c974 Remove duplicate trait 2024-03-14 13:11:53 -07:00
Marcus Moore
1afb724606 Remove commented (and old) test cases 2024-03-14 13:11:43 -07:00
Marcus Moore
451281d833 Delete test cases with only commented code 2024-03-14 13:11:27 -07:00
Marcus Moore
485f11c945 Move trait usage to parent TestCase 2024-03-14 12:56:49 -07:00
Marcus Moore
dbc79655b0 Cleanup 2024-03-14 12:02:56 -07:00
Marcus Moore
02f6aa6161 Add group tag for new test case 2024-03-14 11:19:36 -07:00
Marcus Moore
07c5264b41 Organize email check in notifications test 2024-03-14 11:17:47 -07:00
Marcus Moore
7c178a6a78 Merge branch 'develop' into chore/sc-24901
# Conflicts:
#	tests/Feature/Notifications/AssetWebhookTest.php
2024-03-14 11:13:14 -07:00
snipe
f56d53d7c1 Prod assets
Signed-off-by: snipe <snipe@snipe.net>
2024-03-14 17:14:33 +00:00
snipe
4cd4a936d8 Updated dev assets
Signed-off-by: snipe <snipe@snipe.net>
2024-03-14 15:43:47 +00:00
snipe
7bae4c39c6 Merge pull request #14401 from uberbrady/fix_locale_warning
Fix [sc-25008] - correct and improve legacy language warnings
2024-03-14 15:42:28 +00:00
snipe
d55d95bbea Merge pull request #14415 from Godmartinz/date_picker_z_order
Fixed z-index of date-picker
2024-03-14 15:39:11 +00:00
snipe
5e48d56561 Merge pull request #14427 from marcusmoore/bug/sc-25014
Removes the unused `mediconesystems/livewire-datatables` package
2024-03-14 15:35:53 +00:00
snipe
6a5098fb0c Merge remote-tracking branch 'origin/develop' 2024-03-14 13:26:38 +00:00
snipe
4e835e1772 Merge pull request #14430 from snipe/bug/sc-25066/fixed_requestable_search
Move requestable scope below sorting, etc
2024-03-14 13:25:44 +00:00
snipe
cce8cb4f5e Move requestable scope below sorting, etc
Signed-off-by: snipe <snipe@snipe.net>
2024-03-14 13:24:22 +00:00
Marcus Moore
8aed26aab1 Remove unneeded test cases 2024-03-13 16:56:54 -07:00
Marcus Moore
01d5d4c2c8 Improve data provider name 2024-03-13 16:37:50 -07:00
Marcus Moore
592385cb07 Remove mediconesystems/livewire-datatables package 2024-03-13 11:58:03 -07:00
snipe
85123b3e66 Rework print page
Still seeing a weird error tho, not done yet

Signed-off-by: snipe <snipe@snipe.net>
2024-03-13 12:36:17 +00:00
Marcus Moore
0fcf223960 Add minimal validation for asset_tags 2024-03-12 12:00:10 -07:00
Godfrey M
bf0bd06f20 put important back 2024-03-11 15:56:53 -07:00
Godfrey M
f07b0b6bd7 removed important 2024-03-11 15:54:59 -07:00
Godfrey M
717b26c834 fixes z-index of date-picker 2024-03-11 15:53:59 -07:00
snipe
8bb8eab69b Merge remote-tracking branch 'origin/develop' 2024-03-11 15:00:38 +00:00
snipe
693d1c9452 Merge pull request #14413 from snipe/fixes/deprecation_on_strtoupper
Fixed deprecation warning on `strtoupper()`
2024-03-11 14:59:55 +00:00
snipe
b049bb1d5c Check for null on select
Signed-off-by: snipe <snipe@snipe.net>
2024-03-11 14:55:49 +00:00
snipe
c5c6b3bbc6 Starting the revised print page
Signed-off-by: snipe <snipe@snipe.net>
2024-03-11 14:23:25 +00:00
snipe
1df56a7cab Merge pull request #14407 from snipe/bug/sc-25019_added_created_at_pivot
Added created_at to license pivot
2024-03-10 16:40:56 +00:00
snipe
3f5cc2507d Used updated_at instead
Signed-off-by: snipe <snipe@snipe.net>
2024-03-10 16:39:49 +00:00
snipe
5a85424295 Added created_at to license pivot
Signed-off-by: snipe <snipe@snipe.net>
2024-03-10 16:33:04 +00:00
snipe
a53a8cca74 Merge remote-tracking branch 'origin/develop' 2024-03-10 14:40:41 +00:00
snipe
3fdee881f9 Merge pull request #14404 from snipe/fixes/Uninitialized-string-offset-0-in-labels
Fixed uninitialized offset in labels in new label engine
2024-03-10 14:40:12 +00:00
snipe
a289dfaf88 Cleanup
Signed-off-by: snipe <snipe@snipe.net>
2024-03-10 14:33:53 +00:00
MrM
8abd359b5b Script to hide / show encrypted values in web ui
added a function to show/hide encrypted values with a simple trick because ClipboardJS can't copy display:none element's value
2024-03-10 15:18:54 +01:00
MrM
9359809b4f Hide / Show encrypted values in web ui
added a span element to hide encrypted values
2024-03-10 15:09:46 +01:00
snipe
cde5502f94 Handle blank labels on asset label fields
Signed-off-by: snipe <snipe@snipe.net>
2024-03-10 14:03:21 +00:00
spencerrlongg
04e0a9d4a5 commented tests for now 2024-03-08 13:14:59 -06:00
snipe
28ec0b8ebb Removed debugging console lines
Signed-off-by: snipe <snipe@snipe.net>
2024-03-08 17:19:31 +00:00
snipe
37dfecf098 Fixed uninitialized offset in labels
Signed-off-by: snipe <snipe@snipe.net>
2024-03-08 16:46:56 +00:00
snipe
9d8ce872a4 Merge remote-tracking branch 'origin/develop' 2024-03-08 14:56:21 +00:00
snipe
07880dfe50 Merge pull request #14400 from snipe/localizations/updated_strings
Updated language strings, added Somali
2024-03-08 14:07:32 +00:00
snipe
7eed9f8542 Added Somali
Signed-off-by: snipe <snipe@snipe.net>
2024-03-08 14:06:21 +00:00
Brady Wetherington
a2e70dd6b2 Fix [sc-25008] - correct and improve legacy language warnings
The legacy language warning was misfiring when a user's language
didn't match the APP_LOCALE from .env.

Additionally, we weren't properly warning when the legacy-language
came from Settings or from the user themselves. Both of which should
be impossible but still probably not a bad idea to warn on it, anyways
2024-03-08 14:04:21 +00:00
snipe
b9aeded957 Updated strings
Signed-off-by: snipe <snipe@snipe.net>
2024-03-08 14:01:34 +00:00
snipe
7939c691f7 Added Brother 18mm label type
Signed-off-by: snipe <snipe@snipe.net>
2024-03-07 22:04:12 +00:00
spencerrlongg
3a0a13d06d tests written but something not working... 2024-03-05 16:35:06 -06:00
spencerrlongg
a251e61d73 rm commented code and add comment 2024-03-05 13:40:44 -06:00
spencerrlongg
af06b1cd06 hide encryption option for checkbox and radio 2024-03-05 13:37:30 -06:00
Brady Wetherington
5b9120ba6c Merge branch 'develop' into snipeit_v7_laravel10 2024-03-05 19:22:37 +00:00
spencerrlongg
ad0f873ece rm validation stuff 2024-03-05 11:58:00 -06:00
Jeremy Price
8ace30ee23 Update mailer configurations for Symfony mailer
Newer Laravel uses Symfony mailer instead of SwiftMailer, and that means
that some configs and functionality have changed

In this change, we update config/mail.php with the new config layout and
name/functionality changes

of note:

* New configuration layout supporting lots of new/different mailers
* MAIL_DRIVER has become MAIL_MAILER, though we'll support both
* MAIL_ENCRYPTION is mostly useless, and we mark it as such -- symfony
  mailer detects which type of encryption to use automagically.
* MAIL_TLS_VERIFY_PEER is now available in case of self-signed
  certificates on the mail server, of if you want to access it by a
  different name, or by IP

Accordingly, we also update the .env examples, docker configs, and
the .env builder in the snipeit.sh installation script with the above
changes
2024-02-28 23:37:52 -08:00
akemidx
eb0657c953 Merge branch 'develop' into bug/sc-24812 2024-02-28 17:22:16 -05:00
Marcus Moore
551354b1bb Add group annotation for tests 2024-02-27 18:05:18 -08:00
Marcus Moore
03b7891edc Remove unneeded factory states 2024-02-27 18:03:53 -08:00
Marcus Moore
8978dff054 Consolidate helpers into trait 2024-02-27 18:01:08 -08:00
Marcus Moore
d20844fefa Improve readability by extracting additional helpers 2024-02-27 17:57:12 -08:00
Marcus Moore
cd579a04dd Improve readability by extracting fireCheckOutEvent method 2024-02-27 17:52:18 -08:00
Marcus Moore
15b8140bff Fix test helper 2024-02-27 17:48:17 -08:00
Marcus Moore
9a93ad2e06 Remove unneeded factory state 2024-02-27 17:46:27 -08:00
Marcus Moore
bd4d3aa52b Improve readability by extracting additional helpers 2024-02-27 17:44:19 -08:00
Marcus Moore
bf32ab177f Improve readability by extracting fireCheckInEvent method 2024-02-27 17:37:07 -08:00
Marcus Moore
2ea883aa15 Move Notification::fake() to setUp method 2024-02-27 17:23:30 -08:00
Marcus Moore
43cc296582 Consolidate additional tests 2024-02-27 17:14:35 -08:00
Marcus Moore
4c1aadd74e Improve naming and inline helper 2024-02-27 17:09:22 -08:00
Marcus Moore
7d3719bf70 Consolidate some slack notification tests 2024-02-27 17:07:40 -08:00
Marcus Moore
c08164d864 Update test names 2024-02-27 16:48:17 -08:00
Marcus Moore
b156aa74a5 Update helper name 2024-02-27 16:45:49 -08:00
akemidx
5ffade663a unstash 2024-02-26 18:41:58 -05:00
spencerrlongg
b6fa6cba22 note before switching tasks 2024-02-22 15:01:14 -06:00
spencerrlongg
14358651e4 pushing to test other branches 2024-02-22 13:28:23 -06:00
spencerrlongg
20dbacd22f store good, update needs work 2024-02-21 21:33:34 -06:00
Brady Wetherington
8f2843bfcf Merge branch 'develop' into snipeit_v7_laravel10
Had to re-generate composer.lock, and re-do package.json and rebuild assets as well.
2024-02-21 20:22:28 +00:00
akemidx
9397372f87 permissions, but they are now all in their own column because reasons??? 2024-02-20 18:48:17 -05:00
akemidx
8bbf6da052 user block, trying to pick out ONLY permissions we wanna see 2024-02-20 18:25:41 -05:00
spencerrlongg
d67ff54f4b temporary decrypt, almost there 2024-02-20 16:20:03 -06:00
spencerrlongg
26728a85ad this seems to work for patches 2024-02-20 13:18:40 -06:00
spencerrlongg
c6d85a1b0b allows arrays on checkbox values 2024-02-20 12:23:24 -06:00
spencerrlongg
115e0fc119 implode submitted arrays to save 2024-02-14 13:15:23 -06:00
spencerrlongg
1ceb703129 rm var 2024-02-14 12:44:09 -06:00
spencerrlongg
fb28882f65 trim potential spaces 2024-02-14 11:59:14 -06:00
spencerrlongg
d9c61fdb02 validation msg 2024-02-14 11:52:25 -06:00
spencerrlongg
72c118a70f cleanup 2024-02-14 11:41:46 -06:00
spencerrlongg
25241542d2 progress, going to sleep 2024-02-14 02:12:31 -06:00
spencerrlongg
57a75e68b9 maybe i do the inverse here? 2024-02-14 00:52:50 -06:00
spencerrlongg
dcf2168454 initial stuff, need to switch branches 2024-02-13 19:35:37 -06:00
akemidx
c5e8d1c276 custom report tinker 2024-02-13 17:09:51 -05:00
akemidx
4093327b7f adding in Last Checkin Date to Hardware view and index 2024-02-13 16:52:12 -05:00
spencerrlongg
d55358652b cleanup for pr 2024-02-13 13:45:56 -06:00
akemidx
f7d0cecdac permissions query starto 2024-02-12 19:01:06 -05:00
spencerrlongg
bcfa913450 condition makes this work, needs more testing 2024-02-07 20:03:37 -06:00
spencerrlongg
43d8474caa a note to remember this tomorrow 2024-02-06 17:45:46 -06:00
Brady Wetherington
8a2f3405d5 Merge branch 'develop' into snipeit_v7_laravel10
A lot of changes here, but hopefully this works?
2024-01-29 22:12:58 +00:00
spencerrlongg
1248260df3 i don't think the output needs to separately escaped, the entire statement is already wrapped in {{}} 2024-01-26 12:33:35 -06:00
spencerrlongg
4cb804cf03 get rid of e() on store and update 2024-01-26 11:56:02 -06:00
spencerrlongg
2b0dd8851c probably needs more testing... but should work 2024-01-26 11:47:09 -06:00
snipe
25db35e41e Merge pull request #14128 from snipe/jerm/upgrade-dot-php
Add remote requirements checking to upgrade.php
2024-01-24 13:23:10 +00:00
snipe
99000fada1 Merge pull request #14127 from snipe/jerm/upgrade-deps-file
Add php version requirements file for future-proofing upgrades
2024-01-17 13:15:56 +00:00
Jeremy Price
58b2f8ca17 typo 2024-01-11 19:12:24 -08:00
Jeremy Price
8be3c1aaf2 Quit the script when we hit hard errors
a found a few other points where we talk about exiting and re-running
the script once fixed, but never actually exit. So i'm adding-in the
missing exits, and updating any existing exits to make sure we return a
failing return code to the shell
2024-01-11 18:20:09 -08:00
Jeremy Price
2ee8639eaf Check to make sure there's a .env file
While i was testing this, i noticed that it ran right by the .env check,
even though i don't have a .env file at all. The script checks for a
_bad_ .env, but not a missing one.

Now it does
2024-01-11 18:18:41 -08:00
Jeremy Price
32605578dd Add remote requirements checking to upgrade.php
quoted from https://github.com/snipe/snipe-it/pull/14127
    There is a race condition in the upgrade.php file where it can't
    currently know the hard requirements for the version it's upgrading to
    until it does a git pull. By that time, it will have pulled new source
    code that possibly relies on an incompatible version of php, leaving you
    with a broken installation.

    Example: You're running v6.2.x on PHP 7.4, which is fine. v7 requires
    PHP 8.1 or 8.2, but we couldn't know that when we released v6. or v5 for
    that matter. We could change the requirements in the most-recent v6
    version of upgrade.php, but that doesn't help anyone who doesn't upgrade
    first to the most recent v6.

With this change, we implement fetching and incorporating the
requirements data from the remote file.

It's just fetching/decoding a couple of json values that replace the
hard-coded version requirements.

We move the branch checking higher than the php version checking so that
we can use the defined/overridden $branch to decide what branch to pull
the requirements from.
2024-01-11 18:13:59 -08:00
Jeremy Price
fe0bba6df6 rename upgrade requirements file and add snipeit version differentiation
the latter mostly for testing and san checking.. but it doesn't really
matter because it's just json.. if we don't use it we don't use it
2024-01-11 16:52:39 -08:00
Jeremy Price
5fdcd6298f rename php_max_major, because it's not.. it's major_minor, even if it sounds ridiculous 2024-01-11 16:50:16 -08:00
Jeremy Price
55943dbff6 add comments and php_max_wontwork because that's what we use rigth now and MVP, dammit 2024-01-11 16:47:47 -08:00
Jeremy Price
d12e571b20 undoing versioning.. doesn't make sense 2024-01-11 16:32:17 -08:00
Jeremy Price
0c15f05316 Initial upgrade_requirements.json file
for fetching before upgrades, to check major prereqs -- mainly php -- before
pulling down new, possibly breaking, code.
2024-01-11 16:27:03 -08:00
Jermops
25c9f8e038 Merge pull request #14105 from snipe/jerm/snipeit-sh
Update snipeit.sh for v7 Requirements
2024-01-08 11:48:21 -08:00
Jeremy Price
a3811371cc remove removal of installation scripts 2024-01-08 11:41:30 -08:00
Brady Wetherington
f734e196e5 Merge branch 'develop' into snipeit_v7_laravel10 2024-01-08 18:57:55 +00:00
Jeremy Price
6129f4722f Oops! Don't checkout my custom branch
using master until we make the switch to main. As master will keep
working after we switch branches, main will _not_ work _until_ we switch, and if
for some reason we have to delay the branch migration, this will remain
broken until we fix it.
2024-01-08 10:08:52 -08:00
Jeremy Price
585d7d0b87 replace some tabs with spaces. don't @ me 2024-01-05 12:09:03 -08:00
Jeremy Price
cdfc198f28 update changelog 2024-01-05 00:09:06 -08:00
Jeremy Price
6fcb3d3d5e re-add missing progress bar to ensure correct command ordering 2024-01-05 00:09:06 -08:00
Jeremy Price
358d9ec06d fix enterprise linux version in remi repo for v9 distros 2024-01-05 00:09:06 -08:00
Jeremy Price
322c8c1cf3 install php-sodium on al2. fix snipeit database name 2024-01-05 00:09:06 -08:00
Jeremy Price
47eb0c34a2 remove fedora surpport, add amazon and alma 2024-01-05 00:09:06 -08:00
Jeremy Price
4a290a85e6 awsl2 support, php8.2 support in centos/alma, new mysql user creation code 2024-01-05 00:09:06 -08:00
Jeremy Price
5489c50cc0 remove remaining 8.2 references in Ubuntu 23* block
different vim config confusion made my regex misbehave :-/
2024-01-05 00:09:06 -08:00
Jeremy Price
066e40dada update Ubuntu versions comment in code block 2024-01-05 00:09:06 -08:00
Jeremy Price
123d04ff7b split-out ubuntu 23* versions
since 2023 didn't produce and LTS ubuntu versions

the Ondrej repo we use for installing arbitrary PHP versions doesn't
(easily) support non-LTS versions of ubuntu, which means that 23.04 and
23.10 are problematic using the repo

However, these versions ship with  php8.1 and php8.2 (respectively), so
we don't even need the Ondrej repo for these, so we'll remove it

In general, we'll only support LTS Ubuntu repos because of this, but if
they happen to ship with our preferred PHP versions and otherwise work
w/o heroics, we'll include nominal support in the script
2024-01-05 00:09:06 -08:00
Jeremy Price
d5881736cf stop quoting run_as_app_user args
because "$@" splits positional parameters, but quoting the args makes
them one arg, which doesn't work
2024-01-05 00:09:06 -08:00
Jeremy Price
5e539da3da Debian 12 2024-01-05 00:09:06 -08:00
Jeremy Price
ba58ca9d5c fix up ondrej repo 2024-01-05 00:09:06 -08:00
Jeremy Price
117007dfa1 add new ubuntu/debian versions, change php to 8.2 2024-01-05 00:09:06 -08:00
snipe
d29b3633d1 Merge pull request #14063 from marcusmoore/chore/sc-24353
Removed unused files in assets directory
2024-01-04 22:41:49 +00:00
spencerrlongg
41e0275c95 htmlentities() 2024-01-03 12:42:36 -06:00
Marcus Moore
7cf4baa92a Remove unused vendor less from resources directory 2023-12-18 17:58:47 -08:00
Marcus Moore
6c3dfdfe6d Remove unused vendor css files 2023-12-18 17:48:52 -08:00
Marcus Moore
149d159c05 Remove unused bootstrap resources 2023-12-18 11:49:52 -08:00
Marcus Moore
c0ad16f497 Remove unused vendor js files 2023-12-18 11:48:28 -08:00
snipe
9edb631d52 Merge pull request #14024 from spencerrlongg/chore/last_vue_component
Last Vue Components
2023-12-13 04:35:35 +00:00
spencerrlongg
58d2f0a41e quick note 2023-12-12 15:49:57 -06:00
spencerrlongg
255d9427b6 make edit a button 2023-12-12 15:41:29 -06:00
spencerrlongg
d29f4489de fix 2023-12-12 14:09:12 -06:00
spencerrlongg
4367fc54bf remove vue from webpack steps 2023-12-12 13:43:05 -06:00
spencerrlongg
b89116eb55 submit on enter for edit 2023-12-12 13:33:51 -06:00
spencerrlongg
9430e9c8e2 autofocus, package-lock.json 2023-12-12 13:28:04 -06:00
spencerrlongg
b01d53a247 one more 2023-12-11 18:43:46 -06:00
spencerrlongg
65cbba3c2e completely kill vue 2023-12-11 18:09:22 -06:00
spencerrlongg
f93e7b91ff that's all folks 2023-12-06 16:20:30 -06:00
spencerrlongg
04069bab82 remove comment 2023-12-05 20:50:07 -06:00
spencerrlongg
3106035ef9 delete, comment 2023-12-05 20:41:34 -06:00
spencerrlongg
18720b3302 safety stuff 2023-12-05 20:36:59 -06:00
spencerrlongg
12e546e63a everything working, cleanup 2023-12-05 20:22:20 -06:00
spencerrlongg
c28936fefb almost there... problem with update button 2023-12-05 17:39:35 -06:00
spencerrlongg
080d196138 buttons work now after style tags removed 2023-12-05 16:41:25 -06:00
spencerrlongg
d3967b37cd this is a start, buttons not working? 2023-12-05 14:52:14 -06:00
snipe
0089ea2321 Merge pull request #13882 from marcusmoore/fixes/jquery-validation
Fix client side validation in the v7 branch
2023-12-05 17:26:48 +00:00
snipe
3f35124838 Merge pull request #13888 from spencerrlongg/chore/sc-16907
Convert Vue Personal Access Tokens to Livewire
2023-12-05 16:45:16 +00:00
spencerrlongg
6ca5fb6b20 remove token scope html 2023-12-05 09:44:03 -06:00
Marcus Moore
a3b0273445 Remove comment 2023-12-04 15:21:04 -08:00
akemidx
2a54797dce permission level proof of formatting 2023-11-28 17:58:37 -05:00
akemidx
9770016eec beginning of permission groups export 2023-11-28 17:47:36 -05:00
Brady Wetherington
6210716199 Merge branch 'develop' into snipeit_v7_laravel10 2023-11-27 13:04:39 +00:00
snipe
e41a16dbf3 Merge pull request #13879 from Godmartinz/location_search_bug
added user location scope
2023-11-19 07:01:59 +00:00
Godfrey M
01f4aa018f fixed query 2023-11-16 11:20:14 -08:00
Godfrey M
f9baeefbaf allows to search full name 2023-11-16 11:14:42 -08:00
spencerrlongg
af3417d6cc add return type 2023-11-16 11:42:37 -06:00
spencerrlongg
17bf8d0124 fix string 2023-11-16 11:31:00 -06:00
spencerrlongg
c3e02286d3 i can't blame this on livewire - animations or something? 2023-11-16 11:24:54 -06:00
spencerrlongg
a9d82bf157 enter working 2023-11-16 10:54:32 -06:00
spencerrlongg
e097df912e a little cleanup 2023-11-15 22:35:20 -06:00
spencerrlongg
477bb6165f rm log 2023-11-15 20:45:04 -06:00
Spencer Long
19850e8c5a Merge branch 'snipeit_v7_laravel10' into chore/sc-16907 2023-11-15 20:37:15 -06:00
spencerrlongg
12dcf76da9 more cleanup 2023-11-15 20:33:44 -06:00
spencerrlongg
36aac328e4 delete vue component 2023-11-15 20:32:22 -06:00
spencerrlongg
9cf81c7ad4 cleanup, validation 2023-11-15 20:29:14 -06:00
spencerrlongg
6c6417e595 ok, maybe i do like livewire 2023-11-15 20:19:03 -06:00
spencerrlongg
efa8ba5965 nice, just need frontend work now 2023-11-15 17:24:54 -06:00
spencerrlongg
fd02385c22 deleted components i've already rebuilt in livewire 2023-11-15 17:14:09 -06:00
spencerrlongg
713b21de14 note 2023-11-15 16:56:08 -06:00
spencerrlongg
af144a5184 cleanup 2023-11-15 16:55:21 -06:00
spencerrlongg
9b31ae3146 create mostly working 2023-11-15 16:51:09 -06:00
spencerrlongg
4cb0012872 cleanup 2023-11-15 16:33:16 -06:00
spencerrlongg
eaa68327f7 SINGLE QUOTES 2023-11-15 16:27:01 -06:00
Marcus Moore
68ef618028 Run validation on blur 2023-11-14 16:30:29 -08:00
Marcus Moore
3ecdafa685 Add class to error placement check 2023-11-14 16:12:47 -08:00
Marcus Moore
20ae9dea19 Fix placement of error message 2023-11-14 15:55:15 -08:00
Godfrey M
c9d46856a3 added name back 2023-11-14 15:00:11 -08:00
Godfrey M
6d65f6646f allows validation to ignore self and update 2023-11-14 14:55:51 -08:00
Marcus Moore
34cd106357 Apply validation 2023-11-14 12:25:18 -08:00
Marcus Moore
714fce7e59 Add site name validation test 2023-11-14 12:23:58 -08:00
Marcus Moore
08e4ea384e Update additional partials for validation 2023-11-14 12:23:46 -08:00
Marcus Moore
fe0f9743d3 Update additional partials for validation 2023-11-14 12:07:37 -08:00
Godfrey M
57019e170f adds user location scope, still needs fine tuning 2023-11-14 11:49:00 -08:00
spencerrlongg
9f303cc116 playing around with livewire 2023-11-14 11:50:27 -06:00
spencerrlongg
e504b20235 couple small changes 2023-11-14 11:01:38 -06:00
Brady Wetherington
f64b0d3818 Merge branch 'develop' into snipeit_v7_laravel10 2023-11-14 16:00:29 +00:00
Marcus Moore
1a26ea0911 Update a couple more fields for new validation 2023-11-13 19:18:04 -08:00
Marcus Moore
7098ab6509 Match styling of existing error messages 2023-11-13 18:54:51 -08:00
Marcus Moore
0d3589ca24 Update create asset page to use new validation library 2023-11-13 18:17:39 -08:00
Marcus Moore
f02ff62a08 Install jquery-validation package 2023-11-13 18:15:18 -08:00
spencerrlongg
fbfc817c5f just some cleanup 2023-11-13 19:47:03 -06:00
snipe
13601031cb Merge pull request #13764 from Godmartinz/expiring-alerts-fix
Fixed the `getExpiringLicenses` query
2023-11-13 20:39:29 +00:00
snipe
442cad69a7 Merge pull request #13864 from marcusmoore/chore/sc-24012
Fixed GitHub Action tests for v7
2023-11-13 16:34:35 +00:00
Marcus Moore
be6545a366 Merge Laravel setup steps 2023-11-09 15:55:04 -08:00
Marcus Moore
32fdd36802 Run migrations 2023-11-09 15:51:30 -08:00
Marcus Moore
fbc54526ed Set variables for Passport install step 2023-11-09 15:47:52 -08:00
Marcus Moore
a3306e4a81 Install Passport during test setup process specifying the environment 2023-11-09 15:41:22 -08:00
Marcus Moore
3d858b21fa Revert "Install Passport during test setup process"
This reverts commit 690a5119f4.
2023-11-09 15:29:31 -08:00
Marcus Moore
62b557f82c Revert "Add database migration step"
This reverts commit 65e3696029.
2023-11-09 15:29:19 -08:00
Marcus Moore
158c82ff5f Revert "Be explicit about database host"
This reverts commit fd410c0281.
2023-11-09 15:26:50 -08:00
Marcus Moore
fd410c0281 Be explicit about database host 2023-11-09 15:20:41 -08:00
Marcus Moore
65e3696029 Add database migration step 2023-11-09 14:56:32 -08:00
Marcus Moore
690a5119f4 Install Passport during test setup process 2023-11-09 14:49:56 -08:00
Marcus Moore
cc0653c68a Update GitHub test action to run on PHP 8.1 and 8.2 2023-11-09 14:42:47 -08:00
Marcus Moore
042a15d294 Set minimum PHP version to 8.1 2023-11-09 14:41:13 -08:00
spencerrlongg
8e4c0f60a1 return format 2023-11-08 17:36:54 -06:00
spencerrlongg
5615fc09e6 add view modal 2023-11-08 16:55:29 -06:00
spencerrlongg
d68f1e4cfa initial display work done 2023-11-08 16:48:20 -06:00
spencerrlongg
0c4901487d delete component class (for now) 2023-11-08 16:12:01 -06:00
spencerrlongg
7f4b2d6e42 modal and initial stuff working 2023-11-08 16:10:09 -06:00
spencerrlongg
715a49d9fe update php in composer.json 2023-11-08 14:29:06 -06:00
Godfrey M
b98c1a0627 fixes getExpiringLicenses query 2023-10-18 13:25:34 -07:00
snipe
da30292d84 Merge pull request #13763 from Godmartinz/snipeit_v7_laravel10
fixed the bulk edit button on Asset tab
2023-10-18 18:51:41 +01:00
Godfrey M
7bda5c06de fixes the bulk edit button on Asset tab 2023-10-18 10:46:47 -07:00
Brady Wetherington
3d5847f4b3 Merge branch 'develop' into snipeit_v7_laravel10 2023-10-16 23:37:13 +01:00
Brady Wetherington
db400dffb5 Merge branch 'develop' into snipeit_v7_laravel10
Rebuild assets and re-install from npm
2023-10-16 20:13:59 +01:00
snipe
199cdf6899 Commented out noisy debugging
Signed-off-by: snipe <snipe@snipe.net>
2023-10-16 20:05:11 +01:00
snipe
752171d5b8 Use singleton for offset
Signed-off-by: snipe <snipe@snipe.net>
2023-10-16 20:05:11 +01:00
Brady Wetherington
7a5714cc85 Merge branch 'develop' into snipeit_v7_laravel10 2023-10-03 20:37:17 +01:00
Brady Wetherington
c77f5eee8c Merge branch 'develop' into snipeit_v7_laravel10 2023-09-12 12:04:42 +01:00
Brady Wetherington
aacfed40f8 Switch back to our fork of laravel-scim-server 2023-09-07 20:16:03 +01:00
Brady Wetherington
ec1059e74c Merge branch 'develop' into snipeit_v7_laravel10 2023-09-07 20:11:41 +01:00
Brady Wetherington
3500217f94 Merge branch 'develop' into snipeit_v7_laravel10 2023-08-31 13:07:06 +01:00
Brady Wetherington
427f8b1522 Merge branch 'develop' into snipeit_v7_laravel10
Upgraded composer due to lockfile conflicts
2023-08-28 16:04:21 +01:00
Brady Wetherington
8b52bad16f Merge branch 'develop' into snipeit_v7_laravel10 2023-08-15 21:25:16 +01:00
Brady Wetherington
daed0b60bc Merge branch 'develop' into snipeit_v7_laravel10 2023-07-31 19:40:56 +01:00
Brady Wetherington
4654f7aa37 Porting Snipe-IT v7 to Laravel v10 2023-07-31 14:07:12 +01:00
Brady Wetherington
70e87dad1c Merge branch 'develop' into snipeit_v7 2023-07-27 16:21:31 +01:00
Brady Wetherington
ba8d8a6f05 Merge branch 'develop' into snipeit_v7 2023-07-20 17:16:04 +01:00
Brady Wetherington
605d267fe8 Merge branch 'develop' into snipeit_v7 2023-07-19 11:47:51 +01:00
Brady Wetherington
8f2a17585e Merge branch 'develop' into snipeit_v7
Had to do a lot of conflict work here, so this could get ugly :(
2023-07-10 16:53:35 +01:00
Brady Wetherington
51424d01a9 Merge branch 'develop' into snipeit_v7 2023-06-28 14:25:33 +01:00
Brady Wetherington
f5ff9b2208 Merge branch 'develop' into snipeit_v7 - 2023-06-12 2023-06-12 16:56:23 +01:00
ak-piracha
457f4c410a add check for default consumable qty 2023-05-21 23:11:03 +09:30
ak-piracha
bb013d5c3c Bulk Consumable Checkout 2023-05-21 22:49:00 +09:30
Brady Wetherington
a9c7dbd17a Shift PHP version requiremeents for Snipe-IT v7 to be php 8.0-8.2 2023-05-17 17:51:02 -07:00
Brady Wetherington
09fdc946a0 Merge branch 'develop' into snipeit_v7
Had to do some asset rebuilds, and a composer update
2023-05-17 17:37:10 -07:00
snipe
31f1bce16b Merge pull request #12958 from uberbrady/snipeit_v7_merge_develop_05_01_2022
Snipeit v7 merge develop 05 01 2022
2023-05-03 10:40:18 -07:00
Brady Wetherington
2f3ddaec20 Merge branch 'develop' into snipeit_v7 2023-05-01 18:09:12 -07:00
snipe
7cd37e6e95 Merge pull request #12957 from uberbrady/fix_webpack_for_v7
Fix webpack for v7
2023-05-01 18:08:46 -07:00
Brady Wetherington
a938009074 Rebuilt assets with new Node and node_modules and package.json 2023-05-01 18:06:51 -07:00
Brady Wetherington
21d08ff742 Whoops! Forgot to commit this before 2023-05-01 18:05:06 -07:00
snipe
da8b41b12a Merge pull request #12956 from uberbrady/upgrade_node_and_packages_for_v7
Updated Node version, and various packages to more recent
2023-05-01 17:33:20 -07:00
Brady Wetherington
6e031727fa Updated Node version, and various packages to more recent 2023-05-01 17:05:10 -07:00
Brady Wetherington
381890b578 Merge branch 'develop' into laravel_v9 2023-04-27 13:56:04 -07:00
Brady Wetherington
71fa6d765f Update to Latest Livewire files 2023-04-18 11:05:35 -07:00
Brady Wetherington
9793130f6c Merge branch 'develop' into laravel_v9 2023-04-18 11:01:00 -07:00
Brady Wetherington
aadfa9aa9c Back out Laravel Vite stuff - we're so far away from that right now 2023-02-21 19:54:14 -08:00
Brady Wetherington
645bba96cd WIP: First stabs at getting Laravel Vite to work; no luck so far :(
Probably going to back out all the 'vite' stuff anyways :/
2023-02-21 19:35:37 -08:00
2266 changed files with 320695 additions and 126893 deletions

View File

@@ -3018,6 +3018,124 @@
"contributions": [
"code"
]
},
{
"login": "koiakoia",
"name": "koiakoia",
"avatar_url": "https://avatars.githubusercontent.com/u/60405354?v=4",
"profile": "https://github.com/koiakoia",
"contributions": [
"code"
]
},
{
"login": "mustafa-online",
"name": "Mustafa Online",
"avatar_url": "https://avatars.githubusercontent.com/u/5323832?v=4",
"profile": "https://github.com/mustafa-online",
"contributions": [
"code"
]
},
{
"login": "franceslui",
"name": "franceslui",
"avatar_url": "https://avatars.githubusercontent.com/u/104601439?v=4",
"profile": "https://github.com/franceslui",
"contributions": [
"code"
]
},
{
"login": "Q4kK",
"name": "Q4kK",
"avatar_url": "https://avatars.githubusercontent.com/u/125313163?v=4",
"profile": "https://github.com/Q4kK",
"contributions": [
"code"
]
},
{
"login": "squintfox",
"name": "squintfox",
"avatar_url": "https://avatars.githubusercontent.com/u/55590532?v=4",
"profile": "https://github.com/squintfox",
"contributions": [
"code"
]
},
{
"login": "jeffclay",
"name": "Jeff Clay",
"avatar_url": "https://avatars.githubusercontent.com/u/1380084?v=4",
"profile": "https://github.com/jeffclay",
"contributions": [
"code"
]
},
{
"login": "PP-JN-RL",
"name": "Phil J R",
"avatar_url": "https://avatars.githubusercontent.com/u/52716446?v=4",
"profile": "https://github.com/PP-JN-RL",
"contributions": [
"code"
]
},
{
"login": "chandanchowdhury",
"name": "i_virus",
"avatar_url": "https://avatars.githubusercontent.com/u/1496725?v=4",
"profile": "https://www.corelight.com/",
"contributions": [
"code"
]
},
{
"login": "gitgrimbo",
"name": "Paul Grime",
"avatar_url": "https://avatars.githubusercontent.com/u/1020541?v=4",
"profile": "https://github.com/gitgrimbo",
"contributions": [
"code"
]
},
{
"login": "LeePorte",
"name": "Lee Porte",
"avatar_url": "https://avatars.githubusercontent.com/u/922815?v=4",
"profile": "https://leeporte.co.uk",
"contributions": [
"code"
]
},
{
"login": "bryanlopezinc",
"name": "BRYAN ",
"avatar_url": "https://avatars.githubusercontent.com/u/23613427?v=4",
"profile": "https://github.com/bryanlopezinc",
"contributions": [
"code",
"test"
]
},
{
"login": "U-H-T",
"name": "U-H-T",
"avatar_url": "https://avatars.githubusercontent.com/u/64061710?v=4",
"profile": "https://github.com/U-H-T",
"contributions": [
"code"
]
},
{
"login": "Tyree",
"name": "Matt Tyree",
"avatar_url": "https://avatars.githubusercontent.com/u/5395363?v=4",
"profile": "https://github.com/Tyree",
"contributions": [
"doc"
]
}
]
}

166
.env.dev.docker Normal file
View File

@@ -0,0 +1,166 @@
# --------------------------------------------
# REQUIRED: DB SETUP
# --------------------------------------------
MYSQL_DATABASE=snipeit
MYSQL_USER=snipeit
MYSQL_PASSWORD=changeme1234
MYSQL_ROOT_PASSWORD=changeme1234
# --------------------------------------------
# REQUIRED: BASIC APP SETTINGS
# --------------------------------------------
APP_ENV=develop
APP_DEBUG=false
# please regenerate the APP_KEY value by calling `docker-compose run --rm snipeit bash` and then `php artisan key:generate --show` and then copy paste the value here
APP_KEY=base64:3ilviXqB9u6DX1NRcyWGJ+sjySF+H18CPDGb3+IVwMQ=
APP_URL=http://localhost:8000
APP_TIMEZONE='UTC'
APP_LOCALE=en
MAX_RESULTS=500
# --------------------------------------------
# REQUIRED: UPLOADED FILE STORAGE SETTINGS
# --------------------------------------------
PRIVATE_FILESYSTEM_DISK=local
PUBLIC_FILESYSTEM_DISK=local_public
# --------------------------------------------
# REQUIRED: DATABASE SETTINGS
# --------------------------------------------
DB_CONNECTION=mysql
DB_HOST=mariadb
DB_DATABASE=snipeit
DB_USERNAME=snipeit
DB_PASSWORD=changeme1234
DB_PREFIX=null
DB_DUMP_PATH='/usr/bin'
DB_CHARSET=utf8mb4
DB_COLLATION=utf8mb4_unicode_ci
# --------------------------------------------
# OPTIONAL: SSL DATABASE SETTINGS
# --------------------------------------------
DB_SSL=false
DB_SSL_IS_PAAS=false
DB_SSL_KEY_PATH=null
DB_SSL_CERT_PATH=null
DB_SSL_CA_PATH=null
DB_SSL_CIPHER=null
DB_SSL_VERIFY_SERVER=null
# --------------------------------------------
# REQUIRED: OUTGOING MAIL SERVER SETTINGS
# --------------------------------------------
MAIL_DRIVER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDR=you@example.com
MAIL_FROM_NAME='Snipe-IT'
MAIL_REPLYTO_ADDR=you@example.com
MAIL_REPLYTO_NAME='Snipe-IT'
MAIL_AUTO_EMBED_METHOD='attachment'
# --------------------------------------------
# REQUIRED: IMAGE LIBRARY
# This should be gd or imagick
# --------------------------------------------
IMAGE_LIB=gd
# --------------------------------------------
# OPTIONAL: BACKUP SETTINGS
# --------------------------------------------
MAIL_BACKUP_NOTIFICATION_DRIVER=null
MAIL_BACKUP_NOTIFICATION_ADDRESS=null
BACKUP_ENV=true
# --------------------------------------------
# OPTIONAL: SESSION SETTINGS
# --------------------------------------------
SESSION_LIFETIME=12000
EXPIRE_ON_CLOSE=false
ENCRYPT=false
COOKIE_NAME=snipeit_session
COOKIE_DOMAIN=null
SECURE_COOKIES=false
API_TOKEN_EXPIRATION_YEARS=40
# --------------------------------------------
# OPTIONAL: SECURITY HEADER SETTINGS
# --------------------------------------------
APP_TRUSTED_PROXIES=192.168.1.1,10.0.0.1
ALLOW_IFRAMING=false
REFERRER_POLICY=same-origin
ENABLE_CSP=false
CORS_ALLOWED_ORIGINS=null
ENABLE_HSTS=false
# --------------------------------------------
# OPTIONAL: CACHE SETTINGS
# --------------------------------------------
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
CACHE_PREFIX=snipeit
# --------------------------------------------
# OPTIONAL: REDIS SETTINGS
# --------------------------------------------
REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379
# --------------------------------------------
# OPTIONAL: MEMCACHED SETTINGS
# --------------------------------------------
MEMCACHED_HOST=null
MEMCACHED_PORT=null
# --------------------------------------------
# OPTIONAL: PUBLIC S3 Settings
# --------------------------------------------
PUBLIC_AWS_SECRET_ACCESS_KEY=null
PUBLIC_AWS_ACCESS_KEY_ID=null
PUBLIC_AWS_DEFAULT_REGION=null
PUBLIC_AWS_BUCKET=null
PUBLIC_AWS_URL=null
PUBLIC_AWS_BUCKET_ROOT=null
# --------------------------------------------
# OPTIONAL: PRIVATE S3 Settings
# --------------------------------------------
PRIVATE_AWS_ACCESS_KEY_ID=null
PRIVATE_AWS_SECRET_ACCESS_KEY=null
PRIVATE_AWS_DEFAULT_REGION=null
PRIVATE_AWS_BUCKET=null
PRIVATE_AWS_URL=null
PRIVATE_AWS_BUCKET_ROOT=null
# --------------------------------------------
# OPTIONAL: AWS Settings
# --------------------------------------------
AWS_ACCESS_KEY_ID=null
AWS_SECRET_ACCESS_KEY=null
AWS_DEFAULT_REGION=null
# --------------------------------------------
# OPTIONAL: LOGIN THROTTLING
# --------------------------------------------
LOGIN_MAX_ATTEMPTS=5
LOGIN_LOCKOUT_DURATION=60
RESET_PASSWORD_LINK_EXPIRES=900
# --------------------------------------------
# OPTIONAL: MISC
# --------------------------------------------
LOG_CHANNEL=stderr
LOG_MAX_DAYS=10
APP_LOCKED=false
APP_CIPHER=AES-256-CBC
APP_FORCE_TLS=false
GOOGLE_MAPS_API=
LDAP_MEM_LIM=500M
LDAP_TIME_LIM=600

View File

@@ -1,18 +1,18 @@
# --------------------------------------------
# REQUIRED: DB SETUP
# REQUIRED: DOCKER SPECIFIC SETTINGS
# --------------------------------------------
MYSQL_DATABASE=snipeit
MYSQL_USER=snipeit
MYSQL_PASSWORD=changeme1234
MYSQL_ROOT_PASSWORD=changeme1234
APP_VERSION=v6.4.1
APP_PORT=8000
# --------------------------------------------
# REQUIRED: BASIC APP SETTINGS
# --------------------------------------------
APP_ENV=develop
APP_ENV=production
APP_DEBUG=false
# please regenerate the APP_KEY value by calling `docker-compose run --rm snipeit bash` and then `php artisan key:generate --show` and then copy paste the value here
# Please regenerate the APP_KEY value by calling `docker compose run --rm snipeit php artisan key:generate --show`. Copy paste the value here
APP_KEY=base64:3ilviXqB9u6DX1NRcyWGJ+sjySF+H18CPDGb3+IVwMQ=
APP_URL=http://localhost:8000
# https://en.wikipedia.org/wiki/List_of_tz_database_time_zones - TZ identifier
APP_TIMEZONE='UTC'
APP_LOCALE=en
MAX_RESULTS=500
@@ -27,10 +27,12 @@ PUBLIC_FILESYSTEM_DISK=local_public
# REQUIRED: DATABASE SETTINGS
# --------------------------------------------
DB_CONNECTION=mysql
DB_HOST=mariadb
DB_HOST=db
DB_PORT='3306'
DB_DATABASE=snipeit
DB_USERNAME=snipeit
DB_PASSWORD=changeme1234
MYSQL_ROOT_PASSWORD=changeme1234
DB_PREFIX=null
DB_DUMP_PATH='/usr/bin'
DB_CHARSET=utf8mb4
@@ -45,29 +47,35 @@ DB_SSL_KEY_PATH=null
DB_SSL_CERT_PATH=null
DB_SSL_CA_PATH=null
DB_SSL_CIPHER=null
DB_SSL_VERIFY_SERVER=null
# --------------------------------------------
# REQUIRED: OUTGOING MAIL SERVER SETTINGS
# --------------------------------------------
MAIL_DRIVER=smtp
MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_TLS_VERIFY_PEER=true
MAIL_FROM_ADDR=you@example.com
MAIL_FROM_NAME='Snipe-IT'
MAIL_REPLYTO_ADDR=you@example.com
MAIL_REPLYTO_NAME='Snipe-IT'
MAIL_AUTO_EMBED_METHOD='attachment'
# --------------------------------------------
# REQUIRED: DATA PROTECTION
# --------------------------------------------
ALLOW_BACKUP_DELETE=false
ALLOW_DATA_PURGE=false
# --------------------------------------------
# REQUIRED: IMAGE LIBRARY
# This should be gd or imagick
# --------------------------------------------
IMAGE_LIB=gd
# --------------------------------------------
# OPTIONAL: BACKUP SETTINGS
# --------------------------------------------
@@ -75,7 +83,6 @@ MAIL_BACKUP_NOTIFICATION_DRIVER=null
MAIL_BACKUP_NOTIFICATION_ADDRESS=null
BACKUP_ENV=true
# --------------------------------------------
# OPTIONAL: SESSION SETTINGS
# --------------------------------------------
@@ -90,7 +97,7 @@ API_TOKEN_EXPIRATION_YEARS=40
# --------------------------------------------
# OPTIONAL: SECURITY HEADER SETTINGS
# --------------------------------------------
APP_TRUSTED_PROXIES=192.168.1.1,10.0.0.1
APP_TRUSTED_PROXIES=192.168.1.1,10.0.0.1,172.0.0.0/8
ALLOW_IFRAMING=false
REFERRER_POLICY=same-origin
ENABLE_CSP=false
@@ -108,7 +115,7 @@ CACHE_PREFIX=snipeit
# --------------------------------------------
# OPTIONAL: REDIS SETTINGS
# --------------------------------------------
REDIS_HOST=redis
REDIS_HOST=null
REDIS_PASSWORD=null
REDIS_PORT=6379

View File

@@ -36,11 +36,12 @@ DB_SSL_KEY_PATH=null
DB_SSL_CERT_PATH=null
DB_SSL_CA_PATH=null
DB_SSL_CIPHER=null
DB_SSL_VERIFY_SERVER=null
# --------------------------------------------
# REQUIRED: OUTGOING MAIL SERVER SETTINGS
# --------------------------------------------
MAIL_DRIVER="log"
MAIL_MAILER="log"
# --------------------------------------------

View File

@@ -42,21 +42,26 @@ DB_SSL_KEY_PATH=null
DB_SSL_CERT_PATH=null
DB_SSL_CA_PATH=null
DB_SSL_CIPHER=null
DB_SSL_VERIFY_SERVER=null
# --------------------------------------------
# REQUIRED: OUTGOING MAIL SERVER SETTINGS
# --------------------------------------------
MAIL_DRIVER=smtp
MAIL_MAILER=smtp
MAIL_HOST=email-smtp.us-west-2.amazonaws.com
MAIL_PORT=587
MAIL_USERNAME=YOURUSERNAME
MAIL_PASSWORD=YOURPASSWORD
MAIL_ENCRYPTION=null
MAIL_FROM_ADDR=you@example.com
MAIL_FROM_NAME='Snipe-IT'
MAIL_REPLYTO_ADDR=you@example.com
MAIL_REPLYTO_NAME='Snipe-IT'
MAIL_AUTO_EMBED_METHOD='attachment'
MAIL_TLS_VERIFY_PEER=true
# MAIL_ENCRYPTION is no longer supported. SymfonyMailer will use tls if it's
# advertised, and won't if it's not. If you want to use your mail server's IP but it's failing
# because of certificate errors, set MAIL_TLS_VERIFY_PEER-true
# --------------------------------------------
# REQUIRED: IMAGE LIBRARY
@@ -86,6 +91,7 @@ COOKIE_DOMAIN=null
SECURE_COOKIES=false
API_TOKEN_EXPIRATION_YEARS=15
BS_TABLE_STORAGE=cookieStorage
BS_TABLE_DEEPLINK=true
# --------------------------------------------
# OPTIONAL: SECURITY HEADER SETTINGS
@@ -94,6 +100,7 @@ APP_TRUSTED_PROXIES=192.168.1.1,10.0.0.1
ALLOW_IFRAMING=false
REFERRER_POLICY=same-origin
ENABLE_CSP=false
ADDITIONAL_CSP_URLS=null
CORS_ALLOWED_ORIGINS=null
ENABLE_HSTS=false
@@ -190,4 +197,4 @@ ARGON_TIME=2
# OPTIONAL: SCIM
# --------------------------------------------
SCIM_TRACE=false
SCIM_STANDARDS_COMPLIANCE=false
SCIM_STANDARDS_COMPLIANCE=false

View File

@@ -22,7 +22,7 @@ DB_PASSWORD=null
# --------------------------------------------
# REQUIRED: OUTGOING MAIL SERVER SETTINGS
# --------------------------------------------
MAIL_DRIVER=log
MAIL_MAILER=log
# --------------------------------------------

View File

@@ -18,6 +18,6 @@ APP_KEY=base64:tu9NRh/a6+dCXBDGvg0Gv/0TcABnFsbT4AKxrr8mwQo=
LOGIN_MAX_ATTEMPTS=1000000
LOGIN_LOCKOUT_DURATION=100000000
MAIL_DRIVER=log
MAIL_MAILER=log
MAIL_FROM_ADDR=you@example.com
MAIL_FROM_NAME=Snipe-IT

View File

@@ -15,6 +15,6 @@ APP_KEY=base64:tu9NRh/a6+dCXBDGvg0Gv/0TcABnFsbT4AKxrr8mwQo=
LOGIN_MAX_ATTEMPTS=1000000
LOGIN_LOCKOUT_DURATION=100000000
MAIL_DRIVER=log
MAIL_MAILER=log
MAIL_FROM_ADDR=you@example.com
MAIL_FROM_NAME=Snipe-IT

View File

@@ -36,7 +36,7 @@ jobs:
# Execute Codacy Analysis CLI and generate a SARIF output with the security issues identified during the analysis
- name: Run Codacy Analysis CLI
uses: codacy/codacy-analysis-cli-action@v4.4.0
uses: codacy/codacy-analysis-cli-action@v4.4.1
with:
# Check https://github.com/codacy/codacy-analysis-cli#project-token to get your project token from your Codacy repository
# You can also omit the token and run the tools that support default configurations

View File

@@ -12,7 +12,7 @@ jobs:
uses: actions/checkout@v4
- name: Crowdin push
uses: crowdin/github-action@v1
uses: crowdin/github-action@v2
with:
upload_sources: true
upload_translations: false

View File

@@ -73,7 +73,7 @@ jobs:
# https://github.com/docker/build-push-action
- name: Build and push 'snipe-it' image
id: docker_build
uses: docker/build-push-action@v5
uses: docker/build-push-action@v6
with:
context: .
file: ./Dockerfile.alpine

View File

@@ -73,7 +73,7 @@ jobs:
# https://github.com/docker/build-push-action
- name: Build and push 'snipe-it' image
id: docker_build
uses: docker/build-push-action@v5
uses: docker/build-push-action@v6
with:
context: .
file: ./Dockerfile

View File

@@ -25,9 +25,9 @@ jobs:
fail-fast: false
matrix:
php-version:
- "7.4"
- "8.0"
- "8.1.1"
- "8.1"
- "8.2"
- "8.3"
name: PHP ${{ matrix.php-version }}
@@ -58,11 +58,17 @@ jobs:
- name: Install Dependencies
run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist
- name: Generate key
run: php artisan key:generate
- name: Directory Permissions
run: chmod -R 777 storage bootstrap/cache
- name: Setup Laravel
env:
DB_CONNECTION: mysql
DB_DATABASE: snipeit
DB_PORT: ${{ job.services.mysql.ports[3306] }}
DB_USERNAME: root
run: |
php artisan key:generate
php artisan migrate --force
php artisan passport:install
chmod -R 777 storage bootstrap/cache
- name: Execute tests (Unit and Feature tests) via PHPUnit
env:

75
.github/workflows/tests-postgres.yml vendored Normal file
View File

@@ -0,0 +1,75 @@
name: Tests in Postgres
on: workflow_dispatch
jobs:
tests:
runs-on: ubuntu-latest
services:
postgresql:
image: postgres
env:
POSTGRES_DB: snipeit
POSTGRES_USER: snipeit
POSTGRES_PASSWORD: password
ports:
- 5432:5432
options: --health-cmd=pg_isready --health-interval=10s --health-timeout=5s --health-retries=3
strategy:
fail-fast: false
matrix:
php-version:
- "8.2"
name: PHP ${{ matrix.php-version }}
steps:
- uses: shivammathur/setup-php@v2
with:
php-version: "${{ matrix.php-version }}"
coverage: none
- uses: actions/checkout@v4
- name: Get Composer Cache Directory
id: composer-cache
run: |
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
- uses: actions/cache@v4
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-${{ matrix.php-version }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: |
${{ runner.os }}-composer-
- name: Copy .env
run: |
cp -v .env.testing.example .env
cp -v .env.testing.example .env.testing
- name: Install Dependencies
run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist
- name: Setup Laravel
env:
DB_CONNECTION: pgsql
DB_DATABASE: snipeit
DB_PORT: ${{ job.services.postgresql.ports[5432] }}
DB_USERNAME: snipeit
DB_PASSWORD: password
run: |
php artisan key:generate
php artisan migrate --force
php artisan passport:install
chmod -R 777 storage bootstrap/cache
- name: Execute tests (Unit and Feature tests) via PHPUnit
env:
DB_CONNECTION: pgsql
DB_DATABASE: snipeit
DB_PORT: ${{ job.services.postgresql.ports[5432] }}
DB_USERNAME: snipeit
DB_PASSWORD: password
run: php artisan test --parallel

View File

@@ -49,6 +49,9 @@ jobs:
- name: Generate key
run: php artisan key:generate
- name: Setup Passport
run: php artisan passport:keys
- name: Directory Permissions
run: chmod -R 777 storage bootstrap/cache

2
.nvmrc
View File

@@ -1 +1 @@
v12.22.1
v18.16.0

View File

@@ -3,8 +3,8 @@
"DOC2": "In other words, what you see locally are the requirements for your _current_ install",
"DOC3": "Please don't rely on these versions for planning upgrades unless you've fetched the most recent version",
"DOC4": "You should really just ignore it and run upgrade.php. Really",
"php_min_version": "7.4.0",
"php_max_major_minor": "8.1",
"php_max_wontwork": "8.2.0",
"current_snipeit_version": "6.3"
"php_min_version": "8.1.0",
"php_max_major_minor": "8.3",
"php_max_wontwork": "8.4.0",
"current_snipeit_version": "7.0"
}

View File

@@ -432,6 +432,23 @@ Thanks goes to all of these wonderful people ([emoji key](https://github.com/ken
<td align="center" valign="top" width="14.28%"><a href="https://github.com/bilias"><img src="https://avatars.githubusercontent.com/u/47315739?v=4?s=110" width="110px;" alt="bilias"/><br /><sub><b>bilias</b></sub></a><br /><a href="https://github.com/snipe/snipe-it/commits?author=bilias" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/coach1988"><img src="https://avatars.githubusercontent.com/u/2565989?v=4?s=110" width="110px;" alt="coach1988"/><br /><sub><b>coach1988</b></sub></a><br /><a href="https://github.com/snipe/snipe-it/commits?author=coach1988" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mauro-miatello"><img src="https://avatars.githubusercontent.com/u/11910225?v=4?s=110" width="110px;" alt="MrM"/><br /><sub><b>MrM</b></sub></a><br /><a href="https://github.com/snipe/snipe-it/commits?author=mauro-miatello" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/koiakoia"><img src="https://avatars.githubusercontent.com/u/60405354?v=4?s=110" width="110px;" alt="koiakoia"/><br /><sub><b>koiakoia</b></sub></a><br /><a href="https://github.com/snipe/snipe-it/commits?author=koiakoia" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mustafa-online"><img src="https://avatars.githubusercontent.com/u/5323832?v=4?s=110" width="110px;" alt="Mustafa Online"/><br /><sub><b>Mustafa Online</b></sub></a><br /><a href="https://github.com/snipe/snipe-it/commits?author=mustafa-online" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/franceslui"><img src="https://avatars.githubusercontent.com/u/104601439?v=4?s=110" width="110px;" alt="franceslui"/><br /><sub><b>franceslui</b></sub></a><br /><a href="https://github.com/snipe/snipe-it/commits?author=franceslui" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Q4kK"><img src="https://avatars.githubusercontent.com/u/125313163?v=4?s=110" width="110px;" alt="Q4kK"/><br /><sub><b>Q4kK</b></sub></a><br /><a href="https://github.com/snipe/snipe-it/commits?author=Q4kK" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/squintfox"><img src="https://avatars.githubusercontent.com/u/55590532?v=4?s=110" width="110px;" alt="squintfox"/><br /><sub><b>squintfox</b></sub></a><br /><a href="https://github.com/snipe/snipe-it/commits?author=squintfox" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jeffclay"><img src="https://avatars.githubusercontent.com/u/1380084?v=4?s=110" width="110px;" alt="Jeff Clay"/><br /><sub><b>Jeff Clay</b></sub></a><br /><a href="https://github.com/snipe/snipe-it/commits?author=jeffclay" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/PP-JN-RL"><img src="https://avatars.githubusercontent.com/u/52716446?v=4?s=110" width="110px;" alt="Phil J R"/><br /><sub><b>Phil J R</b></sub></a><br /><a href="https://github.com/snipe/snipe-it/commits?author=PP-JN-RL" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://www.corelight.com/"><img src="https://avatars.githubusercontent.com/u/1496725?v=4?s=110" width="110px;" alt="i_virus"/><br /><sub><b>i_virus</b></sub></a><br /><a href="https://github.com/snipe/snipe-it/commits?author=chandanchowdhury" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/gitgrimbo"><img src="https://avatars.githubusercontent.com/u/1020541?v=4?s=110" width="110px;" alt="Paul Grime"/><br /><sub><b>Paul Grime</b></sub></a><br /><a href="https://github.com/snipe/snipe-it/commits?author=gitgrimbo" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://leeporte.co.uk"><img src="https://avatars.githubusercontent.com/u/922815?v=4?s=110" width="110px;" alt="Lee Porte"/><br /><sub><b>Lee Porte</b></sub></a><br /><a href="https://github.com/snipe/snipe-it/commits?author=LeePorte" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/bryanlopezinc"><img src="https://avatars.githubusercontent.com/u/23613427?v=4?s=110" width="110px;" alt="BRYAN "/><br /><sub><b>BRYAN </b></sub></a><br /><a href="https://github.com/snipe/snipe-it/commits?author=bryanlopezinc" title="Code">💻</a> <a href="https://github.com/snipe/snipe-it/commits?author=bryanlopezinc" title="Tests">⚠️</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/U-H-T"><img src="https://avatars.githubusercontent.com/u/64061710?v=4?s=110" width="110px;" alt="U-H-T"/><br /><sub><b>U-H-T</b></sub></a><br /><a href="https://github.com/snipe/snipe-it/commits?author=U-H-T" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Tyree"><img src="https://avatars.githubusercontent.com/u/5395363?v=4?s=110" width="110px;" alt="Matt Tyree"/><br /><sub><b>Matt Tyree</b></sub></a><br /><a href="https://github.com/snipe/snipe-it/commits?author=Tyree" title="Documentation">📖</a></td>
</tr>
</tbody>
</table>

View File

@@ -105,7 +105,7 @@ RUN \
&& ln -fs "/var/lib/snipeit/keys/ldap_client_tls.cert" "/var/www/html/storage/ldap_client_tls.cert" \
&& ln -fs "/var/lib/snipeit/keys/ldap_client_tls.key" "/var/www/html/storage/ldap_client_tls.key" \
&& chown docker "/var/lib/snipeit/keys/" \
&& chown -h docker "/var/www/html/storage/" \
&& chown -Rh docker "/var/www/html/storage/" \
&& chmod +x /var/www/html/artisan \
&& echo "Finished setting up application in /var/www/html"

View File

@@ -1,17 +1,18 @@
![snipe-it-by-grok](https://github.com/snipe/snipe-it/assets/197404/b515673b-c7c8-4d9a-80f5-9fa58829a602)
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/snipe-it/localized.svg)](https://crowdin.com/project/snipe-it) [![Docker Pulls](https://img.shields.io/docker/pulls/snipe/snipe-it.svg)](https://hub.docker.com/r/snipe/snipe-it/) [![Twitter Follow](https://img.shields.io/twitter/follow/snipeitapp.svg?style=social)](https://twitter.com/snipeitapp) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/553ce52037fc43ea99149785afcfe641)](https://www.codacy.com/app/snipe/snipe-it?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=snipe/snipe-it&amp;utm_campaign=Badge_Grade) [![Tests](https://github.com/snipe/snipe-it/actions/workflows/tests.yml/badge.svg)](https://github.com/snipe/snipe-it/actions/workflows/tests.yml)
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/snipe-it/localized.svg)](https://crowdin.com/project/snipe-it) [![Docker Pulls](https://img.shields.io/docker/pulls/snipe/snipe-it.svg)](https://hub.docker.com/r/snipe/snipe-it/) [![Twitter Follow](https://img.shields.io/twitter/follow/snipeitapp.svg?style=social)](https://twitter.com/snipeitapp) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/553ce52037fc43ea99149785afcfe641)](https://app.codacy.com/gh/snipe/snipe-it/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade) [![Tests](https://github.com/snipe/snipe-it/actions/workflows/tests.yml/badge.svg)](https://github.com/snipe/snipe-it/actions/workflows/tests.yml)
[![All Contributors](https://img.shields.io/badge/all_contributors-331-orange.svg?style=flat-square)](#contributing) [![Discord](https://badgen.net/badge/icon/discord?icon=discord&label)](https://discord.gg/yZFtShAcKk)
## Snipe-IT - Open Source Asset Management System
This is a FOSS project for asset management in IT Operations. Knowing who has which laptop, when it was purchased in order to depreciate it correctly, handling software licenses, etc.
It is built on [Laravel 8](http://laravel.com).
It is built on [Laravel 10](http://laravel.com).
Snipe-IT is actively developed and we [release quite frequently](https://github.com/snipe/snipe-it/releases). ([Check out the live demo here](https://snipeitapp.com/demo/).)
__This is web-based software__. This means there is no executable file (aka no .exe files), and it must be run on a web server and accessed through a web browser. It runs on any Mac OSX, flavor of Linux, as well as Windows, and we have a [Docker image](https://snipe-it.readme.io/docs/docker) available if that's what you're into.
> [!TIP]
> __This is web-based software__. This means there is no executable file (aka no .exe files), and it must be run on a web server and accessed through a web browser. It runs on any Mac OSX, any flavor of Linux, as well as Windows, and we have a [Docker image](https://snipe-it.readme.io/docs/docker) available if that's what you're into.
-----
@@ -21,7 +22,7 @@ For instructions on installing and configuring Snipe-IT on your server, check ou
If you're having trouble with the installation, please check the [Common Issues](https://snipe-it.readme.io/docs/common-issues) and [Getting Help](https://snipe-it.readme.io/docs/getting-help) documentation, and search this repository's open *and* closed issues for help.
[![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy)
<!-- [![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy) -->
-----
### User's Manual
@@ -32,8 +33,9 @@ For help using Snipe-IT, check out the [user's manual](https://snipe-it.readme.i
Feel free to check out the [GitHub Issues for this project](https://github.com/snipe/snipe-it/issues) to open a bug report or see what open issues you can help with. Please search through existing issues (open *and* closed) to see if your question has already been answered before opening a new issue.
**PLEASE see the [Getting Help Guidelines](https://snipe-it.readme.io/docs/getting-help) and [Common Issues](https://snipe-it.readme.io/docs/common-issues) before opening a ticket, and be sure to complete all of the questions in the Github Issue template to help us to help you as quickly as possible.**
> [!IMPORTANT]
> **PLEASE see the [Getting Help Guidelines](https://snipe-it.readme.io/docs/getting-help) and [Common Issues](https://snipe-it.readme.io/docs/common-issues) before opening a ticket, and be sure to complete all of the questions in the Github Issue template to help us to help you as quickly as possible.**
>
-----
### Upgrading
@@ -57,6 +59,9 @@ Please see the [translations documentation](https://snipe-it.readme.io/docs/tran
Since the release of the JSON REST API, several third-party developers have been developing modules and libraries to work with Snipe-IT.
> [!NOTE]
> As these were created by third-parties, Snipe-IT cannot provide support for these project, and you should contact the developers directly if you need assistance. Additionally, Snipe-IT makes no guarantees as to the reliability, accuracy or maintainability of these libraries. Use at your own risk. :)
- [Python Module](https://github.com/jbloomer/SnipeIT-PythonAPI) by [@jbloomer](https://github.com/jbloomer)
- [SnipeSharp - .NET module in C#](https://github.com/barrycarey/SnipeSharp) by [@barrycarey](https://github.com/barrycarey)
- [InQRy -unmaintained-](https://github.com/Microsoft/InQRy) by [@Microsoft](https://github.com/Microsoft)
@@ -73,8 +78,6 @@ Since the release of the JSON REST API, several third-party developers have been
- [UniFi to Snipe-IT](https://github.com/RodneyLeeBrands/UnifiSnipeSync) by [@karpadiem](https://github.com/karpadiem) - Python script that synchronizes UniFi devices with Snipe-IT.
- [Kandji2Snipe](https://github.com/grokability/kandji2snipe) by [@briangoldstein](https://github.com/briangoldstein) - Python script that synchronizes Kandji with Snipe-IT.
- [SnipeAgent](https://github.com/ReticentRobot/SnipeAgent) by @ReticentRobot - Windows agent for Snipe-IT
As these were created by third-parties, Snipe-IT cannot provide support for these project, and you should contact the developers directly if you need assistance. Additionally, Snipe-IT makes no guarantees as to the reliability, accuracy or maintainability of these libraries. Use at your own risk. :)
-----
@@ -92,4 +95,5 @@ The ERD is available [online here](https://drawsql.app/templates/snipe-it).
### Security
To report a security vulnerability, please email security@snipeitapp.com instead of using the issue tracker.
> [!IMPORTANT]
> **To report a security vulnerability, please email security@snipeitapp.com instead of using the issue tracker.**

View File

@@ -38,7 +38,7 @@
"description": "The maximum number of search results that can be returned at one time.",
"value": "500"
},
"MAIL_DRIVER": {
"MAIL_MAILER": {
"description": "Mail driver - Generally SMTP on Heroku - https://snipe-it.readme.io/docs/configuration#required-outgoing-mail-settings",
"value": "smtp"
},
@@ -58,9 +58,9 @@
"description": "SMTP Server Password",
"value": "YOURPASSWORD"
},
"MAIL_ENCRYPTION": {
"description": "Encryption protocol for email sending.",
"value": "null"
"MAIL_TLS_VERIFY_PEER": {
"description": "Ensure validity of TLS certificate on remote mail server",
"value": true
},
"MAIL_FROM_ADDR": {
"description": "Email from address",

View File

@@ -7,7 +7,7 @@ use Illuminate\Console\Command;
use App\Models\User;
use Laravel\Passport\TokenRepository;
use Illuminate\Contracts\Validation\Factory as ValidationFactory;
use DB;
use Illuminate\Support\Facades\DB;
class GeneratePersonalAccessToken extends Command
{

View File

@@ -9,7 +9,7 @@ use App\Models\Setting;
use App\Models\Ldap;
use App\Models\User;
use App\Models\Location;
use Log;
use Illuminate\Support\Facades\Log;
class LdapSync extends Command
{
@@ -298,7 +298,7 @@ class LdapSync extends Command
try {
$ldap_manager = Ldap::findLdapUsers($item['manager'], -1, $this->option('filter'));
} catch (\Exception $e) {
\Log::warning("Manager lookup caused an exception: " . $e->getMessage() . ". Falling back to direct username lookup");
Log::warning("Manager lookup caused an exception: " . $e->getMessage() . ". Falling back to direct username lookup");
// Hail-mary for Okta manager 'shortnames' - will only work if
// Okta configuration is using full email-address-style usernames
$ldap_manager = [
@@ -390,7 +390,7 @@ class LdapSync extends Command
$user->location_id = $location->id;
}
}
$location = null;
$user->ldap_import = 1;
$errors = '';

View File

@@ -5,7 +5,7 @@ namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Models\Setting;
use Exception;
use Crypt;
use Illuminate\Support\Facades\Crypt;
/**
* Check if a given ip is in a network
@@ -160,7 +160,7 @@ class LdapTroubleshooter extends Command
$output[] = "-x";
$output[] = "-b ".escapeshellarg($settings->ldap_basedn);
$output[] = "-D ".escapeshellarg($settings->ldap_uname);
$output[] = "-w ".escapeshellarg(\Crypt::Decrypt($settings->ldap_pword));
$output[] = "-w ".escapeshellarg(Crypt::Decrypt($settings->ldap_pword));
$output[] = escapeshellarg(parenthesized_filter($settings->ldap_filter));
if($settings->ldap_tls) {
$this->line("# adding STARTTLS option");

View File

@@ -2,6 +2,7 @@
namespace App\Console\Commands;
use App\Events\UserMerged;
use App\Models\User;
use Carbon\Carbon;
use Illuminate\Console\Command;
@@ -51,7 +52,7 @@ class MergeUsersByUsername extends Command
$bad_users = User::where('username', '=', trim($parts[0]))
->whereNull('deleted_at')
->with('assets', 'manager', 'userlog', 'licenses', 'consumables', 'accessories', 'managedLocations')
->with('assets', 'manager', 'userlog', 'licenses', 'consumables', 'accessories', 'managedLocations','uploads', 'acceptances')
->get();
@@ -105,10 +106,26 @@ class MergeUsersByUsername extends Command
$managedLocation->save();
}
foreach ($bad_user->uploads as $upload) {
$this->info('Updating upload log record '.$upload->id.' to user '.$user->id);
$upload->item_id = $user->id;
$upload->save();
}
foreach ($bad_user->acceptances as $acceptance) {
$this->info('Updating acceptance log record '.$acceptance->id.' to user '.$user->id);
$acceptance->item_id = $user->id;
$acceptance->save();
}
// Mark the user as deleted
$this->info('Marking the user as deleted');
$bad_user->deleted_at = Carbon::now()->timestamp;
$bad_user->save();
event(new UserMerged($bad_user, $user, null));
}
}
}

View File

@@ -4,6 +4,7 @@ namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Log;
class MoveUploadsToNewDisk extends Command
{
@@ -74,7 +75,7 @@ class MoveUploadsToNewDisk extends Command
$new_url = Storage::disk('public')->url('uploads/'.$public_type.'/'.$filename, $filename);
$this->info($type_count.'. PUBLIC: '.$filename.' was copied to '.$new_url);
} catch (\Exception $e) {
\Log::debug($e);
Log::debug($e);
$this->error($e);
}
}
@@ -116,7 +117,7 @@ class MoveUploadsToNewDisk extends Command
$new_url = Storage::url($private_type . '/' . $filename, $filename);
$this->info($type_count . '. PRIVATE: ' . $filename . ' was copied to ' . $new_url);
} catch (\Exception $e) {
\Log::debug($e);
Log::debug($e);
$this->error($e);
}
}
@@ -140,7 +141,7 @@ class MoveUploadsToNewDisk extends Command
unlink($filename);
$public_delete_count++;
} catch (\Exception $e) {
\Log::debug($e);
Log::debug($e);
$this->error($e);
}
}
@@ -153,7 +154,7 @@ class MoveUploadsToNewDisk extends Command
unlink($filename);
$private_delete_count++;
} catch (\Exception $e) {
\Log::debug($e);
Log::debug($e);
$this->error($e);
}
}

View File

@@ -5,6 +5,7 @@ namespace App\Console\Commands;
use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption;
use Illuminate\Support\Facades\Log;
ini_set('max_execution_time', env('IMPORT_TIME_LIMIT', 600)); //600 seconds = 10 minutes
ini_set('memory_limit', env('IMPORT_MEMORY_LIMIT', '500M'));
@@ -59,7 +60,7 @@ class ObjectImportCommand extends Command
// This $logFile/useFiles() bit is currently broken, so commenting it out for now
// $logFile = $this->option('logfile');
// \Log::useFiles($logFile);
// Log::useFiles($logFile);
$this->comment('======= Importing Items from '.$filename.' =========');
$importer->import();
@@ -112,10 +113,10 @@ class ObjectImportCommand extends Command
public function log($string, $level = 'info')
{
if ($level === 'warning') {
\Log::warning($string);
Log::warning($string);
$this->comment($string);
} else {
\Log::Info($string);
Log::Info($string);
if ($this->option('verbose')) {
$this->comment($string);
}

View File

@@ -5,7 +5,7 @@ namespace App\Console\Commands;
use App\Models\Asset;
use App\Models\CustomField;
use Schema;
use DB;
use Illuminate\Support\Facades\DB;
use Illuminate\Console\Command;
class PaveIt extends Command

View File

@@ -103,7 +103,7 @@ class RecryptFromMcrypt extends Command
$this->comment('INFO: No LDAP password found. Skipping... ');
} else {
$decrypted_ldap_pword = $mcrypter->decrypt($settings->ldap_pword);
$settings->ldap_pword = \Crypt::encrypt($decrypted_ldap_pword);
$settings->ldap_pword = Crypt::encrypt($decrypted_ldap_pword);
$settings->save();
}
/** @var CustomField[] $custom_fields */
@@ -132,7 +132,7 @@ class RecryptFromMcrypt extends Command
// Try to decrypt the payload using the legacy app key
try {
$decrypted_field = $mcrypter->decrypt($asset->{$columnName});
$asset->{$columnName} = \Crypt::encrypt($decrypted_field);
$asset->{$columnName} = Crypt::encrypt($decrypted_field);
$this->comment($decrypted_field);
} catch (\Exception $e) {
$errors[] = ' - ERROR: Could not decrypt field ['.$encrypted_field->name.']: '.$e->getMessage();

View File

@@ -4,7 +4,7 @@ namespace App\Console\Commands;
use App\Models\Asset;
use App\Models\Setting;
use Artisan;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Console\Command;
class RegenerateAssetTags extends Command

View File

@@ -6,8 +6,8 @@ use App\Models\Actionlog;
use App\Models\Asset;
use App\Models\License;
use App\Models\User;
use Artisan;
use DB;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\DB;
use Illuminate\Console\Command;
class RestoreDeletedUsers extends Command

View File

@@ -4,6 +4,7 @@ namespace App\Console\Commands;
use Illuminate\Console\Command;
use ZipArchive;
use Illuminate\Support\Facades\Log;
class SQLStreamer {
private $input;
@@ -125,7 +126,7 @@ class SQLStreamer {
while (($buffer = fgets($this->input, SQLStreamer::$buffer_size)) !== false) {
$bytes_read += strlen($buffer);
if ($this->reading_beginning_of_line) {
// \Log::debug("Buffer is: '$buffer'");
// Log::debug("Buffer is: '$buffer'");
$cleaned_buffer = $this->parse_sql($buffer);
if ($this->output) {
$bytes_written = fwrite($this->output, $cleaned_buffer);
@@ -191,7 +192,7 @@ class RestoreFromBackup extends Command
{
$dir = getcwd();
if( $dir != base_path() ) { // usually only the case when running via webserver, not via command-line
\Log::debug("Current working directory is: $dir, changing directory to: ".base_path());
Log::debug("Current working directory is: $dir, changing directory to: ".base_path());
chdir(base_path()); // TODO - is this *safe* to change on a running script?!
}
//
@@ -297,7 +298,7 @@ class RestoreFromBackup extends Command
continue;
}
if (@pathinfo($raw_path, PATHINFO_EXTENSION) == 'sql') {
\Log::debug("Found a sql file!");
Log::debug("Found a sql file!");
$sqlfiles[] = $raw_path;
$sqlfile_indices[] = $i;
continue;
@@ -413,7 +414,7 @@ class RestoreFromBackup extends Command
$bytes_read = 0;
while (($buffer = fgets($sql_contents, SQLStreamer::$buffer_size)) !== false) {
$bytes_read += strlen($buffer);
// \Log::debug("Buffer is: '$buffer'");
// Log::debug("Buffer is: '$buffer'");
$bytes_written = fwrite($pipes[0], $buffer);
if ($bytes_written === false) {
@@ -425,13 +426,13 @@ class RestoreFromBackup extends Command
$bytes_read = $sql_importer->line_aware_piping();
}
} catch (\Exception $e) {
\Log::error("Error during restore!!!! ".$e->getMessage());
Log::error("Error during restore!!!! ".$e->getMessage());
// FIXME - put these back and/or put them in the right places?!
$err_out = fgets($pipes[1]);
$err_err = fgets($pipes[2]);
\Log::error("Error OUTPUT: ".$err_out);
Log::error("Error OUTPUT: ".$err_out);
$this->info($err_out);
\Log::error("Error ERROR : ".$err_err);
Log::error("Error ERROR : ".$err_err);
$this->error($err_err);
throw $e;
}

View File

@@ -5,7 +5,7 @@ namespace App\Console\Commands;
use App\Models\Asset;
use App\Models\CustomField;
use App\Models\Setting;
use Artisan;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Console\Command;
use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Encryption\Encrypter;

View File

@@ -43,7 +43,7 @@ class SendCurrentInventoryToUsers extends Command
$count = 0;
foreach ($users as $user) {
if (($user->assets->count() > 0) || ($user->accessories->count() > 0) || ($user->licenses->count() > 0)) {
if (($user->assets->count() > 0) || ($user->accessories->count() > 0) || ($user->licenses->count() > 0) || ($user->consumables->count() > 0)) {
$count++;
$user->notify((new CurrentInventory($user)));
}

View File

@@ -9,7 +9,6 @@ use App\Notifications\ExpectedCheckinAdminNotification;
use App\Notifications\ExpectedCheckinNotification;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Log;
class SendExpectedCheckinAlerts extends Command
{
@@ -43,25 +42,31 @@ class SendExpectedCheckinAlerts extends Command
public function handle()
{
$settings = Setting::getSettings();
$whenNotify = Carbon::now();
$assets = Asset::with('assignedTo')->whereNotNull('assigned_to')->whereNotNull('expected_checkin')->where('expected_checkin', '<=', $whenNotify)->get();
$interval = $settings->audit_warning_days ?? 0;
$today = Carbon::now();
$interval_date = $today->copy()->addDays($interval);
$assets = Asset::whereNull('deleted_at')->DueOrOverdueForCheckin($settings)->orderBy('assets.expected_checkin', 'desc')->get();
$this->info($assets->count().' assets must be checked in on or before '.$interval_date.' is deadline');
$this->info($whenNotify.' is deadline');
$this->info($assets->count().' assets');
foreach ($assets as $asset) {
if ($asset->assigned && $asset->checkedOutToUser()) {
Log::info('Sending ExpectedCheckinNotification to ' . $asset->assigned->email);
$asset->assigned->notify((new ExpectedCheckinNotification($asset)));
if ($asset->assignedTo && (isset($asset->assignedTo->email)) && ($asset->assignedTo->email!='') && $asset->checkedOutToUser()) {
$this->info('Sending User ExpectedCheckinNotification to: '.$asset->assignedTo->email);
$asset->assignedTo->notify((new ExpectedCheckinNotification($asset)));
}
}
if (($assets) && ($assets->count() > 0) && ($settings->alert_email != '')) {
// Send a rollup to the admin, if settings dictate
$recipients = collect(explode(',', $settings->alert_email))->map(function ($item, $key) {
$recipients = collect(explode(',', $settings->alert_email))->map(function ($item) {
return new AlertRecipient($item);
});
$this->info('Sending Admin ExpectedCheckinNotification to: '.$settings->alert_email);
\Notification::send($recipients, new ExpectedCheckinAdminNotification($assets));
}
}
}

View File

@@ -3,13 +3,11 @@
namespace App\Console\Commands;
use App\Models\Asset;
use App\Models\License;
use App\Models\Recipients;
use App\Models\Recipients\AlertRecipient;
use App\Models\Setting;
use App\Notifications\ExpiringAssetsNotification;
use App\Notifications\SendUpcomingAuditNotification;
use Carbon\Carbon;
use DB;
use Illuminate\Support\Facades\DB;
use Illuminate\Console\Command;
class SendUpcomingAuditReport extends Command
@@ -46,39 +44,24 @@ class SendUpcomingAuditReport extends Command
public function handle()
{
$settings = Setting::getSettings();
$interval = $settings->audit_warning_days ?? 0;
$today = Carbon::now();
$interval_date = $today->copy()->addDays($interval);
if (($settings->alert_email != '') && ($settings->audit_warning_days) && ($settings->alerts_enabled == 1)) {
$assets = Asset::whereNull('deleted_at')->DueOrOverdueForAudit($settings)->orderBy('assets.next_audit_date', 'desc')->get();
$this->info($assets->count().' assets must be audited in on or before '.$interval_date.' is deadline');
if (($assets) && ($assets->count() > 0) && ($settings->alert_email != '')) {
// Send a rollup to the admin, if settings dictate
$recipients = collect(explode(',', $settings->alert_email))->map(function ($item, $key) {
return new \App\Models\Recipients\AlertRecipient($item);
$recipients = collect(explode(',', $settings->alert_email))->map(function ($item) {
return new AlertRecipient($item);
});
// Assets due for auditing
$this->info('Sending Admin SendUpcomingAuditNotification to: '.$settings->alert_email);
\Notification::send($recipients, new SendUpcomingAuditNotification($assets, $settings->audit_warning_days));
$assets = Asset::whereNotNull('next_audit_date')
->DueOrOverdueForAudit($settings)
->orderBy('last_audit_date', 'asc')->get();
if ($assets->count() > 0) {
$this->info(trans_choice('mail.upcoming-audits', $assets->count(),
['count' => $assets->count(), 'threshold' => $settings->audit_warning_days]));
\Notification::send($recipients, new SendUpcomingAuditNotification($assets, $settings->audit_warning_days));
$this->info('Audit report sent to '.$settings->alert_email);
} else {
$this->info('No assets to be audited. No report sent.');
}
} elseif ($settings->alert_email == '') {
$this->error('Could not send email. No alert email configured in settings');
} elseif (! $settings->audit_warning_days) {
$this->error('No audit warning days set in Admin Notifications. No mail will be sent.');
} elseif ($settings->alerts_enabled != 1) {
$this->info('Alerts are disabled in the settings. No mail will be sent');
} else {
$this->error('Something went wrong. :( ');
$this->error('Admin Notifications Email Setting: '.$settings->alert_email);
$this->error('Admin Audit Warning Setting: '.$settings->audit_warning_days);
$this->error('Admin Alerts Emnabled: '.$settings->alerts_enabled);
}
}
}

View File

@@ -4,6 +4,7 @@ namespace App\Console\Commands;
use App\Models\Asset;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Log;
class SyncAssetCounters extends Command
{
@@ -58,7 +59,7 @@ class SyncAssetCounters extends Command
$asset->save();
$bar->advance();
\Log::debug('Asset: '.$asset->id.' has '.$asset->checkin_counter.' checkins, '.$asset->checkout_counter.' checkouts, and '.$asset->requests_counter.' requests');
Log::debug('Asset: '.$asset->id.' has '.$asset->checkin_counter.' checkins, '.$asset->checkout_counter.' checkouts, and '.$asset->requests_counter.' requests');
}

View File

@@ -15,7 +15,7 @@ class UserMerged
*
* @return void
*/
public function __construct(User $from_user, User $to_user, User $admin)
public function __construct(User $from_user, User $to_user, ?User $admin)
{
$this->merged_from = $from_user;
$this->merged_to = $to_user;

View File

@@ -7,7 +7,7 @@ use App\Helpers\Helper;
use Illuminate\Validation\ValidationException;
use Illuminate\Auth\AuthenticationException;
use ArieTimmerman\Laravel\SCIMServer\Exceptions\SCIMException;
use Log;
use Illuminate\Support\Facades\Log;
use Throwable;
use JsonException;
use Carbon\Exceptions\InvalidFormatException;
@@ -44,8 +44,8 @@ class Handler extends ExceptionHandler
public function report(Throwable $exception)
{
if ($this->shouldReport($exception)) {
if (class_exists(\Log::class)) {
\Log::error($exception);
if (class_exists(Log::class)) {
Log::error($exception);
}
return parent::report($exception);
}

View File

@@ -12,10 +12,12 @@ use App\Models\Depreciation;
use App\Models\Setting;
use App\Models\Statuslabel;
use App\Models\License;
use Crypt;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Contracts\Encryption\DecryptException;
use Image;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Intervention\Image\ImageManagerStatic as Image;
use Illuminate\Support\Facades\Session;
class Helper
{
@@ -412,7 +414,7 @@ class Helper
if ($index >= $total_colors) {
\Log::info('Status label count is '.$index.' and exceeds the allowed count of 266.');
Log::info('Status label count is '.$index.' and exceeds the allowed count of 266.');
//patch fix for array key overflow (color count starts at 1, array starts at 0)
$index = $index - $total_colors - 1;
@@ -842,7 +844,7 @@ class Helper
$filetype = @finfo_file($finfo, $file);
finfo_close($finfo);
if (($filetype == 'image/jpeg') || ($filetype == 'image/jpg') || ($filetype == 'image/png') || ($filetype == 'image/bmp') || ($filetype == 'image/gif')) {
if (($filetype == 'image/jpeg') || ($filetype == 'image/jpg') || ($filetype == 'image/png') || ($filetype == 'image/bmp') || ($filetype == 'image/gif') || ($filetype == 'image/avif')) {
return $filetype;
}
@@ -875,12 +877,15 @@ class Helper
$permission_name = $permission[$x]['permission'];
if ($permission[$x]['display'] === true) {
if ($selected_arr) {
if (is_array($selected_arr)) {
if (array_key_exists($permission_name, $selected_arr)) {
$permissions_arr[$permission_name] = $selected_arr[$permission_name];
} else {
$permissions_arr[$permission_name] = '0';
}
} else {
$permissions_arr[$permission_name] = '0';
}
@@ -1012,7 +1017,7 @@ class Helper
try {
$tmp_date = new \Carbon($date);
$tmp_date = new Carbon($date);
if ($type == 'datetime') {
$dt['datetime'] = $tmp_date->format('Y-m-d H:i:s');
@@ -1029,7 +1034,7 @@ class Helper
return $dt['formatted'];
} catch (\Exception $e) {
\Log::warning($e);
Log::warning($e);
return $date.' (Invalid '.$type.' value.)';
}
@@ -1106,6 +1111,8 @@ class Helper
'jpeg' => 'far fa-image',
'gif' => 'far fa-image',
'png' => 'far fa-image',
'webp' => 'far fa-image',
'avif' => 'far fa-image',
// word
'doc' => 'far fa-file-word',
'docx' => 'far fa-file-word',
@@ -1141,6 +1148,8 @@ class Helper
case 'jpeg':
case 'gif':
case 'png':
case 'webp':
case 'avif':
return true;
break;
default:
@@ -1338,7 +1347,7 @@ class Helper
public static function isDemoMode() {
if (config('app.lock_passwords') === true) {
return true;
\Log::debug('app locked!');
Log::debug('app locked!');
}
return false;
@@ -1431,7 +1440,7 @@ class Helper
foreach (self::$language_map as $legacy => $new) {
if ($language_code == $legacy) {
\Log::debug('Current language is '.$legacy.', using '.$new.' instead');
Log::debug('Current language is '.$legacy.', using '.$new.' instead');
return $new;
}
}
@@ -1455,4 +1464,38 @@ class Helper
return $new_locale; // better that you have some weird locale that doesn't fit into our mappings anywhere than 'void'
}
static public function getRedirectOption($request, $id, $table, $asset_id = null)
{
$redirect_option = Session::get('redirect_option');
$checkout_to_type = Session::get('checkout_to_type');
//return to index
if ($redirect_option == '0') {
switch ($table) {
case "Assets":
return redirect()->route('hardware.index')->with('success', trans('admin/hardware/message.checkout.success'));
}
}
//return to thing being assigned
if ($redirect_option == '1') {
switch ($table) {
case "Assets":
return redirect()->route('hardware.show', $id ? $id : $asset_id)->with('success', trans('admin/hardware/message.checkout.success'));
}
}
//return to thing being assigned to
if ($redirect_option == '2') {
switch ($checkout_to_type) {
case 'user':
return redirect()->route('users.show', $request->assigned_user)->with('success', trans('admin/hardware/message.checkout.success'));
case 'location':
return redirect()->route('locations.show', $request->assigned_location)->with('success', trans('admin/hardware/message.checkout.success'));
case 'asset':
return redirect()->route('hardware.show', $request->assigned_asset)->with('success', trans('admin/hardware/message.checkout.success'));
}
}
return redirect()->back()->with('error', trans('admin/hardware/message.checkout.error'));
}
}

View File

@@ -11,6 +11,7 @@ use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;
use Redirect;
use Illuminate\Support\Facades\Log;
/** This controller handles all actions related to Accessories for
* the Snipe-IT Asset Management application.
@@ -57,7 +58,7 @@ class AccessoriesController extends Controller
*
* @author [A. Gianotto] [<snipe@snipe.net>]
* @param ImageUploadRequest $request
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function store(ImageUploadRequest $request)
@@ -150,7 +151,7 @@ class AccessoriesController extends Controller
* @author [A. Gianotto] [<snipe@snipe.net>]
* @param ImageUploadRequest $request
* @param int $accessoryId
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function update(ImageUploadRequest $request, $accessoryId = null)
@@ -204,7 +205,7 @@ class AccessoriesController extends Controller
*
* @author [A. Gianotto] [<snipe@snipe.net>]
* @param int $accessoryId
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function destroy($accessoryId)
@@ -224,7 +225,7 @@ class AccessoriesController extends Controller
try {
Storage::disk('public')->delete('accessories'.'/'.$accessory->image);
} catch (\Exception $e) {
\Log::debug($e);
Log::debug($e);
}
}

View File

@@ -10,6 +10,7 @@ use App\Models\Accessory;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Storage;
use Symfony\Accessory\HttpFoundation\JsonResponse;
use Illuminate\Support\Facades\Log;
class AccessoriesFilesController extends Controller
{
@@ -85,7 +86,7 @@ class AccessoriesFilesController extends Controller
try {
Storage::delete('accessories/'.$log->filename);
} catch (\Exception $e) {
\Log::debug($e);
Log::debug($e);
}
}
@@ -112,7 +113,7 @@ class AccessoriesFilesController extends Controller
public function show($accessoryId = null, $fileId = null, $download = true)
{
\Log::debug('Private filesystem is: '.config('filesystems.default'));
Log::debug('Private filesystem is: '.config('filesystems.default'));
$accessory = Accessory::find($accessoryId);
@@ -129,8 +130,8 @@ class AccessoriesFilesController extends Controller
$file = 'private_uploads/accessories/'.$log->filename;
if (Storage::missing($file)) {
\Log::debug('FILE DOES NOT EXISTS for '.$file);
\Log::debug('URL should be '.Storage::url($file));
Log::debug('FILE DOES NOT EXISTS for '.$file);
Log::debug('URL should be '.Storage::url($file));
return response('File '.$file.' ('.Storage::url($file).') not found on server', 404)
->header('Content-Type', 'text/plain');

View File

@@ -44,7 +44,7 @@ class AccessoryCheckinController extends Controller
* @author [A. Gianotto] [<snipe@snipe.net>]
* @param null $accessoryUserId
* @param string $backto
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
* @throws \Illuminate\Auth\Access\AuthorizationException
* @internal param int $accessoryId
*/

View File

@@ -59,7 +59,7 @@ class AccessoryCheckoutController extends Controller
* @author [A. Gianotto] [<snipe@snipe.net>]
* @param Request $request
* @param int $accessoryId
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function store(Request $request, $accessoryId)

View File

@@ -23,13 +23,13 @@ use App\Notifications\AcceptanceAssetAcceptedNotification;
use App\Notifications\AcceptanceAssetDeclinedNotification;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use App\Http\Controllers\SettingsController;
use Barryvdh\DomPDF\Facade\Pdf;
use Carbon\Carbon;
use phpDocumentor\Reflection\Types\Compound;
use Illuminate\Support\Facades\Log;
class AcceptanceController extends Controller
{
@@ -80,7 +80,7 @@ class AcceptanceController extends Controller
*
* @param Request $request
* @param int $id
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
*/
public function store(Request $request, $id)
{
@@ -223,6 +223,7 @@ class AcceptanceController extends Controller
'item_model' => $display_model,
'item_serial' => $item->serial,
'eula' => $item->getEula(),
'note' => $request->input('note'),
'check_out_date' => Carbon::parse($acceptance->created_at)->format('Y-m-d'),
'accepted_date' => Carbon::parse($acceptance->accepted_at)->format('Y-m-d'),
'assigned_to' => $assigned_to,
@@ -233,12 +234,12 @@ class AcceptanceController extends Controller
];
if ($pdf_view_route!='') {
\Log::debug($pdf_filename.' is the filename, and the route was specified.');
Log::debug($pdf_filename.' is the filename, and the route was specified.');
$pdf = Pdf::loadView($pdf_view_route, $data);
Storage::put('private_uploads/eula-pdfs/' .$pdf_filename, $pdf->output());
}
$acceptance->accept($sig_filename, $item->getEula(), $pdf_filename);
$acceptance->accept($sig_filename, $item->getEula(), $pdf_filename, $request->input('note'));
$acceptance->notify(new AcceptanceAssetAcceptedNotification($data));
event(new CheckoutAccepted($acceptance));
@@ -306,10 +307,12 @@ class AcceptanceController extends Controller
$assigned_to = User::find($acceptance->assigned_to_id)->present()->fullName;
break;
}
$data = [
'item_tag' => $item->asset_tag,
'item_model' => $display_model,
'item_serial' => $item->serial,
'note' => $request->input('note'),
'declined_date' => Carbon::parse($acceptance->declined_at)->format('Y-m-d'),
'signature' => ($sig_filename) ? storage_path() . '/private_uploads/signatures/' . $sig_filename : null,
'assigned_to' => $assigned_to,
@@ -318,12 +321,12 @@ class AcceptanceController extends Controller
];
if ($pdf_view_route!='') {
\Log::debug($pdf_filename.' is the filename, and the route was specified.');
Log::debug($pdf_filename.' is the filename, and the route was specified.');
$pdf = Pdf::loadView($pdf_view_route, $data);
Storage::put('private_uploads/eula-pdfs/' .$pdf_filename, $pdf->output());
}
$acceptance->decline($sig_filename);
$acceptance->decline($sig_filename, $request->input('note'));
$acceptance->notify(new AcceptanceAssetDeclinedNotification($data));
event(new CheckoutDeclined($acceptance));
$return_msg = trans('admin/users/message.declined');

View File

@@ -4,8 +4,9 @@ namespace App\Http\Controllers;
use App\Helpers\Helper;
use App\Models\Actionlog;
use Response;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;
class ActionlogController extends Controller
{
public function displaySig($filename)
@@ -14,19 +15,26 @@ class ActionlogController extends Controller
// file_get_contents, so we set the error reporting for just this class
error_reporting(0);
$this->authorize('view', \App\Models\Asset::class);
$file = config('app.private_uploads').'/signatures/'.$filename;
$filetype = Helper::checkUploadIsImage($file);
$disk = config('filesystems.default');
switch (config("filesystems.disks.$disk.driver")) {
case 's3':
$file = 'private_uploads/signatures/'.$filename;
return redirect()->away(Storage::disk($disk)->temporaryUrl($file, now()->addMinutes(5)));
default:
$this->authorize('view', \App\Models\Asset::class);
$file = config('app.private_uploads').'/signatures/'.$filename;
$filetype = Helper::checkUploadIsImage($file);
$contents = file_get_contents($file, false, stream_context_create(['http' => ['ignore_errors' => true]]));
if ($contents === false) {
\Log::warn('File '.$file.' not found');
return false;
} else {
return Response::make($contents)->header('Content-Type', $filetype);
$contents = file_get_contents($file, false, stream_context_create(['http' => ['ignore_errors' => true]]));
if ($contents === false) {
Log::warning('File '.$file.' not found');
return false;
} else {
return Response::make($contents)->header('Content-Type', $filetype);
}
}
}
public function getStoredEula($filename){
$this->authorize('view', \App\Models\Asset::class);
$file = config('app.private_uploads').'/eula-pdfs/'.$filename;

View File

@@ -10,9 +10,9 @@ use App\Http\Transformers\SelectlistTransformer;
use App\Models\Accessory;
use App\Models\Company;
use App\Models\User;
use Auth;
use Illuminate\Support\Facades\Auth;
use Carbon\Carbon;
use DB;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Requests\ImageUploadRequest;
@@ -274,7 +274,7 @@ class AccessoriesController extends Controller
*
* @author [A. Gianotto] [<snipe@snipe.net>]
* @param int $accessoryId
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
*/
public function checkout(Request $request, $accessoryId)
{
@@ -320,7 +320,7 @@ class AccessoriesController extends Controller
* @param Request $request
* @param int $accessoryUserId
* @param string $backto
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
* @internal param int $accessoryId
*/
public function checkin(Request $request, $accessoryUserId = null)

View File

@@ -0,0 +1,219 @@
<?php
namespace App\Http\Controllers\Api;
use App\Helpers\StorageHelper;
use Illuminate\Support\Facades\Storage;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Support\Facades\Gate;
use App\Helpers\Helper;
use App\Http\Controllers\Controller;
use App\Models\Asset;
use App\Models\AssetModel;
use App\Models\Actionlog;
use \Illuminate\Support\Facades\Auth;
use Carbon\Carbon;
use DB;
use Illuminate\Http\Request;
use App\Http\Requests\UploadFileRequest;
use Illuminate\Support\Facades\Log;
use Input;
use Paginator;
use Slack;
use Str;
use TCPDF;
use Validator;
use Route;
/**
* This class controls file related actions related
* to assets for the Snipe-IT Asset Management application.
*
* Based on the Assets/AssetFilesController by A. Gianotto <snipe@snipe.net>
*
* @version v1.0
* @author [T. Scarsbrook] [<snipe@scarzybrook.co.uk>]
*/
class AssetFilesController extends Controller
{
/**
* Accepts a POST to upload a file to the server.
*
* @param \App\Http\Requests\UploadFileRequest $request
* @param int $assetId
* @return \Illuminate\Http\JsonResponse
* @throws \Illuminate\Auth\Access\AuthorizationException
* @since [v6.0]
* @author [T. Scarsbrook] [<snipe@scarzybrook.co.uk>]
*/
public function store(UploadFileRequest $request, $assetId = null)
{
// Start by checking if the asset being acted upon exists
if (! $asset = Asset::find($assetId)) {
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.does_not_exist')), 404);
}
// Make sure we are allowed to update this asset
$this->authorize('update', $asset);
if ($request->hasFile('file')) {
// If the file storage directory doesn't exist; create it
if (! Storage::exists('private_uploads/assets')) {
Storage::makeDirectory('private_uploads/assets', 775);
}
// Loop over the attached files and add them to the asset
foreach ($request->file('file') as $file) {
$file_name = $request->handleFile('private_uploads/assets/','hardware-'.$asset->id, $file);
$asset->logUpload($file_name, e($request->get('notes')));
}
// All done - report success
return response()->json(Helper::formatStandardApiResponse('success', $asset, trans('admin/hardware/message.upload.success')));
}
// We only reach here if no files were included in the POST, so tell the user this
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.upload.nofiles')), 500);
}
/**
* List the files for an asset.
*
* @param int $assetId
* @return \Illuminate\Http\JsonResponse
* @throws \Illuminate\Auth\Access\AuthorizationException
* @since [v6.0]
* @author [T. Scarsbrook] [<snipe@scarzybrook.co.uk>]
*/
public function list($assetId = null)
{
// Start by checking if the asset being acted upon exists
if (! $asset = Asset::find($assetId)) {
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.does_not_exist')), 404);
}
// the asset is valid
if (isset($asset->id)) {
$this->authorize('view', $asset);
// Check that there are some uploads on this asset that can be listed
if ($asset->uploads->count() > 0) {
$files = array();
foreach ($asset->uploads as $upload) {
array_push($files, $upload);
}
// Give the list of files back to the user
return response()->json(Helper::formatStandardApiResponse('success', $files, trans('admin/hardware/message.upload.success')));
}
// There are no files.
return response()->json(Helper::formatStandardApiResponse('success', array(), trans('admin/hardware/message.upload.success')));
}
// Send back an error message
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.download.error')), 500);
}
/**
* Check for permissions and display the file.
*
* @param int $assetId
* @param int $fileId
* @return \Illuminate\Http\JsonResponse
* @throws \Illuminate\Auth\Access\AuthorizationException
* @since [v6.0]
* @author [T. Scarsbrook] [<snipe@scarzybrook.co.uk>]
*/
public function show($assetId = null, $fileId = null)
{
// Start by checking if the asset being acted upon exists
if (! $asset = Asset::find($assetId)) {
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.does_not_exist')), 404);
}
// the asset is valid
if (isset($asset->id)) {
$this->authorize('view', $asset);
// Check that the file being requested exists for the asset
if (! $log = Actionlog::whereNotNull('filename')->where('item_id', $asset->id)->find($fileId)) {
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.download.no_match', ['id' => $fileId])), 404);
}
// Form the full filename with path
$file = 'private_uploads/assets/'.$log->filename;
\Log::debug('Checking for '.$file);
if ($log->action_type == 'audit') {
$file = 'private_uploads/audits/'.$log->filename;
}
// Check the file actually exists on the filesystem
if (! Storage::exists($file)) {
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.download.does_not_exist', ['id' => $fileId])), 404);
}
if (request('inline') == 'true') {
$headers = [
'Content-Disposition' => 'inline',
];
return Storage::download($file, $log->filename, $headers);
}
return StorageHelper::downloader($file);
}
// Send back an error message
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.download.error', ['id' => $fileId])), 500);
}
/**
* Delete the associated file
*
* @param int $assetId
* @param int $fileId
* @return \Illuminate\Http\JsonResponse
* @throws \Illuminate\Auth\Access\AuthorizationException
* @since [v6.0]
* @author [T. Scarsbrook] [<snipe@scarzybrook.co.uk>]
*/
public function destroy($assetId = null, $fileId = null)
{
// Start by checking if the asset being acted upon exists
if (! $asset = Asset::find($assetId)) {
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.does_not_exist')), 404);
}
$rel_path = 'private_uploads/assets';
// the asset is valid
if (isset($asset->id)) {
$this->authorize('update', $asset);
// Check for the file
$log = Actionlog::find($fileId);
if ($log) {
// Check the file actually exists, and delete it
if (Storage::exists($rel_path.'/'.$log->filename)) {
Storage::delete($rel_path.'/'.$log->filename);
}
// Delete the record of the file
$log->delete();
// All deleting done - notify the user of success
return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/hardware/message.deletefile.success')), 200);
}
// The file doesn't seem to really exist, so report an error
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.deletefile.error')), 500);
}
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.deletefile.error')), 500);
}
}

View File

@@ -8,7 +8,7 @@ use App\Http\Transformers\AssetMaintenancesTransformer;
use App\Models\Asset;
use App\Models\AssetMaintenance;
use App\Models\Company;
use Auth;
use Illuminate\Support\Facades\Auth;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Input;

View File

@@ -12,6 +12,7 @@ use App\Models\AssetModel;
use Illuminate\Http\Request;
use App\Http\Requests\ImageUploadRequest;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Log;
/**
* This class controls all actions related to asset models for
@@ -224,7 +225,7 @@ class AssetModelsController extends Controller
try {
Storage::disk('public')->delete('assetmodels/'.$assetmodel->image);
} catch (\Exception $e) {
\Log::info($e);
Log::info($e);
}
}

View File

@@ -27,17 +27,16 @@ use App\Models\Setting;
use App\Models\User;
use \Illuminate\Support\Facades\Auth;
use Carbon\Carbon;
use DB;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Requests\ImageUploadRequest;
use Illuminate\Support\Facades\Log;
use Input;
use Paginator;
use Slack;
use Str;
use TCPDF;
use Validator;
use Route;
use Illuminate\Support\Facades\Route;
/**
@@ -59,7 +58,7 @@ class AssetsController extends Controller
* @since [v4.0]
* @return \Illuminate\Http\JsonResponse
*/
public function index(Request $request, $audit = null)
public function index(Request $request, $action = null, $upcoming_status = null)
{
$filter_non_deprecable_assets = false;
@@ -94,6 +93,7 @@ class AssetsController extends Controller
'serial',
'model_number',
'last_checkout',
'last_checkin',
'notes',
'expected_checkin',
'order_number',
@@ -154,17 +154,44 @@ class AssetsController extends Controller
$assets->TextSearch($request->input('search'));
}
// This is used by the audit reporting routes
if (Gate::allows('audit', Asset::class)) {
switch ($audit) {
case 'due':
$assets->DueOrOverdueForAudit($settings);
break;
case 'overdue':
$assets->overdueForAudit($settings);
break;
/**
* Handle due and overdue audits and checkin dates
*/
switch ($action) {
case 'audits':
switch ($upcoming_status) {
case 'due':
$assets->DueForAudit($settings);
break;
case 'overdue':
$assets->OverdueForAudit();
break;
case 'due-or-overdue':
$assets->DueOrOverdueForAudit($settings);
break;
}
break;
case 'checkins':
switch ($upcoming_status) {
case 'due':
$assets->DueForCheckin($settings);
break;
case 'overdue':
$assets->OverdueForCheckin();
break;
case 'due-or-overdue':
$assets->DueOrOverdueForCheckin($settings);
break;
}
break;
}
}
/**
* End handling due and overdue audits and checkin dates
*/
// This is used by the sidenav, mostly
@@ -558,44 +585,8 @@ class AssetsController extends Controller
}
$asset = $request->handleImages($asset);
$asset = $asset->handleCustomFieldsForStoring($request);
// Update custom fields in the database.
$model = AssetModel::find($request->input('model_id'));
// Check that it's an object and not a collection
// (Sometimes people send arrays here and they shouldn't
if (($model) && ($model instanceof AssetModel) && ($model->fieldset)) {
foreach ($model->fieldset->fields as $field) {
// Set the field value based on what was sent in the request
$field_val = $request->input($field->db_column, null);
// If input value is null, use custom field's default value
if ($field_val == null) {
Log::debug('Field value for '.$field->db_column.' is null');
$field_val = $field->defaultValue($request->get('model_id'));
Log::debug('Use the default fieldset value of '.$field->defaultValue($request->get('model_id')));
}
// if the field is set to encrypted, make sure we encrypt the value
if ($field->field_encrypted == '1') {
Log::debug('This model field is encrypted in this fieldset.');
if (Gate::allows('admin')) {
// If input value is null, use custom field's default value
if (($field_val == null) && ($request->has('model_id') != '')) {
$field_val = Crypt::encrypt($field->defaultValue($request->get('model_id')));
} else {
$field_val = Crypt::encrypt($request->input($field->db_column));
}
}
}
$asset->{$field->db_column} = $field_val;
}
}
if ($asset->save()) {
if ($request->get('assigned_user')) {
@@ -614,6 +605,8 @@ class AssetsController extends Controller
}
return response()->json(Helper::formatStandardApiResponse('success', $asset, trans('admin/hardware/message.create.success')));
return response()->json(Helper::formatStandardApiResponse('success', (new AssetsTransformer)->transformAsset($asset), trans('admin/hardware/message.create.success')));
}
return response()->json(Helper::formatStandardApiResponse('error', null, $asset->getErrors()), 200);
@@ -654,22 +647,7 @@ class AssetsController extends Controller
}
$asset = $request->handleImages($asset);
$model = AssetModel::find($asset->model_id);
// Update custom fields
if (($model) && (isset($model->fieldset))) {
foreach ($model->fieldset->fields as $field) {
if ($request->has($field->db_column)) {
if ($field->field_encrypted == '1') {
if (Gate::allows('admin')) {
$asset->{$field->db_column} = \Crypt::encrypt($request->input($field->db_column));
}
} else {
$asset->{$field->db_column} = $request->input($field->db_column);
}
}
}
}
$asset = $asset->handleCustomFieldsForStoring($request);
if ($asset->save()) {
@@ -692,7 +670,11 @@ class AssetsController extends Controller
$asset->image = $asset->getImageUrl();
}
return response()->json(Helper::formatStandardApiResponse('success', $asset, trans('admin/hardware/message.update.success')));
if ($problems_updating_encrypted_custom_fields) {
return response()->json(Helper::formatStandardApiResponse('success', $asset, trans('admin/hardware/message.update.encrypted_warning')));
} else {
return response()->json(Helper::formatStandardApiResponse('success', $asset, trans('admin/hardware/message.update.success')));
}
}
return response()->json(Helper::formatStandardApiResponse('error', null, $asset->getErrors()), 200);
@@ -802,7 +784,6 @@ class AssetsController extends Controller
'asset_tag' => $asset->asset_tag,
];
// This item is checked out to a location
if (request('checkout_to_type') == 'location') {
$target = Location::find(request('assigned_location'));
@@ -829,13 +810,10 @@ class AssetsController extends Controller
$asset->status_id = $request->get('status_id');
}
if (! isset($target)) {
return response()->json(Helper::formatStandardApiResponse('error', $error_payload, 'Checkout target for asset '.e($asset->asset_tag).' is invalid - '.$error_payload['target_type'].' does not exist.'));
}
$checkout_at = request('checkout_at', date('Y-m-d H:i:s'));
$expected_checkin = request('expected_checkin', null);
$note = request('note', null);
@@ -851,8 +829,6 @@ class AssetsController extends Controller
// $asset->location_id = $target->rtd_location_id;
// }
if ($asset->checkOut($target, Auth::user(), $checkout_at, $expected_checkin, $note, $asset_name, $asset->location_id)) {
return response()->json(Helper::formatStandardApiResponse('success', ['asset'=> e($asset->asset_tag)], trans('admin/hardware/message.checkout.success')));
}
@@ -983,25 +959,39 @@ class AssetsController extends Controller
{
$this->authorize('audit', Asset::class);
$rules = [
'asset_tag' => 'required',
'location_id' => 'exists:locations,id|nullable|numeric',
'next_audit_date' => 'date|nullable',
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return response()->json(Helper::formatStandardApiResponse('error', null, $validator->errors()->all()));
}
$settings = Setting::getSettings();
$dt = Carbon::now()->addMonths($settings->audit_interval)->toDateString();
// No tag passed - return an error
if (!$request->filled('asset_tag')) {
return response()->json(Helper::formatStandardApiResponse('error', [
'asset_tag'=> '',
'error'=> trans('admin/hardware/message.no_tag'),
], trans('admin/hardware/message.no_tag')), 200);
}
$asset = Asset::where('asset_tag', '=', $request->input('asset_tag'))->first();
if ($asset) {
// We don't want to log this as a normal update, so let's bypass that
/**
* Even though we do a save() further down, we don't want to log this as a "normal" asset update,
* which would trigger the Asset Observer and would log an asset *update* log entry (because the
* de-normed fields like next_audit_date on the asset itself will change on save()) *in addition* to
* the audit log entry we're creating through this controller.
*
* To prevent this double-logging (one for update and one for audit), we skip the observer and bypass
* that de-normed update log entry by using unsetEventDispatcher(), BUT invoking unsetEventDispatcher()
* will bypass normal model-level validation that's usually handled at the observer )
*
* We handle validation on the save() by checking if the asset is valid via the ->isValid() method,
* which manually invokes Watson Validating to make sure the asset's model is valid.
*
* @see \App\Observers\AssetObserver::updating()
*/
$asset->unsetEventDispatcher();
$asset->next_audit_date = $dt;
@@ -1017,8 +1007,12 @@ class AssetsController extends Controller
$asset->last_audit_date = date('Y-m-d H:i:s');
if ($asset->save()) {
$log = $asset->logAudit(request('note'), request('location_id'));
/**
* Invoke Watson Validating to check the asset itself and check to make sure it saved correctly.
* We have to invoke this manually because of the unsetEventDispatcher() above.)
*/
if ($asset->isValid() && $asset->save()) {
$asset->logAudit(request('note'), request('location_id'));
return response()->json(Helper::formatStandardApiResponse('success', [
'asset_tag'=> e($asset->asset_tag),
@@ -1026,9 +1020,23 @@ class AssetsController extends Controller
'next_audit_date' => Helper::getFormattedDateObject($asset->next_audit_date),
], trans('admin/hardware/message.audit.success')));
}
// Asset failed validation or was not able to be saved
return response()->json(Helper::formatStandardApiResponse('error', [
'asset_tag'=> e($asset->asset_tag),
'error'=> $asset->getErrors()->first(),
], trans('admin/hardware/message.audit.error', ['error' => $asset->getErrors()->first()])), 200);
}
return response()->json(Helper::formatStandardApiResponse('error', ['asset_tag'=> e($request->input('asset_tag'))], 'Asset with tag '.e($request->input('asset_tag')).' not found'));
// No matching asset for the asset tag that was passed.
return response()->json(Helper::formatStandardApiResponse('error', [
'asset_tag'=> e($request->input('asset_tag')),
'error'=> trans('admin/hardware/message.audit.error'),
], trans('admin/hardware/message.audit.error', ['error' => trans('admin/hardware/message.does_not_exist')])), 200);
}
@@ -1062,8 +1070,7 @@ class AssetsController extends Controller
$assets = Asset::select('assets.*')
->with('location', 'assetstatus', 'assetlog', 'company','assignedTo',
'model.category', 'model.manufacturer', 'model.fieldset', 'supplier', 'requests')
->requestableAssets();
'model.category', 'model.manufacturer', 'model.fieldset', 'supplier', 'requests');
@@ -1071,7 +1078,7 @@ class AssetsController extends Controller
if ($request->filled('search')) {
$assets->TextSearch($request->input('search'));
}
// Search custom fields by column name
foreach ($all_custom_fields as $field) {
if ($request->filled($field->db_column_name())) {
@@ -1101,6 +1108,7 @@ class AssetsController extends Controller
break;
}
$assets->requestableAssets();
// 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');

View File

@@ -14,6 +14,7 @@ use App\Events\ComponentCheckedIn;
use App\Models\Asset;
use Illuminate\Support\Facades\Validator;
use Illuminate\Database\Query\Builder;
use Illuminate\Support\Facades\Log;
class ComponentsController extends Controller
{
@@ -331,7 +332,7 @@ class ComponentsController extends Controller
// actually checked out.
$component_assets->assigned_qty = $qty_remaining_in_checkout;
\Log::debug($component_asset_id.' - '.$qty_remaining_in_checkout.' remaining in record '.$component_assets->id);
Log::debug($component_asset_id.' - '.$qty_remaining_in_checkout.' remaining in record '.$component_assets->id);
\DB::table('components_assets')->where('id',
$component_asset_id)->update(['assigned_qty' => $qty_remaining_in_checkout]);

View File

@@ -13,6 +13,7 @@ use App\Models\User;
use Illuminate\Http\Request;
use App\Http\Requests\ImageUploadRequest;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
class ConsumablesController extends Controller
{
@@ -277,7 +278,7 @@ class ConsumablesController extends Controller
if (!$user = User::find($request->input('assigned_to'))) {
// Return error message
return response()->json(Helper::formatStandardApiResponse('error', null, 'No user found'));
\Log::debug('No valid user');
Log::debug('No valid user');
}
// Update the consumable data

View File

@@ -179,7 +179,7 @@ class CustomFieldsController extends Controller
*
* @author [Brady Wetherington] [<uberbrady@gmail.com>]
* @since [v1.8]
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy($field_id)
{

View File

@@ -118,7 +118,7 @@ class CustomFieldsetsController extends Controller
*
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v4.0]
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy($id)
{

View File

@@ -8,7 +8,7 @@ use App\Http\Transformers\DepartmentsTransformer;
use App\Http\Transformers\SelectlistTransformer;
use App\Models\Company;
use App\Models\Department;
use Auth;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;
use App\Http\Requests\ImageUploadRequest;
use Illuminate\Support\Facades\Storage;

View File

@@ -7,7 +7,7 @@ use App\Http\Controllers\Controller;
use App\Http\Transformers\GroupsTransformer;
use App\Models\Group;
use Illuminate\Http\Request;
use Auth;
use Illuminate\Support\Facades\Auth;
class GroupsController extends Controller
@@ -62,13 +62,16 @@ class GroupsController extends Controller
{
$this->authorize('superadmin');
$group = new Group;
// Get all the available permissions
$permissions = config('permissions');
$groupPermissions = Helper::selectedPermissionsArray($permissions, $permissions);
$group->name = $request->input('name');
$group->created_by = Auth::user()->id;
$group->permissions = json_encode($request->input('permissions')); // Todo - some JSON validation stuff here
$group->permissions = json_encode($request->input('permissions', $groupPermissions));
if ($group->save()) {
return response()->json(Helper::formatStandardApiResponse('success', $group, trans('admin/groups/message.create.success')));
return response()->json(Helper::formatStandardApiResponse('success', (new GroupsTransformer)->transformGroup($group), trans('admin/groups/message.success.create')));
}
return response()->json(Helper::formatStandardApiResponse('error', null, $group->getErrors()));
@@ -86,7 +89,6 @@ class GroupsController extends Controller
{
$this->authorize('superadmin');
$group = Group::findOrFail($id);
return (new GroupsTransformer)->transformGroup($group);
}
@@ -108,7 +110,7 @@ class GroupsController extends Controller
$group->permissions = $request->input('permissions'); // Todo - some JSON validation stuff here
if ($group->save()) {
return response()->json(Helper::formatStandardApiResponse('success', $group, trans('admin/groups/message.update.success')));
return response()->json(Helper::formatStandardApiResponse('success', (new GroupsTransformer)->transformGroup($group), trans('admin/groups/message.success.update')));
}
return response()->json(Helper::formatStandardApiResponse('error', null, $group->getErrors()));

View File

@@ -9,13 +9,14 @@ use App\Http\Transformers\ImportsTransformer;
use App\Models\Asset;
use App\Models\Company;
use App\Models\Import;
use Artisan;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Database\Eloquent\JsonEncodingException;
use Illuminate\Support\Facades\Request;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Storage;
use League\Csv\Reader;
use Symfony\Component\HttpFoundation\File\Exception\FileException;
use Illuminate\Support\Facades\Log;
class ImportController extends Controller
{
@@ -159,10 +160,10 @@ class ImportController extends Controller
// Run a backup immediately before processing
if ($request->get('run-backup')) {
\Log::debug('Backup manually requested via importer');
Log::debug('Backup manually requested via importer');
Artisan::call('snipeit:backup', ['--filename' => 'pre-import-backup-'.date('Y-m-d-H:i:s')]);
} else {
\Log::debug('NO BACKUP requested via importer');
Log::debug('NO BACKUP requested via importer');
}
$import = Import::find($import_id);

View File

@@ -8,7 +8,7 @@ use App\Http\Transformers\LabelsTransformer;
use App\Models\Labels\Label;
use Illuminate\Http\Request;
use Illuminate\Support\ItemNotFoundException;
use Auth;
use Illuminate\Support\Facades\Auth;
class LabelsController extends Controller
{

View File

@@ -9,7 +9,7 @@ use App\Models\Asset;
use App\Models\License;
use App\Models\LicenseSeat;
use App\Models\User;
use Auth;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;
class LicenseSeatsController extends Controller

View File

@@ -235,10 +235,16 @@ class LocationsController extends Controller
public function destroy($id)
{
$this->authorize('delete', Location::class);
$location = Location::findOrFail($id);
$location = Location::withCount('assignedAssets as assigned_assets_count')
->withCount('assets as assets_count')
->withCount('rtd_assets as rtd_assets_count')
->withCount('children as children_count')
->withCount('users as users_count')
->findOrFail($id);
if (! $location->isDeletable()) {
return response()
->json(Helper::formatStandardApiResponse('error', null, trans('admin/companies/message.assoc_users')));
->json(Helper::formatStandardApiResponse('error', null, trans('admin/locations/message.assoc_users')));
}
$this->authorize('delete', $location);
$location->delete();

View File

@@ -12,7 +12,7 @@ use Laravel\Passport\TokenRepository;
use Illuminate\Contracts\Validation\Factory as ValidationFactory;
use Illuminate\Support\Facades\Gate;
use App\Models\CustomField;
use DB;
use Illuminate\Support\Facades\DB;
class ProfileController extends Controller
{

View File

@@ -32,19 +32,26 @@ class ReportsController extends Controller
}
if (($request->filled('item_type')) && ($request->filled('item_id'))) {
$actionlogs = $actionlogs->where('item_id', '=', $request->input('item_id'))
$actionlogs = $actionlogs->where(function($query) use ($request)
{
$query->where('item_id', '=', $request->input('item_id'))
->where('item_type', '=', 'App\\Models\\'.ucwords($request->input('item_type')))
->orWhere(function($query) use ($request)
{
$query->where('target_id', '=', $request->input('item_id'))
->where('target_type', '=', 'App\\Models\\'.ucwords($request->input('item_type')));
});
});
}
if ($request->filled('action_type')) {
$actionlogs = $actionlogs->where('action_type', '=', $request->input('action_type'))->orderBy('created_at', 'desc');
}
if ($request->filled('user_id')) {
$actionlogs = $actionlogs->where('user_id', '=', $request->input('user_id'));
}
if ($request->filled('action_source')) {
$actionlogs = $actionlogs->where('action_source', '=', $request->input('action_source'))->orderBy('created_at', 'desc');
}
@@ -71,13 +78,14 @@ class ReportsController extends Controller
];
$total = $actionlogs->count();
// Make sure the offset and limit are actually integers and do not exceed system limits
$offset = ($request->input('offset') > $actionlogs->count()) ? $actionlogs->count() : app('api_offset_value');
$offset = ($request->input('offset') > $total) ? $total : app('api_offset_value');
$limit = app('api_limit_value');
$sort = in_array($request->input('sort'), $allowed_columns) ? e($request->input('sort')) : 'created_at';
$order = ($request->input('order') == 'asc') ? 'asc' : 'desc';
$total = $actionlogs->count();
$actionlogs = $actionlogs->orderBy($sort, $order)->skip($offset)->take($limit)->get();

View File

@@ -33,18 +33,18 @@ class SettingsController extends Controller
$settings = Setting::getSettings();
if ($settings->ldap_enabled!='1') {
\Log::debug('LDAP is not enabled cannot test.');
Log::debug('LDAP is not enabled cannot test.');
return response()->json(['message' => 'LDAP is not enabled, cannot test.'], 400);
}
\Log::debug('Preparing to test LDAP connection');
Log::debug('Preparing to test LDAP connection');
$message = []; //where we collect together test messages
try {
$connection = Ldap::connectToLdap();
try {
$message['bind'] = ['message' => 'Successfully bound to LDAP server.'];
\Log::debug('attempting to bind to LDAP for LDAP test');
Log::debug('attempting to bind to LDAP for LDAP test');
Ldap::bindAdminToLdap($connection);
$message['login'] = [
'message' => 'Successfully connected to LDAP server.',
@@ -75,13 +75,13 @@ class SettingsController extends Controller
return response()->json($message, 200);
} catch (\Exception $e) {
\Log::debug('Bind failed');
\Log::debug("Exception was: ".$e->getMessage());
Log::debug('Bind failed');
Log::debug("Exception was: ".$e->getMessage());
return response()->json(['message' => $e->getMessage()], 400);
//return response()->json(['message' => $e->getMessage()], 500);
}
} catch (\Exception $e) {
\Log::debug('Connection failed but we cannot debug it any further on our end.');
Log::debug('Connection failed but we cannot debug it any further on our end.');
return response()->json(['message' => $e->getMessage()], 500);
}
@@ -92,7 +92,7 @@ class SettingsController extends Controller
{
if (Setting::getSettings()->ldap_enabled != '1') {
\Log::debug('LDAP is not enabled. Cannot test.');
Log::debug('LDAP is not enabled. Cannot test.');
return response()->json(['message' => 'LDAP is not enabled, cannot test.'], 400);
}
@@ -104,39 +104,39 @@ class SettingsController extends Controller
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
\Log::debug('LDAP Validation test failed.');
Log::debug('LDAP Validation test failed.');
$validation_errors = implode(' ',$validator->errors()->all());
return response()->json(['message' => $validator->errors()->all()], 400);
}
\Log::debug('Preparing to test LDAP login');
Log::debug('Preparing to test LDAP login');
try {
$connection = Ldap::connectToLdap();
try {
Ldap::bindAdminToLdap($connection);
\Log::debug('Attempting to bind to LDAP for LDAP test');
Log::debug('Attempting to bind to LDAP for LDAP test');
try {
$ldap_user = Ldap::findAndBindUserLdap($request->input('ldaptest_user'), $request->input('ldaptest_password'));
if ($ldap_user) {
\Log::debug('It worked! '. $request->input('ldaptest_user').' successfully binded to LDAP.');
Log::debug('It worked! '. $request->input('ldaptest_user').' successfully binded to LDAP.');
return response()->json(['message' => 'It worked! '. $request->input('ldaptest_user').' successfully binded to LDAP.'], 200);
}
return response()->json(['message' => 'Login Failed. '. $request->input('ldaptest_user').' did not successfully bind to LDAP.'], 400);
} catch (\Exception $e) {
\Log::debug('LDAP login failed');
Log::debug('LDAP login failed');
return response()->json(['message' => $e->getMessage()], 400);
}
} catch (\Exception $e) {
\Log::debug('Bind failed');
Log::debug('Bind failed');
return response()->json(['message' => $e->getMessage()], 400);
//return response()->json(['message' => $e->getMessage()], 500);
}
} catch (\Exception $e) {
\Log::debug('Connection failed');
Log::debug('Connection failed');
return response()->json(['message' => $e->getMessage()], 500);
}
@@ -181,19 +181,19 @@ class SettingsController extends Controller
$file_parts = explode('.', $file);
$extension = end($file_parts);
\Log::debug($extension);
Log::debug($extension);
// Only generated barcodes would have a .png file extension
if ($extension == 'png') {
\Log::debug('Deleting: '.$file);
Log::debug('Deleting: '.$file);
try {
Storage::disk('public')->delete($file);
\Log::debug('Deleting: '.$file);
Log::debug('Deleting: '.$file);
$file_count++;
} catch (\Exception $e) {
\Log::debug($e);
Log::debug($e);
}
}
}

View File

@@ -13,15 +13,17 @@ use App\Http\Transformers\SelectlistTransformer;
use App\Http\Transformers\UsersTransformer;
use App\Models\Actionlog;
use App\Models\Asset;
use App\Models\Company;
use App\Models\Accessory;
use App\Models\Consumable;
use App\Models\License;
use App\Models\User;
use App\Notifications\CurrentInventory;
use Auth;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;
use App\Http\Requests\ImageUploadRequest;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Log;
use App\Http\Requests\DeleteUserRequest;
class UsersController extends Controller
{
@@ -31,7 +33,7 @@ class UsersController extends Controller
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v4.0]
*
* @return \Illuminate\Http\Response
* @return array
*/
public function index(Request $request)
{
@@ -75,10 +77,14 @@ class UsersController extends Controller
'users.autoassign_licenses',
'users.website',
])->with('manager', 'groups', 'userloc', 'company', 'department', 'assets', 'licenses', 'accessories', 'consumables', 'createdBy',)
->withCount('assets as assets_count', 'licenses as licenses_count', 'accessories as accessories_count', 'consumables as consumables_count');
])->with('manager', 'groups', 'userloc', 'company', 'department', 'assets', 'licenses', 'accessories', 'consumables', 'createdBy', 'managesUsers', 'managedLocations')
->withCount('assets as assets_count', 'licenses as licenses_count', 'accessories as accessories_count', 'consumables as consumables_count', 'managesUsers as manages_users_count', 'managedLocations as manages_locations_count');
if ($request->filled('search') != '') {
$users = $users->TextSearch($request->input('search'));
}
if ($request->filled('activated')) {
$users = $users->where('users.activated', '=', $request->input('activated'));
}
@@ -187,12 +193,23 @@ class UsersController extends Controller
$users->has('accessories', '=', $request->input('accessories_count'));
}
if ($request->filled('manages_users_count')) {
$users->has('manages_users_count', '=', $request->input('manages_users_count'));
}
if ($request->filled('manages_locations_count')) {
$users->has('manages_locations_count', '=', $request->input('manages_locations_count'));
}
if ($request->filled('autoassign_licenses')) {
$users->where('autoassign_licenses', '=', $request->input('autoassign_licenses'));
}
if ($request->filled('search')) {
$users = $users->TextSearch($request->input('search'));
if (($request->filled('deleted')) && ($request->input('deleted') == 'true')) {
$users = $users->onlyTrashed();
} elseif (($request->filled('all')) && ($request->input('all') == 'true')) {
$users = $users->withTrashed();
}
$order = $request->input('order') === 'asc' ? 'asc' : 'desc';
@@ -230,10 +247,6 @@ class UsersController extends Controller
'jobtitle',
'username',
'employee_num',
'assets',
'accessories',
'consumables',
'licenses',
'groups',
'activated',
'created_at',
@@ -244,6 +257,8 @@ class UsersController extends Controller
'licenses_count',
'consumables_count',
'accessories_count',
'manages_users_count',
'manages_locations_count',
'phone',
'address',
'city',
@@ -262,18 +277,11 @@ class UsersController extends Controller
'website',
];
$sort = in_array($request->get('sort'), $allowed_columns) ? $request->get('sort') : 'first_name';
$sort = in_array($request->input('sort'), $allowed_columns) ? $request->input('sort') : 'first_name';
$users = $users->orderBy($sort, $order);
break;
}
if (($request->filled('deleted')) && ($request->input('deleted') == 'true')) {
$users = $users->onlyTrashed();
} elseif (($request->filled('all')) && ($request->input('all') == 'true')) {
$users = $users->withTrashed();
}
$users = Company::scopeCompanyables($users);
// Make sure the offset and limit are actually integers and do not exceed system limits
@@ -308,8 +316,6 @@ class UsersController extends Controller
]
)->where('show_in_list', '=', '1');
$users = Company::scopeCompanyables($users);
if ($request->filled('search')) {
$users = $users->where(function ($query) use ($request) {
$query->SimpleNameSearch($request->get('search'))
@@ -351,7 +357,7 @@ class UsersController extends Controller
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v4.0]
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
* @return array | \Illuminate\Http\JsonResponse
*/
public function store(SaveUserRequest $request)
{
@@ -398,14 +404,19 @@ class UsersController extends Controller
*
* @author [A. Gianotto] [<snipe@snipe.net>]
* @param int $id
* @return \Illuminate\Http\Response
* @return array | \Illuminate\Http\JsonResponse
*/
public function show($id)
{
$this->authorize('view', User::class);
$user = User::withCount('assets as assets_count', 'licenses as licenses_count', 'accessories as accessories_count', 'consumables as consumables_count')->findOrFail($id);
return (new UsersTransformer)->transformUser($user);
if ($user = User::withCount('assets as assets_count', 'licenses as licenses_count', 'accessories as accessories_count', 'consumables as consumables_count', 'managesUsers as manages_users_count', 'managedLocations as manages_locations_count')->find($id)) {
$this->authorize('view', $user);
return (new UsersTransformer)->transformUser($user);
}
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/users/message.user_not_found', compact('id'))));
}
@@ -416,89 +427,89 @@ class UsersController extends Controller
* @since [v4.0]
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
* @return \Illuminate\Http\JsonResponse
*/
public function update(SaveUserRequest $request, $id)
{
$this->authorize('update', User::class);
$user = User::findOrFail($id);
/**
* This is a janky hack to prevent people from changing admin demo user data on the public demo.
*
* The $ids 1 and 2 are special since they are seeded as superadmins in the demo seeder.
*
* Thanks, jerks. You are why we can't have nice things. - snipe
*
*/
if ($user = User::find($id)) {
if ((($id == 1) || ($id == 2)) && (config('app.lock_passwords'))) {
return response()->json(Helper::formatStandardApiResponse('error', null, 'Permission denied. You cannot update user information via API on the demo.'));
}
$this->authorize('update', $user);
/**
* This is a janky hack to prevent people from changing admin demo user data on the public demo.
* The $ids 1 and 2 are special since they are seeded as superadmins in the demo seeder.
* Thanks, jerks. You are why we can't have nice things. - snipe
*
*/
$user->fill($request->all());
if ($user->id == $request->input('manager_id')) {
return response()->json(Helper::formatStandardApiResponse('error', null, 'You cannot be your own manager'));
}
if ($request->filled('password')) {
$user->password = bcrypt($request->input('password'));
}
// We need to use has() instead of filled()
// here because we need to overwrite permissions
// if someone needs to null them out
if ($request->has('permissions')) {
$permissions_array = $request->input('permissions');
// Strip out the superuser permission if the API user isn't a superadmin
if (! Auth::user()->isSuperUser()) {
unset($permissions_array['superuser']);
if ((($id == 1) || ($id == 2)) && (config('app.lock_passwords'))) {
return response()->json(Helper::formatStandardApiResponse('error', null, 'Permission denied. You cannot update user information via API on the demo.'));
}
$user->permissions = $permissions_array;
}
$user->fill($request->all());
// Update the location of any assets checked out to this user
Asset::where('assigned_type', User::class)
->where('assigned_to', $user->id)->update(['location_id' => $request->input('location_id', null)]);
if ($user->id == $request->input('manager_id')) {
return response()->json(Helper::formatStandardApiResponse('error', null, 'You cannot be your own manager'));
}
app('App\Http\Requests\ImageUploadRequest')->handleImages($user, 600, 'image', 'avatars', 'avatar');
if ($user->save()) {
if ($request->filled('password')) {
$user->password = bcrypt($request->input('password'));
}
// Sync group memberships:
// This was changed in Snipe-IT v4.6.x to 4.7, since we upgraded to Laravel 5.5
// which changes the behavior of has vs filled.
// The $request->has method will now return true even if the input value is an empty string or null.
// A new $request->filled method has was added that provides the previous behavior of the has method.
// We need to use has() instead of filled()
// here because we need to overwrite permissions
// if someone needs to null them out
if ($request->has('permissions')) {
$permissions_array = $request->input('permissions');
// Check if the request has groups passed and has a value
if ($request->filled('groups')) {
$validator = Validator::make($request->all(), [
'groups.*' => 'integer|exists:permission_groups,id',
]);
if ($validator->fails()){
return response()->json(Helper::formatStandardApiResponse('error', null, $user->getErrors()));
// Strip out the individual superuser permission if the API user isn't a superadmin
if (!Auth::user()->isSuperUser()) {
unset($permissions_array['superuser']);
}
$user->groups()->sync($request->input('groups'));
// The groups field has been passed but it is null, so we should blank it out
} elseif ($request->has('groups')) {
$user->groups()->sync([]);
$user->permissions = $permissions_array;
}
return response()->json(Helper::formatStandardApiResponse('success', (new UsersTransformer)->transformUser($user), trans('admin/users/message.success.update')));
// Update the location of any assets checked out to this user
Asset::where('assigned_type', User::class)
->where('assigned_to', $user->id)->update(['location_id' => $request->input('location_id', null)]);
app('App\Http\Requests\ImageUploadRequest')->handleImages($user, 600, 'image', 'avatars', 'avatar');
if ($user->save()) {
// Check if the request has groups passed and has a value, AND that the user us a superuser
if (($request->has('groups')) && (Auth::user()->isSuperUser())) {
$validator = Validator::make($request->only('groups'), [
'groups.*' => 'integer|exists:permission_groups,id',
]);
if ($validator->fails()) {
return response()->json(Helper::formatStandardApiResponse('error', null, $validator->errors()));
}
// Sync the groups since the user is a superuser and the groups pass validation
$user->groups()->sync($request->input('groups'));
}
return response()->json(Helper::formatStandardApiResponse('success', (new UsersTransformer)->transformUser($user), trans('admin/users/message.success.update')));
}
return response()->json(Helper::formatStandardApiResponse('error', null, $user->getErrors()));
}
return response()->json(Helper::formatStandardApiResponse('error', null, $user->getErrors()));
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/users/message.user_not_found', compact('id'))));
}
/**
@@ -507,45 +518,36 @@ class UsersController extends Controller
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v4.0]
* @param int $id
* @return \Illuminate\Http\Response
* @return \Illuminate\Http\JsonResponse
*/
public function destroy($id)
public function destroy(DeleteUserRequest $request, $id)
{
$this->authorize('delete', User::class);
$user = User::findOrFail($id);
$this->authorize('delete', $user);
if (($user->assets) && ($user->assets->count() > 0)) {
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/users/message.error.delete_has_assets')));
}
if ($user = User::withTrashed()->find($id)) {
if (($user->licenses) && ($user->licenses->count() > 0)) {
return response()->json(Helper::formatStandardApiResponse('error', null, 'This user still has '.$user->licenses->count().' license(s) associated with them and cannot be deleted.'));
}
$this->authorize('delete', $user);
if (($user->accessories) && ($user->accessories->count() > 0)) {
return response()->json(Helper::formatStandardApiResponse('error', null, 'This user still has '.$user->accessories->count().' accessories associated with them.'));
}
if ($user->delete()) {
if (($user->managedLocations()) && ($user->managedLocations()->count() > 0)) {
return response()->json(Helper::formatStandardApiResponse('error', null, 'This user still has '.$user->managedLocations()->count().' locations that they manage.'));
}
if ($user->delete()) {
// Remove the user's avatar if they have one
if (Storage::disk('public')->exists('avatars/'.$user->avatar)) {
try {
Storage::disk('public')->delete('avatars/'.$user->avatar);
} catch (\Exception $e) {
\Log::debug($e);
// Remove the user's avatar if they have one
if (Storage::disk('public')->exists('avatars/' . $user->avatar)) {
try {
Storage::disk('public')->delete('avatars/' . $user->avatar);
} catch (\Exception $e) {
Log::debug($e);
}
}
return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/users/message.success.delete')));
}
return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/users/message.success.delete')));
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/users/message.error.delete')));
}
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/users/message.error.delete')));
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/users/message.user_not_found')));
}
/**
@@ -554,15 +556,42 @@ class UsersController extends Controller
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v3.0]
* @param $userId
* @return string JSON
* @return array | \Illuminate\Http\JsonResponse
*/
public function assets(Request $request, $id)
{
$this->authorize('view', User::class);
$this->authorize('view', Asset::class);
$assets = Asset::where('assigned_to', '=', $id)->where('assigned_type', '=', User::class)->with('model')->get();
return (new AssetsTransformer)->transformAssets($assets, $assets->count(), $request);
if ($user = User::with('assets', 'assets.model', 'consumables', 'accessories', 'licenses', 'userloc')->withTrashed()->find($id)) {
$this->authorize('view', $user);
$assets = Asset::where('assigned_to', '=', $id)->where('assigned_type', '=', User::class)->with('model');
// Filter on category ID
if ($request->filled('category_id')) {
$assets = $assets->InCategory($request->input('category_id'));
}
// Filter on model ID
if ($request->filled('model_id')) {
$model_ids = $request->input('model_id');
if (!is_array($model_ids)) {
$model_ids = array($model_ids);
}
$assets = $assets->InModelList($model_ids);
}
$assets = $assets->get();
return (new AssetsTransformer)->transformAssets($assets, $assets->count(), $request);
}
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/users/message.user_not_found', compact('id'))));
}
/**
@@ -576,15 +605,22 @@ class UsersController extends Controller
*/
public function emailAssetList(Request $request, $id)
{
$user = User::findOrFail($id);
$this->authorize('update', User::class);
if (empty($user->email)) {
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/users/message.inventorynotification.error')));
if ($user = User::find($id)) {
$this->authorize('update', $user);
if (empty($user->email)) {
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/users/message.inventorynotification.error')));
}
$user->notify((new CurrentInventory($user)));
return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/users/message.inventorynotification.success')));
}
$user->notify((new CurrentInventory($user)));
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/users/message.user_not_found', compact('id'))));
return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/users/message.inventorynotification.success')));
}
/**
@@ -593,13 +629,14 @@ class UsersController extends Controller
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v3.0]
* @param $userId
* @return string JSON
* @return array | \Illuminate\Http\JsonResponse
*/
public function consumables(Request $request, $id)
{
$this->authorize('view', User::class);
$this->authorize('view', Consumable::class);
$user = User::findOrFail($id);
$this->authorize('view', $user);
$consumables = $user->consumables;
return (new ConsumablesTransformer)->transformConsumables($consumables, $consumables->count(), $request);
}
@@ -610,12 +647,13 @@ class UsersController extends Controller
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v4.6.14]
* @param $userId
* @return string JSON
* @return array
*/
public function accessories($id)
{
$this->authorize('view', User::class);
$user = User::findOrFail($id);
$this->authorize('view', $user);
$this->authorize('view', Accessory::class);
$accessories = $user->accessories;
@@ -628,7 +666,7 @@ class UsersController extends Controller
* @author [N. Mathar] [<snipe@snipe.net>]
* @since [v5.0]
* @param $userId
* @return string JSON
* @return array | \Illuminate\Http\JsonResponse
*/
public function licenses($id)
{
@@ -636,6 +674,7 @@ class UsersController extends Controller
$this->authorize('view', License::class);
if ($user = User::where('id', $id)->withTrashed()->first()) {
$this->authorize('update', $user);
$licenses = $user->licenses()->get();
return (new LicensesTransformer())->transformLicenses($licenses, $licenses->count());
}
@@ -659,9 +698,20 @@ class UsersController extends Controller
if ($request->filled('id')) {
try {
$user = User::find($request->get('id'));
$this->authorize('update', $user);
$user->two_factor_secret = null;
$user->two_factor_enrolled = 0;
$user->save();
$user->saveQuietly();
// Log the reset
$logaction = new Actionlog();
$logaction->target_type = User::class;
$logaction->target_id = $user->id;
$logaction->item_type = User::class;
$logaction->item_id = $user->id;
$logaction->created_at = date('Y-m-d H:i:s');
$logaction->user_id = Auth::user()->id;
$logaction->logaction('2FA reset');
return response()->json(['message' => trans('admin/settings/general.two_factor_reset_success')], 200);
} catch (\Exception $e) {
@@ -679,7 +729,7 @@ class UsersController extends Controller
* @author [Juan Font] [<juanfontalonso@gmail.com>]
* @since [v4.4.2]
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
* @return array
*/
public function getCurrentUserInfo(Request $request)
{
@@ -692,12 +742,14 @@ class UsersController extends Controller
* @author [E. Taylor] [<dev@evantaylor.name>]
* @param int $userId
* @since [v6.0.0]
* @return JsonResponse
* @return \Illuminate\Http\JsonResponse
*/
public function restore($userId = null)
public function restore($userId)
{
$this->authorize('delete', User::class);
if ($user = User::withTrashed()->find($userId)) {
$this->authorize('delete', $user);
if ($user->deleted_at == '') {
@@ -716,8 +768,6 @@ class UsersController extends Controller
return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/users/message.success.restored')), 200);
}
// Check validation to make sure we're not restoring a user with the same username as an existing user
return response()->json(Helper::formatStandardApiResponse('error', null, $user->getErrors()));
}
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/users/message.user_not_found')), 200);

View File

@@ -6,7 +6,7 @@ use App\Helpers\Helper;
use App\Models\Asset;
use App\Models\AssetMaintenance;
use App\Models\Company;
use Auth;
use Illuminate\Support\Facades\Auth;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Slack;

View File

@@ -7,16 +7,16 @@ use App\Http\Requests\ImageUploadRequest;
use App\Models\Actionlog;
use App\Models\Asset;
use App\Models\AssetModel;
use App\Models\CustomField;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\View;
use Illuminate\Support\Facades\Validator;
use Redirect;
use Request;
use Storage;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Symfony\Component\HttpFoundation\JsonResponse;
use Illuminate\Support\Facades\Log;
/**
* This class controls all actions related to asset models for
@@ -66,7 +66,7 @@ class AssetModelsController extends Controller
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v1.0]
* @param ImageUploadRequest $request
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function store(ImageUploadRequest $request)
@@ -85,7 +85,7 @@ class AssetModelsController extends Controller
$model->category_id = $request->input('category_id');
$model->notes = $request->input('notes');
$model->user_id = Auth::id();
$model->requestable = Request::has('requestable');
$model->requestable = $request->has('requestable');
if ($request->input('fieldset_id') != '') {
$model->fieldset_id = $request->input('fieldset_id');
@@ -139,7 +139,7 @@ class AssetModelsController extends Controller
* @since [v1.0]
* @param ImageUploadRequest $request
* @param int $modelId
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function update(ImageUploadRequest $request, $modelId = null)
@@ -200,7 +200,7 @@ class AssetModelsController extends Controller
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v1.0]
* @param int $modelId
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function destroy($modelId)
@@ -220,7 +220,7 @@ class AssetModelsController extends Controller
try {
Storage::disk('public')->delete('models/'.$model->image);
} catch (\Exception $e) {
\Log::info($e);
Log::info($e);
}
}
@@ -237,7 +237,7 @@ class AssetModelsController extends Controller
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v1.0]
* @param int $id
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function getRestore($id)
@@ -288,7 +288,7 @@ class AssetModelsController extends Controller
public function show($modelId = null)
{
$this->authorize('view', AssetModel::class);
$model = AssetModel::withTrashed()->withCount('assets')->find($modelId);
$model = AssetModel::withTrashed()->find($modelId);
if (isset($model->id)) {
return view('models/view', compact('model'));
@@ -429,7 +429,7 @@ class AssetModelsController extends Controller
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v1.0]
* @param int $modelId
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
*/
public function postBulkDelete(Request $request)
{
@@ -486,11 +486,11 @@ class AssetModelsController extends Controller
* @param array $defaultValues
* @return void
*/
private function assignCustomFieldsDefaultValues(AssetModel $model, array $defaultValues)
private function assignCustomFieldsDefaultValues(AssetModel $model, array $defaultValues): bool
{
$data = array();
foreach ($defaultValues as $customFieldId => $defaultValue) {
$customField = \App\Models\CustomField::find($customFieldId);
$customField = CustomField::find($customFieldId);
$data[$customField->db_column] = $defaultValue;
}

View File

@@ -16,7 +16,7 @@ class AssetModelsFilesController extends Controller
*
* @param UploadFileRequest $request
* @param int $modelId
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
* @throws \Illuminate\Auth\Access\AuthorizationException
*@since [v1.0]
* @author [A. Gianotto] [<snipe@snipe.net>]
@@ -38,7 +38,7 @@ class AssetModelsFilesController extends Controller
$file_name = $request->handleFile('private_uploads/assetmodels/','model-'.$model->id,$file);
$model->logUpload($file_name, e($request->get('notes')));
$model->logUpload($file_name, $request->get('notes'));
}
return redirect()->back()->with('success', trans('general.file_upload_success'));
@@ -70,8 +70,6 @@ class AssetModelsFilesController extends Controller
}
$file = 'private_uploads/assetmodels/'.$log->filename;
\Log::debug('Checking for '.$file);
if (! Storage::exists($file)) {
return response('File '.$file.' not found on server', 404)

View File

@@ -12,8 +12,9 @@ use App\Models\CheckoutAcceptance;
use App\Models\LicenseSeat;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\View;
use Illuminate\Support\Facades\Log;
class AssetCheckinController extends Controller
{
@@ -39,7 +40,17 @@ class AssetCheckinController extends Controller
$this->authorize('checkin', $asset);
return view('hardware/checkin', compact('asset'))->with('statusLabel_list', Helper::statusLabelList())->with('backto', $backto);
// This asset is already checked in, redirect
if (is_null($asset->assignedTo)) {
return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.checkin.already_checked_in'));
}
if (!$asset->model) {
return redirect()->route('hardware.show', $asset->id)->with('error', trans('admin/hardware/general.model_invalid_fix'));
}
return view('hardware/checkin', compact('asset'))->with('statusLabel_list', Helper::statusLabelList())->with('backto', $backto)->with('table_name', 'Assets');
}
/**
@@ -49,7 +60,7 @@ class AssetCheckinController extends Controller
* @param AssetCheckinRequest $request
* @param int $assetId
* @param null $backto
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
* @throws \Illuminate\Auth\Access\AuthorizationException
* @since [v1.0]
*/
@@ -64,6 +75,11 @@ class AssetCheckinController extends Controller
if (is_null($target = $asset->assignedTo)) {
return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.checkin.already_checked_in'));
}
if (!$asset->model) {
return redirect()->route('hardware.show', $asset->id)->with('error', trans('admin/hardware/general.model_invalid_fix'));
}
$this->authorize('checkin', $asset);
if ($asset->assignedType() == Asset::USER) {
@@ -86,7 +102,7 @@ class AssetCheckinController extends Controller
$asset->location_id = $asset->rtd_location_id;
if ($request->filled('location_id')) {
\Log::debug('NEW Location ID: '.$request->get('location_id'));
Log::debug('NEW Location ID: '.$request->get('location_id'));
$asset->location_id = $request->get('location_id');
if ($request->get('update_default_location') == 0){
@@ -116,15 +132,12 @@ class AssetCheckinController extends Controller
$acceptance->delete();
});
Session::put('redirect_option', $request->get('redirect_option'));
// Was the asset updated?
if ($asset->save()) {
event(new CheckoutableCheckedIn($asset, $target, Auth::user(), $request->input('note'), $checkin_at, $originalValues));
if ((isset($user)) && ($backto == 'user')) {
return redirect()->route('users.show', $user->id)->with('success', trans('admin/hardware/message.checkin.success'));
}
return redirect()->route('hardware.index')->with('success', trans('admin/hardware/message.checkin.success'));
return Helper::getRedirectOption($asset, $assetId, 'Assets');
}
// Redirect to the asset management page with error
return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.checkin.error').$asset->getErrors());

View File

@@ -10,6 +10,7 @@ use App\Http\Requests\AssetCheckoutRequest;
use App\Models\Asset;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
class AssetCheckoutController extends Controller
{
@@ -33,11 +34,17 @@ class AssetCheckoutController extends Controller
$this->authorize('checkout', $asset);
if (!$asset->model) {
return redirect()->route('hardware.show', $asset->id)->with('error', trans('admin/hardware/general.model_invalid_fix'));
}
if ($asset->availableForCheckout()) {
return view('hardware/checkout', compact('asset'))
->with('statusLabel_list', Helper::deployableStatusLabelList());
->with('statusLabel_list', Helper::deployableStatusLabelList())
->with('table_name', 'Assets');
}
return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.checkout.not_available'));
}
@@ -47,7 +54,7 @@ class AssetCheckoutController extends Controller
* @author [A. Gianotto] [<snipe@snipe.net>]
* @param AssetCheckoutRequest $request
* @param int $assetId
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
* @since [v1.0]
*/
public function store(AssetCheckoutRequest $request, $assetId)
@@ -60,9 +67,14 @@ class AssetCheckoutController extends Controller
return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.checkout.not_available'));
}
$this->authorize('checkout', $asset);
if (!$asset->model) {
return redirect()->route('hardware.show', $asset->id)->with('error', trans('admin/hardware/general.model_invalid_fix'));
}
$admin = Auth::user();
$target = $this->determineCheckoutTarget($asset);
$target = $this->determineCheckoutTarget();
$asset = $this->updateAssetLocation($asset, $target);
@@ -97,11 +109,12 @@ class AssetCheckoutController extends Controller
return redirect()->to("hardware/$assetId/checkout")->with('error', trans('general.error_user_company'));
}
}
if ($asset->checkOut($target, $admin, $checkout_at, $expected_checkin, $request->get('note'), $request->get('name'))) {
return redirect()->route('hardware.index')->with('success', trans('admin/hardware/message.checkout.success'));
}
Session::put(['redirect_option' => $request->get('redirect_option'), 'checkout_to_type' => $request->get('checkout_to_type')]);
if ($asset->checkOut($target, $admin, $checkout_at, $expected_checkin, $request->get('note'), $request->get('name'))) {
return Helper::getRedirectOption($request, $assetId, 'Assets');
}
// Redirect to the asset management page with error
return redirect()->to("hardware/$assetId/checkout")->with('error', trans('admin/hardware/message.checkout.error').$asset->getErrors());
} catch (ModelNotFoundException $e) {

View File

@@ -17,7 +17,7 @@ class AssetFilesController extends Controller
*
* @param UploadFileRequest $request
* @param int $assetId
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
* @throws \Illuminate\Auth\Access\AuthorizationException
*@since [v1.0]
* @author [A. Gianotto] [<snipe@snipe.net>]
@@ -38,7 +38,7 @@ class AssetFilesController extends Controller
foreach ($request->file('file') as $file) {
$file_name = $request->handleFile('private_uploads/assets/','hardware-'.$asset->id, $file);
$asset->logUpload($file_name, e($request->get('notes')));
$asset->logUpload($file_name, $request->get('notes'));
}
return redirect()->back()->with('success', trans('admin/hardware/message.upload.success'));
@@ -70,7 +70,6 @@ class AssetFilesController extends Controller
}
$file = 'private_uploads/assets/'.$log->filename;
\Log::debug('Checking for '.$file);
if ($log->action_type == 'audit') {
$file = 'private_uploads/audits/'.$log->filename;

View File

@@ -6,7 +6,7 @@ use App\Helpers\Helper;
use App\Http\Controllers\Controller;
use App\Http\Requests\ImageUploadRequest;
use App\Models\Actionlog;
use App\Models\Manufacturer;
use App\Http\Requests\UploadFileRequest;
use Illuminate\Support\Facades\Log;
use App\Models\Asset;
use App\Models\AssetModel;
@@ -96,12 +96,16 @@ class AssetsController extends Controller
*
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v1.0]
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
*/
public function store(ImageUploadRequest $request)
{
$this->authorize(Asset::class);
// There are a lot more rules to add here but prevents
// errors around `asset_tags` not being present below.
$this->validate($request, ['asset_tags' => ['required', 'array']]);
// Handle asset tags - there could be one, or potentially many.
// This is only necessary on create, not update, since bulk editing is handled
// differently
@@ -156,29 +160,7 @@ class AssetsController extends Controller
$asset = $request->handleImages($asset);
}
// Update custom fields in the database.
// Validation for these fields is handled through the AssetRequest form request
$model = AssetModel::find($request->get('model_id'));
if (($model) && ($model->fieldset)) {
foreach ($model->fieldset->fields as $field) {
if ($field->field_encrypted == '1') {
if (Gate::allows('admin')) {
if (is_array($request->input($field->db_column))) {
$asset->{$field->db_column} = Crypt::encrypt(implode(', ', $request->input($field->db_column)));
} else {
$asset->{$field->db_column} = Crypt::encrypt($request->input($field->db_column));
}
}
} else {
if (is_array($request->input($field->db_column))) {
$asset->{$field->db_column} = implode(', ', $request->input($field->db_column));
} else {
$asset->{$field->db_column} = $request->input($field->db_column);
}
}
}
}
$asset = $asset->handleCustomFieldsForStoring($request);
// Validate the asset before saving
if ($asset->isValid() && $asset->save()) {
@@ -203,7 +185,7 @@ class AssetsController extends Controller
}
if ($success) {
\Log::debug(e($asset->asset_tag));
Log::debug(e($asset->asset_tag));
return redirect()->route('hardware.index')
->with('success-unescaped', trans('admin/hardware/message.create.success_linked', ['link' => route('hardware.show', $asset->id), 'id', 'tag' => e($asset->asset_tag)]));
@@ -289,7 +271,7 @@ class AssetsController extends Controller
*
* @param int $assetId
* @return \Illuminate\Http\RedirectResponse|Redirect
*@since [v1.0]
* @since [v1.0]
* @author [A. Gianotto] [<snipe@snipe.net>]
*/
public function update(ImageUploadRequest $request, $assetId = null)
@@ -304,7 +286,8 @@ class AssetsController extends Controller
$asset->status_id = $request->input('status_id', null);
$asset->warranty_months = $request->input('warranty_months', null);
$asset->purchase_cost = $request->input('purchase_cost', null);
$asset->purchase_date = $request->input('purchase_date', null);
$asset->purchase_date = $request->input('purchase_date', null);
$asset->next_audit_date = $request->input('next_audit_date', null);
if ($request->filled('purchase_date') && !$request->filled('asset_eol_date') && ($asset->model->eol > 0)) {
$asset->purchase_date = $request->input('purchase_date', null);
$asset->asset_eol_date = Carbon::parse($request->input('purchase_date'))->addMonths($asset->model->eol)->format('Y-m-d');
@@ -365,32 +348,7 @@ class AssetsController extends Controller
$asset->notes = $request->input('notes');
$asset = $request->handleImages($asset);
// Update custom fields in the database.
// Validation for these fields is handlded through the AssetRequest form request
// FIXME: No idea why this is returning a Builder error on db_column_name.
// Need to investigate and fix. Using static method for now.
$model = AssetModel::find($request->get('model_id'));
if (($model) && ($model->fieldset)) {
foreach ($model->fieldset->fields as $field) {
if ($field->field_encrypted == '1') {
if (Gate::allows('admin')) {
if (is_array($request->input($field->db_column))) {
$asset->{$field->db_column} = Crypt::encrypt(implode(', ', $request->input($field->db_column)));
} else {
$asset->{$field->db_column} = Crypt::encrypt($request->input($field->db_column));
}
}
} else {
if (is_array($request->input($field->db_column))) {
$asset->{$field->db_column} = implode(', ', $request->input($field->db_column));
} else {
$asset->{$field->db_column} = $request->input($field->db_column);
}
}
}
}
$asset = $asset->handleCustomFieldsForStoring($request);
if ($asset->save()) {
return redirect()->route('hardware.show', $assetId)
@@ -406,7 +364,7 @@ class AssetsController extends Controller
* @author [A. Gianotto] [<snipe@snipe.net>]
* @param int $assetId
* @since [v1.0]
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy($assetId)
{
@@ -440,7 +398,7 @@ class AssetsController extends Controller
*
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v3.0]
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
*/
public function getAssetBySerial(Request $request)
{
@@ -458,7 +416,7 @@ class AssetsController extends Controller
*
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v3.0]
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
*/
public function getAssetByTag(Request $request, $tag=null)
{
@@ -850,15 +808,15 @@ class AssetsController extends Controller
return view('hardware/audit-due');
}
public function overdueForAudit()
public function dueForCheckin()
{
$this->authorize('audit', Asset::class);
$this->authorize('checkin', Asset::class);
return view('hardware/audit-overdue');
return view('hardware/checkin-due');
}
public function auditStore(Request $request, $id)
public function auditStore(UploadFileRequest $request, $id)
{
$this->authorize('audit', Asset::class);
@@ -875,7 +833,21 @@ class AssetsController extends Controller
$asset = Asset::findOrFail($id);
// We don't want to log this as a normal update, so let's bypass that
/**
* Even though we do a save() further down, we don't want to log this as a "normal" asset update,
* which would trigger the Asset Observer and would log an asset *update* log entry (because the
* de-normed fields like next_audit_date on the asset itself will change on save()) *in addition* to
* the audit log entry we're creating through this controller.
*
* To prevent this double-logging (one for update and one for audit), we skip the observer and bypass
* that de-normed update log entry by using unsetEventDispatcher(), BUT invoking unsetEventDispatcher()
* will bypass normal model-level validation that's usually handled at the observer )
*
* We handle validation on the save() by checking if the asset is valid via the ->isValid() method,
* which manually invokes Watson Validating to make sure the asset's model is valid.
*
* @see \App\Observers\AssetObserver::updating()
*/
$asset->unsetEventDispatcher();
$asset->next_audit_date = $request->input('next_audit_date');
@@ -884,29 +856,27 @@ class AssetsController extends Controller
// Check to see if they checked the box to update the physical location,
// not just note it in the audit notes
if ($request->input('update_location') == '1') {
Log::debug('update location in audit');
$asset->location_id = $request->input('location_id');
}
/**
* Invoke Watson Validating to check the asset itself and check to make sure it saved correctly.
* We have to invoke this manually because of the unsetEventDispatcher() above.)
*/
if ($asset->isValid() && $asset->save()) {
if ($asset->save()) {
$file_name = '';
// Upload an image, if attached
$file_name = null;
// Create the image (if one was chosen.)
if ($request->hasFile('image')) {
$path = 'private_uploads/audits';
if (! Storage::exists($path)) {
Storage::makeDirectory($path, 775);
}
$upload = $image = $request->file('image');
$ext = $image->getClientOriginalExtension();
$file_name = 'audit-'.str_random(18).'.'.$ext;
Storage::putFileAs($path, $upload, $file_name);
$file_name = $request->handleFile('private_uploads/audits/', 'audit-'.$asset->id, $request->file('image'));
}
$asset->logAudit($request->input('note'), $request->input('location_id'), $file_name);
return redirect()->route('assets.audit.due')->with('success', trans('admin/hardware/message.audit.success'));
}
return redirect()->back()->withInput()->withErrors($asset->getErrors());
}
public function getRequestedIndex($user_id = null)

View File

@@ -13,7 +13,9 @@ use App\Models\Setting;
use App\View\Label;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Session;
use App\Http\Requests\AssetCheckoutRequest;
@@ -189,7 +191,6 @@ class BulkAssetsController extends Controller
* Save bulk edits
*
* @author [A. Gianotto] [<snipe@snipe.net>]
* @return Redirect
* @internal param array $assets
* @since [v2.0]
*/
@@ -214,7 +215,7 @@ class BulkAssetsController extends Controller
}
$assets = Asset::whereIn('id', array_keys($request->input('ids')))->get();
$assets = Asset::whereIn('id', $request->input('ids'))->get();
@@ -379,28 +380,30 @@ class BulkAssetsController extends Controller
foreach ($asset->model->fieldset->fields as $field) {
if ((array_key_exists($field->db_column, $this->update_array)) && ($field->field_encrypted == '1')) {
$decrypted_old = Helper::gracefulDecrypt($field, $asset->{$field->db_column});
if (Gate::allows('admin')) {
$decrypted_old = Helper::gracefulDecrypt($field, $asset->{$field->db_column});
/*
* Check if the decrypted existing value is different from one we just submitted
* and if not, pull it out of the object since it shouldn't really be updating at all.
* If we don't do this, it will try to re-encrypt it, and the same value encrypted two
* different times will have different values, so it will *look* like it was updated
* but it wasn't.
*/
if ($decrypted_old != $this->update_array[$field->db_column]) {
$asset->{$field->db_column} = \Crypt::encrypt($this->update_array[$field->db_column]);
} else {
/*
* Remove the encrypted custom field from the update_array, since nothing changed
* Check if the decrypted existing value is different from one we just submitted
* and if not, pull it out of the object since it shouldn't really be updating at all.
* If we don't do this, it will try to re-encrypt it, and the same value encrypted two
* different times will have different values, so it will *look* like it was updated
* but it wasn't.
*/
unset($this->update_array[$field->db_column]);
unset($asset->{$field->db_column});
}
if ($decrypted_old != $this->update_array[$field->db_column]) {
$asset->{$field->db_column} = Crypt::encrypt($this->update_array[$field->db_column]);
} else {
/*
* Remove the encrypted custom field from the update_array, since nothing changed
*/
unset($this->update_array[$field->db_column]);
unset($asset->{$field->db_column});
}
/*
* These custom fields aren't encrypted, just carry on as usual
*/
/*
* These custom fields aren't encrypted, just carry on as usual
*/
}
} else {
if ((array_key_exists($field->db_column, $this->update_array)) && ($asset->{$field->db_column} != $this->update_array[$field->db_column])) {

View File

@@ -5,7 +5,7 @@ namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
class ForgotPasswordController extends Controller
{
/*
@@ -79,16 +79,16 @@ class ForgotPasswordController extends Controller
)
);
} catch(\Exception $e) {
\Log::info('Password reset attempt: User '.$request->input('username').'failed with exception: '.$e );
Log::info('Password reset attempt: User '.$request->input('username').'failed with exception: '.$e );
}
// Prevent timing attack to enumerate users.
usleep(500000 + random_int(0, 1500000));
if ($response === \Password::RESET_LINK_SENT) {
\Log::info('Password reset attempt: User '.$request->input('username').' WAS found, password reset sent');
Log::info('Password reset attempt: User '.$request->input('username').' WAS found, password reset sent');
} else {
\Log::info('Password reset attempt: User matching username '.$request->input('username').' NOT FOUND or user is inactive');
Log::info('Password reset attempt: User matching username '.$request->input('username').' NOT FOUND or user is inactive');
}
/**

View File

@@ -16,7 +16,7 @@ use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Validator;
use Log;
use Illuminate\Support\Facades\Log;
use Redirect;
/**
@@ -122,7 +122,7 @@ class LoginController extends Controller
Auth::login($user);
} else {
$username = $saml->getUsername();
\Log::debug("SAML user '$username' could not be found in database.");
Log::debug("SAML user '$username' could not be found in database.");
$request->session()->flash('error', trans('auth/message.signin.error'));
$saml->clearData();
}
@@ -137,7 +137,7 @@ class LoginController extends Controller
$s->save();
} catch (\Exception $e) {
\Log::debug('There was an error authenticating the SAML user: '.$e->getMessage());
Log::debug('There was an error authenticating the SAML user: '.$e->getMessage());
throw $e;
}
@@ -146,7 +146,7 @@ class LoginController extends Controller
// Better logging
if (empty($samlData)) {
\Log::debug("SAML page requested, but samlData seems empty.");
Log::debug("SAML page requested, but samlData seems empty.");
}
}
@@ -261,19 +261,19 @@ class LoginController extends Controller
/**
* Account sign in form processing.
*
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
*/
public function login(Request $request)
{
//If the environment is set to ALWAYS require SAML, return access denied
if (config('app.require_saml')) {
\Log::debug('require SAML is enabled in the .env - return a 403');
Log::debug('require SAML is enabled in the .env - return a 403');
return view('errors.403');
}
if (Setting::getSettings()->login_common_disabled == '1') {
\Log::debug('login_common_disabled is set to 1 - return a 403');
Log::debug('login_common_disabled is set to 1 - return a 403');
return view('errors.403');
}
@@ -339,7 +339,7 @@ class LoginController extends Controller
/**
* Two factor enrollment page
*
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
*/
public function getTwoFactorEnroll()
{
@@ -389,7 +389,7 @@ class LoginController extends Controller
/**
* Two factor code form page
*
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
*/
public function getTwoFactorAuth()
{
@@ -415,7 +415,7 @@ class LoginController extends Controller
*
* @param Request $request
*
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
*/
public function postTwoFactorAuth(Request $request)
{
@@ -427,10 +427,6 @@ class LoginController extends Controller
return redirect()->route('two-factor')->with('error', trans('auth/message.two_factor.code_required'));
}
if (! $request->has('two_factor_secret')) { // TODO this seems almost the same as above?
return redirect()->route('two-factor')->with('error', 'Two-factor code is required.');
}
$user = Auth::user();
$secret = $request->input('two_factor_secret');
@@ -439,7 +435,7 @@ class LoginController extends Controller
$user->saveQuietly();
$request->session()->put('2fa_authed', $user->id);
return redirect()->route('home')->with('success', 'You are logged in!');
return redirect()->route('home')->with('success', trans('auth/message.signin.success'));
}
return redirect()->route('two-factor')->with('error', trans('auth/message.two_factor.invalid_code'));
@@ -451,7 +447,7 @@ class LoginController extends Controller
*
* @param Request $request
*
* @return Redirect
* @return Illuminate\Http\RedirectResponse
*/
public function logout(Request $request)
{
@@ -537,7 +533,7 @@ class LoginController extends Controller
$minutes = round($seconds / 60);
$message = \Lang::get('auth/message.throttle', ['minutes' => $minutes]);
$message = trans('auth/message.throttle', ['minutes' => $minutes]);
return redirect()->back()
->withInput($request->only($this->username(), 'remember'))

View File

@@ -7,7 +7,7 @@ use App\Models\Setting;
use App\Models\User;
use Illuminate\Foundation\Auth\ResetsPasswords;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
class ResetPasswordController extends Controller
{
@@ -66,7 +66,7 @@ class ResetPasswordController extends Controller
$credentials = $request->only('email', 'token');
if (is_null($this->broker()->getUser($credentials))) {
\Log::debug('Password reset form FAILED - this token is not valid.');
Log::debug('Password reset form FAILED - this token is not valid.');
return redirect()->route('password.request')->with('error', trans('passwords.token'));
}
@@ -89,10 +89,10 @@ class ResetPasswordController extends Controller
$request->validate($this->rules(), $request->all(), $this->validationErrorMessages());
\Log::debug('Checking if '.$request->input('username').' exists');
Log::debug('Checking if '.$request->input('username').' exists');
// Check to see if the user even exists - we'll treat the response the same to prevent user sniffing
if ($user = User::where('username', '=', $request->input('username'))->where('activated', '1')->whereNotNull('email')->first()) {
\Log::debug($user->username.' exists');
Log::debug($user->username.' exists');
// handle the password validation rules set by the admin settings
@@ -112,17 +112,17 @@ class ResetPasswordController extends Controller
// Check if the password reset above actually worked
if ($response == \Password::PASSWORD_RESET) {
\Log::debug('Password reset for '.$user->username.' worked');
Log::debug('Password reset for '.$user->username.' worked');
return redirect()->guest('login')->with('success', trans('passwords.reset'));
}
\Log::debug('Password reset for '.$user->username.' FAILED - this user exists but the token is not valid');
Log::debug('Password reset for '.$user->username.' FAILED - this user exists but the token is not valid');
return redirect()->back()->withInput($request->only('email'))->with('success', trans('passwords.reset'));
}
\Log::debug('Password reset for '.$request->input('username').' FAILED - user does not exist or does not have an email address - but make it look like it succeeded');
Log::debug('Password reset for '.$request->input('username').' FAILED - user does not exist or does not have an email address - but make it look like it succeeded');
return redirect()->guest('login')->with('success', trans('passwords.reset'));
}

View File

@@ -5,7 +5,7 @@ namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Services\Saml;
use Illuminate\Http\Request;
use Log;
use Illuminate\Support\Facades\Log;
/**
* This controller provides the endpoint for SAML communication and metadata.
@@ -51,7 +51,7 @@ class SamlController extends Controller
$metadata = $this->saml->getSPMetadata();
if (empty($metadata)) {
\Log::debug('SAML metadata is empty - return a 403');
Log::debug('SAML metadata is empty - return a 403');
return response()->view('errors.403', [], 403);
}
@@ -71,7 +71,7 @@ class SamlController extends Controller
*
* @param Request $request
*
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
*/
public function login(Request $request)
{
@@ -93,7 +93,7 @@ class SamlController extends Controller
*
* @param Request $request
*
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
*/
public function acs(Request $request)
{
@@ -126,7 +126,7 @@ class SamlController extends Controller
*
* @param Request $request
*
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
*/
public function sls(Request $request)
{

View File

@@ -105,7 +105,7 @@ class BulkAssetModelsController extends Controller
*
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v1.0]
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(Request $request)
{

View File

@@ -5,7 +5,7 @@ namespace App\Http\Controllers;
use App\Helpers\Helper;
use App\Http\Requests\ImageUploadRequest;
use App\Models\Category as Category;
use Auth;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
use Str;

View File

@@ -6,6 +6,7 @@ use App\Http\Requests\ImageUploadRequest;
use App\Models\Company;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Log;
/**
* This controller handles all actions related to Companies for
@@ -154,7 +155,7 @@ final class CompaniesController extends Controller
try {
Storage::disk('public')->delete('companies'.'/'.$company->image);
} catch (\Exception $e) {
\Log::debug($e);
Log::debug($e);
}
}

View File

@@ -11,6 +11,7 @@ use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Log;
/**
* This class controls all actions related to Components for
@@ -188,7 +189,7 @@ class ComponentsController extends Controller
try {
Storage::disk('public')->delete('components/'.$component->image);
} catch (\Exception $e) {
\Log::debug($e);
Log::debug($e);
}
}

View File

@@ -10,6 +10,7 @@ use App\Models\Component;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Storage;
use Symfony\Component\HttpFoundation\JsonResponse;
use Illuminate\Support\Facades\Log;
class ComponentsFilesController extends Controller
{
@@ -84,7 +85,7 @@ class ComponentsFilesController extends Controller
try {
Storage::delete('components/'.$log->filename);
} catch (\Exception $e) {
\Log::debug($e);
Log::debug($e);
}
}
@@ -110,7 +111,7 @@ class ComponentsFilesController extends Controller
*/
public function show($componentId = null, $fileId = null)
{
\Log::debug('Private filesystem is: '.config('filesystems.default'));
Log::debug('Private filesystem is: '.config('filesystems.default'));
$component = Component::find($componentId);
// the component is valid
@@ -126,8 +127,8 @@ class ComponentsFilesController extends Controller
$file = 'private_uploads/components/'.$log->filename;
if (Storage::missing($file)) {
\Log::debug('FILE DOES NOT EXISTS for '.$file);
\Log::debug('URL should be '.Storage::url($file));
Log::debug('FILE DOES NOT EXISTS for '.$file);
Log::debug('URL should be '.Storage::url($file));
return response('File '.$file.' ('.Storage::url($file).') not found on server', 404)
->header('Content-Type', 'text/plain');

View File

@@ -71,8 +71,14 @@ class ConsumableCheckoutController extends Controller
$this->authorize('checkout', $consumable);
// If the quantity is not present in the request or is not a positive integer, set it to 1
$quantity = $request->input('qty');
if (!isset($quantity) || !ctype_digit((string)$quantity) || $quantity <= 0) {
$quantity = 1;
}
// Make sure there is at least one available to checkout
if ($consumable->numRemaining() <= 0) {
if ($consumable->numRemaining() <= 0 || $quantity > $consumable->numRemaining()) {
return redirect()->route('consumables.index')->with('error', trans('admin/consumables/message.checkout.unavailable'));
}
@@ -88,13 +94,14 @@ class ConsumableCheckoutController extends Controller
// Update the consumable data
$consumable->assigned_to = e($request->input('assigned_to'));
for($i = 0; $i < $quantity; $i++){
$consumable->users()->attach($consumable->id, [
'consumable_id' => $consumable->id,
'user_id' => $admin_user->id,
'assigned_to' => e($request->input('assigned_to')),
'note' => $request->input('note'),
]);
}
event(new CheckoutableCheckedOut($consumable, $user, Auth::user(), $request->input('note')));
// Redirect to the new consumable page

View File

@@ -10,7 +10,7 @@ use App\Models\Consumable;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Storage;
use Symfony\Consumable\HttpFoundation\JsonResponse;
use Illuminate\Support\Facades\Log;
class ConsumablesFilesController extends Controller
{
/**
@@ -83,7 +83,7 @@ class ConsumablesFilesController extends Controller
try {
Storage::delete('consumables/'.$log->filename);
} catch (\Exception $e) {
\Log::debug($e);
Log::debug($e);
}
}
@@ -124,8 +124,8 @@ class ConsumablesFilesController extends Controller
$file = 'private_uploads/consumables/'.$log->filename;
if (Storage::missing($file)) {
\Log::debug('FILE DOES NOT EXISTS for '.$file);
\Log::debug('URL should be '.Storage::url($file));
Log::debug('FILE DOES NOT EXISTS for '.$file);
Log::debug('URL should be '.Storage::url($file));
return response('File '.$file.' ('.Storage::url($file).') not found on server', 404)
->header('Content-Type', 'text/plain');

View File

@@ -22,7 +22,7 @@
namespace App\Http\Controllers;
use Auth;
use Illuminate\Support\Facades\Auth;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;

View File

@@ -8,7 +8,6 @@ use App\Models\CustomField;
use App\Models\CustomFieldset;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;
use Redirect;
/**
* This controller handles all actions related to Custom Asset Fields for
@@ -260,7 +259,7 @@ class CustomFieldsController extends Controller
$field->name = trim(e($request->get("name")));
$field->element = e($request->get("element"));
$field->field_values = e($request->get("field_values"));
$field->field_values = $request->get("field_values");
$field->user_id = Auth::id();
$field->help_text = $request->get("help_text");
$field->show_in_email = $show_in_email;

View File

@@ -86,7 +86,7 @@ class CustomFieldsetsController extends Controller
* @author [Brady Wetherington] [<uberbrady@gmail.com>]
* @since [v1.8]
* @param Request $request
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function store(Request $request)
@@ -126,7 +126,7 @@ class CustomFieldsetsController extends Controller
* @author [A. Gianotto] [<snipe@snipe.net>]
* @param int $id
* @since [v6.0.14]
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function edit($id)
@@ -147,7 +147,7 @@ class CustomFieldsetsController extends Controller
* @author [A. Gianotto] [<snipe@snipe.net>]
* @param int $id
* @since [v6.0.14]
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function update(Request $request, $id)

View File

@@ -7,6 +7,7 @@ use App\Models\Department;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Log;
class DepartmentsController extends Controller
{
@@ -129,7 +130,7 @@ class DepartmentsController extends Controller
try {
Storage::disk('public')->delete('departments'.'/'.$department->image);
} catch (\Exception $e) {
\Log::debug($e);
Log::debug($e);
}
}
$department->delete();

View File

@@ -8,7 +8,7 @@ use Illuminate\Support\Facades\Auth;
use Laravel\Socialite\Facades\Socialite;
use Laravel\Socialite\Two\InvalidStateException;
use App\Models\Setting;
use Illuminate\Support\Facades\Log;
class GoogleAuthController extends Controller
{
@@ -34,9 +34,9 @@ class GoogleAuthController extends Controller
{
try {
$socialUser = Socialite::driver('google')->user();
\Log::debug('Google user found in Google Workspace');
Log::debug('Google user found in Google Workspace');
} catch (InvalidStateException $exception) {
\Log::debug('Google user NOT found in Google Workspace');
Log::debug('Google user NOT found in Google Workspace');
return redirect()->route('login')
->withErrors(
[
@@ -52,7 +52,7 @@ class GoogleAuthController extends Controller
if ($user) {
\Log::debug('Google user '.$socialUser->getEmail().' found in Snipe-IT');
Log::debug('Google user '.$socialUser->getEmail().' found in Snipe-IT');
$user->update([
'avatar' => $socialUser->avatar,
]);
@@ -61,7 +61,7 @@ class GoogleAuthController extends Controller
return redirect()->route('home');
}
\Log::debug('Google user '.$socialUser->getEmail().' NOT found in Snipe-IT');
Log::debug('Google user '.$socialUser->getEmail().' NOT found in Snipe-IT');
return redirect()->route('login')
->withErrors(
[

View File

@@ -5,7 +5,7 @@ namespace App\Http\Controllers;
use App\Helpers\Helper;
use App\Models\Group;
use Illuminate\Http\Request;
use Auth;
use Illuminate\Support\Facades\Auth;
/**
* This controller handles all actions related to User Groups for

View File

@@ -48,7 +48,7 @@ class CheckoutKitController extends Controller
* Validate and process the new Predefined Kit data.
*
* @author [D. Minaev.] [<dmitriy.minaev.v@gmail.com>]
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
*/
public function store(Request $request, $kit_id)
{

View File

@@ -47,7 +47,7 @@ class PredefinedKitsController extends Controller
* Validate and process the new Predefined Kit data.
*
* @author [D. Minaev] [<dmitriy.minaev.v@gmail.com>]
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
*/
public function store(ImageUploadRequest $request)
{
@@ -95,7 +95,7 @@ class PredefinedKitsController extends Controller
* @author [D. Minaev] [<dmitriy.minaev.v@gmail.com>]
* @since [v1.0]
* @param int $kit_id
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
*/
public function update(ImageUploadRequest $request, $kit_id = null)
{
@@ -122,7 +122,7 @@ class PredefinedKitsController extends Controller
* @author [D. Minaev] [<dmitriy.minaev.v@gmail.com>]
* @since [v1.0]
* @param int $kit_id
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy($kit_id)
{

View File

@@ -14,6 +14,7 @@ use App\Models\Setting;
use App\Models\Supplier;
use App\Models\User;
use App\View\Label as LabelView;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
class LabelsController extends Controller
@@ -21,9 +22,9 @@ class LabelsController extends Controller
/**
* Returns the Label view with test data
*
* @author Grant Le Roux <grant.leroux+snipe-it@gmail.com>
* @param string $labelName
* @param string $labelName
* @return \Illuminate\Contracts\View\View
* @author Grant Le Roux <grant.leroux+snipe-it@gmail.com>
*/
public function show(string $labelName)
{
@@ -66,16 +67,18 @@ class LabelsController extends Controller
$exampleAsset->model->category->id = 999999;
$exampleAsset->model->category->name = trans('admin/labels/table.example_category');
$customFieldColumns = CustomField::all()->pluck('db_column');
$customFieldColumns = CustomField::where('field_encrypted', '=', 0)->pluck('db_column');
collect(explode(';', Setting::getSettings()->label2_fields))
->filter()
->each(function ($item) use ($customFieldColumns, $exampleAsset) {
$pair = explode('=', $item);
if ($customFieldColumns->contains($pair[1])) {
$exampleAsset->{$pair[1]} = "{{$pair[0]}}";
}
$pair = explode('=', $item);
if (array_key_exists(1, $pair)) {
if ($customFieldColumns->contains($pair[1])) {
$exampleAsset->{$pair[1]} = "{{$pair[0]}}";
}
}
});
$settings = Setting::getSettings();

View File

@@ -13,6 +13,7 @@ use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Log;
class LicenseCheckinController extends Controller
{
@@ -145,7 +146,7 @@ class LicenseCheckinController extends Controller
$user_seat->assigned_to = null;
if ($user_seat->save()) {
\Log::debug('Checking in '.$license->name.' from user '.$user_seat->username);
Log::debug('Checking in '.$license->name.' from user '.$user_seat->username);
$user_seat->logCheckin($user_seat->user, trans('admin/licenses/general.bulk.checkin_all.log_msg'));
}
}
@@ -160,7 +161,7 @@ class LicenseCheckinController extends Controller
$asset_seat->asset_id = null;
if ($asset_seat->save()) {
\Log::debug('Checking in '.$license->name.' from asset '.$asset_seat->asset_tag);
Log::debug('Checking in '.$license->name.' from asset '.$asset_seat->asset_tag);
$asset_seat->logCheckin($asset_seat->asset, trans('admin/licenses/general.bulk.checkin_all.log_msg'));
$count++;
}

View File

@@ -11,6 +11,7 @@ use App\Models\License;
use App\Models\LicenseSeat;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
class LicenseCheckoutController extends Controller
{
@@ -155,16 +156,16 @@ class LicenseCheckoutController extends Controller
public function bulkCheckout($licenseId) {
\Log::debug('Checking out '.$licenseId.' via bulk');
Log::debug('Checking out '.$licenseId.' via bulk');
$license = License::findOrFail($licenseId);
$this->authorize('checkin', $license);
$avail_count = $license->getAvailSeatsCountAttribute();
$users = User::whereNull('deleted_at')->where('autoassign_licenses', '=', 1)->with('licenses')->get();
\Log::debug($avail_count.' will be assigned');
Log::debug($avail_count.' will be assigned');
if ($users->count() > $avail_count) {
\Log::debug('You do not have enough free seats to complete this task, so we will check out as many as we can. ');
Log::debug('You do not have enough free seats to complete this task, so we will check out as many as we can. ');
}
// If the license is valid, check that there is an available seat
@@ -179,7 +180,7 @@ class LicenseCheckoutController extends Controller
// Check to make sure this user doesn't already have this license checked out to them
if ($user->licenses->where('id', '=', $licenseId)->count()) {
\Log::debug($user->username.' already has this license checked out to them. Skipping... ');
Log::debug($user->username.' already has this license checked out to them. Skipping... ');
continue;
}
@@ -192,7 +193,7 @@ class LicenseCheckoutController extends Controller
$avail_count--;
$assigned_count++;
$licenseSeat->logCheckout(trans('admin/licenses/general.bulk.checkout_all.log_msg'), $user);
\Log::debug('License '.$license->name.' seat '.$licenseSeat->id.' checked out to '.$user->username);
Log::debug('License '.$license->name.' seat '.$licenseSeat->id.' checked out to '.$user->username);
}
if ($avail_count == 0) {

View File

@@ -7,9 +7,8 @@ use App\Http\Controllers\Controller;
use App\Http\Requests\UploadFileRequest;
use App\Models\Actionlog;
use App\Models\License;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Storage;
use Symfony\Component\HttpFoundation\JsonResponse;
use Illuminate\Support\Facades\Log;
class LicenseFilesController extends Controller
{
@@ -20,7 +19,7 @@ class LicenseFilesController extends Controller
* @param int $licenseId
* @return \Illuminate\Http\RedirectResponse
* @throws \Illuminate\Auth\Access\AuthorizationException
*@author [A. Gianotto] [<snipe@snipe.net>]
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v1.0]
* @todo Switch to using the AssetFileRequest form request validator.
*/
@@ -78,7 +77,7 @@ class LicenseFilesController extends Controller
try {
Storage::delete('licenses/'.$log->filename);
} catch (\Exception $e) {
\Log::debug($e);
Log::debug($e);
}
}
@@ -121,8 +120,8 @@ class LicenseFilesController extends Controller
$file = 'private_uploads/licenses/'.$log->filename;
if (Storage::missing($file)) {
\Log::debug('NOT EXISTS for '.$file);
\Log::debug('NOT EXISTS URL should be '.Storage::url($file));
Log::debug('NOT EXISTS for '.$file);
Log::debug('NOT EXISTS URL should be '.Storage::url($file));
return response('File '.$file.' ('.Storage::url($file).') not found on server', 404)
->header('Content-Type', 'text/plain');

View File

@@ -11,6 +11,7 @@ use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Symfony\Component\HttpFoundation\StreamedResponse;
/**
* This controller handles all actions related to Licenses for
@@ -289,4 +290,106 @@ class LicensesController extends Controller
->with('item', $license)
->with('maintained_list', $maintained_list);
}
/**
* Exports Licenses to CSV
*
* @author [G. Martinez]
* @since [v6.3]
* @return StreamedResponse
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function getExportLicensesCsv()
{
$this->authorize('view', License::class);
\Debugbar::disable();
$response = new StreamedResponse(function () {
// Open output stream
$handle = fopen('php://output', 'w');
$licenses= License::with('company',
'manufacturer',
'category',
'supplier',
'adminuser',
'assignedusers')
->orderBy('created_at', 'DESC');
Company::scopeCompanyables($licenses)
->chunk(500, function ($licenses) use ($handle) {
$headers = [
// strtolower to prevent Excel from trying to open it as a SYLK file
strtolower(trans('general.id')),
trans('general.company'),
trans('general.name'),
trans('general.serial_number'),
trans('general.purchase_date'),
trans('general.purchase_cost'),
trans('general.order_number'),
trans('general.licenses_available'),
trans('admin/licenses/table.seats'),
trans('general.created_by'),
trans('general.depreciation'),
trans('general.updated_at'),
trans('admin/licenses/table.deleted_at'),
trans('general.email'),
trans('admin/hardware/form.fully_depreciated'),
trans('general.supplier'),
trans('admin/licenses/form.expiration'),
trans('admin/licenses/form.purchase_order'),
trans('admin/licenses/form.termination_date'),
trans('admin/licenses/form.maintained'),
trans('general.manufacturer'),
trans('general.category'),
trans('general.min_amt'),
trans('admin/licenses/form.reassignable'),
trans('general.notes'),
trans('general.created_at'),
];
fputcsv($handle, $headers);
foreach ($licenses as $license) {
// Add a new row with data
$values = [
$license->id,
$license->company ? $license->company->name: '',
$license->name,
$license->serial,
$license->purchase_date,
$license->purchase_cost,
$license->order_number,
$license->free_seat_count,
$license->seats,
($license->adminuser ? $license->adminuser->present()->fullName() : trans('admin/reports/general.deleted_user')),
$license->depreciation ? $license->depreciation->name: '',
$license->updated_at,
$license->deleted_at,
$license->email,
( $license->depreciate == '1') ? trans('general.yes') : trans('general.no'),
($license->supplier) ? $license->supplier->name: '',
$license->expiration_date,
$license->purchase_order,
$license->termination_date,
( $license->maintained == '1') ? trans('general.yes') : trans('general.no'),
$license->manufacturer ? $license->manufacturer->name: '',
$license->category ? $license->category->name: '',
$license->min_amt,
( $license->reassignable == '1') ? trans('general.yes') : trans('general.no'),
$license->notes,
$license->created_at,
];
fputcsv($handle, $values);
}
});
// Close the output stream
fclose($handle);
}, 200, [
'Content-Type' => 'text/csv; charset=UTF-8',
'Content-Disposition' => 'attachment; filename="licenses-'.date('Y-m-d-his').'.csv"',
]);
return $response;
}
}

View File

@@ -9,6 +9,7 @@ use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
/**
* This controller handles all actions related to Locations for
@@ -186,7 +187,7 @@ class LocationsController extends Controller
try {
Storage::disk('public')->delete('locations/'.$location->image);
} catch (\Exception $e) {
\Log::error($e);
Log::error($e);
}
}
$location->delete();
@@ -320,7 +321,12 @@ class LocationsController extends Controller
$locations_raw_array = $request->input('ids');
if ((is_array($locations_raw_array)) && (count($locations_raw_array) > 0)) {
$locations = Location::whereIn('id', $locations_raw_array)->get();
$locations = Location::whereIn('id', $locations_raw_array)
->withCount('assignedAssets as assigned_assets_count')
->withCount('assets as assets_count')
->withCount('rtd_assets as rtd_assets_count')
->withCount('children as children_count')
->withCount('users as users_count')->get();
$success_count = 0;
$error_count = 0;
@@ -336,8 +342,8 @@ class LocationsController extends Controller
}
}
\Log::debug('Success count: '.$success_count);
\Log::debug('Error count: '.$error_count);
Log::debug('Success count: '.$success_count);
Log::debug('Error count: '.$error_count);
// Complete success
if ($success_count == count($locations_raw_array)) {
return redirect()
@@ -351,7 +357,7 @@ class LocationsController extends Controller
if ($error_count > 0) {
return redirect()
->route('locations.index')
->with('warning', trans('general.bulk.partial_success',
->with('warning', trans('general.bulk.delete.partial',
['success' => $success_count, 'error' => $error_count, 'object_type' => trans('general.locations')]
));
}

View File

@@ -12,6 +12,7 @@ use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
use Redirect;
use Illuminate\Support\Facades\Log;
/**
* This controller handles all actions related to Manufacturers for
@@ -174,7 +175,7 @@ class ManufacturersController extends Controller
try {
Storage::disk('public')->delete('manufacturers/'.$manufacturer->image);
} catch (\Exception $e) {
\Log::info($e);
Log::info($e);
}
}
@@ -219,7 +220,7 @@ class ManufacturersController extends Controller
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v4.1.15]
* @param int $manufacturers_id
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function restore($id)

View File

@@ -3,7 +3,6 @@
namespace App\Http\Controllers;
use App\Http\Requests\ImageUploadRequest;
use App\Models\Asset;
use App\Models\Setting;
use App\Models\User;
use App\Notifications\CurrentInventory;
@@ -11,10 +10,6 @@ use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Gate;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Storage;
use Image;
use Redirect;
use View;
/**
* This controller handles all actions related to User Profiles for
@@ -33,8 +28,8 @@ class ProfileController extends Controller
*/
public function getIndex()
{
$this->authorize('self.profile');
$user = Auth::user();
return view('account/profile', compact('user'));
}
@@ -47,6 +42,7 @@ class ProfileController extends Controller
*/
public function postIndex(ImageUploadRequest $request)
{
$this->authorize('self.profile');
$user = Auth::user();
$user->first_name = $request->input('first_name');
$user->last_name = $request->input('last_name');
@@ -72,7 +68,7 @@ class ProfileController extends Controller
if ($user->save()) {
return redirect()->route('profile')->with('success', 'Account successfully updated');
return redirect()->route('profile')->with('success', trans('account/general.profile_updated'));
}
return redirect()->back()->withInput()->withErrors($user->getErrors());
@@ -87,11 +83,9 @@ class ProfileController extends Controller
*
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v4.0]
* @return View
*/
public function api()
public function api(): \Illuminate\Contracts\View\View
{
// Make sure the self.api permission has been granted
if (!Gate::allows('self.api')) {
abort(403);
@@ -115,7 +109,7 @@ class ProfileController extends Controller
/**
* Users change password form processing page.
*
* @return Redirect
* @return \Illuminate\Http\RedirectResponse
*/
public function passwordSave(Request $request)
{

Some files were not shown because too many files have changed in this diff Show More