Added areafix %HELP
This commit is contained in:
parent
4796dd9a6e
commit
1128bddcee
@ -19,7 +19,7 @@ final class Areafix extends Process
|
|||||||
{
|
{
|
||||||
private const LOGKEY = 'RP-';
|
private const LOGKEY = 'RP-';
|
||||||
|
|
||||||
private const areafix_commands = 'App\\Classes\\FTN\\Process\\Netmail\\Robot\\Areafix\\';
|
public const areafix_commands = 'App\\Classes\\FTN\\Process\\Netmail\\Robot\\Areafix\\';
|
||||||
|
|
||||||
public static function handle(Echomail|Netmail $mo): bool
|
public static function handle(Echomail|Netmail $mo): bool
|
||||||
{
|
{
|
||||||
@ -82,7 +82,7 @@ final class Areafix extends Process
|
|||||||
// Refresh our echoareas
|
// Refresh our echoareas
|
||||||
$mo->fftn->load('echoareas');
|
$mo->fftn->load('echoareas');
|
||||||
|
|
||||||
$o = new $class($mo->fftn,$command);
|
$o = new $class($mo,$command);
|
||||||
$result->push($o->process());
|
$result->push($o->process());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,21 +13,23 @@ class Area extends Base
|
|||||||
{
|
{
|
||||||
private const LOGKEY = 'AFA';
|
private const LOGKEY = 'AFA';
|
||||||
|
|
||||||
public function help(): array
|
private const command = '%AREA';
|
||||||
|
|
||||||
|
public static function help(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'%AREA [-|+]<ECHOAREA> [R|D=<DAYS>]',
|
self::command.' [-|+]<ECHOAREA> [R|D=<DAYS>]',
|
||||||
' Use the area command to subscribe (+) or unsubscribe (-) to an ECHOAREA',
|
' Use the area command to subscribe (+) or unsubscribe (-) to an ECHOAREA',
|
||||||
' Arguments:',
|
' Arguments:',
|
||||||
' - ECHOAREA (required) name of area to subscribe or unsubscribe',
|
' - ECHOAREA (required) name of area to subscribe or unsubscribe',
|
||||||
' - D=DAYS (optional) number of days to resend mail from this area that you',
|
' - D=DAYS (optional) number of days to resend mail from this area that you',
|
||||||
' havent already received (useful if you are resubscribing to an area and',
|
' havent already received (useful if you are resubscribing to an area and',
|
||||||
' have received mail in the past)',
|
' have received mail in the past)',
|
||||||
' - R=DAYS (optional) number of days to resend mail from this area (even if',
|
' - R=DAYS (optional) number of days to resend mail from this area (even if',
|
||||||
' it was sent to you previously)',
|
' it was sent to you previously)',
|
||||||
' Notes:',
|
' Notes:',
|
||||||
' * "+" is optional, and is implied if "-" is not used',
|
' * "+" is optional, and is implied if "-" is not used',
|
||||||
' * "R" and "D" options only apply to subscribing',
|
' * "R" and "D" options only apply to subscribing',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,40 +54,40 @@ class Area extends Base
|
|||||||
// Drop the area from the arguments, the rest are options
|
// Drop the area from the arguments, the rest are options
|
||||||
array_shift($this->arguments);
|
array_shift($this->arguments);
|
||||||
|
|
||||||
if ($ea=$this->ao->domain->echoareas->where('name',$area)->pop()) {
|
if ($ea=$this->mo->fftn->domain->echoareas->where('name',$area)->pop()) {
|
||||||
// If already subscribed
|
// If already subscribed
|
||||||
if ($nea=$this->ao->echoareas->where('name',$area)->pop()) {
|
if ($nea=$this->mo->fftn->echoareas->where('name',$area)->pop()) {
|
||||||
// requesting to subscribe "You already are since..., arguments ignored
|
// requesting to subscribe "You already are since..., arguments ignored
|
||||||
if ($sub) {
|
if ($sub) {
|
||||||
Log::debug(sprintf('%s:- FTN [%s] ALREADY subscribed to [%s] since [%s]',self::LOGKEY,$this->ao->ftn,$area,$nea->pivot->subscribed->format('Y-m-d H:i')));
|
Log::debug(sprintf('%s:- FTN [%s] ALREADY subscribed to [%s] since [%s]',self::LOGKEY,$this->mo->fftn->ftn,$area,$nea->pivot->subscribed->format('Y-m-d H:i')));
|
||||||
|
|
||||||
return sprintf('%-25s <-- ALREADY subscribed since %s',$area,$nea->pivot->subscribed->format('Y-m-d H:i'));
|
return sprintf('%-25s <-- ALREADY subscribed since %s',$area,$nea->pivot->subscribed->format('Y-m-d H:i'));
|
||||||
|
|
||||||
// requesting to unsubscribe
|
// requesting to unsubscribe
|
||||||
} else {
|
} else {
|
||||||
$this->ao->echoareas()->detach($ea->id);
|
$this->mo->fftn->echoareas()->detach($ea->id);
|
||||||
|
|
||||||
// Remove sub, clear queue
|
// Remove sub, clear queue
|
||||||
$x = DB::table('echomail_seenby')
|
$x = DB::table('echomail_seenby')
|
||||||
->where('address_id',$this->ao->id)
|
->where('address_id',$this->mo->fftn->id)
|
||||||
->join('echomails',['echomails.id'=>'echomail_seenby.echomail_id'])
|
->join('echomails',['echomails.id'=>'echomail_seenby.echomail_id'])
|
||||||
->where('echoarea_id',$nea->id)
|
->where('echoarea_id',$nea->id)
|
||||||
->whereNotNull('export_at')
|
->whereNotNull('export_at')
|
||||||
->whereNull('sent_at')
|
->whereNull('sent_at')
|
||||||
->orderBy('echomails.datetime')
|
->orderBy('echomails.datetime')
|
||||||
->skip($this->ao->system->pkt_msgs)
|
->skip($this->mo->fftn->system->pkt_msgs)
|
||||||
->delete();
|
->delete();
|
||||||
|
|
||||||
Log::debug(sprintf('%s:- FTN [%s] UNSUBSCRIBED from [%s] clearing [%s]',self::LOGKEY,$this->ao->ftn,$area,$x));
|
Log::debug(sprintf('%s:- FTN [%s] UNSUBSCRIBED from [%s] clearing [%s]',self::LOGKEY,$this->mo->fftn->ftn,$area,$x));
|
||||||
|
|
||||||
return sprintf('%-25s <-- UNSUBSCRIBED, cleared [%d] items from queue',$area,$x);
|
return sprintf('%-25s <-- UNSUBSCRIBED, CLEARED [%d] MSGS from queue',$area,$x);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If not subscribed
|
// If not subscribed
|
||||||
} else {
|
} else {
|
||||||
// requesting to subscribe, subsubsribe and rescan if arguments
|
// requesting to subscribe, subsubsribe and rescan if arguments
|
||||||
if ($sub) {
|
if ($sub) {
|
||||||
$this->ao->echoareas()->attach([$ea->id=>['subscribed'=>Carbon::now()]]);
|
$this->mo->fftn->echoareas()->attach([$ea->id=>['subscribed'=>Carbon::now()]]);
|
||||||
|
|
||||||
// If we have arguments, they are to rescan
|
// If we have arguments, they are to rescan
|
||||||
if (count($this->arguments) === 1) {
|
if (count($this->arguments) === 1) {
|
||||||
@ -94,14 +96,14 @@ class Area extends Base
|
|||||||
switch ($m[1]) {
|
switch ($m[1]) {
|
||||||
// Scan
|
// Scan
|
||||||
case 'D':
|
case 'D':
|
||||||
AreafixRescan::dispatch($this->ao,$ea,$m[2])
|
AreafixRescan::dispatch($this->mo->fftn,$ea,$m[2])
|
||||||
->onQueue('mail');
|
->onQueue('mail');
|
||||||
|
|
||||||
return sprintf('%-25s <-- AREA SUBSCRIBED, RESCAN [%d] DAYS queued',$area,$m[2]);
|
return sprintf('%-25s <-- AREA SUBSCRIBED, RESCAN [%d] DAYS queued',$area,$m[2]);
|
||||||
|
|
||||||
// Scan
|
// Scan
|
||||||
case 'R':
|
case 'R':
|
||||||
AreafixRescan::dispatch($this->ao,$ea,$m[2],TRUE)
|
AreafixRescan::dispatch($this->mo->fftn,$ea,$m[2],TRUE)
|
||||||
->onQueue('mail');
|
->onQueue('mail');
|
||||||
|
|
||||||
return sprintf('%-25s <-- AREA SUBSCRIBED, FORCE RESCAN [%d] DAYS queued',$area,$m[2]);
|
return sprintf('%-25s <-- AREA SUBSCRIBED, FORCE RESCAN [%d] DAYS queued',$area,$m[2]);
|
||||||
@ -111,26 +113,26 @@ class Area extends Base
|
|||||||
return sprintf('%-25s <-- AREA SUBSCRIBED, INVALID OPTIONS',$area);
|
return sprintf('%-25s <-- AREA SUBSCRIBED, INVALID OPTIONS',$area);
|
||||||
|
|
||||||
} elseif (count($this->arguments) > 1) {
|
} elseif (count($this->arguments) > 1) {
|
||||||
Log::debug(sprintf('%s:- FTN [%s] subscribed to [%s], extra commands [%s] ignored',self::LOGKEY,$this->ao->ftn,$area,implode('|',$this->arguments)));
|
Log::debug(sprintf('%s:- FTN [%s] subscribed to [%s], extra commands [%s] ignored',self::LOGKEY,$this->mo->fftn->ftn,$area,implode('|',$this->arguments)));
|
||||||
|
|
||||||
return sprintf('%-25s <-- AREA SUBSCRIBED, OPTIONS IGNORED',$area);
|
return sprintf('%-25s <-- AREA SUBSCRIBED, OPTIONS IGNORED',$area);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
Log::debug(sprintf('%s:- FTN [%s] subscribed to [%s]',self::LOGKEY,$this->ao->ftn,$area));
|
Log::debug(sprintf('%s:- FTN [%s] subscribed to [%s]',self::LOGKEY,$this->mo->fftn->ftn,$area));
|
||||||
|
|
||||||
return sprintf('%-25s <-- AREA SUBSCRIBED',$area);
|
return sprintf('%-25s <-- AREA SUBSCRIBED',$area);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If not subscribed, "you arent subscribed, arguments ignored"
|
// If not subscribed, "you arent subscribed, arguments ignored"
|
||||||
} else {
|
} else {
|
||||||
Log::debug(sprintf('%s:- FTN [%s] is NOT subscribed to [%s], NO ACTION taken',self::LOGKEY,$this->ao->ftn,$area));
|
Log::debug(sprintf('%s:- FTN [%s] is NOT subscribed to [%s], NO ACTION taken',self::LOGKEY,$this->mo->fftn->ftn,$area));
|
||||||
|
|
||||||
return sprintf('%-25s <-- NOT subscribed, NO ACTION taken',$area);
|
return sprintf('%-25s <-- NOT subscribed, NO ACTION taken',$area);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
Log::debug(sprintf('%s:- FTN [%s] area UNKNOWN [%s], NO ACTION taken',self::LOGKEY,$this->ao->ftn,$area));
|
Log::debug(sprintf('%s:- FTN [%s] area UNKNOWN [%s], NO ACTION taken',self::LOGKEY,$this->mo->fftn->ftn,$area));
|
||||||
|
|
||||||
return sprintf('%-25s <-- AREA UNKNOWN, NO ACTION TAKEN',$area);
|
return sprintf('%-25s <-- AREA UNKNOWN, NO ACTION TAKEN',$area);
|
||||||
}
|
}
|
||||||
|
@ -4,23 +4,23 @@ namespace App\Classes\FTN\Process\Netmail\Robot\Areafix;
|
|||||||
|
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
use App\Models\Address;
|
use App\Models\Netmail;
|
||||||
|
|
||||||
// Our base areafix commands class
|
// Our base areafix commands class
|
||||||
abstract class Base
|
abstract class Base
|
||||||
{
|
{
|
||||||
private const LOGKEY = 'AB-';
|
private const LOGKEY = 'AB-';
|
||||||
|
|
||||||
protected Address $ao;
|
protected Netmail $mo;
|
||||||
protected array $arguments;
|
protected array $arguments;
|
||||||
|
|
||||||
public function __construct(Address $ao,array $arguments) {
|
public function __construct(Netmail $mo,array $arguments) {
|
||||||
Log::debug(sprintf('%s:- Areafix [%s] command with arguments [%s] for [%s]',self::LOGKEY,get_class($this),implode('|',$arguments),$ao->ftn));
|
Log::debug(sprintf('%s:- Areafix [%s] command with arguments [%s] for [%s]',self::LOGKEY,get_class($this),implode('|',$arguments),$mo->fftn->ftn));
|
||||||
|
|
||||||
$this->ao = $ao;
|
$this->mo = $mo;
|
||||||
$this->arguments = $arguments;
|
$this->arguments = $arguments;
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract public function help(): array;
|
abstract public static function help(): array;
|
||||||
abstract public function process(): string;
|
abstract public function process(): string;
|
||||||
}
|
}
|
44
app/Classes/FTN/Process/Netmail/Robot/Areafix/Help.php
Normal file
44
app/Classes/FTN/Process/Netmail/Robot/Areafix/Help.php
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\FTN\Process\Netmail\Robot\Areafix;
|
||||||
|
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use Illuminate\Support\Facades\Notification;
|
||||||
|
|
||||||
|
use App\Classes\FTN\Process\Netmail\Areafix;
|
||||||
|
use App\Notifications\Netmails\Areafix\Help as HelpNotification;
|
||||||
|
|
||||||
|
// A Help Index Command
|
||||||
|
class Help extends Base
|
||||||
|
{
|
||||||
|
private const LOGKEY = 'AFH';
|
||||||
|
private const areafix_classes = 'app/Classes/FTN/Process/Netmail/Robot/Areafix';
|
||||||
|
private const command = '%HELP';
|
||||||
|
|
||||||
|
public static function help(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
self::command,
|
||||||
|
' This message!',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function process(): string
|
||||||
|
{
|
||||||
|
Log::debug(sprintf('%s:- Processing [%s] for [%s]',self::LOGKEY,self::command,$this->mo->fftn->ftn));
|
||||||
|
|
||||||
|
$result = collect();
|
||||||
|
|
||||||
|
foreach (preg_grep('/^([^.])/',scandir(self::areafix_classes)) as $file) {
|
||||||
|
if ($file === 'Base.php')
|
||||||
|
continue;
|
||||||
|
|
||||||
|
$class = Areafix::areafix_commands.preg_replace('/\.php$/','',$file);
|
||||||
|
$result = $result->merge($class::help());
|
||||||
|
}
|
||||||
|
|
||||||
|
Notification::route('netmail',$this->mo->fftn)->notify(new HelpNotification($this->mo,$result));
|
||||||
|
|
||||||
|
return sprintf('%-25s <-- COMMAND PROCESSED',self::command);
|
||||||
|
}
|
||||||
|
}
|
67
app/Notifications/Netmails/Areafix/CommandsProcessed.php
Normal file
67
app/Notifications/Netmails/Areafix/CommandsProcessed.php
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Notifications\Netmails\Areafix;
|
||||||
|
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
use App\Notifications\Netmails;
|
||||||
|
use App\Models\Netmail;
|
||||||
|
use App\Traits\{MessagePath,PageTemplate};
|
||||||
|
|
||||||
|
class CommandsProcessed extends Netmails
|
||||||
|
{
|
||||||
|
use MessagePath,PageTemplate;
|
||||||
|
|
||||||
|
private const LOGKEY = 'ACU';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reply to a areafix, commands unknown.
|
||||||
|
*
|
||||||
|
* @param Netmail $mo
|
||||||
|
* @param Collection $commands
|
||||||
|
*/
|
||||||
|
public function __construct(private Netmail $mo,private Collection $commands)
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the mail representation of the notification.
|
||||||
|
*
|
||||||
|
* @param mixed $notifiable
|
||||||
|
* @return Netmail
|
||||||
|
* @throws \Exception
|
||||||
|
*/
|
||||||
|
public function toNetmail(object $notifiable): Netmail
|
||||||
|
{
|
||||||
|
$o = $this->setupNetmail($notifiable);
|
||||||
|
$ao = $notifiable->routeNotificationFor(static::via);
|
||||||
|
|
||||||
|
Log::info(sprintf('%s:+ Responding to areafix for a node [%s] commands processed',self::LOGKEY,$ao->ftn));
|
||||||
|
|
||||||
|
$o->to = $this->mo->from;
|
||||||
|
$o->replyid = $this->mo->msgid;
|
||||||
|
$o->subject = 'Areafix - Result';
|
||||||
|
|
||||||
|
// Message
|
||||||
|
$msg = $this->page(FALSE,'Areafix');
|
||||||
|
|
||||||
|
$msg->addText("Your areafix request has been received, here is the result:\r\r");
|
||||||
|
|
||||||
|
foreach ($this->commands as $command) {
|
||||||
|
$msg->addText("$command\r");
|
||||||
|
}
|
||||||
|
|
||||||
|
$msg->addText("\r");
|
||||||
|
|
||||||
|
$msg->addText($this->message_path($this->mo));
|
||||||
|
|
||||||
|
$o->msg = $msg->render();
|
||||||
|
$o->set_tagline = 'Why did the robot cross the road? The chicken programmed it.';
|
||||||
|
|
||||||
|
$o->save();
|
||||||
|
|
||||||
|
return $o;
|
||||||
|
}
|
||||||
|
}
|
65
app/Notifications/Netmails/Areafix/Help.php
Normal file
65
app/Notifications/Netmails/Areafix/Help.php
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Notifications\Netmails\Areafix;
|
||||||
|
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
use App\Notifications\Netmails;
|
||||||
|
use App\Models\Netmail;
|
||||||
|
use App\Traits\{MessagePath,PageTemplate};
|
||||||
|
|
||||||
|
class Help extends Netmails
|
||||||
|
{
|
||||||
|
use MessagePath,PageTemplate;
|
||||||
|
|
||||||
|
private const LOGKEY = 'ACH';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reply to a areafix, commands unknown.
|
||||||
|
*
|
||||||
|
* @param Netmail $mo
|
||||||
|
* @param Collection $commands
|
||||||
|
*/
|
||||||
|
public function __construct(private Netmail $mo,private Collection $commands)
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the mail representation of the notification.
|
||||||
|
*
|
||||||
|
* @param mixed $notifiable
|
||||||
|
* @return Netmail
|
||||||
|
* @throws \Exception
|
||||||
|
*/
|
||||||
|
public function toNetmail(object $notifiable): Netmail
|
||||||
|
{
|
||||||
|
$o = $this->setupNetmail($notifiable);
|
||||||
|
$ao = $notifiable->routeNotificationFor(static::via);
|
||||||
|
|
||||||
|
Log::info(sprintf('%s:+ Responding to areafix for a node [%s] commands processed',self::LOGKEY,$ao->ftn));
|
||||||
|
|
||||||
|
$o->to = $this->mo->from;
|
||||||
|
$o->replyid = $this->mo->msgid;
|
||||||
|
$o->subject = 'Areafix - Help';
|
||||||
|
|
||||||
|
// Message
|
||||||
|
$msg = $this->page(FALSE,'Areafix');
|
||||||
|
|
||||||
|
$msg->addText("Here are the list of commands available to you:\r\r\r\r");
|
||||||
|
|
||||||
|
foreach ($this->commands as $command) {
|
||||||
|
$msg->addText("$command\r");
|
||||||
|
}
|
||||||
|
|
||||||
|
$msg->addText("\r");
|
||||||
|
|
||||||
|
$o->msg = $msg->render();
|
||||||
|
$o->set_tagline = 'Why did the robot cross the road? The chicken programmed it.';
|
||||||
|
|
||||||
|
$o->save();
|
||||||
|
|
||||||
|
return $o;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user