Rework SystemController methods and paths, no functional changes
This commit is contained in:
parent
c86d8d8952
commit
fda68bba04
@ -24,6 +24,42 @@ class SystemController extends Controller
|
|||||||
{
|
{
|
||||||
private const LOGKEY = 'CSC';
|
private const LOGKEY = 'CSC';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add or edit a node
|
||||||
|
*/
|
||||||
|
public function add_edit(SystemRegister $request,System $o)
|
||||||
|
{
|
||||||
|
$this->authorize('update',$o);
|
||||||
|
|
||||||
|
if ($request->post()) {
|
||||||
|
foreach (['name','location','sysop','hold','phone','address','port','active','method','notes','zt_id','pkt_type'] as $key)
|
||||||
|
$o->{$key} = $request->post($key);
|
||||||
|
|
||||||
|
switch ($request->post('pollmode')) {
|
||||||
|
case 1: $o->pollmode = FALSE; break;
|
||||||
|
case 2: $o->pollmode = TRUE; break;
|
||||||
|
default: $o->pollmode = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
$o->autohold = FALSE;
|
||||||
|
$o->save();
|
||||||
|
|
||||||
|
$mailers = collect($request->post('mailer_details'))
|
||||||
|
->filter(function($item) { return $item['port']; })
|
||||||
|
->transform(function($item) { $item['active'] = Arr::get($item,'active',FALSE); return $item; });
|
||||||
|
|
||||||
|
$o->mailers()->sync($mailers);
|
||||||
|
|
||||||
|
return redirect()->action([self::class,'home']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$o->load(['addresses.zone.domain','addresses.system','sessions.domain','sessions.systems']);
|
||||||
|
|
||||||
|
return view('system.addedit')
|
||||||
|
->with('action',$o->exists ? 'update' : 'create')
|
||||||
|
->with('o',$o);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add an address to a system
|
* Add an address to a system
|
||||||
*
|
*
|
||||||
@ -32,7 +68,7 @@ class SystemController extends Controller
|
|||||||
* @return \Illuminate\Http\RedirectResponse
|
* @return \Illuminate\Http\RedirectResponse
|
||||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||||
*/
|
*/
|
||||||
public function add_address(Request $request,System $o)
|
public function address_add(Request $request,System $o)
|
||||||
{
|
{
|
||||||
// @todo a point address is failing validation
|
// @todo a point address is failing validation
|
||||||
// @todo This should be admin of the zone
|
// @todo This should be admin of the zone
|
||||||
@ -59,12 +95,12 @@ class SystemController extends Controller
|
|||||||
->where('point_id',0)
|
->where('point_id',0)
|
||||||
->where('role',Address::NODE_RC);
|
->where('role',Address::NODE_RC);
|
||||||
})
|
})
|
||||||
// Check that a host doesnt already exist
|
// Check that a host doesnt already exist
|
||||||
->orWhere(function($query) use ($value) {
|
->orWhere(function($query) use ($value) {
|
||||||
return $query->where('host_id',$value)
|
return $query->where('host_id',$value)
|
||||||
->where('point_id',0)
|
->where('point_id',0)
|
||||||
->where('role',Address::NODE_NC);
|
->where('role',Address::NODE_NC);
|
||||||
});
|
});
|
||||||
|
|
||||||
if ($o->count()) {
|
if ($o->count()) {
|
||||||
$fail('Region or host already exists');
|
$fail('Region or host already exists');
|
||||||
@ -98,15 +134,15 @@ class SystemController extends Controller
|
|||||||
return $query->where('region_id',$value)
|
return $query->where('region_id',$value)
|
||||||
->where('role',Address::NODE_RC);
|
->where('role',Address::NODE_RC);
|
||||||
})
|
})
|
||||||
// Check that a host doesnt already exist
|
// Check that a host doesnt already exist
|
||||||
->orWhere(function($query) use ($value) {
|
->orWhere(function($query) use ($value) {
|
||||||
return $query->where('host_id',$value)
|
return $query->where('host_id',$value)
|
||||||
->where('role',Address::NODE_NC);
|
->where('role',Address::NODE_NC);
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
->where('zone_id',$request->post('zone_id'))
|
->where('zone_id',$request->post('zone_id'))
|
||||||
->where('point_id',0)
|
->where('point_id',0)
|
||||||
->where('active',TRUE);
|
->where('active',TRUE);
|
||||||
|
|
||||||
if ($o->count()) {
|
if ($o->count()) {
|
||||||
$fail('Region or host already exists');
|
$fail('Region or host already exists');
|
||||||
@ -242,78 +278,51 @@ class SystemController extends Controller
|
|||||||
return redirect()->back()->withErrors(['action'=>'Unknown action: '.$request->post('action')]);
|
return redirect()->back()->withErrors(['action'=>'Unknown action: '.$request->post('action')]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return redirect()->to(sprintf('ftn/system/addedit/%d',$o->id));
|
return redirect()->to(sprintf('system/addedit/%d',$o->id));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add Session details
|
* Delete address assigned to a host
|
||||||
*
|
*
|
||||||
* @param Request $request
|
* @param Address $o
|
||||||
* @param System $o
|
|
||||||
* @return \Illuminate\Http\RedirectResponse
|
* @return \Illuminate\Http\RedirectResponse
|
||||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||||
*/
|
*/
|
||||||
public function add_session(Request $request,System $o)
|
public function address_del(Address $o)
|
||||||
{
|
{
|
||||||
// @todo This should be admin of the zone
|
// @todo This should be admin of the zone
|
||||||
$this->authorize('update',$o);
|
$this->authorize('admin',$o);
|
||||||
session()->flash('accordion','session');
|
session()->flash('accordion','address');
|
||||||
|
|
||||||
$validate = $request->validate([
|
$sid = $o->system_id;
|
||||||
'zone_id' => 'required|exists:zones,id',
|
$o->active = FALSE;
|
||||||
'sespass' => 'required|string|min:4',
|
$o->save();
|
||||||
'pktpass' => 'required|string|min:4|max:8',
|
$o->delete();
|
||||||
'ticpass' => 'required|string|min:4',
|
|
||||||
'fixpass' => 'required|string|min:4',
|
|
||||||
]);
|
|
||||||
|
|
||||||
$zo = Zone::findOrFail($validate['zone_id']);
|
return redirect()->to(sprintf('system/addedit/%d',$sid));
|
||||||
|
|
||||||
// If this session is for the ZC, it now becomes the default.
|
|
||||||
if ($o->match($zo,Address::NODE_ZC)->count()) {
|
|
||||||
SystemZone::where('default',TRUE)->update(['default'=>FALSE]);
|
|
||||||
$validate['default'] = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
$o->sessions()->attach($zo,$validate);
|
|
||||||
|
|
||||||
return redirect()->to(sprintf('ftn/system/addedit/%d',$o->id));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add or edit a node
|
* Demote an address NC -> node
|
||||||
|
*
|
||||||
|
* @param Address $o
|
||||||
|
* @return \Illuminate\Http\RedirectResponse
|
||||||
|
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||||
*/
|
*/
|
||||||
public function add_edit(SystemRegister $request,System $o)
|
public function address_dem(Address $o)
|
||||||
{
|
{
|
||||||
$this->authorize('update',$o);
|
// @todo This should be admin of the zone
|
||||||
|
$this->authorize('admin',$o);
|
||||||
|
session()->flash('accordion','address');
|
||||||
|
|
||||||
if ($request->post()) {
|
// Make sure that no other system has this address active.
|
||||||
foreach (['name','location','sysop','hold','phone','address','port','active','method','notes','zt_id','pkt_type'] as $key)
|
if ($o->role === Address::NODE_ACTIVE)
|
||||||
$o->{$key} = $request->post($key);
|
return redirect()->back()->withErrors(['demaddress'=>sprintf('%s cannot be demoted any more',$o->ftn3D)]);
|
||||||
|
|
||||||
switch ($request->post('pollmode')) {
|
$o->role = ($o->role << 1);
|
||||||
case 1: $o->pollmode = FALSE; break;
|
$o->save();
|
||||||
case 2: $o->pollmode = TRUE; break;
|
|
||||||
default: $o->pollmode = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
$o->autohold = FALSE;
|
return redirect()->to(sprintf('system/addedit/%d',$o->system_id));
|
||||||
$o->save();
|
|
||||||
|
|
||||||
$mailers = collect($request->post('mailer_details'))
|
|
||||||
->filter(function($item) { return $item['port']; })
|
|
||||||
->transform(function($item) { $item['active'] = Arr::get($item,'active',FALSE); return $item; });
|
|
||||||
|
|
||||||
$o->mailers()->sync($mailers);
|
|
||||||
|
|
||||||
return redirect()->action([self::class,'home']);
|
|
||||||
}
|
|
||||||
|
|
||||||
$o->load(['addresses.zone.domain','addresses.system','sessions.domain','sessions.systems']);
|
|
||||||
|
|
||||||
return view('system.addedit')
|
|
||||||
->with('action',$o->exists ? 'update' : 'create')
|
|
||||||
->with('o',$o);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function address_merge(AddressMerge $request,int $id)
|
public function address_merge(AddressMerge $request,int $id)
|
||||||
@ -400,6 +409,146 @@ class SystemController extends Controller
|
|||||||
->with('oo',$oo);
|
->with('oo',$oo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Move address to another system
|
||||||
|
*
|
||||||
|
* @param Request $request
|
||||||
|
* @param System $so
|
||||||
|
* @param Address $o
|
||||||
|
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\RedirectResponse
|
||||||
|
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||||
|
*/
|
||||||
|
public function address_mov(Request $request,System $so,Address $o)
|
||||||
|
{
|
||||||
|
session()->flash('accordion','address');
|
||||||
|
|
||||||
|
// Quick check that this address belongs to this system
|
||||||
|
if ($so->addresses->search(function($item) use ($o) { return $item->id === $o->id; }) === FALSE)
|
||||||
|
abort(404);
|
||||||
|
|
||||||
|
if ($request->post()) {
|
||||||
|
$this->authorize('admin',$o);
|
||||||
|
|
||||||
|
$validated = $request->validate([
|
||||||
|
'system_id' => 'required|exists:systems,id',
|
||||||
|
'remove' => 'nullable|boolean',
|
||||||
|
'remsess' => 'nullable|boolean|exclude_if:remove,1',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$o->system_id = $validated['system_id'];
|
||||||
|
$o->save();
|
||||||
|
|
||||||
|
if (Arr::get($validated,'remove')) {
|
||||||
|
$so->sessions()->detach($o->zone);
|
||||||
|
$so->mailers()->detach();
|
||||||
|
$so->users()->detach();
|
||||||
|
$so->delete();
|
||||||
|
|
||||||
|
} elseif (Arr::get($validated,'remsess')) {
|
||||||
|
$so->sessions()->detach($o->zone);
|
||||||
|
}
|
||||||
|
|
||||||
|
return redirect()->to('system/addedit/'.$validated['system_id']);
|
||||||
|
}
|
||||||
|
|
||||||
|
return view('system.moveaddr')
|
||||||
|
->with('o',$o);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Promote an address node -> NC
|
||||||
|
*
|
||||||
|
* @param Address $o
|
||||||
|
* @return \Illuminate\Http\RedirectResponse
|
||||||
|
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||||
|
*/
|
||||||
|
public function address_pro(Address $o)
|
||||||
|
{
|
||||||
|
// @todo This should be admin of the zone
|
||||||
|
$this->authorize('admin',$o);
|
||||||
|
session()->flash('accordion','address');
|
||||||
|
|
||||||
|
// Make sure that no other system has this address active.
|
||||||
|
if ($o->role === Address::NODE_NC)
|
||||||
|
return redirect()->back()->withErrors(['proaddress'=>sprintf('%s cannot be promoted any more',$o->ftn3D)]);
|
||||||
|
|
||||||
|
$o->role = ($o->role >> 1);
|
||||||
|
$o->save();
|
||||||
|
|
||||||
|
return redirect()->to(sprintf('system/addedit/%d',$o->system_id));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recover a deleted address
|
||||||
|
*
|
||||||
|
* @param int $id
|
||||||
|
* @return \Illuminate\Http\RedirectResponse
|
||||||
|
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||||
|
*/
|
||||||
|
public function address_pur(int $id)
|
||||||
|
{
|
||||||
|
$o = Address::onlyTrashed()->findOrFail($id);
|
||||||
|
|
||||||
|
// @todo This should be admin of the zone
|
||||||
|
$this->authorize('admin',$o);
|
||||||
|
session()->flash('accordion','address');
|
||||||
|
|
||||||
|
$o->forceDelete();
|
||||||
|
|
||||||
|
return redirect()->to(sprintf('system/addedit/%d',$o->system_id));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recover a deleted address
|
||||||
|
*
|
||||||
|
* @param int $id
|
||||||
|
* @return \Illuminate\Http\RedirectResponse
|
||||||
|
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||||
|
*/
|
||||||
|
public function address_rec(int $id)
|
||||||
|
{
|
||||||
|
$o = Address::onlyTrashed()->findOrFail($id);
|
||||||
|
|
||||||
|
// @todo This should be admin of the zone
|
||||||
|
$this->authorize('admin',$o);
|
||||||
|
session()->flash('accordion','address');
|
||||||
|
|
||||||
|
$o->restore();
|
||||||
|
|
||||||
|
return redirect()->to(sprintf('system/addedit/%d',$o->system_id));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Suspend address assigned to a host
|
||||||
|
*
|
||||||
|
* @param Address $o
|
||||||
|
* @return \Illuminate\Http\RedirectResponse
|
||||||
|
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||||
|
*/
|
||||||
|
public function address_sus(Address $o)
|
||||||
|
{
|
||||||
|
// @todo This should be admin of the zone
|
||||||
|
$this->authorize('admin',$o);
|
||||||
|
session()->flash('accordion','address');
|
||||||
|
|
||||||
|
// Make sure that no other system has this address active.
|
||||||
|
if (! $o->active && ($x=Address::where([
|
||||||
|
'zone_id'=>$o->zone_id,
|
||||||
|
'host_id'=>$o->host_id,
|
||||||
|
'node_id'=>$o->node_id,
|
||||||
|
'point_id'=>$o->point_id,
|
||||||
|
'active'=>TRUE,
|
||||||
|
])->single())) {
|
||||||
|
|
||||||
|
return redirect()->back()->withErrors(['susaddress'=>sprintf('%s is already active on system [<a href="%s">%s</a>]',$o->ftn,url('system/addedit',$x->system_id),$x->system->name)]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$o->active = (! $o->active);
|
||||||
|
$o->save();
|
||||||
|
|
||||||
|
return redirect()->to(sprintf('system/addedit/%d',$o->system_id));
|
||||||
|
}
|
||||||
|
|
||||||
public function api_address(Request $request,System $o): Collection
|
public function api_address(Request $request,System $o): Collection
|
||||||
{
|
{
|
||||||
return Address::select(['addresses.id','addresses.zone_id','region_id','host_id','node_id','point_id'])
|
return Address::select(['addresses.id','addresses.zone_id','region_id','host_id','node_id','point_id'])
|
||||||
@ -417,26 +566,13 @@ class SystemController extends Controller
|
|||||||
return $o;
|
return $o;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Systems with no owners
|
|
||||||
*/
|
|
||||||
public function api_orphan(Request $request): Collection
|
|
||||||
{
|
|
||||||
return System::select(['id','name'])
|
|
||||||
->leftjoin('system_user',['system_user.system_id'=>'systems.id'])
|
|
||||||
->whereNull('user_id')
|
|
||||||
->where('systems.name','ilike','%'.$request->term.'%')
|
|
||||||
->orderBy('name')
|
|
||||||
->get();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Identify all the addresses from systems that are not owned by a user
|
* Identify all the addresses from systems that are not owned by a user
|
||||||
*
|
*
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
* @return Collection
|
* @return Collection
|
||||||
*/
|
*/
|
||||||
public function api_orphan_address(Request $request): Collection
|
public function api_address_orphan(Request $request): Collection
|
||||||
{
|
{
|
||||||
$result = collect();
|
$result = collect();
|
||||||
|
|
||||||
@ -497,67 +633,6 @@ class SystemController extends Controller
|
|||||||
->with('setup',Setup::findOrFail(config('app.id')));
|
->with('setup',Setup::findOrFail(config('app.id')));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Delete address assigned to a host
|
|
||||||
*
|
|
||||||
* @param Address $o
|
|
||||||
* @return \Illuminate\Http\RedirectResponse
|
|
||||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
|
||||||
*/
|
|
||||||
public function del_address(Address $o)
|
|
||||||
{
|
|
||||||
// @todo This should be admin of the zone
|
|
||||||
$this->authorize('admin',$o);
|
|
||||||
session()->flash('accordion','address');
|
|
||||||
|
|
||||||
$sid = $o->system_id;
|
|
||||||
$o->active = FALSE;
|
|
||||||
$o->save();
|
|
||||||
$o->delete();
|
|
||||||
|
|
||||||
return redirect()->to(sprintf('ftn/system/addedit/%d',$sid));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Demo an address NC -> node
|
|
||||||
*
|
|
||||||
* @param Address $o
|
|
||||||
* @return \Illuminate\Http\RedirectResponse
|
|
||||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
|
||||||
*/
|
|
||||||
public function dem_address(Address $o)
|
|
||||||
{
|
|
||||||
// @todo This should be admin of the zone
|
|
||||||
$this->authorize('admin',$o);
|
|
||||||
session()->flash('accordion','address');
|
|
||||||
|
|
||||||
// Make sure that no other system has this address active.
|
|
||||||
if ($o->role === Address::NODE_ACTIVE)
|
|
||||||
return redirect()->back()->withErrors(['demaddress'=>sprintf('%s cannot be demoted any more',$o->ftn3D)]);
|
|
||||||
|
|
||||||
$o->role = ($o->role << 1);
|
|
||||||
$o->save();
|
|
||||||
|
|
||||||
return redirect()->to(sprintf('ftn/system/addedit/%d',$o->system_id));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Delete address assigned to a host
|
|
||||||
*
|
|
||||||
* @param Address $o
|
|
||||||
* @return \Illuminate\Http\RedirectResponse
|
|
||||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
|
||||||
*/
|
|
||||||
public function del_session(System $o,Zone $zo)
|
|
||||||
{
|
|
||||||
$this->authorize('admin',$zo);
|
|
||||||
session()->flash('accordion','session');
|
|
||||||
|
|
||||||
$o->sessions()->detach($zo);
|
|
||||||
|
|
||||||
return redirect()->to(sprintf('ftn/system/addedit/%d',$o->id));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update the systems echoareas
|
* Update the systems echoareas
|
||||||
*
|
*
|
||||||
@ -641,186 +716,10 @@ class SystemController extends Controller
|
|||||||
->with('fileareas',$fo);
|
->with('fileareas',$fo);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function home()
|
|
||||||
{
|
|
||||||
return view('system.home');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Move address to another system
|
|
||||||
*
|
|
||||||
* @param Request $request
|
|
||||||
* @param System $so
|
|
||||||
* @param Address $o
|
|
||||||
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\RedirectResponse
|
|
||||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
|
||||||
*/
|
|
||||||
public function mov_address(Request $request,System $so,Address $o)
|
|
||||||
{
|
|
||||||
session()->flash('accordion','address');
|
|
||||||
|
|
||||||
// Quick check that this address belongs to this system
|
|
||||||
if ($so->addresses->search(function($item) use ($o) { return $item->id === $o->id; }) === FALSE)
|
|
||||||
abort(404);
|
|
||||||
|
|
||||||
if ($request->post()) {
|
|
||||||
$this->authorize('admin',$o);
|
|
||||||
|
|
||||||
$validated = $request->validate([
|
|
||||||
'system_id' => 'required|exists:systems,id',
|
|
||||||
'remove' => 'nullable|boolean',
|
|
||||||
'remsess' => 'nullable|boolean|exclude_if:remove,1',
|
|
||||||
]);
|
|
||||||
|
|
||||||
$o->system_id = $validated['system_id'];
|
|
||||||
$o->save();
|
|
||||||
|
|
||||||
if (Arr::get($validated,'remove')) {
|
|
||||||
$so->sessions()->detach($o->zone);
|
|
||||||
$so->mailers()->detach();
|
|
||||||
$so->users()->detach();
|
|
||||||
$so->delete();
|
|
||||||
|
|
||||||
} elseif (Arr::get($validated,'remsess')) {
|
|
||||||
$so->sessions()->detach($o->zone);
|
|
||||||
}
|
|
||||||
|
|
||||||
return redirect()->to('ftn/system/addedit/'.$validated['system_id']);
|
|
||||||
}
|
|
||||||
|
|
||||||
return view('system.moveaddr')
|
|
||||||
->with('o',$o);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function ours()
|
|
||||||
{
|
|
||||||
return view('system.ours');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Promote an address node -> NC
|
|
||||||
*
|
|
||||||
* @param Address $o
|
|
||||||
* @return \Illuminate\Http\RedirectResponse
|
|
||||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
|
||||||
*/
|
|
||||||
public function pro_address(Address $o)
|
|
||||||
{
|
|
||||||
// @todo This should be admin of the zone
|
|
||||||
$this->authorize('admin',$o);
|
|
||||||
session()->flash('accordion','address');
|
|
||||||
|
|
||||||
// Make sure that no other system has this address active.
|
|
||||||
if ($o->role === Address::NODE_NC)
|
|
||||||
return redirect()->back()->withErrors(['proaddress'=>sprintf('%s cannot be promoted any more',$o->ftn3D)]);
|
|
||||||
|
|
||||||
$o->role = ($o->role >> 1);
|
|
||||||
$o->save();
|
|
||||||
|
|
||||||
return redirect()->to(sprintf('ftn/system/addedit/%d',$o->system_id));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Suspend address assigned to a host
|
|
||||||
*
|
|
||||||
* @param Address $o
|
|
||||||
* @return \Illuminate\Http\RedirectResponse
|
|
||||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
|
||||||
*/
|
|
||||||
public function sus_address(Address $o)
|
|
||||||
{
|
|
||||||
// @todo This should be admin of the zone
|
|
||||||
$this->authorize('admin',$o);
|
|
||||||
session()->flash('accordion','address');
|
|
||||||
|
|
||||||
// Make sure that no other system has this address active.
|
|
||||||
if (! $o->active && ($x=Address::where([
|
|
||||||
'zone_id'=>$o->zone_id,
|
|
||||||
'host_id'=>$o->host_id,
|
|
||||||
'node_id'=>$o->node_id,
|
|
||||||
'point_id'=>$o->point_id,
|
|
||||||
'active'=>TRUE,
|
|
||||||
])->single())) {
|
|
||||||
|
|
||||||
return redirect()->back()->withErrors(['susaddress'=>sprintf('%s is already active on system [<a href="%s">%s</a>]',$o->ftn,url('ftn/system/addedit',$x->system_id),$x->system->name)]);
|
|
||||||
}
|
|
||||||
|
|
||||||
$o->active = (! $o->active);
|
|
||||||
$o->save();
|
|
||||||
|
|
||||||
return redirect()->to(sprintf('ftn/system/addedit/%d',$o->system_id));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Recover a deleted address
|
|
||||||
*
|
|
||||||
* @param int $id
|
|
||||||
* @return \Illuminate\Http\RedirectResponse
|
|
||||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
|
||||||
*/
|
|
||||||
public function rec_address(int $id)
|
|
||||||
{
|
|
||||||
$o = Address::onlyTrashed()->findOrFail($id);
|
|
||||||
|
|
||||||
// @todo This should be admin of the zone
|
|
||||||
$this->authorize('admin',$o);
|
|
||||||
session()->flash('accordion','address');
|
|
||||||
|
|
||||||
$o->restore();
|
|
||||||
|
|
||||||
return redirect()->to(sprintf('ftn/system/addedit/%d',$o->system_id));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Recover a deleted address
|
|
||||||
*
|
|
||||||
* @param int $id
|
|
||||||
* @return \Illuminate\Http\RedirectResponse
|
|
||||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
|
||||||
*/
|
|
||||||
public function pur_address(int $id)
|
|
||||||
{
|
|
||||||
$o = Address::onlyTrashed()->findOrFail($id);
|
|
||||||
|
|
||||||
// @todo This should be admin of the zone
|
|
||||||
$this->authorize('admin',$o);
|
|
||||||
session()->flash('accordion','address');
|
|
||||||
|
|
||||||
$o->forceDelete();
|
|
||||||
|
|
||||||
return redirect()->to(sprintf('ftn/system/addedit/%d',$o->system_id));
|
|
||||||
}
|
|
||||||
|
|
||||||
// @todo Can this be consolidated with system_register()
|
|
||||||
public function system_link(Request $request)
|
|
||||||
{
|
|
||||||
if (! $request->system_id)
|
|
||||||
return redirect('user/system/register');
|
|
||||||
|
|
||||||
$s = Setup::findOrFail(config('app.id'))->system;
|
|
||||||
$so = System::findOrFail($request->system_id);
|
|
||||||
|
|
||||||
$ca = NULL;
|
|
||||||
$la = NULL;
|
|
||||||
foreach ($s->akas as $ao) {
|
|
||||||
if (($ca=$so->match($ao->zone))->count())
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($ca->count() && $la=$ca->pop()) {
|
|
||||||
Notification::route('netmail',$la)->notify(new AddressLink(Auth::user()));
|
|
||||||
AddressPoll::dispatch($la)->delay(15);
|
|
||||||
}
|
|
||||||
|
|
||||||
return view('user.system.register_send')
|
|
||||||
->with('la',$la)
|
|
||||||
->with('o',$so);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register a system, or link to an existing system
|
* Register a system, or link to an existing system
|
||||||
*/
|
*/
|
||||||
public function system_register(SystemRegister $request)
|
public function register(SystemRegister $request)
|
||||||
{
|
{
|
||||||
// Step 1, show the user a form to select an existing defined system
|
// Step 1, show the user a form to select an existing defined system
|
||||||
if ($request->isMethod('GET'))
|
if ($request->isMethod('GET'))
|
||||||
@ -863,7 +762,7 @@ class SystemController extends Controller
|
|||||||
|
|
||||||
// @todo if the system already exists and part of one of our networks, we'll need to send the registration email to confirm the address.
|
// @todo if the system already exists and part of one of our networks, we'll need to send the registration email to confirm the address.
|
||||||
// @todo mark the system (or addresses) as "pending" at this stage until it is confirmed
|
// @todo mark the system (or addresses) as "pending" at this stage until it is confirmed
|
||||||
return redirect()->to(url('ftn/system/addedit',$o->id));
|
return redirect()->to(url('system/addedit',$o->id));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Re-flash our previously input data
|
// Re-flash our previously input data
|
||||||
@ -876,6 +775,84 @@ class SystemController extends Controller
|
|||||||
->with('errors',new ViewErrorBag);
|
->with('errors',new ViewErrorBag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add Session details
|
||||||
|
*
|
||||||
|
* @param Request $request
|
||||||
|
* @param System $o
|
||||||
|
* @return \Illuminate\Http\RedirectResponse
|
||||||
|
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||||
|
*/
|
||||||
|
public function session_add(Request $request,System $o)
|
||||||
|
{
|
||||||
|
// @todo This should be admin of the zone
|
||||||
|
$this->authorize('update',$o);
|
||||||
|
session()->flash('accordion','session');
|
||||||
|
|
||||||
|
$validate = $request->validate([
|
||||||
|
'zone_id' => 'required|exists:zones,id',
|
||||||
|
'sespass' => 'required|string|min:4',
|
||||||
|
'pktpass' => 'required|string|min:4|max:8',
|
||||||
|
'ticpass' => 'required|string|min:4',
|
||||||
|
'fixpass' => 'required|string|min:4',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$zo = Zone::findOrFail($validate['zone_id']);
|
||||||
|
|
||||||
|
// If this session is for the ZC, it now becomes the default.
|
||||||
|
if ($o->match($zo,Address::NODE_ZC)->count()) {
|
||||||
|
SystemZone::where('default',TRUE)->update(['default'=>FALSE]);
|
||||||
|
$validate['default'] = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
$o->sessions()->attach($zo,$validate);
|
||||||
|
|
||||||
|
return redirect()->to(sprintf('system/addedit/%d',$o->id));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete address assigned to a host
|
||||||
|
*
|
||||||
|
* @param Address $o
|
||||||
|
* @return \Illuminate\Http\RedirectResponse
|
||||||
|
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||||
|
*/
|
||||||
|
public function session_del(System $o,Zone $zo)
|
||||||
|
{
|
||||||
|
$this->authorize('admin',$zo);
|
||||||
|
session()->flash('accordion','session');
|
||||||
|
|
||||||
|
$o->sessions()->detach($zo);
|
||||||
|
|
||||||
|
return redirect()->to(sprintf('system/addedit/%d',$o->id));
|
||||||
|
}
|
||||||
|
// @todo Can this be consolidated with system_register()
|
||||||
|
|
||||||
|
public function system_link(Request $request)
|
||||||
|
{
|
||||||
|
if (! $request->system_id)
|
||||||
|
return redirect('user/system/register');
|
||||||
|
|
||||||
|
$s = Setup::findOrFail(config('app.id'))->system;
|
||||||
|
$so = System::findOrFail($request->system_id);
|
||||||
|
|
||||||
|
$ca = NULL;
|
||||||
|
$la = NULL;
|
||||||
|
foreach ($s->akas as $ao) {
|
||||||
|
if (($ca=$so->match($ao->zone))->count())
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($ca->count() && $la=$ca->pop()) {
|
||||||
|
Notification::route('netmail',$la)->notify(new AddressLink(Auth::user()));
|
||||||
|
AddressPoll::dispatch($la)->delay(15);
|
||||||
|
}
|
||||||
|
|
||||||
|
return view('user.system.register_send')
|
||||||
|
->with('la',$la)
|
||||||
|
->with('o',$so);
|
||||||
|
}
|
||||||
|
|
||||||
public function view(System $o)
|
public function view(System $o)
|
||||||
{
|
{
|
||||||
$o->load(['addresses']);
|
$o->load(['addresses']);
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
@foreach ($user->systems as $o)
|
@foreach ($user->systems as $o)
|
||||||
<tr>
|
<tr>
|
||||||
<th><a href="{{ url('ftn/system/addedit',[$o->id]) }}">{{ $o->name }}</a></th>
|
<th><a href="{{ url('system/addedit',[$o->id]) }}">{{ $o->name }}</a></th>
|
||||||
<th class="text-end">{!! $o->akas->pluck('ftn')->join('<br>') !!}</th>
|
<th class="text-end">{!! $o->akas->pluck('ftn')->join('<br>') !!}</th>
|
||||||
</tr>
|
</tr>
|
||||||
@endforeach
|
@endforeach
|
||||||
@ -41,7 +41,7 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
@foreach ($user->systems as $o)
|
@foreach ($user->systems as $o)
|
||||||
<tr>
|
<tr>
|
||||||
<th><a href="{{ url('ftn/system/addedit',[$o->id]) }}">{{ $o->name }}</a></th>
|
<th><a href="{{ url('system/addedit',[$o->id]) }}">{{ $o->name }}</a></th>
|
||||||
<th class="text-end">{!! $o->addresses->pluck('zone.domain.echoareas')->flatten()->pluck('name')->unique()->sort()->join(', ') !!}</th>
|
<th class="text-end">{!! $o->addresses->pluck('zone.domain.echoareas')->flatten()->pluck('name')->unique()->sort()->join(', ') !!}</th>
|
||||||
</tr>
|
</tr>
|
||||||
@endforeach
|
@endforeach
|
||||||
|
@ -126,7 +126,7 @@
|
|||||||
@foreach ($o->zones->sortBy('zone_id') as $oz)
|
@foreach ($o->zones->sortBy('zone_id') as $oz)
|
||||||
@foreach ($oz->addresses as $ao)
|
@foreach ($oz->addresses as $ao)
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="{{ url('ftn/system/addedit',[$ao->system_id]) }}">{{ $ao->system->full_name($ao) }}</a> @auth<span class="float-end"><small>@if($ao->session('sespass'))<sup>{{ $ao->session('default') ? '**' : '*' }}</sup>@elseif($ao->system->setup)<sup class="success">+</sup>@endif[{{ $ao->system_id }}]</small></span>@endauth</td>
|
<td><a href="{{ url('system/addedit',[$ao->system_id]) }}">{{ $ao->system->full_name($ao) }}</a> @auth<span class="float-end"><small>@if($ao->session('sespass'))<sup>{{ $ao->session('default') ? '**' : '*' }}</sup>@elseif($ao->system->setup)<sup class="success">+</sup>@endif[{{ $ao->system_id }}]</small></span>@endauth</td>
|
||||||
<td>{{ $ao->system->sysop }}</td>
|
<td>{{ $ao->system->sysop }}</td>
|
||||||
<td>{{ $ao->system->location }}</td>
|
<td>{{ $ao->system->location }}</td>
|
||||||
<td>{{ $ao->ftn4d }}</td>
|
<td>{{ $ao->ftn4d }}</td>
|
||||||
|
@ -178,7 +178,7 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
@foreach ($o->addresses as $ao)
|
@foreach ($o->addresses as $ao)
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="{{ url('ftn/system/addedit',[$ao->system_id]) }}">{{ $ao->system->full_name($ao) }}</a> @auth<span class="float-end"><small>@if($ao->session('sespass'))<sup>{{ $ao->session('default') ? '**' : '*' }}</sup>@elseif($ao->system->setup)<sup class="success">+</sup>@endif[{{ $ao->system_id }}]</small></span>@endauth</td>
|
<td><a href="{{ url('system/addedit',[$ao->system_id]) }}">{{ $ao->system->full_name($ao) }}</a> @auth<span class="float-end"><small>@if($ao->session('sespass'))<sup>{{ $ao->session('default') ? '**' : '*' }}</sup>@elseif($ao->system->setup)<sup class="success">+</sup>@endif[{{ $ao->system_id }}]</small></span>@endauth</td>
|
||||||
<td>{{ $ao->ftn_3d }}</td>
|
<td>{{ $ao->ftn_3d }}</td>
|
||||||
<td>{{ $ao->system->last_session ? $ao->system->last_session->format('Y-m-d H:i') : '-' }}</td>
|
<td>{{ $ao->system->last_session ? $ao->system->last_session->format('Y-m-d H:i') : '-' }}</td>
|
||||||
<td>{{ ($x=$o->waiting($ao))->count() ? $x->first()->datetime->format('Y-m-d H:i') : '-' }}</td>
|
<td>{{ ($x=$o->waiting($ao))->count() ? $x->first()->datetime->format('Y-m-d H:i') : '-' }}</td>
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
<dl>
|
<dl>
|
||||||
<dt>My Systems</dt>
|
<dt>My Systems</dt>
|
||||||
@foreach ($user->systems->sortBy('name') as $o)
|
@foreach ($user->systems->sortBy('name') as $o)
|
||||||
<dd><a href="{{ url('ftn/system/addedit',['id'=>$o->id]) }}">{{ $o->name }}</a></dd>
|
<dd><a href="{{ url('system/addedit',['id'=>$o->id]) }}">{{ $o->name }}</a></dd>
|
||||||
@endforeach
|
@endforeach
|
||||||
</dl>
|
</dl>
|
||||||
@endauth
|
@endauth
|
||||||
@ -26,7 +26,7 @@
|
|||||||
<dl>
|
<dl>
|
||||||
<dt>Network Admin</dt>
|
<dt>Network Admin</dt>
|
||||||
<dd><a href="{{ url('ftn/domain') }}">Domains</a></dd>
|
<dd><a href="{{ url('ftn/domain') }}">Domains</a></dd>
|
||||||
<dd><a href="{{ url('ftn/system') }}">Systems</a></dd>
|
<dd><a href="{{ url('system') }}">Systems</a></dd>
|
||||||
<dd><a href="{{ url('ftn/zone') }}">Zones</a></dd>
|
<dd><a href="{{ url('ftn/zone') }}">Zones</a></dd>
|
||||||
<dd><a href="{{ url('ftn/echoarea') }}">Echoareas</a></dd>
|
<dd><a href="{{ url('ftn/echoarea') }}">Echoareas</a></dd>
|
||||||
<dd><a href="{{ url('ftn/filearea') }}">Fileareas</a></dd>
|
<dd><a href="{{ url('ftn/filearea') }}">Fileareas</a></dd>
|
||||||
@ -34,7 +34,7 @@
|
|||||||
|
|
||||||
<dl>
|
<dl>
|
||||||
<dt>System Admin</dt>
|
<dt>System Admin</dt>
|
||||||
<dd><a href="{{ url('ftn/our_systems') }}">This Host Systems</a></dd>
|
<dd><a href="{{ url('system/ours') }}">This Host Systems</a></dd>
|
||||||
</dl>
|
</dl>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
|
@ -45,9 +45,9 @@ use App\Classes\Protocol\{Binkp,EMSI,DNS};
|
|||||||
</span>
|
</span>
|
||||||
<span class="input-helper">
|
<span class="input-helper">
|
||||||
@if(! $o->system_id)
|
@if(! $o->system_id)
|
||||||
Add a <a href="{{ url('ftn/system/addedit') }}">NEW System</a>
|
Add a <a href="{{ url('system/addedit') }}">NEW System</a>
|
||||||
@else
|
@else
|
||||||
<a href="{{ url('ftn/system/addedit',[$o->system_id]) }}">Edit</a> System
|
<a href="{{ url('system/addedit',[$o->system_id]) }}">Edit</a> System
|
||||||
@endif
|
@endif
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
@ -118,18 +118,18 @@
|
|||||||
<!-- No options -->
|
<!-- No options -->
|
||||||
<a href="javascript:;" title="Net Disabled"><i class="bi bi-slash-square"></i></a>
|
<a href="javascript:;" title="Net Disabled"><i class="bi bi-slash-square"></i></a>
|
||||||
@elseif($oo->trashed())
|
@elseif($oo->trashed())
|
||||||
<a href="{{ url('ftn/system/recaddress',[$oo->id]) }}" title="Restore Address"><i class="bi bi-bandaid"></i></a>
|
<a href="{{ url('system/address/rec',[$oo->id]) }}" title="Restore Address"><i class="bi bi-bandaid"></i></a>
|
||||||
<a href="{{ url('ftn/system/puraddress',[$oo->id]) }}" title="Purge Address" class="purge"><i class="bi bi-scissors"></i></a>
|
<a href="{{ url('system/address/pur',[$oo->id]) }}" title="Purge Address" class="purge"><i class="bi bi-scissors"></i></a>
|
||||||
@else
|
@else
|
||||||
<a href="{{ url('ftn/system/modaddress',[$oo->id]) }}" data-id="{{ $oo->id }}" title="Modify Address" class="modaddress" aria-readonly="true"><i class="bi bi-pencil-square"></i></a>
|
<a href="{{ url('system/address/mod',[$oo->id]) }}" data-id="{{ $oo->id }}" title="Modify Address" class="modaddress" aria-readonly="true"><i class="bi bi-pencil-square"></i></a>
|
||||||
<a href="{{ url('ftn/system/susaddress',[$oo->id]) }}" title="@if($oo->active)Pause @else Activate @endif Address"><i class="bi @if($oo->active)bi-pause-circle @else bi-play-circle @endif"></i></a>
|
<a href="{{ url('system/address/sus',[$oo->id]) }}" title="@if($oo->active)Pause @else Activate @endif Address"><i class="bi @if($oo->active)bi-pause-circle @else bi-play-circle @endif"></i></a>
|
||||||
<a href="{{ url('ftn/system/movaddress',[$o->id,$oo->id]) }}" title="Move Address to another System"><i class="bi bi-arrow-right-square"></i></a>
|
<a href="{{ url('system/address/mov',[$o->id,$oo->id]) }}" title="Move Address to another System"><i class="bi bi-arrow-right-square"></i></a>
|
||||||
<a href="{{ url('ftn/system/deladdress',[$oo->id]) }}" title="Delete Address"><i class="bi bi-trash"></i></a>
|
<a href="{{ url('system/address/del',[$oo->id]) }}" title="Delete Address"><i class="bi bi-trash"></i></a>
|
||||||
@if ((\App\Models\Address::NODE_HC|\App\Models\Address::NODE_ACTIVE) & $oo->role)
|
@if ((\App\Models\Address::NODE_HC|\App\Models\Address::NODE_ACTIVE) & $oo->role)
|
||||||
<a href="{{ url('ftn/system/proaddress',[$oo->id]) }}" title="Promote Address"><i class="bi bi-arrow-up-square"></i></a>
|
<a href="{{ url('system/address/pro',[$oo->id]) }}" title="Promote Address"><i class="bi bi-arrow-up-square"></i></a>
|
||||||
@endif
|
@endif
|
||||||
@if ((\App\Models\Address::NODE_NC|\App\Models\Address::NODE_HC) & $oo->role)
|
@if ((\App\Models\Address::NODE_NC|\App\Models\Address::NODE_HC) & $oo->role)
|
||||||
<a href="{{ url('ftn/system/demaddress',[$oo->id]) }}" title="Demote Address"><i class="bi bi-arrow-down-square"></i></a>
|
<a href="{{ url('system/address/dem',[$oo->id]) }}" title="Demote Address"><i class="bi bi-arrow-down-square"></i></a>
|
||||||
@endif
|
@endif
|
||||||
@endif
|
@endif
|
||||||
@endcan
|
@endcan
|
||||||
@ -211,10 +211,10 @@
|
|||||||
<td>{{ $oo->pivot->fixpass }}</td>
|
<td>{{ $oo->pivot->fixpass }}</td>
|
||||||
<td style="width: 70px;">
|
<td style="width: 70px;">
|
||||||
{{--
|
{{--
|
||||||
<a href="{{ url('ftn/system/modsession',[$oo->id]) }}" title="Modify Details" class="modify"><i class="bi bi-pen"></i></a>
|
<a href="{{ url('system/session/mod',[$oo->id]) }}" title="Modify Details" class="modify"><i class="bi bi-pen"></i></a>
|
||||||
--}}
|
--}}
|
||||||
<a href="{{ url('ftn/system/delsession',[$o->id,$oo->id]) }}" title="Delete Details" class="purge"><i class="bi bi-trash"></i></a>
|
<a href="{{ url('system/session/del',[$o->id,$oo->id]) }}" title="Delete Details" class="purge"><i class="bi bi-trash"></i></a>
|
||||||
<a href="{{ url('ftn/system/areafix',[$o->id,$oo->id]) }}" title="Areafix/Filefix"><i class="bi bi-envelope-paper"></i></a>
|
<a href="{{ url('system/areafix',[$o->id,$oo->id]) }}" title="Areafix/Filefix"><i class="bi bi-envelope-paper"></i></a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@endforeach
|
@endforeach
|
||||||
|
@ -33,16 +33,16 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td><input type="radio" name="src" value="{{ $ao->id }}"></td>
|
<td><input type="radio" name="src" value="{{ $ao->id }}"></td>
|
||||||
<td><input type="radio" name="dst" value="{{ $ao->id }}"></td>
|
<td><input type="radio" name="dst" value="{{ $ao->id }}"></td>
|
||||||
<th>{{ $ao->id }} {{ $ao->system_id }}:<a href="{{ url('ftn/system/addedit',$ao->system_id) }}">{{ $ao->system->name }}</a></th>
|
<th>{{ $ao->id }} {{ $ao->system_id }}:<a href="{{ url('system/addedit',$ao->system_id) }}">{{ $ao->system->name }}</a></th>
|
||||||
<th>{{ $ao->ftn }}</th>
|
<th>{{ $ao->ftn }}</th>
|
||||||
<td>
|
<td>
|
||||||
@if($ao->trashed())
|
@if($ao->trashed())
|
||||||
<a href="{{ url('ftn/system/recaddress',[$ao->id]) }}" title="Restore Address"><i class="bi bi-bandaid"></i></a>
|
<a href="{{ url('system/address/rec',[$ao->id]) }}" title="Restore Address"><i class="bi bi-bandaid"></i></a>
|
||||||
<a href="{{ url('ftn/system/puraddress',[$ao->id]) }}" title="Purge Address" class="purge"><i class="bi bi-scissors"></i></a>
|
<a href="{{ url('system/address/pur',[$ao->id]) }}" title="Purge Address" class="purge"><i class="bi bi-scissors"></i></a>
|
||||||
@else
|
@else
|
||||||
<a href="{{ url('ftn/system/susaddress',[$ao->id]) }}" title="@if($ao->active)Pause @else Activate @endif Address"><i class="bi @if($ao->active)bi-pause-circle @else bi-play-circle @endif"></i></a>
|
<a href="{{ url('system/address/sus',[$ao->id]) }}" title="@if($ao->active)Pause @else Activate @endif Address"><i class="bi @if($ao->active)bi-pause-circle @else bi-play-circle @endif"></i></a>
|
||||||
<a href="{{ url('ftn/system/movaddress',[$ao->system_id,$ao->id]) }}" title="Move Address to another System"><i class="bi bi-arrow-right-square"></i></a>
|
<a href="{{ url('system/address/mov',[$ao->system_id,$ao->id]) }}" title="Move Address to another System"><i class="bi bi-arrow-right-square"></i></a>
|
||||||
<a href="{{ url('ftn/system/deladdress',[$ao->id]) }}" title="Delete Address"><i class="bi bi-trash"></i></a>
|
<a href="{{ url('system/address/del',[$ao->id]) }}" title="Delete Address"><i class="bi bi-trash"></i></a>
|
||||||
@endif
|
@endif
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<form class="row g-0 needs-validation" method="post" action="{{ url('ftn/system/addaddress',$o->id) }}" novalidate>
|
<form class="row g-0 needs-validation" method="post" action="{{ url('system/address/add',$o->id) }}" novalidate>
|
||||||
<input type="hidden" id="action" name="action" value="">
|
<input type="hidden" id="action" name="action" value="">
|
||||||
@csrf
|
@csrf
|
||||||
|
|
||||||
@ -169,7 +169,7 @@
|
|||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-2">
|
<div class="col-2">
|
||||||
<a href="{{ url('ftn/system') }}" class="btn btn-danger">Cancel</a>
|
<a href="{{ url('system') }}" class="btn btn-danger">Cancel</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="col-6 mt-auto mx-auto text-center align-bottom">
|
<span class="col-6 mt-auto mx-auto text-center align-bottom">
|
||||||
@ -216,8 +216,7 @@
|
|||||||
id = $(this).attr('data-id');
|
id = $(this).attr('data-id');
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
|
|
||||||
modify = $.get('{{ url('address/get') }}'+'/'+id,function(data) {
|
modify = $.get('{{ url('system/api/address/get') }}'+'/'+id,function(data) {
|
||||||
console.log(data.security);
|
|
||||||
$('#zone_id').val(data.zone_id).change();
|
$('#zone_id').val(data.zone_id).change();
|
||||||
$('#node_id').val(data.node_id).change();
|
$('#node_id').val(data.node_id).change();
|
||||||
$('#point_id').val(data.point_id).change();
|
$('#point_id').val(data.point_id).change();
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
->orderBy('zone_id')
|
->orderBy('zone_id')
|
||||||
->get())->count())
|
->get())->count())
|
||||||
|
|
||||||
<form class="row g-0 needs-validation" method="post" action="{{ url('ftn/system/echoarea',$o->id) }}" novalidate>
|
<form class="row g-0 needs-validation" method="post" action="{{ url('system/echoarea',$o->id) }}" novalidate>
|
||||||
@csrf
|
@csrf
|
||||||
|
|
||||||
<div class="row pt-0">
|
<div class="row pt-0">
|
||||||
@ -124,7 +124,7 @@
|
|||||||
if (e.status != 412)
|
if (e.status != 412)
|
||||||
alert('That didnt work? Please try again....');
|
alert('That didnt work? Please try again....');
|
||||||
},
|
},
|
||||||
url: '{{ url('system/address',[$o->id]) }}',
|
url: '{{ url('system/api/address',[$o->id]) }}',
|
||||||
cache: false
|
cache: false
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
@ -161,7 +161,7 @@
|
|||||||
if (e.status != 412)
|
if (e.status != 412)
|
||||||
alert('That didnt work? Please try again....');
|
alert('That didnt work? Please try again....');
|
||||||
},
|
},
|
||||||
url: '{{ url('ftn/system/echoarea',[$o->id]) }}',
|
url: '{{ url('system/echoarea',[$o->id]) }}',
|
||||||
cache: false
|
cache: false
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
->orderBy('zone_id')
|
->orderBy('zone_id')
|
||||||
->get())->count())
|
->get())->count())
|
||||||
|
|
||||||
<form class="row g-0 needs-validation" method="post" action="{{ url('ftn/system/filearea',$o->id) }}" novalidate>
|
<form class="row g-0 needs-validation" method="post" action="{{ url('system/filearea',$o->id) }}" novalidate>
|
||||||
@csrf
|
@csrf
|
||||||
|
|
||||||
<div class="row pt-0">
|
<div class="row pt-0">
|
||||||
@ -111,7 +111,7 @@
|
|||||||
if (e.status != 412)
|
if (e.status != 412)
|
||||||
alert('That didnt work? Please try again....');
|
alert('That didnt work? Please try again....');
|
||||||
},
|
},
|
||||||
url: '{{ url('system/address',[$o->id]) }}',
|
url: '{{ url('system/api/address',[$o->id]) }}',
|
||||||
cache: false
|
cache: false
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
@ -148,7 +148,7 @@
|
|||||||
if (e.status != 412)
|
if (e.status != 412)
|
||||||
alert('That didnt work? Please try again....');
|
alert('That didnt work? Please try again....');
|
||||||
},
|
},
|
||||||
url: '{{ url('ftn/system/filearea',[$o->id]) }}',
|
url: '{{ url('system/filearea',[$o->id]) }}',
|
||||||
cache: false
|
cache: false
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
<form class="row g-0 needs-validation" method="post" action="{{ url('ftn/system/addsession',$o->id) }}" novalidate>
|
<form class="row g-0 needs-validation" method="post" action="{{ url('system/session/add',$o->id) }}" novalidate>
|
||||||
@csrf
|
@csrf
|
||||||
|
|
||||||
<div class="row pt-0">
|
<div class="row pt-0">
|
||||||
@ -108,7 +108,7 @@
|
|||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-2">
|
<div class="col-2">
|
||||||
<a href="{{ url('ftn/system') }}" class="btn btn-danger">Cancel</a>
|
<a href="{{ url('system') }}" class="btn btn-danger">Cancel</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="col-6 mt-auto mx-auto text-center align-bottom">
|
<span class="col-6 mt-auto mx-auto text-center align-bottom">
|
||||||
|
@ -15,12 +15,12 @@
|
|||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<p>This system is aware of the following systems
|
<p>This system is aware of the following systems
|
||||||
@can('create',(new \App\Models\System))(you can <a href="{{ url('user/system/register') }}">register</a> more):@endcan
|
@can('create',(new \App\Models\System))(you can <a href="{{ url('user/system/register') }}">register</a> more):@endcan
|
||||||
@can('admin',(new \App\Models\System))(you can <a href="{{ url('ftn/system/addedit') }}">add</a> more):@endcan
|
@can('admin',(new \App\Models\System))(you can <a href="{{ url('system/addedit') }}">add</a> more):@endcan
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@if (\App\Models\System::active()->count() === 0)
|
@if (\App\Models\System::active()->count() === 0)
|
||||||
@can('create',(new \App\Models\System))
|
@can('create',(new \App\Models\System))
|
||||||
<p>There are no systems setup, to <a href="{{ url('ftn/system/addedit') }}">set up your first</a>.</p>
|
<p>There are no systems setup, to <a href="{{ url('system/addedit') }}">set up your first</a>.</p>
|
||||||
@else
|
@else
|
||||||
<p class="pad">There are no systems - you need to ask an admin to create one for you.</p>
|
<p class="pad">There are no systems - you need to ask an admin to create one for you.</p>
|
||||||
@endcan
|
@endcan
|
||||||
@ -42,7 +42,7 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
@foreach (\App\Models\System::active()->with(['addresses.zone.domain'])->get() as $oo)
|
@foreach (\App\Models\System::active()->with(['addresses.zone.domain'])->get() as $oo)
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="{{ url('ftn/system/addedit',[$oo->id]) }}" @cannot('update',$oo)class="disabled" @endcannot>{{ $oo->id }}</a></td>
|
<td><a href="{{ url('system/addedit',[$oo->id]) }}" @cannot('update',$oo)class="disabled" @endcannot>{{ $oo->id }}</a></td>
|
||||||
<td>{{ $oo->name }} @if(! $oo->active)<span class="float-end"><small>[i]</small></span>@endif</td>
|
<td>{{ $oo->name }} @if(! $oo->active)<span class="float-end"><small>[i]</small></span>@endif</td>
|
||||||
<td>{{ $oo->sysop }}</td>
|
<td>{{ $oo->sysop }}</td>
|
||||||
<td>{{ $oo->location }}</td>
|
<td>{{ $oo->location }}</td>
|
||||||
|
@ -41,7 +41,7 @@ Move Address
|
|||||||
@enderror
|
@enderror
|
||||||
</span>
|
</span>
|
||||||
<span class="input-helper">
|
<span class="input-helper">
|
||||||
Add a <a href="{{ url('ftn/system/addedit') }}">NEW System</a>
|
Add a <a href="{{ url('system/addedit') }}">NEW System</a>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
@foreach (\App\Models\SystemZone::select('*')->with(['system','zone.domain'])->get() as $oo)
|
@foreach (\App\Models\SystemZone::select('*')->with(['system','zone.domain'])->get() as $oo)
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ $oo->zone->domain->name }}</td>
|
<td>{{ $oo->zone->domain->name }}</td>
|
||||||
<td><a href="{{ url('ftn/system/addedit',[$oo->system_id]) }}">{{ $oo->system_id }}</a>@if($oo->system->hold)<span class="float-end"><i class="text-danger bi bi-stop-circle"></i></span>@endif</td>
|
<td><a href="{{ url('system/addedit',[$oo->system_id]) }}">{{ $oo->system_id }}</a>@if($oo->system->hold)<span class="float-end"><i class="text-danger bi bi-stop-circle"></i></span>@endif</td>
|
||||||
<td>{{ $oo->system->name }}</td>
|
<td>{{ $oo->system->name }}</td>
|
||||||
<td>{{ $oo->system->sysop }}</td>
|
<td>{{ $oo->system->sysop }}</td>
|
||||||
<td>{{ $oo->system->location }}</td>
|
<td>{{ $oo->system->location }}</td>
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<th>System Name</th>
|
<th>System Name</th>
|
||||||
<td>{{ $o->name }} @can('update',$o)<span class="btn btn-success btn-sm float-end"><a href="{{ url('ftn/system/addedit',$o->id) }}">Edit</a></span>@endcan</td>
|
<td>{{ $o->name }} @can('update',$o)<span class="btn btn-success btn-sm float-end"><a href="{{ url('system/addedit',$o->id) }}">Edit</a></span>@endcan</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Sysop</th>
|
<th>Sysop</th>
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-2">
|
<div class="col-2">
|
||||||
<a href="{{ url('ftn/system') }}" class="btn btn-danger">Cancel</a>
|
<a href="{{ url('system') }}" class="btn btn-danger">Cancel</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="col-6 mt-auto mx-auto text-center align-bottom">
|
<span class="col-6 mt-auto mx-auto text-center align-bottom">
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-2">
|
<div class="col-2">
|
||||||
<a href="{{ url('ftn/system') }}" class="btn btn-danger">Cancel</a>
|
<a href="{{ url('system') }}" class="btn btn-danger">Cancel</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="col-6 mt-auto mx-auto text-center align-bottom">
|
<span class="col-6 mt-auto mx-auto text-center align-bottom">
|
||||||
|
@ -302,7 +302,7 @@
|
|||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
@if($o->exists)
|
@if($o->exists)
|
||||||
@can($action,$o)
|
@can($action,$o)
|
||||||
<a href="{{ url('ftn/system') }}" class="btn btn-danger">Cancel</a>
|
<a href="{{ url('system') }}" class="btn btn-danger">Cancel</a>
|
||||||
<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>
|
||||||
@else
|
@else
|
||||||
<input type="hidden" name="system_id" value="{{ $o->id }}">
|
<input type="hidden" name="system_id" value="{{ $o->id }}">
|
||||||
|
@ -149,7 +149,7 @@
|
|||||||
selectOnBlur: false,
|
selectOnBlur: false,
|
||||||
appendTo: "#address_search_results",
|
appendTo: "#address_search_results",
|
||||||
source: function (query,process) {
|
source: function (query,process) {
|
||||||
addresssearch('{{ url('addresses/orphan') }}',query,process);
|
addresssearch('{{ url('system/api/address/orphan') }}',query,process);
|
||||||
},
|
},
|
||||||
|
|
||||||
matcher: function () { return true; },
|
matcher: function () { return true; },
|
||||||
|
@ -100,7 +100,7 @@
|
|||||||
A system is required.
|
A system is required.
|
||||||
@enderror
|
@enderror
|
||||||
</span>
|
</span>
|
||||||
<span class="input-helper">Add a <a href="{{ url('ftn/system/addedit') }}">NEW System</a>. This system is the primary mailer/tosser responsible for managing the zone.</span>
|
<span class="input-helper">Add a <a href="{{ url('system/addedit') }}">NEW System</a>. This system is the primary mailer/tosser responsible for managing the zone.</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -51,9 +51,6 @@ Route::get('system/view/{o}',[SystemController::class,'view'])
|
|||||||
Route::get('search',[HomeController::class,'search']);
|
Route::get('search',[HomeController::class,'search']);
|
||||||
|
|
||||||
Route::middleware(['auth','verified','activeuser'])->group(function () {
|
Route::middleware(['auth','verified','activeuser'])->group(function () {
|
||||||
Route::get('address/get/{o}',[SystemController::class,'api_address_get'])
|
|
||||||
->where('o','[0-9]+');
|
|
||||||
Route::get('addresses/orphan',[SystemController::class,'api_orphan_address']);
|
|
||||||
Route::get('dashboard',[UserController::class,'dashboard']);
|
Route::get('dashboard',[UserController::class,'dashboard']);
|
||||||
Route::post('default/{o}',[ZoneController::class,'api_default'])
|
Route::post('default/{o}',[ZoneController::class,'api_default'])
|
||||||
->where('o','[0-9]+');
|
->where('o','[0-9]+');
|
||||||
@ -68,43 +65,49 @@ Route::middleware(['auth','verified','activeuser'])->group(function () {
|
|||||||
Route::match(['get','post'],'ftn/filearea/addedit/{o?}',[FileareaController::class,'add_edit'])
|
Route::match(['get','post'],'ftn/filearea/addedit/{o?}',[FileareaController::class,'add_edit'])
|
||||||
->where('o','[0-9]+');
|
->where('o','[0-9]+');
|
||||||
|
|
||||||
Route::get('ftn/our_systems',[SystemController::class,'ours']);
|
/* SYSTEM PATHS */
|
||||||
|
Route::view('system','system.home');
|
||||||
Route::get('ftn/system',[SystemController::class,'home']);
|
Route::post('system/api/address/{o}',[SystemController::class,'api_address'])
|
||||||
Route::match(['get','post'],'ftn/system/addedit/{o?}',[SystemController::class,'add_edit'])
|
|
||||||
->where('o','[0-9]+');
|
->where('o','[0-9]+');
|
||||||
Route::post('ftn/system/addaddress/{o}',[SystemController::class,'add_address'])
|
Route::get('system/api/address/get/{o}',[SystemController::class,'api_address_get'])
|
||||||
->where('o','[0-9]+');
|
->where('o','[0-9]+');
|
||||||
Route::post('ftn/system/addsession/{o}',[SystemController::class,'add_session'])
|
Route::get('system/api/address/orphan',[SystemController::class,'api_address_orphan']);
|
||||||
|
Route::match(['get','post'],'system/addedit/{o?}',[SystemController::class,'add_edit'])
|
||||||
->where('o','[0-9]+');
|
->where('o','[0-9]+');
|
||||||
Route::match(['get','post'],'ftn/system/areafix/{o}/{zo}',[SystemController::class,'areafix'])
|
Route::post('system/address/add/{o}',[SystemController::class,'address_add'])
|
||||||
->where('o','[0-9]+')
|
|
||||||
->where('zo','[0-9]+');
|
|
||||||
Route::get('ftn/system/deladdress/{o}',[SystemController::class,'del_address'])
|
|
||||||
->where('o','[0-9]+');
|
->where('o','[0-9]+');
|
||||||
Route::get('ftn/system/demaddress/{o}',[SystemController::class,'dem_address'])
|
Route::get('system/address/del/{o}',[SystemController::class,'address_del'])
|
||||||
->where('o','[0-9]+');
|
->where('o','[0-9]+');
|
||||||
Route::get('ftn/system/delsession/{o}/{zo}',[SystemController::class,'del_session'])
|
Route::get('system/address/dem/{o}',[SystemController::class,'address_dem'])
|
||||||
->where('o','[0-9]+')
|
|
||||||
->where('zo','[0-9]+');
|
|
||||||
Route::get('ftn/system/proaddress/{o}',[SystemController::class,'pro_address'])
|
|
||||||
->where('o','[0-9]+');
|
->where('o','[0-9]+');
|
||||||
Route::match(['get','post'],'ftn/system/echoarea/{o}',[SystemController::class,'echoareas'])
|
Route::match(['get','post'],'system/address/mov/{so}/{o}',[SystemController::class,'address_mov'])
|
||||||
->where('o','[0-9]+');
|
|
||||||
Route::match(['get','post'],'ftn/system/filearea/{o}',[SystemController::class,'fileareas'])
|
|
||||||
->where('o','[0-9]+');
|
|
||||||
Route::match(['get','post'],'ftn/system/movaddress/{so}/{o}',[SystemController::class,'mov_address'])
|
|
||||||
->where('so','[0-9]+')
|
->where('so','[0-9]+')
|
||||||
->where('o','[0-9]+');
|
->where('o','[0-9]+');
|
||||||
|
Route::get('system/address/pro/{o}',[SystemController::class,'address_pro'])
|
||||||
|
->where('o','[0-9]+');
|
||||||
|
Route::get('system/address/pur/{id}',[SystemController::class,'address_pur'])
|
||||||
|
->where('o','[0-9]+');
|
||||||
|
Route::get('system/address/rec/{id}',[SystemController::class,'address_rec'])
|
||||||
|
->where('o','[0-9]+');
|
||||||
|
Route::get('system/address/sus/{o}',[SystemController::class,'address_sus'])
|
||||||
|
->where('o','[0-9]+');
|
||||||
|
Route::match(['get','post'],'system/areafix/{o}/{zo}',[SystemController::class,'areafix'])
|
||||||
|
->where('o','[0-9]+')
|
||||||
|
->where('zo','[0-9]+');
|
||||||
|
Route::match(['get','post'],'system/echoarea/{o}',[SystemController::class,'echoareas'])
|
||||||
|
->where('o','[0-9]+');
|
||||||
|
Route::match(['get','post'],'system/filearea/{o}',[SystemController::class,'fileareas'])
|
||||||
|
->where('o','[0-9]+');
|
||||||
|
Route::view('system/ours','system.ours');
|
||||||
|
Route::post('system/session/add/{o}',[SystemController::class,'session_add'])
|
||||||
|
->where('o','[0-9]+');
|
||||||
|
Route::get('system/session/del/{o}/{zo}',[SystemController::class,'session_del'])
|
||||||
|
->where('o','[0-9]+')
|
||||||
|
->where('zo','[0-9]+');
|
||||||
|
|
||||||
Route::post('file/contents/{o}/{date}',[HomeController::class,'file_contents'])
|
Route::post('file/contents/{o}/{date}',[HomeController::class,'file_contents'])
|
||||||
->where('o','[0-9]+')
|
->where('o','[0-9]+')
|
||||||
->where('date','[0-9:\-@]+');
|
->where('date','[0-9:\-@]+');
|
||||||
Route::get('ftn/system/recaddress/{id}',[SystemController::class,'rec_address'])
|
|
||||||
->where('o','[0-9]+');
|
|
||||||
Route::get('ftn/system/puraddress/{id}',[SystemController::class,'pur_address'])
|
|
||||||
->where('o','[0-9]+');
|
|
||||||
Route::get('ftn/system/susaddress/{o}',[SystemController::class,'sus_address'])
|
|
||||||
->where('o','[0-9]+');
|
|
||||||
Route::get('ftn/zone',[ZoneController::class,'home']);
|
Route::get('ftn/zone',[ZoneController::class,'home']);
|
||||||
Route::match(['get','post'],'ftn/zone/addedit/{o?}',[ZoneController::class,'add_edit'])
|
Route::match(['get','post'],'ftn/zone/addedit/{o?}',[ZoneController::class,'add_edit'])
|
||||||
->where('o','[0-9]+');
|
->where('o','[0-9]+');
|
||||||
@ -121,10 +124,8 @@ Route::middleware(['auth','verified','activeuser'])->group(function () {
|
|||||||
Route::get('permissions',[HomeController::class,'permissions']);
|
Route::get('permissions',[HomeController::class,'permissions']);
|
||||||
Route::get('regions/{o}',[DomainController::class,'api_regions'])
|
Route::get('regions/{o}',[DomainController::class,'api_regions'])
|
||||||
->where('o','[0-9]+');
|
->where('o','[0-9]+');
|
||||||
Route::post('system/address/{o}',[SystemController::class,'api_address'])
|
|
||||||
->where('o','[0-9]+');
|
Route::match(['get','post'],'user/system/register',[SystemController::class,'register']);
|
||||||
Route::get('systems/orphan',[SystemController::class,'api_orphan']);
|
|
||||||
Route::match(['get','post'],'user/system/register',[SystemController::class,'system_register']);
|
|
||||||
Route::match(['post'],'user/system/link',[SystemController::class,'system_link']);
|
Route::match(['post'],'user/system/link',[SystemController::class,'system_link']);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user