71 lines
2.0 KiB
PHP
71 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Requests;
|
|
|
|
use Illuminate\Foundation\Http\FormRequest;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Gate;
|
|
|
|
use App\Models\Domain;
|
|
|
|
/**
|
|
* Validation to register echoareas for a system
|
|
* o = System::class
|
|
*
|
|
* @note This validation only expects to be used with POST
|
|
* Variables:
|
|
* + "address_id" => "address" // address_id that will receive the echos
|
|
* + "domain_id" => "domain" // Of the echoareas
|
|
* + "id" => array of IDs // The echos being subscribed (or if absent, are removed)
|
|
*
|
|
* Rules:
|
|
* @see AddressAdd::class for description of authorisation
|
|
*/
|
|
class SystemEchoareaRequest extends FormRequest
|
|
{
|
|
/**
|
|
* Determine if the user is authorized to make this request.
|
|
*/
|
|
public function authorize(): bool
|
|
{
|
|
return request()->isMethod('get')
|
|
|| Gate::allows('update_nn',$this->route('o'));
|
|
}
|
|
|
|
/**
|
|
* Get the validation rules that apply to the request.
|
|
*
|
|
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
|
*/
|
|
public function rules(Request $request): array
|
|
{
|
|
if (request()->isMethod('get'))
|
|
return [];
|
|
|
|
session()->flash('accordion','echoarea');
|
|
return [
|
|
'address_id'=>[
|
|
'exists:addresses,id',
|
|
// Make sure we have session details for the area
|
|
function ($attribute,$value,$fail) use ($request) {
|
|
$ao = request()->route('o')->addresses->firstWhere('id',$request->address_id);
|
|
|
|
if ((! $ao) || (! $ao->active) || (! $ao->system->zones->pluck('domain_id')->contains($request->domain_id)))
|
|
$fail('Address must be ACTIVE, and have session details for the domain');
|
|
},
|
|
],
|
|
'domain_id'=>'exists:domains,id',
|
|
'id'=>[
|
|
'array',
|
|
'min:1',
|
|
// Make sure the echoareas are in the domain
|
|
function ($attribute,$value,$fail) use ($request) {
|
|
$do = Domain::findOrFail($request->domain_id);
|
|
|
|
if ($do->echoareas->pluck('id')->intersect($value)->count() !== count($value))
|
|
$fail('Some echaoreas dont exist in the domain?');
|
|
},
|
|
]
|
|
];
|
|
}
|
|
} |