Enable admin setting user for a system
This commit is contained in:
parent
ac2ee7df0c
commit
90206f2bb5
@ -16,7 +16,7 @@ use Illuminate\Support\ViewErrorBag;
|
|||||||
use App\Classes\FTN\Message;
|
use App\Classes\FTN\Message;
|
||||||
use App\Http\Requests\{AddressMerge,AreafixRequest,SystemRegister};
|
use App\Http\Requests\{AddressMerge,AreafixRequest,SystemRegister};
|
||||||
use App\Jobs\AddressPoll;
|
use App\Jobs\AddressPoll;
|
||||||
use App\Models\{Address,Echoarea,Filearea,Netmail,Setup,System,SystemZone,Zone};
|
use App\Models\{Address,Echoarea,Filearea,Netmail,Setup,System,Zone};
|
||||||
use App\Notifications\Netmails\AddressLink;
|
use App\Notifications\Netmails\AddressLink;
|
||||||
use App\Rules\{FidoInteger,TwoByteInteger};
|
use App\Rules\{FidoInteger,TwoByteInteger};
|
||||||
|
|
||||||
@ -49,6 +49,10 @@ class SystemController extends Controller
|
|||||||
->transform(function($item) { $item['active'] = Arr::get($item,'active',FALSE); return $item; });
|
->transform(function($item) { $item['active'] = Arr::get($item,'active',FALSE); return $item; });
|
||||||
|
|
||||||
$o->mailers()->sync($mailers);
|
$o->mailers()->sync($mailers);
|
||||||
|
if ($request->post('users') && array_filter($request->post('users'),function($item) { return $item; }))
|
||||||
|
$o->users()->sync($request->post('users'));
|
||||||
|
else
|
||||||
|
$o->users()->detach();
|
||||||
|
|
||||||
return redirect()->to('system');
|
return redirect()->to('system');
|
||||||
}
|
}
|
||||||
|
@ -78,6 +78,7 @@ class SystemRegister extends FormRequest
|
|||||||
'mailer_details.*.port' => 'nullable|digits_between:2,5',
|
'mailer_details.*.port' => 'nullable|digits_between:2,5',
|
||||||
'zt_id' => 'nullable|size:10|regex:/^([A-Fa-f0-9]){10}$/|unique:systems,zt_id,'.($so->exists ? $so->id : 0),
|
'zt_id' => 'nullable|size:10|regex:/^([A-Fa-f0-9]){10}$/|unique:systems,zt_id,'.($so->exists ? $so->id : 0),
|
||||||
'pkt_type' => ['required',Rule::in(array_keys(Packet::PACKET_TYPES))],
|
'pkt_type' => ['required',Rule::in(array_keys(Packet::PACKET_TYPES))],
|
||||||
|
'users' => 'nullable|array|min:1|max:2',
|
||||||
] : [],
|
] : [],
|
||||||
$so->exists ? [
|
$so->exists ? [
|
||||||
'active' => 'required|boolean',
|
'active' => 'required|boolean',
|
||||||
|
@ -1,155 +1,189 @@
|
|||||||
<!-- $o = System::class -->
|
<!-- $o = System::class -->
|
||||||
<div class="row">
|
<div class="row pt-0">
|
||||||
<!-- Name -->
|
<div class="col-12">
|
||||||
<div class="col-4">
|
<h4 class="mb-0 pb-2">System Users</h4>
|
||||||
<label for="name" class="form-label">BBS Name</label>
|
|
||||||
<div class="input-group has-validation">
|
|
||||||
<span class="input-group-text"><i class="bi bi-pc"></i></span>
|
|
||||||
<input type="text" class="form-control @error('name') is-invalid @enderror" id="name" placeholder="Name" name="name" value="{{ old('name',$o->name) }}" required @cannot('update',$o)readonly @endcannot autofocus>
|
|
||||||
<span id="search-icon" style="width: 0;"><i style="border-radius: 50%;" class="spinner-border spinner-border-sm text-dark d-none"></i></span>
|
|
||||||
<div id="system_search_results"></div>
|
|
||||||
<span class="invalid-feedback" role="alert">
|
|
||||||
@error('name')
|
|
||||||
{{ $message }}
|
|
||||||
@else
|
|
||||||
A name is required.
|
|
||||||
@enderror
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- ZeroTier ID -->
|
<div class="row pt-0">
|
||||||
<div class="col-3">
|
<!-- Users -->
|
||||||
<label for="zt_id" class="form-label">ZeroTier ID</label>
|
<div class="col-4">
|
||||||
<div class="input-group has-validation">
|
<label for="users" class="form-label">Owners</label>
|
||||||
<span class="input-group-text"><i class="bi bi-shield-lock-fill"></i></span>
|
<div class="input-group has-validation">
|
||||||
<input type="text" class="form-control @error('zt_id') is-invalid @enderror" id="zt_id" placeholder="ZeroTier" name="zt_id" value="{{ old('zt_id',$o->zt_id) }}" @cannot($action,$o)readonly @endcannot>
|
<span class="input-group-text"><i class="bi bi-people-fill"></i></span>
|
||||||
<span class="invalid-feedback" role="alert">
|
<select style="width: 80%;" class="form-select @error('users') is-invalid @enderror" id="users" name="users[]">
|
||||||
@error('zt_id')
|
<option value=""> </option>
|
||||||
{{ $message }}
|
@foreach (\App\Models\User::orderBy('name')->active()->get() as $uo)
|
||||||
@enderror
|
<option value="{{ $uo->id }}" @if(in_array($uo->id,old('users',$o->users->pluck('id')->toArray())))selected @endif>{{ $uo->name }} <small>({{ $uo->email }})</small></option>
|
||||||
</span>
|
@endforeach
|
||||||
</div>
|
</select>
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Active -->
|
<span class="invalid-feedback" role="alert">
|
||||||
<div class="offset-2 col-2">
|
@error('users')
|
||||||
@can('update',$o)
|
{{ $message }}
|
||||||
<label for="active" class="form-label">Active</label>
|
@enderror
|
||||||
<div class="input-group">
|
</span>
|
||||||
<div class="btn-group" role="group">
|
|
||||||
<input type="radio" class="btn-check" name="active" id="active_yes" value="1" required @if(old('active',$o->active))checked @endif>
|
|
||||||
<label class="btn btn-outline-success" for="active_yes">Yes</label>
|
|
||||||
|
|
||||||
<input type="radio" class="btn-check btn-danger" name="active" id="active_no" value="0" required @if(! old('active',$o->active))checked @endif>
|
|
||||||
<label class="btn btn-outline-danger" for="active_no">No</label>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@endcan
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<!-- Sysop -->
|
<div class="col-12">
|
||||||
<div class="col-4">
|
<h4 class="mb-0 pb-2">System Details</h4>
|
||||||
<label for="sysop" class="form-label">Sysop</label>
|
|
||||||
<div class="input-group has-validation">
|
|
||||||
<span class="input-group-text"><i class="bi bi-person-fill"></i></span>
|
|
||||||
<input type="text" class="form-control @error('sysop') is-invalid @enderror" id="sysop" placeholder="Sysop" name="sysop" value="{{ old('sysop',$o->sysop) }}" required @cannot('admin',$o)readonly @endcannot autocomplete="name">
|
|
||||||
<span class="invalid-feedback" role="alert">
|
|
||||||
@error('sysop')
|
|
||||||
{{ $message }}
|
|
||||||
@else
|
|
||||||
A Sysop's name is required.
|
|
||||||
@enderror
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Location -->
|
<div class="row pt-0">
|
||||||
<div class="col-4">
|
<!-- Name -->
|
||||||
<label for="location" class="form-label">Location</label>
|
<div class="col-4">
|
||||||
<div class="input-group has-validation">
|
<label for="name" class="form-label">BBS Name</label>
|
||||||
<span class="input-group-text"><i class="bi bi-globe"></i></span>
|
<div class="input-group has-validation">
|
||||||
<input type="text" class="form-control @error('location') is-invalid @enderror" id="location" placeholder="Location" name="location" value="{{ old('location',$o->location) }}" required @cannot($action,$o)readonly @endcannot>
|
<span class="input-group-text"><i class="bi bi-pc"></i></span>
|
||||||
<span class="invalid-feedback" role="alert">
|
<input type="text" class="form-control @error('name') is-invalid @enderror" id="name" placeholder="Name" name="name" value="{{ old('name',$o->name) }}" required @cannot('update',$o)readonly @endcannot autofocus>
|
||||||
@error('location')
|
<span id="search-icon" style="width: 0;"><i style="border-radius: 50%;" class="spinner-border spinner-border-sm text-dark d-none"></i></span>
|
||||||
{{ $message }}
|
<div id="system_search_results"></div>
|
||||||
@else
|
<span class="invalid-feedback" role="alert">
|
||||||
System location is required.
|
@error('name')
|
||||||
@enderror
|
{{ $message }}
|
||||||
</span>
|
@else
|
||||||
</div>
|
A name is required.
|
||||||
</div>
|
@enderror
|
||||||
|
</span>
|
||||||
<!-- Hold -->
|
|
||||||
<div class="offset-1 col-2">
|
|
||||||
@can('update',$o)
|
|
||||||
<label for="hold" class="form-label">Hold Mail <i class="bi bi-info-circle" title="Dont give the node any mail regardless of poll mode"></i></label>
|
|
||||||
<div class="input-group">
|
|
||||||
<div class="btn-group" role="group">
|
|
||||||
<input type="radio" class="btn-check" name="hold" id="hold_yes" value="1" required @if(old('hold',$o->hold))checked @endif>
|
|
||||||
<label class="btn btn-outline-warning" for="hold_yes">Yes</label>
|
|
||||||
|
|
||||||
<input type="radio" class="btn-check btn-danger" name="hold" id="hold_no" value="0" required @if(! old('hold',$o->hold))checked @endif>
|
|
||||||
<label class="btn btn-outline-success" for="hold_no">No</label>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@endcan
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
<!-- ZeroTier ID -->
|
||||||
<!-- Address -->
|
<div class="col-3">
|
||||||
<div class="col-5">
|
<label for="zt_id" class="form-label">ZeroTier ID</label>
|
||||||
<label for="address" class="form-label">Internet Address</label>
|
<div class="input-group has-validation">
|
||||||
<div class="input-group has-validation">
|
<span class="input-group-text"><i class="bi bi-shield-lock-fill"></i></span>
|
||||||
<span class="input-group-text"><i class="bi bi-globe"></i></span>
|
<input type="text" class="form-control @error('zt_id') is-invalid @enderror" id="zt_id" placeholder="ZeroTier" name="zt_id" value="{{ old('zt_id',$o->zt_id) }}" @cannot($action,$o)readonly @endcannot>
|
||||||
<input type="text" class="w-75 form-control @error('address') is-invalid @enderror" id="address" placeholder="FQDN" name="address" value="{{ old('address',$o->address) }}" @cannot($action,$o)readonly @endcannot>
|
<span class="invalid-feedback" role="alert">
|
||||||
<span class="invalid-feedback" role="alert">
|
@error('zt_id')
|
||||||
@error('address')
|
{{ $message }}
|
||||||
{{ $message }}
|
@enderror
|
||||||
@enderror
|
</span>
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Phone -->
|
|
||||||
<div class="col-3">
|
|
||||||
<label for="phone" class="form-label">Phone</label>
|
|
||||||
<div class="input-group has-validation">
|
|
||||||
<span class="input-group-text"><i class="bi bi-telephone-fill"></i></span>
|
|
||||||
<input type="text" class="form-control @error('phone') is-invalid @enderror" id="phone" placeholder="Phone" name="phone" value="{{ old('phone',$o->phone) }}" @cannot($action,$o)readonly @endcannot>
|
|
||||||
<span class="invalid-feedback" role="alert">
|
|
||||||
@error('phone')
|
|
||||||
{{ $message }}
|
|
||||||
@enderror
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Poll Mode -->
|
|
||||||
<div class="offset-1 col-3">
|
|
||||||
@can('update',$o)
|
|
||||||
<label for="pollmode" class="form-label">Poll Mode <i class="bi bi-info-circle" title="Poll node when mail available, poll on a schedule or hold mail for collection"></i></label>
|
|
||||||
<div class="input-group has-validation">
|
|
||||||
<div class="btn-group @error('pollmode') is-invalid @enderror" role="group">
|
|
||||||
<input type="radio" class="btn-check" name="pollmode" id="poll_crash" value="2" @if((int)old('pollmode',($o->pollmode === TRUE) ? 2 : 0) === 2)checked @endif>
|
|
||||||
<label class="btn btn-outline-success" for="poll_crash">Crash</label>
|
|
||||||
|
|
||||||
<input type="radio" class="btn-check btn-danger" name="pollmode" id="poll_normal" value="1" @if((int)old('pollmode',($o->pollmode === FALSE) ? 1 : 0) === 1)checked @endif>
|
|
||||||
<label class="btn btn-outline-secondary" for="poll_normal">Normal</label>
|
|
||||||
|
|
||||||
<input type="radio" class="btn-check btn-danger" name="pollmode" id="poll_hold" value="0" @if((int)old('pollmode',is_null($o->pollmode) ? 0 : 1) === 0)checked @endif>
|
|
||||||
<label class="btn btn-outline-warning" for="poll_hold">Hold</label>
|
|
||||||
</div>
|
</div>
|
||||||
<span class="invalid-feedback" role="alert">
|
|
||||||
@error('pollmode')
|
|
||||||
{{ $message }}
|
|
||||||
@enderror
|
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
@endcan
|
|
||||||
|
<!-- Active -->
|
||||||
|
<div class="offset-2 col-2">
|
||||||
|
@can('update',$o)
|
||||||
|
<label for="active" class="form-label">Active</label>
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="btn-group" role="group">
|
||||||
|
<input type="radio" class="btn-check" name="active" id="active_yes" value="1" required @if(old('active',$o->active))checked @endif>
|
||||||
|
<label class="btn btn-outline-success" for="active_yes">Yes</label>
|
||||||
|
|
||||||
|
<input type="radio" class="btn-check btn-danger" name="active" id="active_no" value="0" required @if(! old('active',$o->active))checked @endif>
|
||||||
|
<label class="btn btn-outline-danger" for="active_no">No</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endcan
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<!-- Sysop -->
|
||||||
|
<div class="col-4">
|
||||||
|
<label for="sysop" class="form-label">Sysop</label>
|
||||||
|
<div class="input-group has-validation">
|
||||||
|
<span class="input-group-text"><i class="bi bi-person-fill"></i></span>
|
||||||
|
<input type="text" class="form-control @error('sysop') is-invalid @enderror" id="sysop" placeholder="Sysop" name="sysop" value="{{ old('sysop',$o->sysop) }}" required @cannot('admin',$o)readonly @endcannot autocomplete="name">
|
||||||
|
<span class="invalid-feedback" role="alert">
|
||||||
|
@error('sysop')
|
||||||
|
{{ $message }}
|
||||||
|
@else
|
||||||
|
A Sysop's name is required.
|
||||||
|
@enderror
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Location -->
|
||||||
|
<div class="col-4">
|
||||||
|
<label for="location" class="form-label">Location</label>
|
||||||
|
<div class="input-group has-validation">
|
||||||
|
<span class="input-group-text"><i class="bi bi-globe"></i></span>
|
||||||
|
<input type="text" class="form-control @error('location') is-invalid @enderror" id="location" placeholder="Location" name="location" value="{{ old('location',$o->location) }}" required @cannot($action,$o)readonly @endcannot>
|
||||||
|
<span class="invalid-feedback" role="alert">
|
||||||
|
@error('location')
|
||||||
|
{{ $message }}
|
||||||
|
@else
|
||||||
|
System location is required.
|
||||||
|
@enderror
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Hold -->
|
||||||
|
<div class="offset-1 col-2">
|
||||||
|
@can('update',$o)
|
||||||
|
<label for="hold" class="form-label">Hold Mail <i class="bi bi-info-circle" title="Dont give the node any mail regardless of poll mode"></i></label>
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="btn-group" role="group">
|
||||||
|
<input type="radio" class="btn-check" name="hold" id="hold_yes" value="1" required @if(old('hold',$o->hold))checked @endif>
|
||||||
|
<label class="btn btn-outline-warning" for="hold_yes">Yes</label>
|
||||||
|
|
||||||
|
<input type="radio" class="btn-check btn-danger" name="hold" id="hold_no" value="0" required @if(! old('hold',$o->hold))checked @endif>
|
||||||
|
<label class="btn btn-outline-success" for="hold_no">No</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endcan
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<!-- Address -->
|
||||||
|
<div class="col-5">
|
||||||
|
<label for="address" class="form-label">Internet Address</label>
|
||||||
|
<div class="input-group has-validation">
|
||||||
|
<span class="input-group-text"><i class="bi bi-globe"></i></span>
|
||||||
|
<input type="text" class="w-75 form-control @error('address') is-invalid @enderror" id="address" placeholder="FQDN" name="address" value="{{ old('address',$o->address) }}" @cannot($action,$o)readonly @endcannot>
|
||||||
|
<span class="invalid-feedback" role="alert">
|
||||||
|
@error('address')
|
||||||
|
{{ $message }}
|
||||||
|
@enderror
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Phone -->
|
||||||
|
<div class="col-3">
|
||||||
|
<label for="phone" class="form-label">Phone</label>
|
||||||
|
<div class="input-group has-validation">
|
||||||
|
<span class="input-group-text"><i class="bi bi-telephone-fill"></i></span>
|
||||||
|
<input type="text" class="form-control @error('phone') is-invalid @enderror" id="phone" placeholder="Phone" name="phone" value="{{ old('phone',$o->phone) }}" @cannot($action,$o)readonly @endcannot>
|
||||||
|
<span class="invalid-feedback" role="alert">
|
||||||
|
@error('phone')
|
||||||
|
{{ $message }}
|
||||||
|
@enderror
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Poll Mode -->
|
||||||
|
<div class="offset-1 col-3">
|
||||||
|
@can('update',$o)
|
||||||
|
<label for="pollmode" class="form-label">Poll Mode <i class="bi bi-info-circle" title="Poll node when mail available, poll on a schedule or hold mail for collection"></i></label>
|
||||||
|
<div class="input-group has-validation">
|
||||||
|
<div class="btn-group @error('pollmode') is-invalid @enderror" role="group">
|
||||||
|
<input type="radio" class="btn-check" name="pollmode" id="poll_crash" value="2" @if((int)old('pollmode',($o->pollmode === TRUE) ? 2 : 0) === 2)checked @endif>
|
||||||
|
<label class="btn btn-outline-success" for="poll_crash">Crash</label>
|
||||||
|
|
||||||
|
<input type="radio" class="btn-check btn-danger" name="pollmode" id="poll_normal" value="1" @if((int)old('pollmode',($o->pollmode === FALSE) ? 1 : 0) === 1)checked @endif>
|
||||||
|
<label class="btn btn-outline-secondary" for="poll_normal">Normal</label>
|
||||||
|
|
||||||
|
<input type="radio" class="btn-check btn-danger" name="pollmode" id="poll_hold" value="0" @if((int)old('pollmode',is_null($o->pollmode) ? 0 : 1) === 0)checked @endif>
|
||||||
|
<label class="btn btn-outline-warning" for="poll_hold">Hold</label>
|
||||||
|
</div>
|
||||||
|
<span class="invalid-feedback" role="alert">
|
||||||
|
@error('pollmode')
|
||||||
|
{{ $message }}
|
||||||
|
@enderror
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
@endcan
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -390,9 +424,19 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@section('page-css')
|
||||||
|
@css('select2')
|
||||||
|
@append
|
||||||
@section('page-scripts')
|
@section('page-scripts')
|
||||||
|
@js('select2')
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
|
$('#users').select2({
|
||||||
|
@cannot('admin')disabled: true @endcannot
|
||||||
|
/*multiple: true*/
|
||||||
|
});
|
||||||
|
|
||||||
$('#poll_normal').on('click',function() {
|
$('#poll_normal').on('click',function() {
|
||||||
$('#heartbeat_option').removeClass('d-none');
|
$('#heartbeat_option').removeClass('d-none');
|
||||||
})
|
})
|
||||||
|
@ -11,123 +11,150 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<div class="greyframe titledbox shadow0xb0">
|
<div class="greyframe titledbox shadow0xb0">
|
||||||
<h2 class="cap">@if($o->exists) Update @else Add @endif User</h2>
|
<div class="row pt-0">
|
||||||
|
<div class="col-12">
|
||||||
|
<h2 class="cap">@if($o->exists) Update @else Add @endif User</h2>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-4">
|
<div class="col-4">
|
||||||
<label for="name" class="form-label">Name</label>
|
<label for="name" class="form-label">Name</label>
|
||||||
<div class="input-group has-validation">
|
<div class="input-group has-validation">
|
||||||
<span class="input-group-text"><i class="bi bi-tag-fill"></i></span>
|
<span class="input-group-text"><i class="bi bi-tag-fill"></i></span>
|
||||||
<input type="text" class="form-control @error('name') is-invalid @enderror" id="name" placeholder="Name" name="name" value="{{ old('name',$o->name) }}" required @cannot('admin',$o)disabled @endcannot autofocus>
|
<input type="text" class="form-control @error('name') is-invalid @enderror" id="name" placeholder="Name" name="name" value="{{ old('name',$o->name) }}" required @cannot('admin',$o)disabled @endcannot autofocus>
|
||||||
<span class="invalid-feedback" role="alert">
|
<span class="invalid-feedback" role="alert">
|
||||||
@error('name')
|
@error('name')
|
||||||
{{ $message }}
|
{{ $message }}
|
||||||
@else
|
@else
|
||||||
A name is required.
|
A name is required.
|
||||||
@enderror
|
@enderror
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-3">
|
<div class="col-3">
|
||||||
<label for="alias" class="form-label">BBS Alias</label>
|
<label for="alias" class="form-label">BBS Alias</label>
|
||||||
<div class="input-group has-validation">
|
<div class="input-group has-validation">
|
||||||
<span class="input-group-text"><i class="bi bi-tag-fill"></i></span>
|
<span class="input-group-text"><i class="bi bi-tag-fill"></i></span>
|
||||||
<input type="text" class="form-control @error('alias') is-invalid @enderror" id="alias" placeholder="alias" name="alias" value="{{ old('alias',$o->alias) }}" @cannot('admin',$o)disabled @endcannot>
|
<input type="text" class="form-control @error('alias') is-invalid @enderror" id="alias" placeholder="alias" name="alias" value="{{ old('alias',$o->alias) }}" @cannot('admin',$o)disabled @endcannot>
|
||||||
<span class="invalid-feedback" role="alert">
|
<span class="invalid-feedback" role="alert">
|
||||||
@error('alias')
|
@error('alias')
|
||||||
{{ $message }}
|
{{ $message }}
|
||||||
@enderror
|
@enderror
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Forward Netmail -->
|
<!-- Forward Netmail -->
|
||||||
<div class="col-4">
|
<div class="col-4">
|
||||||
<label for="system_id" class="form-label">Forward Netmails</label>
|
<label for="system_id" class="form-label">Forward Netmails</label>
|
||||||
<div class="input-group has-validation">
|
<div class="input-group has-validation">
|
||||||
<span class="input-group-text"><i class="bi bi-envelope-at-fill"></i></span>
|
<span class="input-group-text"><i class="bi bi-envelope-at-fill"></i></span>
|
||||||
<select style="width: 80%;" class="form-select @error('system_id') is-invalid @enderror" id="system_id" name="system_id" required @cannot('admin',$o)disabled @endcannot>
|
<select style="width: 80%;" class="form-select @error('system_id') is-invalid @enderror" id="system_id" name="system_id" required @cannot('admin',$o)disabled @endcannot>
|
||||||
<option value=""> </option>
|
<option value=""> </option>
|
||||||
@foreach ($o->systems as $oo)
|
@foreach ($o->systems as $oo)
|
||||||
<option value="{{ $oo->id }}" @if(old('system_id',$o->system_id)==$oo->id)selected @endif>{{ $oo->name }}</option>
|
<option value="{{ $oo->id }}" @if(old('system_id',$o->system_id)==$oo->id)selected @endif>{{ $oo->name }}</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
</select>
|
</select>
|
||||||
<span class="invalid-feedback" role="alert">
|
<span class="invalid-feedback" role="alert">
|
||||||
@error('system_id')
|
@error('system_id')
|
||||||
{{ $message }}
|
{{ $message }}
|
||||||
@enderror
|
@enderror
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-4">
|
|
||||||
<label for="email" class="form-label">Email</label>
|
|
||||||
<div class="input-group has-validation">
|
|
||||||
<span class="input-group-text"><i class="bi bi-person-badge"></i></span>
|
|
||||||
<input type="text" class="form-control @error('email') is-invalid @enderror" id="email" placeholder="Email" name="email" value="{{ old('email',$o->email) }}" required @cannot('admin',$o)disabled @endcannot>
|
|
||||||
<span class="invalid-feedback" role="alert">
|
|
||||||
@error('email')
|
|
||||||
{{ $message }}
|
|
||||||
@else
|
|
||||||
Email required for login.
|
|
||||||
@enderror
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-1">
|
|
||||||
<label for="active" class="form-label">Active</label>
|
|
||||||
<div class="input-group">
|
|
||||||
<div class="btn-group" role="group">
|
|
||||||
<input type="radio" class="btn-check" name="active" id="active_yes" value="1" required @cannot('admin',$o)disabled @endcannot @if(old('active',$o->active))checked @endif>
|
|
||||||
<label class="btn btn-outline-success" for="active_yes">Yes</label>
|
|
||||||
|
|
||||||
<input type="radio" class="btn-check btn-danger" name="active" id="active_no" value="0" required @cannot('admin',$o)disabled @endcannot @if(! old('active',$o->active))checked @endif>
|
|
||||||
<label class="btn btn-outline-danger" for="active_no">No</label>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="offset-1 col-1">
|
<div class="row">
|
||||||
<label for="admin" class="form-label">Site Admin</label>
|
<div class="col-4">
|
||||||
<div class="input-group">
|
<label for="email" class="form-label">Email</label>
|
||||||
<div class="btn-group" role="group" @if($user->id === $o->id)data-bs-toggle="tooltip" title="You cannot demote yourself" @endif>
|
<div class="input-group has-validation">
|
||||||
<input type="radio" class="btn-check" name="admin" id="admin_yes" value="1" required @cannot('admin',$o)disabled @endcannot @if(old('admin',$o->admin))checked @endif>
|
<span class="input-group-text"><i class="bi bi-person-badge"></i></span>
|
||||||
<label class="btn btn-outline-success" for="admin_yes">Yes</label>
|
<input type="text" class="form-control @error('email') is-invalid @enderror" id="email" placeholder="Email" name="email" value="{{ old('email',$o->email) }}" required @cannot('admin',$o)disabled @endcannot>
|
||||||
|
<span class="invalid-feedback" role="alert">
|
||||||
|
@error('email')
|
||||||
|
{{ $message }}
|
||||||
|
@else
|
||||||
|
Email required for login.
|
||||||
|
@enderror
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<input type="radio" class="btn-check btn-danger" name="admin" id="admin_no" value="0" required @if(($user->id === $o->id) || $user->cannot('admin',$o)) disabled @endif @if(! old('admin',$o->admin))checked @endif>
|
<div class="col-1">
|
||||||
<label class="btn btn-outline-danger" for="admin_no">No</label>
|
<label for="active" class="form-label">Active</label>
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="btn-group" role="group">
|
||||||
|
<input type="radio" class="btn-check" name="active" id="active_yes" value="1" required @cannot('admin',$o)disabled @endcannot @if(old('active',$o->active))checked @endif>
|
||||||
|
<label class="btn btn-outline-success" for="active_yes">Yes</label>
|
||||||
|
|
||||||
|
<input type="radio" class="btn-check btn-danger" name="active" id="active_no" value="0" required @cannot('admin',$o)disabled @endcannot @if(! old('active',$o->active))checked @endif>
|
||||||
|
<label class="btn btn-outline-danger" for="active_no">No</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="offset-1 col-1">
|
||||||
|
<label for="admin" class="form-label">Site Admin</label>
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="btn-group" role="group" @if($user->id === $o->id)data-bs-toggle="tooltip" title="You cannot demote yourself" @endif>
|
||||||
|
<input type="radio" class="btn-check" name="admin" id="admin_yes" value="1" required @cannot('admin',$o)disabled @endcannot @if(old('admin',$o->admin))checked @endif>
|
||||||
|
<label class="btn btn-outline-success" for="admin_yes">Yes</label>
|
||||||
|
|
||||||
|
<input type="radio" class="btn-check btn-danger" name="admin" id="admin_no" value="0" required @if(($user->id === $o->id) || $user->cannot('admin',$o)) disabled @endif @if(! old('admin',$o->admin))checked @endif>
|
||||||
|
<label class="btn btn-outline-danger" for="admin_no">No</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<label for="pgp_pubkey" class="form-label">PGP Public Key</label>
|
<label for="pgp_pubkey" class="form-label">PGP Public Key</label>
|
||||||
<textarea class="form-control @error('pgp_pubkey')is-invalid @enderror" rows=3 name="pgp_pubkey" placeholder="PGP Public Key..." @cannot('admin',$o)disabled @endcannot>{{ old('pgp_pubkey',$o->pgp_pubkey) }}</textarea>
|
<textarea class="form-control @error('pgp_pubkey')is-invalid @enderror" rows=3 name="pgp_pubkey" placeholder="PGP Public Key..." @cannot('admin',$o)disabled @endcannot>{{ old('pgp_pubkey',$o->pgp_pubkey) }}</textarea>
|
||||||
<span class="invalid-feedback" role="alert">
|
<span class="invalid-feedback" role="alert">
|
||||||
@error('pgp_pubkey')
|
@error('pgp_pubkey')
|
||||||
{{ $message }}
|
{{ $message }}
|
||||||
@enderror
|
@enderror
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<a href="{{ url('user') }}" class="btn btn-danger">Cancel</a>
|
<a href="{{ url('user') }}" class="btn btn-danger">Cancel</a>
|
||||||
@can('admin',$o)
|
@can('admin',$o)
|
||||||
<button type="submit" name="submit" class="btn btn-success float-end">@if ($o->exists)Save @else Add @endif</button>
|
<button type="submit" name="submit" class="btn btn-success float-end">@if ($o->exists)Save @else Add @endif</button>
|
||||||
@endcan
|
@endcan
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="row pt-5">
|
||||||
|
<div class="col-12">
|
||||||
|
<h3>Systems</h3>
|
||||||
|
|
||||||
|
<table class="table monotable">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>System</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
@foreach ($o->systems as $o)
|
||||||
|
<tr>
|
||||||
|
<th><a href="{{ url('system/addedit',[$o->id]) }}">{{ $o->name }}</a></th>
|
||||||
|
<th class="text-end">{!! $o->akas->pluck('ftn')->join('<br>') !!}</th>
|
||||||
|
</tr>
|
||||||
|
@endforeach
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</form>
|
</form>
|
||||||
@endsection
|
@endsection
|
||||||
|
|
||||||
|
@ -6,12 +6,12 @@
|
|||||||
@section('content')
|
@section('content')
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-9">
|
<div class="col-12">
|
||||||
<h2>System Users</h2>
|
<h2>System Users</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-9">
|
<div class="col-12">
|
||||||
<p>This system is aware of the following users @can('admin',(new \App\Models\User))(you can <a href="{{ url('user/addedit') }}">add</a> more)@endcan:</p>
|
<p>This system is aware of the following users @can('admin',(new \App\Models\User))(you can <a href="{{ url('user/addedit') }}">add</a> more)@endcan:</p>
|
||||||
<table class="table monotable" id="user">
|
<table class="table monotable" id="user">
|
||||||
<thead>
|
<thead>
|
||||||
@ -22,11 +22,12 @@
|
|||||||
<th>Active</th>
|
<th>Active</th>
|
||||||
<th>Verified</th>
|
<th>Verified</th>
|
||||||
<th>Last On</th>
|
<th>Last On</th>
|
||||||
|
<th class="text-end">Systems</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
|
||||||
<tbody>
|
<tbody>
|
||||||
@foreach (\App\Models\User::orderBy('email')->cursor() as $oo)
|
@foreach (\App\Models\User::orderBy('email')->with(['systems'])->get() as $oo)
|
||||||
<tr class="{{ $oo->admin ? 'admin' : '' }}">
|
<tr class="{{ $oo->admin ? 'admin' : '' }}">
|
||||||
<td><a href="{{ url('user/addedit',[$oo->id]) }}">{{ $oo->id }}</a> @if($user->admin && ($user->id !== $oo->id))<span class="float-end"><a href="{{ url('admin/switch/start',[$oo->id]) }}"><i class="bi bi-person-bounding-box"></i></a></span>@endif</td>
|
<td><a href="{{ url('user/addedit',[$oo->id]) }}">{{ $oo->id }}</a> @if($user->admin && ($user->id !== $oo->id))<span class="float-end"><a href="{{ url('admin/switch/start',[$oo->id]) }}"><i class="bi bi-person-bounding-box"></i></a></span>@endif</td>
|
||||||
<td>{{ $oo->email }}</td>
|
<td>{{ $oo->email }}</td>
|
||||||
@ -34,6 +35,7 @@
|
|||||||
<td>{{ $oo->active ? 'YES' : 'NO' }}</td>
|
<td>{{ $oo->active ? 'YES' : 'NO' }}</td>
|
||||||
<td>{{ $oo->email_verified_at ? $oo->email_verified_at->format('Y-m-d') : '-' }}</td>
|
<td>{{ $oo->email_verified_at ? $oo->email_verified_at->format('Y-m-d') : '-' }}</td>
|
||||||
<td>{{ $oo->last_on ? $oo->last_on->toDateTimeString() : 'Unknown' }}</td>
|
<td>{{ $oo->last_on ? $oo->last_on->toDateTimeString() : 'Unknown' }}</td>
|
||||||
|
<td class="text-end">{{ number_format($oo->systems->count()) }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
@endforeach
|
@endforeach
|
||||||
</tbody>
|
</tbody>
|
||||||
|
Loading…
Reference in New Issue
Block a user