pageRenderer = $pageRenderer; $this->cronHelper = $cronHelper; $this->systemReportCollector = $systemReportCollector; $this->bridge = $bridge; $this->scheduledTasksRepository = $scheduledTasksRepository; $this->sendingQueuesRepository = $sendingQueuesRepository; $this->newsletterUrl = $newsletterUrl; } public function render() { /** * Filter the system info. * * @param array $systemInfoData The system info data array. */ $systemInfoData = WPFunctions::get()->applyFilters('mailpoet_system_info_data', $this->systemReportCollector->getData(true)); try { $cronPingUrl = $this->cronHelper->getCronUrl(CronDaemon::ACTION_PING); $cronPingResponse = $this->systemReportCollector->getCronPingResponse(); } catch (\Exception $e) { $cronPingResponse = __('Can‘t generate cron URL.', 'mailpoet') . ' (' . $e->getMessage() . ')'; $cronPingUrl = $cronPingResponse; } $mailerLog = MailerLog::getMailerLog(); $mailerLog['sent'] = MailerLog::sentSince(); $bridgePingResponse = $this->systemReportCollector->getBridgePingResponse(); $systemStatusData = [ 'cron' => [ 'url' => $cronPingUrl, 'isReachable' => $this->cronHelper->validatePingResponse($cronPingResponse), 'pingResponse' => $cronPingResponse, ], 'mss' => [ 'enabled' => $this->bridge->isMailpoetSendingServiceEnabled(), 'isReachable' => $this->bridge->validateBridgePingResponse($bridgePingResponse), ], 'cronStatus' => $this->cronHelper->getDaemon(), 'queueStatus' => $mailerLog, ]; $systemStatusData['cronStatus']['accessible'] = $this->cronHelper->isDaemonAccessible(); $systemStatusData['queueStatus']['tasksStatusCounts'] = $this->scheduledTasksRepository->getCountsPerStatus(); $scheduledTasks = $this->scheduledTasksRepository->getLatestTasks(SendingQueue::TASK_TYPE); $systemStatusData['queueStatus']['latestTasks'] = array_map(fn($task) => $this->buildTaskData($task), $scheduledTasks); $this->pageRenderer->displayPage( 'help.html', [ 'systemInfoData' => $systemInfoData, 'systemStatusData' => $systemStatusData, 'actionSchedulerData' => $this->getActionSchedulerData(), ] ); } private function getActionSchedulerData(): ?array { if (!class_exists(\ActionScheduler_Store::class)) { return null; } $actionSchedulerData = []; $actionSchedulerData['version'] = \ActionScheduler_Versions::instance()->latest_version(); $actionSchedulerData['storage'] = str_replace('ActionScheduler_', '', get_class(\ActionScheduler_Store::instance())); $actionSchedulerData['latestTrigger'] = $this->getLatestActionSchedulerActionDate(DaemonTrigger::NAME); $actionSchedulerData['latestCompletedTrigger'] = $this->getLatestActionSchedulerActionDate(DaemonTrigger::NAME, 'complete'); $actionSchedulerData['latestCompletedRun'] = $this->getLatestActionSchedulerActionDate(DaemonRun::NAME, 'complete'); return $actionSchedulerData; } private function getLatestActionSchedulerActionDate(string $hook, ?string $status = null): ?string { $query = [ 'per_page' => 1, 'order' => 'DESC', 'hook' => $hook, ]; if ($status) { $query['status'] = $status; } $store = \ActionScheduler_Store::instance(); $action = $store->query_actions($query); if (!empty($action)) { $dateObject = $store->get_date($action[0]); return $dateObject->format('Y-m-d H:i:s'); } return null; } public function buildTaskData(ScheduledTaskEntity $task): array { $queue = $newsletter = $subscriber = null; if ($task->getType() === SendingQueue::TASK_TYPE) { $queue = $this->sendingQueuesRepository->findOneBy(['task' => $task]); $newsletter = $queue ? $queue->getNewsletter() : null; $subscribers = $task->getSubscribers(); // We only show subscriber's email for 1:1 emails (e.g. automations) and not bulk campaigns if ($subscribers->count() === 1) { $subscriber = $subscribers->first() ? $subscribers->first()->getSubscriber() : null; } } return [ 'id' => $task->getId(), 'type' => $task->getType(), 'priority' => $task->getPriority(), 'updatedAt' => $task->getUpdatedAt()->format(DateTime::DEFAULT_DATE_TIME_FORMAT), 'scheduledAt' => $task->getScheduledAt() ? $task->getScheduledAt()->format(DateTime::DEFAULT_DATE_TIME_FORMAT) : null, 'cancelledAt' => $task->getCancelledAt() ? $task->getCancelledAt()->format(DateTime::DEFAULT_DATE_TIME_FORMAT) : null, 'status' => $task->getStatus(), 'newsletter' => $queue && $newsletter ? [ 'newsletterId' => $newsletter->getId(), 'queueId' => $queue->getId(), 'subject' => $queue->getNewsletterRenderedSubject() ?: $newsletter->getSubject(), 'previewUrl' => $this->newsletterUrl->getViewInBrowserUrl($newsletter, null, $queue), ] : [ 'newsletterId' => null, 'queueId' => null, 'subject' => null, 'previewUrl' => null, ], 'subscriberEmail' => $subscriber ? $subscriber->getEmail() : null, ]; } }