to) !== 'areafix') || (! ($mo instanceof Netmail))) return FALSE; Log::info(sprintf('%s:- Processing AREAFIX [%s] message from (%s) [%s]', self::LOGKEY, $mo->to, $mo->from, $mo->fftn->ftn)); return parent::handle($mo); } public static function areafix(Netmail $mo): bool { $result = collect(); $result->push('--> BEGIN <--'); foreach ($mo->body_lines as $command) { // Skip empty lines if (! $command) continue; $command = explode(' ',strtoupper(trim($command))); // If command starts with '...' or '---', its a tear/tag line, and we have reached the end if (str_starts_with($command[0],'...') || str_starts_with($command[0],'---')) { Log::debug(sprintf('%s:= We got a tearline/tagline, end of processing',self::LOGKEY)); $result->push('--> END OF PROCESSING <--'); break; // If command doesnt start with %, its an area } elseif (! str_starts_with($command[0],'%')) { Log::info(sprintf('%s:= Assuming command [%s] is an AREA command',self::LOGKEY,$command[0])); array_unshift($command,'%AREA'); } // Some commands are reserved words switch ($x=strtolower(substr($command[0],1))) { case 'list': $class = self::commands.'AreaList'; break; default: // Parse the message body and pluck out the commands on each line $class = self::commands.ucfirst($x); } if (! class_exists($class)) { $result->push(sprintf('%-25s <-- **COMMAND UNKNOWN**',join(' ',$command))); Log::info(sprintf('%s:! Command UNKNOWN [%s] ',self::LOGKEY,join('|',$command)),['class'=>$class]); continue; } // Drop the command from the array, the rest are arguments array_shift($command); // Refresh our echoareas $mo->fftn->load('echoareas'); $o = new $class($mo,$command); $result->push($o->process()); } // Reply with a confirmation of what commands were processed Notification::route('netmail',$mo->fftn)->notify(new CommandsProcessed($mo,$result)); return TRUE; } }