to) !== 'filefix') || (! ($mo instanceof Netmail))) return FALSE; Log::info(sprintf('%s:- Processing FILEFIX [%s] message from (%s) [%s]',self::LOGKEY,$mo->to,$mo->from,$mo->fftn->ftn)); return parent::handle($mo); } public static function filefix(Netmail $mo): bool { $result = collect(); $result->push('--> BEGIN <--'); foreach ($mo->body_lines as $command) { Log::debug(sprintf('%s:* Processing command [%s]',self::LOGKEY,$command)); // Skip empty lines if (! $command || preg_match('/^\s+$/',$command)) continue; $command = explode(' ',strtoupper(rtrim($command))); Log::debug(sprintf('%s:* Processing command',self::LOGKEY),['command'=>$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::info(sprintf('%s:= We got a tearline/tagline, end of processing',self::LOGKEY)); $result->push('--> END OF PROCESSING - TEARLINE/TAGLINE <--'); break; // Lines starting with a space, we'll abort } elseif (! $command[0]) { Log::info(sprintf('%s:= Got a new line with a space, end of processing',self::LOGKEY)); $result->push('--> END OF PROCESSING - SPACE DETECTED <--'); 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('fileareas'); $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; } }