More work on user linking to existing defined system

This commit is contained in:
Deon George 2022-12-04 13:30:38 +11:00
parent 14f28c5263
commit 05528f1c33
6 changed files with 133 additions and 17 deletions

View File

@ -47,23 +47,23 @@ class Font
*/
private function chars(): Collection
{
static $chars = NULL;
static $chars = [];
if (is_null($chars) && $this->text) {
if ($this->text && empty($chars[$this->text])) {
// Trim any leading/trailing spaces
$text = trim(strtolower($this->text));
$chars = collect();
$chars[$this->text] = collect();
// Work out the characters we need
foreach (array_unique(str_split($text)) as $c) {
if (! $x=Arr::get(static::FONT,$c))
continue;
$chars->put($c,$x);
$chars[$this->text]->put($c,$x);
}
}
return $chars ?: collect();
return $chars[$this->text] ?: collect();
}
/**
@ -94,7 +94,7 @@ class Font
// If the last character is a space, we'll reduce the width
$space = TRUE;
foreach ($chars->get($c) as $line => $x)
foreach ($chars->get($c) as $x)
if (array_pop($x) != 32) {
$space = FALSE;
break;

View File

@ -0,0 +1,32 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Notification;
use App\Models\{Address,User};
use App\Notifications\AddressLink;
class UserCodeSend extends Command
{
protected $signature = 'user:code:send'
.' {ftn : FTN to send link code to}'
.' {email : User to send the link to}';
protected $description = 'Send a link to a user';
/**
* Execute the console command.
*
* @return mixed
* @throws \Exception
*/
public function handle()
{
$ao = Address::findFTN($this->argument('ftn'));
$uo = User::where('email',$this->argument('email'))->singleOrFail();
Notification::route('netmail',$ao->parent())->notify(new AddressLink($ao,$uo));
}
}

View File

@ -556,6 +556,29 @@ class SystemController extends Controller
return redirect()->to(sprintf('ftn/system/addedit/%d',$o->system_id));
}
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->addresses as $ao) {
if ($ca=$so->match($ao->zone))
break;
}
if ($ca->count() && $la=$ca->pop())
Notification::route('netmail',$la)->notify(new AddressLink($la,Auth::user()));
return view('user.system.register_send')
->with('la',$la)
->with('o',$so);
}
/**
* register system
*/
@ -565,6 +588,10 @@ class SystemController extends Controller
if ($request->isMethod('GET'))
return view('user.system.register');
if ($request->action != 'create')
return view('user.system.widget.register_confirm')
->with('o',System::findOrFail($request->system_id));
$o = System::findOrNew($request->system_id);
// If the system exists, and we are 'register', we'll start the address claim process
@ -575,7 +602,7 @@ class SystemController extends Controller
if ($validate->count())
Notification::route('netmail',$x=$validate->first())->notify(new AddressLink($x,Auth::user()));
return view('user.system.widget.register_confirm')
return view('user.system.widget.register_send')
->with('validate',$validate)
->with('o',$o);
}

View File

@ -0,0 +1,28 @@
<!-- $o = System::class -->
@extends('layouts.app')
@section('htmlheader_title')
Link System
@endsection
@section('content')
<div class="row">
<div class="col-12">
<div class="greyframe titledbox shadow0xb0">
<h2 class="cap">Register System</h2>
@if($la)
<p>OK, here's what we are going to do. I'm going to send you a routed netmail to <strong class="highlight">{{ $la->ftn }}</strong> with a code - please follow the instructions
in that netmail.</p>
<p>Once the code is validated, this system will be assigned to you.</p>
@else
<p>I cant validate that <strong class="highlight">{{ $o->name }}</strong> is your system, we dont share common zones.</p>
<p>You might want to talk to an admin.</p>
@endif
<!-- @todo Fix with CSS -->
<p></p>
</div>
</div>
</div>
@endsection

View File

@ -1,13 +1,41 @@
<!-- $o = System::class -->
<form class="row g-0 needs-validation" method="post" autocomplete="off" novalidate>
<h3>System Details:</h3>
<table class="monotable">
<tr>
<th>System</th>
<th>{{ $o->name }}</th>
</tr>
<tr>
<th>Sysop</th>
<th>{{ $o->sysop }}</th>
</tr>
<tr>
<th>Location</th>
<th>{{ $o->location }}</th>
</tr>
<tr>
<th>Networks</th>
<th>{{ $o->addresses->pluck('ftn')->join(', ') }}</th>
</tr>
<tr>
<th>Address</th>
<th>{{ $o->access_mailer }}</th>
</tr>
</table>
<p>If the details are above are not correct, then please contact the (ZC) to have them corrected first.</p>
<p>Otherwise, if all is good, we'll send a netmail to <strong class="highlight">{{ $o->sysop }}</strong> at <strong class="highlight">{{ $o->access_mailer }}</strong></p> with further details.
<form class="row g-0 needs-validation" method="post" autocomplete="off" action="{{ url('user/system/link') }}" novalidate>
@csrf
@if($validate->count())
<p>OK, here's what we are going to do. I'm going to send you a routed netmail with a code - please follow the instructions
in that netmail.</p>
<p>Once the code is validated, this system will be assigned to you.</p>
@else
<p>I cant validate that <strong class="highlight">{{ $o->name }}</strong> is your system, we share now common zones.</p>
<p>You might want to talk to an admin.</p>
@endif
</form>
<input type="hidden" name="system_id" value="{{ $o->id }}">
<input type="hidden" name="name" value="{{ $o->name }}">
<div class="row">
<div class="col-12 pb-2">
<input type="submit" name="action" class="btn btn-success" value="Link">
</div>
</div>
</form>

View File

@ -93,6 +93,7 @@ Route::middleware(['auth','verified','activeuser'])->group(function () {
->where('o','[0-9]+');
Route::match(['get','post'],'user/system/register',[SystemController::class,'system_register']);
Route::match(['post'],'user/system/link',[SystemController::class,'system_link']);
});
Route::get('network/{o}',[HomeController::class,'network']);