From d9817e1c2e9e37776dedf0a2bf8d3fa0dd6607d1 Mon Sep 17 00:00:00 2001 From: Deon George Date: Tue, 26 Nov 2024 23:48:14 +1100 Subject: [PATCH] Added filefix %FILELIST --- .../Netmail/Robot/Filefix/Filelist.php | 67 ++++++++++++ .../Netmails/Filefix/Filelist.php | 103 ++++++++++++++++++ 2 files changed, 170 insertions(+) create mode 100644 app/Classes/FTN/Process/Netmail/Robot/Filefix/Filelist.php create mode 100644 app/Notifications/Netmails/Filefix/Filelist.php diff --git a/app/Classes/FTN/Process/Netmail/Robot/Filefix/Filelist.php b/app/Classes/FTN/Process/Netmail/Robot/Filefix/Filelist.php new file mode 100644 index 0000000..adefb4e --- /dev/null +++ b/app/Classes/FTN/Process/Netmail/Robot/Filefix/Filelist.php @@ -0,0 +1,67 @@ + []', + ' Use the filelist command to list files from an filearea.', + ' This is will resend files again, even if you have received them in the', + ' past.', + ' Arguments:', + ' - FILEAREA (required) name of area', + ' - DAYS (optional) number of days to resend mail from this area that you', + ' If DAYS is omitted, the default is 30. The maximum is 365.', + ]; + } + + public function process(): string + { + Log::debug(sprintf('%s:- Filefix [%s] for [%s] for [%s]',self::LOGKEY,self::command,$this->mo->fftn->ftn,join('|',$this->arguments))); + + $command = self::command.' '.join(' ',$this->arguments); + + if (! is_numeric($this->arguments[1])) + return sprintf('%-25s <-- INVALID, DAYS [%s] NOT NUMERIC',$command,$this->arguments[1]); + + if ($this->arguments[1] > 365) + $this->arguments[1] = 365; + + // Area exists + if ($fa=$this->mo->fftn->domain->fileareas->where('name',$this->arguments[0])->pop()) { + // If already subscribed + if ($this->mo->fftn->fileareas->pluck('name')->contains($this->arguments[0])) { + Notification::route('netmail',$this->mo->fftn) + ->notify(new FileListNotification($this->mo,$fa,$this->arguments[1])); + + Log::debug(sprintf('%s:- FTN [%s] FILELIST [%s] DAYS [%d]',self::LOGKEY,$this->mo->fftn->ftn,$this->arguments[0],$this->arguments[1])); + + return sprintf('%-25s <-- FILELIST [%d] DAYS',$command,$this->arguments[1]); + + // If not subscribed + } else { + Log::debug(sprintf('%s:- FTN [%s] is NOT subscribed to [%s], NO ACTION taken',self::LOGKEY,$this->mo->fftn->ftn,$this->arguments[0])); + + return sprintf('%-25s <-- NOT subscribed, NO ACTION taken',$command); + } + + } else { + Log::debug(sprintf('%s:- FTN [%s] area UNKNOWN [%s], NO ACTION taken',self::LOGKEY,$this->mo->fftn->ftn,$this->arguments[0])); + + return sprintf('%-25s <-- AREA UNKNOWN, NO ACTION TAKEN',$command); + } + } +} \ No newline at end of file diff --git a/app/Notifications/Netmails/Filefix/Filelist.php b/app/Notifications/Netmails/Filefix/Filelist.php new file mode 100644 index 0000000..883587e --- /dev/null +++ b/app/Notifications/Netmails/Filefix/Filelist.php @@ -0,0 +1,103 @@ +mo = $mo->withoutRelations(); + $this->fa = $fa->withoutRelations(); + $this->days = $days; + } + + /** + * 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 filefix [%s] FILE LIST processed',self::LOGKEY,$ao->ftn)); + + $o->to = $this->mo->from; + $o->replyid = $this->mo->msgid; + $o->subject = 'Filefix - File List'; + + // Message + $msg = $this->page(FALSE,'Filefix'); + + $msg->addText(sprintf("Filearea [%s] has the following files in the last %d days:\r\r",$this->fa->name,$this->days)); + + $files = $this->fa + ->files() + ->orderBy('datetime') + ->where('datetime','>',Carbon::now()->subDays($this->days)->startOfDay()); + + if ($files->count()) { + $msg->addText(sprintf(":-%s-:-%s-:-%s-:\r", + str_repeat('-',15), + str_repeat('-',44), + str_repeat('-',8), + )); + $msg->addText(sprintf(": %-15s : %-44s : %8s :\r",'FILE','DESCRIPTION','SIZE(mb)')); + $msg->addText(sprintf(":-%s-:-%s-:-%s-:\r", + str_repeat('-',15), + str_repeat('-',44), + str_repeat('-',8), + )); + + foreach ($files->get() as $fo) { + $msg->addText(sprintf(": %-15s : %-44s : %8s :\r", + $fo->name, + Str::limit($fo->desc,44-3), + number_format($fo->size/1024/1024,3), + )); + } + + $msg->addText(sprintf(":-%s-:-%s-:-%s-:\r", + str_repeat('-',15), + str_repeat('-',44), + str_repeat('-',8), + )); + + } else { + $msg->addText(sprintf('No files in [%s]',$this->fa->name)); + } + + $o->msg = $msg->render(); + $o->set_tagline = 'Why did the robot cross the road? The chicken programmed it.'; + + $o->save(); + + return $o; + } +} \ No newline at end of file