getDetailedSystemStatus(); $highestSeverity = $statusService->getHighestSeverity($systemStatus); $registry = GeneralUtility::makeInstance(Registry::class); $registry->set('tx_reports', 'status.highestSeverity', $highestSeverity); if (($highestSeverity > ContextualFeedbackSeverity::OK->value) || $this->notificationAll) { $this->sendNotificationEmail($systemStatus); } return true; } /** * Sends a notification email, reporting system issues. * * @param Status[][] $systemStatus Array of statuses */ protected function sendNotificationEmail(array $systemStatus): void { $systemIssues = []; foreach ($systemStatus as $statusProvider) { foreach ($statusProvider as $status) { if ($this->notificationAll || ($status->getSeverity()->value > ContextualFeedbackSeverity::OK->value)) { $systemIssues[] = (string)$status . CRLF . $status->getMessage() . CRLF . CRLF; } } } $notificationEmails = GeneralUtility::trimExplode(LF, $this->notificationEmail, true); $sendEmailsTo = []; foreach ($notificationEmails as $notificationEmail) { $sendEmailsTo[] = new Address($notificationEmail); } $subject = sprintf($this->getLanguageService()->sL('reports.reports:status_updateTask_email_subject'), $GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename']); $message = sprintf($this->getLanguageService()->sL('reports.reports:' . ($this->notificationAll ? 'status_allNotification' : 'status_problemNotification')), '', ''); if (Environment::isCli()) { $message .= CRLF . CRLF; $message .= $this->getLanguageService()->sL('reports.reports:status_problem_notification_cli_disclaimer'); } $message .= CRLF . CRLF; $message .= $this->getLanguageService()->sL('reports.reports:status_updateTask_email_site') . ': ' . $GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename']; $message .= CRLF . CRLF; $message .= $this->getLanguageService()->sL('reports.reports:status_updateTask_email_issues') . ': ' . CRLF; $message .= implode(CRLF, $systemIssues); $message .= CRLF . CRLF; $request = ($GLOBALS['TYPO3_REQUEST'] ?? null) instanceof ServerRequestInterface ? $GLOBALS['TYPO3_REQUEST'] : null; // @todo DI should be used to inject the MailerInterface in v15.0 $email = GeneralUtility::makeInstance(TemplatedEmailFactory::class)->createWithOverrides( [20 => 'EXT:reports/Resources/Private/Templates/Email/'], [], [], $request, ); $email ->to(...$sendEmailsTo) ->format('plain') ->subject($subject) ->setTemplate('Report') ->assign('message', $message); // @todo DI should be used to inject the MailerInterface in v15.0 GeneralUtility::makeInstance(MailerInterface::class)->send($email); } public function getAdditionalInformation() { return sprintf($this->getLanguageService()->sL('reports.reports:status_updateAdditionalInformation'), preg_replace('#\s+#', ', ', trim($this->notificationEmail))); } public function getTaskParameters(): array { return [ 'tx_reports_notification_email' => $this->notificationEmail, 'tx_reports_notification_all' => $this->notificationAll, ]; } public function setTaskParameters(array $parameters): void { $this->notificationEmail = $parameters['notificationEmail'] ?? $parameters['tx_reports_notification_email'] ?? ''; $this->notificationAll = (bool)($parameters['notificationAll'] ?? $parameters['tx_reports_notification_all'] ?? false); } public function validateTaskParameters(array $parameters): bool { $validInput = true; $notificationEmails = GeneralUtility::trimExplode(LF, $parameters['tx_reports_notification_email'] ?? '', true); foreach ($notificationEmails as $notificationEmail) { if (!GeneralUtility::validEmail($notificationEmail)) { $validInput = false; break; } } if (!$validInput || empty($parameters['tx_reports_notification_email'] ?? '')) { GeneralUtility::makeInstance(FlashMessageService::class)->getMessageQueueByIdentifier()->addMessage( new FlashMessage($this->getLanguageService()->sL('reports.reports:status_updateTaskField_notificationEmails_invalid'), '', ContextualFeedbackSeverity::ERROR) ); $validInput = false; } return $validInput; } }