3
0
mirror of https://github.com/snipe/snipe-it.git synced 2026-08-18 11:15:42 +00:00
Files
snipe-it/app/Http/Requests/TransferUserItemsRequest.php
2026-07-22 17:16:35 +01:00

60 lines
2.0 KiB
PHP

<?php
namespace App\Http\Requests;
use App\Models\Asset;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Support\Facades\Gate;
use Illuminate\Validation\Rule;
class TransferUserItemsRequest extends Request
{
public function authorize(): bool
{
$sourceUser = $this->route('user');
return $sourceUser
&& Gate::allows('view', $sourceUser)
&& Gate::allows('checkin', Asset::class)
&& Gate::allows('checkout', Asset::class);
}
public function rules(): array
{
return [
'target_user_id' => ['required', 'integer', Rule::exists('users', 'id')->whereNull('deleted_at')],
'asset_ids' => ['nullable', 'array'],
'asset_ids.*' => ['integer'],
'accessory_checkout_ids' => ['nullable', 'array'],
'accessory_checkout_ids.*' => ['integer'],
'license_seat_ids' => ['nullable', 'array'],
'license_seat_ids.*' => ['integer'],
'note' => ['required', 'string', 'max:1000'],
];
}
public function withValidator(Validator $validator): void
{
$validator->after(function (Validator $validator) {
$sourceUser = $this->route('user');
if ($sourceUser && (int) $this->input('target_user_id') === (int) $sourceUser->id) {
$validator->errors()->add(
'target_user_id',
trans('admin/users/general.transfer.target_same_as_source')
);
}
$assetIds = (array) $this->input('asset_ids', []);
$accessoryIds = (array) $this->input('accessory_checkout_ids', []);
$licenseSeatIds = (array) $this->input('license_seat_ids', []);
if (empty($assetIds) && empty($accessoryIds) && empty($licenseSeatIds)) {
$validator->errors()->add(
'asset_ids',
trans('admin/users/general.transfer.nothing_selected')
);
}
});
}
}