From 102a972fcbaaa42a4d2e4a0e1f6538960b135ce3 Mon Sep 17 00:00:00 2001 From: Deon George Date: Sun, 20 Nov 2022 11:47:46 +1100 Subject: [PATCH] Rename address:merge to address:purge, included merging file/echo subscriptions, updated web subscription cannot add echos to deleted ftns --- .../{AddressPurge.php => AddressMerge.php} | 38 ++++++++++++++++--- app/Http/Controllers/SystemController.php | 4 ++ .../views/system/form-echoarea.blade.php | 13 +++++++ 3 files changed, 49 insertions(+), 6 deletions(-) rename app/Console/Commands/{AddressPurge.php => AddressMerge.php} (71%) diff --git a/app/Console/Commands/AddressPurge.php b/app/Console/Commands/AddressMerge.php similarity index 71% rename from app/Console/Commands/AddressPurge.php rename to app/Console/Commands/AddressMerge.php index 1eba00c..55bde1c 100644 --- a/app/Console/Commands/AddressPurge.php +++ b/app/Console/Commands/AddressMerge.php @@ -2,21 +2,24 @@ namespace App\Console\Commands; -use App\Models\Address; use Illuminate\Console\Command; +use Illuminate\Database\QueryException; use Illuminate\Support\Facades\DB; -class AddressPurge extends Command +use App\Models\Address; + +class AddressMerge extends Command { /** * The name and signature of the console command. * * @var string */ - protected $signature = 'address:purge' + protected $signature = 'address:merge' .' {src : Source Address}' .' {dst : Destination Address}' - .' {--f|force : Force}' + .' {--F|force : Force}' + .' {--I|ignore : Ignore different BBSes}' .' {--d|dryrun : Dry Run}'; /** @@ -36,12 +39,12 @@ class AddressPurge extends Command $src = Address::withTrashed()->findOrfail($this->argument('src')); $dst = Address::withTrashed()->findOrfail($this->argument('dst')); - if (($src->system_id !== $dst->system_id) && ($src->system->name !== 'Discovered System')) { + if ((! $this->option('ignore')) && ($src->system_id !== $dst->system_id) && ($src->system->name !== 'Discovered System')) { $this->error(sprintf('FTN addresses are from different systems (%s/%s)',$src->system->name,$dst->system->name)); exit(1); } - if (! $this->option('force') && ($src->ftn !== $dst->ftn)) { + if ((! $this->option('force')) && ($src->ftn !== $dst->ftn)) { $this->error(sprintf('FTN addresses are not the same (%s:%s)',$src->ftn,$dst->ftn)); exit(1); } @@ -85,6 +88,29 @@ class AddressPurge extends Command $x = DB::update('update files set fftn_id=? where fftn_id=?',[$dst->id,$src->id]); $this->info(sprintf('Updated [%d] file source records',$x)); + // Resubscribe echoareas + try { + $x = DB::update('update address_echoarea set address_id=? where address_id=?',[$dst->id,$src->id]); + + } catch (QueryException $e) { + DB::rollback(); + $this->error(sprintf('You may need to remove %s:%s (%d) from echoareas',$src->ftn,$src->system->name,$src->id)); + exit(1); + } + + $this->info(sprintf('Updated [%d] echomail subscription records',$x)); + + // Resubscribe fileareas + try { + $x = DB::update('update address_filearea set address_id=? where address_id=?',[$dst->id,$src->id]); + } catch (QueryException $e) { + DB::rollback(); + $this->error(sprintf('You may need to remove %s:%s (%d) from fileareas',$src->ftn,$src->system->name,$src->id)); + exit(1); + } + + $this->info(sprintf('Updated [%d] filearea subscription records',$x)); + if ($this->option('dryrun')) { $this->warn(sprintf('NOT deleting [%s] - DRY RUN',$src->ftn)); DB::rollBack(); diff --git a/app/Http/Controllers/SystemController.php b/app/Http/Controllers/SystemController.php index 132b8a3..ee3102e 100644 --- a/app/Http/Controllers/SystemController.php +++ b/app/Http/Controllers/SystemController.php @@ -284,6 +284,7 @@ class SystemController extends Controller ->leftjoin('zones',['zones.id'=>'addresses.zone_id']) ->where('addresses.system_id',$o->id) ->where('zones.domain_id',$request->domain_id) + ->withTrashed() ->FTNorder() ->get() ->map(function($item) { return ['id'=>(string)$item->id,'value'=>$item->ftn3d]; }); @@ -390,6 +391,9 @@ class SystemController extends Controller if (($request->method() == 'POST') && $request->post()) { session()->flash('accordion','echoarea'); + if ($ao->trashed() && collect($request->get('id'))->diff($ao->echoareas->pluck('id'))->count()) + return redirect()->back()->withErrors(sprintf('Address [%s] has been deleted, cannot add additional echos',$ao->ftn3d)); + // Ensure we have session details for this address. if (! $ao->session('sespass')) return redirect()->back()->withErrors('System doesnt belong to this network'); diff --git a/resources/views/system/form-echoarea.blade.php b/resources/views/system/form-echoarea.blade.php index 3bd73b4..f70015b 100644 --- a/resources/views/system/form-echoarea.blade.php +++ b/resources/views/system/form-echoarea.blade.php @@ -65,6 +65,19 @@ + @if($errors->count()) +
+ + There were errors with the submission. +
    + @foreach ($errors->all() as $error) +
  • {{ $error }}
  • + @endforeach +
+
+
+ @endif +