3
0
mirror of https://github.com/snipe/snipe-it.git synced 2026-02-04 16:45:34 +00:00

Merge branch 'develop' into feature/8709-bulk-deletion-of-asset-categories-suppliers-manufacturers

This commit is contained in:
Spencer Long
2025-08-12 11:58:11 -06:00
committed by GitHub
2300 changed files with 53799 additions and 317771 deletions

View File

@ -40,6 +40,13 @@ Route::group(['prefix' => 'v1', 'middleware' => ['api', 'api-throttle:api']], fu
]
)->name('api.assets.requested');
Route::get('eulas',
[
Api\ProfileController::class,
'eulas'
]
)->name('api.self.eulas');
Route::post('request/{asset}', [Api\CheckoutRequest::class, 'store'])->name('api.assets.requests.store');
Route::post('request/{asset}/cancel', [Api\CheckoutRequest::class, 'destroy'])->name('api.assets.requests.destroy');
@ -549,35 +556,6 @@ Route::group(['prefix' => 'v1', 'middleware' => ['api', 'api-throttle:api']], fu
]
)->name('api.assets.restore');
Route::post('{asset}/files',
[
Api\AssetFilesController::class,
'store'
]
)->name('api.assets.files.store');
Route::get('{asset}/files',
[
Api\AssetFilesController::class,
'list'
]
)->name('api.assets.files.index');
Route::get('{asset_id}/file/{file_id}',
[
Api\AssetFilesController::class,
'show'
]
)->name('api.assets.files.show');
Route::delete('{asset_id}/file/{file_id}',
[
Api\AssetFilesController::class,
'destroy'
]
)->name('api.assets.files.destroy');
/** Begin assigned routes */
Route::get('{asset}/assigned/assets',
@ -625,7 +603,7 @@ Route::group(['prefix' => 'v1', 'middleware' => ['api', 'api-throttle:api']], fu
* Asset maintenances API routes
*/
Route::resource('maintenances',
Api\AssetMaintenancesController::class,
Api\MaintenancesController::class,
['names' => [
'index' => 'api.maintenances.index',
'show' => 'api.maintenances.show',
@ -846,33 +824,6 @@ Route::group(['prefix' => 'v1', 'middleware' => ['api', 'api-throttle:api']], fu
]
)->name('api.models.restore');
Route::post('{model_id}/files',
[
Api\AssetModelFilesController::class,
'store'
]
)->name('api.models.files.store');
Route::get('{model_id}/files',
[
Api\AssetModelFilesController::class,
'list'
]
)->name('api.models.files.index');
Route::get('{model_id}/file/{file_id}',
[
Api\AssetModelFilesController::class,
'show'
]
)->name('api.models.files.show');
Route::delete('{model_id}/file/{file_id}',
[
Api\AssetModelFilesController::class,
'destroy'
]
)->name('api.models.files.destroy');
});
Route::resource('models',
@ -1080,6 +1031,13 @@ Route::group(['prefix' => 'v1', 'middleware' => ['api', 'api-throttle:api']], fu
]
)->name('api.users.selectlist');
Route::post('ldapsync',
[
Api\UsersController::class,
'syncLdapUsers'
]
)->name('api.users.ldapsync');
Route::post('two_factor_reset',
[
Api\UsersController::class,
@ -1094,6 +1052,14 @@ Route::group(['prefix' => 'v1', 'middleware' => ['api', 'api-throttle:api']], fu
]
)->name('api.users.me');
Route::get('{user}/eulas',
[
Api\UsersController::class,
'eulas'
]
)->name('api.user.eulas');
Route::get('list/{status?}',
[
Api\UsersController::class,
@ -1129,12 +1095,6 @@ Route::group(['prefix' => 'v1', 'middleware' => ['api', 'api-throttle:api']], fu
]
)->name('api.users.licenselist');
Route::post('{user}/upload',
[
Api\UsersController::class,
'postUpload'
]
)->name('api.users.uploads');
Route::post('{user}/restore',
[
@ -1350,5 +1310,44 @@ Route::group(['prefix' => 'v1', 'middleware' => ['api', 'api-throttle:api']], fu
])->name('api.assets.labels');
// end generate label routes
/**
* Uploaded files API routes
*/
// List files
Route::get('{object_type}/{id}/files',
[
Api\UploadedFilesController::class,
'index'
]
)->name('api.files.index')
->where(['object_type' => 'accessories|assets|components|consumables|hardware|licenses|locations|maintenances|models|users']);
// Get a file
Route::get('{object_type}/{id}/files/{file_id}',
[
Api\UploadedFilesController::class,
'show'
]
)->name('api.files.show')
->where(['object_type' => 'accessories|assets|components|consumables|hardware|licenses|locations|maintenances|models|users']);
// Upload files(s)
Route::post('{object_type}/{id}/files',
[
Api\UploadedFilesController::class,
'store'
]
)->name('api.files.store')
->where(['object_type' => 'accessories|assets|components|consumables|hardware|licenses|locations|maintenances|models|users']);
// Delete files(s)
Route::delete('{object_type}/{id}/files/{file_id}/delete',
[
Api\UploadedFilesController::class,
'destroy'
]
)->name('api.files.destroy')
->where(['object_type' => 'accessories|assets|components|consumables|hardware|licenses|locations|maintenances|models|users']);
}); // end API routes

View File

@ -16,7 +16,7 @@ use App\Http\Controllers\DepreciationsController;
use App\Http\Controllers\GroupsController;
use App\Http\Controllers\HealthController;
use App\Http\Controllers\LabelsController;
use App\Http\Controllers\LocationsController;
use App\Http\Controllers\UploadedFilesController;
use App\Http\Controllers\ManufacturersController;
use App\Http\Controllers\ModalController;
use App\Http\Controllers\NotesController;
@ -57,7 +57,12 @@ Route::group(['middleware' => 'auth'], function () {
[LabelsController::class, 'show']
)->where('labelName', '.*')->name('labels.show');
Route::get('/test-email', function () {
$mailable = new \App\Mail\CheckoutComponentMail(
);
return $mailable->render(); // dumps HTML
});
/*
* Manufacturers
*/
@ -385,7 +390,6 @@ Route::group(['prefix' => 'account', 'middleware' => ['auth']], function () {
$trail->parent('home')
->push(trans('general.requested_assets_menu'), route('account.requested')));
// Profile
Route::get(
'requestable-assets', [ViewAssetsController::class, 'getRequestableIndex'])
->name('requestable-assets')
@ -403,6 +407,16 @@ Route::group(['prefix' => 'account', 'middleware' => ['auth']], function () {
Route::post('request/{itemType}/{itemId}/{cancel_by_admin?}/{requestingUser?}', [ViewAssetsController::class, 'getRequestItem'])
->name('account/request-item');
Route::get(
'display-sig/{filename}',
[ProfileController::class, 'displaySig']
)->name('profile.signature.view');
Route::get(
'stored-eula-file/{filename}',
[ProfileController::class, 'getStoredEula']
)->name('profile.storedeula.download');
// Account Dashboard
Route::get('/', [ViewAssetsController::class, 'getIndex'])
->name('account');
@ -469,18 +483,18 @@ Route::group(['prefix' => 'reports', 'middleware' => ['auth']], function () {
->push(trans('general.depreciation_report'), route('reports.audit')));
Route::get(
'asset_maintenances', [ReportsController::class, 'getAssetMaintenancesReport'])
->name('reports/asset_maintenances')
'maintenances', [ReportsController::class, 'getMaintenancesReport'])
->name('ui.reports.maintenances')
->breadcrumbs(fn (Trail $trail) =>
$trail->parent('home')
->push(trans('general.asset_maintenance_report'), route('reports/asset_maintenances')));
->push(trans('general.asset_maintenance_report'), route('ui.reports.maintenances')));
// Is this still used?
Route::get('export/asset_maintenances', [ReportsController::class, 'exportAssetMaintenancesReport'])
->name('reports/export/asset_maintenances')
Route::get('export/maintenances', [ReportsController::class, 'exportMaintenancesReport'])
->name('reports/export/maintenances')
->breadcrumbs(fn (Trail $trail) =>
$trail->parent('home')
->push(trans('general.asset_maintenance_report'), route('reports/export/asset_maintenances')));
->push(trans('general.asset_maintenance_report'), route('reports/export/maintenances')));
Route::get('licenses', [ReportsController::class, 'getLicenseReport'])
->name('reports/licenses')
@ -688,6 +702,39 @@ Route::group(['middleware' => 'web'], function () {
'logout',
[LoginController::class, 'logout']
)->name('logout.post');
/**
* Uploaded files API routes
*/
// Get a file
Route::get('{object_type}/{id}/files/{file_id}',
[
UploadedFilesController::class,
'show'
]
)->name('ui.files.show')
->where(['object_type' => 'assets|maintenances|hardware|models|users|locations|accessories|consumables|licenses|components']);
// Upload files(s)
Route::post('{object_type}/{id}/files',
[
UploadedFilesController::class,
'store'
]
)->name('ui.files.store')
->where(['object_type' => 'assets|maintenances|hardware|models|users|locations|accessories|consumables|licenses|components']);
// Delete files(s)
Route::delete('{object_type}/{id}/files/{file_id}/delete',
[
UploadedFilesController::class,
'destroy'
]
)->name('ui.files.destroy')
->where(['object_type' => 'assets|hardware|models|users|locations|accessories|consumables|licenses|components']);
});

View File

@ -27,21 +27,6 @@ Route::group(['prefix' => 'accessories', 'middleware' => ['auth']], function ()
[Accessories\AccessoryCheckinController::class, 'store']
)->name('accessories.checkin.store');
Route::post(
'{accessoryId}/upload',
[Accessories\AccessoriesFilesController::class, 'store']
)->name('upload/accessory');
Route::delete(
'{accessoryId}/deletefile/{fileId}',
[Accessories\AccessoriesFilesController::class, 'destroy']
)->name('delete/accessoryfile');
Route::get(
'{accessoryId}/showfile/{fileId}/{download?}',
[Accessories\AccessoriesFilesController::class, 'show']
)->name('show.accessoryfile');
Route::get('{accessory}/clone',
[Accessories\AccessoriesController::class, 'getClone']
)->name('clone/accessories');

View File

@ -25,20 +25,6 @@ Route::group(['prefix' => 'components', 'middleware' => ['auth']], function () {
[Components\ComponentCheckinController::class, 'store']
)->name('components.checkin.store');
Route::post(
'{componentId}/upload',
[Components\ComponentsFilesController::class, 'store']
)->name('upload/component');
Route::delete(
'{componentId}/deletefile/{fileId}',
[Components\ComponentsFilesController::class, 'destroy']
)->name('delete/componentfile');
Route::get(
'{componentId}/showfile/{fileId}/{download?}',
[Components\ComponentsFilesController::class, 'show']
)->name('show.componentfile');
});

View File

@ -16,20 +16,6 @@ Route::group(['prefix' => 'consumables', 'middleware' => ['auth']], function ()
[Consumables\ConsumableCheckoutController::class, 'store']
)->name('consumables.checkout.store');
Route::post(
'{consumableId}/upload',
[Consumables\ConsumablesFilesController::class, 'store']
)->name('upload/consumable');
Route::delete(
'{consumableId}/deletefile/{fileId}',
[Consumables\ConsumablesFilesController::class, 'destroy']
)->name('delete/consumablefile');
Route::get(
'{consumableId}/showfile/{fileId}/{download?}',
[Consumables\ConsumablesFilesController::class, 'show']
)->name('show.consumablefile');
Route::get('{consumable}/clone',
[Consumables\ConsumablesController::class, 'clone']

View File

@ -1,11 +1,10 @@
<?php
use App\Http\Controllers\AssetMaintenancesController;
use App\Http\Controllers\MaintenancesController;
use App\Http\Controllers\Assets\AssetsController;
use App\Http\Controllers\Assets\BulkAssetsController;
use App\Http\Controllers\Assets\AssetCheckoutController;
use App\Http\Controllers\Assets\AssetCheckinController;
use App\Http\Controllers\Assets\AssetFilesController;
use App\Models\Setting;
use Tabuna\Breadcrumbs\Trail;
use Illuminate\Support\Facades\Route;
@ -141,18 +140,6 @@ Route::group(
[AssetsController::class, 'getRestore']
)->name('restore/hardware')->withTrashed();
Route::post('{asset}/upload',
[AssetFilesController::class, 'store']
)->name('upload/asset')->withTrashed();
Route::get('{asset}/showfile/{fileId}/{download?}',
[AssetFilesController::class, 'show']
)->name('show/assetfile')->withTrashed();
Route::delete('{asset}/showfile/{fileId}/delete',
[AssetFilesController::class, 'destroy']
)->name('delete/assetfile')->withTrashed();
Route::post(
'bulkedit',
[BulkAssetsController::class, 'edit']
@ -195,7 +182,7 @@ Route::resource('hardware',
// Asset Maintenances
Route::resource('maintenances',
AssetMaintenancesController::class, [
MaintenancesController::class, [
'parameters' => ['maintenance' => 'maintenance', 'asset' => 'asset_id'],
]);

View File

@ -47,19 +47,6 @@ Route::group(['prefix' => 'licenses', 'middleware' => ['auth']], function () {
[Licenses\LicenseCheckoutController::class, 'bulkCheckout']
)->name('licenses.bulkcheckout');
Route::post(
'{licenseId}/upload',
[Licenses\LicenseFilesController::class, 'store']
)->name('upload/license');
Route::delete(
'{licenseId}/deletefile/{fileId}',
[Licenses\LicenseFilesController::class, 'destroy']
)->name('delete/licensefile');
Route::get(
'{licenseId}/showfile/{fileId}/{download?}',
[Licenses\LicenseFilesController::class, 'show']
)->name('show.licensefile');
Route::get(
'export',
[

View File

@ -1,24 +1,10 @@
<?php
use App\Http\Controllers\LocationsController;
use App\Http\Controllers\LocationsFilesController;
use Illuminate\Support\Facades\Route;
Route::group(['prefix' => 'locations', 'middleware' => ['auth']], function () {
Route::post('{location}/upload',
[LocationsFilesController::class, 'store']
)->name('upload/locations')->withTrashed();
Route::get('{location}/showfile/{fileId}/{download?}',
[LocationsFilesController::class, 'show']
)->name('show/locationsfile')->withTrashed();
Route::delete('{location}/showfile/{fileId}/delete',
[LocationsFilesController::class, 'destroy']
)->name('delete/locationsfile')->withTrashed();
Route::post(
'bulkdelete',
[LocationsController::class, 'postBulkDelete']
@ -34,7 +20,6 @@ Route::group(['prefix' => 'locations', 'middleware' => ['auth']], function () {
[LocationsController::class, 'postRestore']
)->name('locations.restore');
Route::get('{locationId}/clone',
[LocationsController::class, 'getClone']
)->name('clone/location');

View File

@ -1,7 +1,6 @@
<?php
use App\Http\Controllers\AssetModelsController;
use App\Http\Controllers\AssetModelsFilesController;
use App\Http\Controllers\BulkAssetModelsController;
use Illuminate\Support\Facades\Route;
use Tabuna\Breadcrumbs\Trail;
@ -11,18 +10,6 @@ use Tabuna\Breadcrumbs\Trail;
Route::group(['prefix' => 'models', 'middleware' => ['auth']], function () {
Route::post('{model}/upload',
[AssetModelsFilesController::class, 'store']
)->name('upload/models')->withTrashed();
Route::get('{model}/showfile/{fileId}/{download?}',
[AssetModelsFilesController::class, 'show']
)->name('show/modelfile')->withTrashed();
Route::delete('{model}/showfile/{fileId}/delete',
[AssetModelsFilesController::class, 'destroy']
)->name('delete/modelfile')->withTrashed();
Route::get(
'{model}/clone',
[

View File

@ -1,7 +1,6 @@
<?php
use App\Http\Controllers\Users;
use App\Http\Controllers\Users\UserFilesController;
use Illuminate\Support\Facades\Route;
// User Management
@ -64,30 +63,6 @@ Route::group(['prefix' => 'users', 'middleware' => ['auth']], function () {
]
)->name('unsuspend/user');
Route::post(
'{user}/upload',
[
Users\UserFilesController::class,
'store'
]
)->name('upload/user')->withTrashed();
Route::delete(
'{userId}/deletefile/{fileId}',
[
Users\UserFilesController::class,
'destroy'
]
)->name('userfile.destroy');
Route::get(
'{user}/showfile/{fileId}',
[
Users\UserFilesController::class,
'show'
]
)->name('show/userfile')->withTrashed();
Route::post(
'{userId}/password',
[