<?php /** * @file * Contains automatic_updates.module.. */ use Drupal\automatic_updates\ReadinessChecker\ReadinessCheckerManagerInterface; /** * Implements hook_page_top(). */ function automatic_updates_page_top(array &$page_top) { /** @var \Drupal\Core\Routing\AdminContext $admin_context */ $admin_context = \Drupal::service('router.admin_context'); $route_match = \Drupal::routeMatch(); if ($admin_context->isAdminRoute($route_match->getRouteObject()) && \Drupal::currentUser()->hasPermission('administer site configuration')) { $disabled_routes = [ 'update.theme_update', 'system.theme_install', 'update.module_update', 'update.module_install', 'update.status', 'update.report_update', 'update.report_install', 'update.settings', 'system.status', 'update.confirmation_page', ]; // These routes don't need additional nagging. if (in_array(\Drupal::routeMatch()->getRouteName(), $disabled_routes, TRUE)) { return; } /** @var \Drupal\automatic_updates\Services\AutomaticUpdatesPsaInterface $psa */ $psa = \Drupal::service('automatic_updates.psa'); $messages = $psa->getPublicServiceMessages(); if ($messages) { \Drupal::messenger()->addError(t('Public service announcements:')); foreach ($messages as $message) { \Drupal::messenger()->addError($message); } } $last_check_timestamp = \Drupal::service('automatic_updates.readiness_checker')->timestamp(); if (\Drupal::time()->getRequestTime() > $last_check_timestamp + ReadinessCheckerManagerInterface::LAST_CHECKED_WARNING) { \Drupal::messenger()->addError(t('Your site has not recently run an update readiness check.')); } /** @var \Drupal\automatic_updates\ReadinessChecker\ReadinessCheckerManagerInterface $checker */ $checker = \Drupal::service('automatic_updates.readiness_checker'); $results = $checker->getResults('error'); if ($results) { \Drupal::messenger()->addError(t('Your site is currently failing readiness checks for automatic updates. It cannot be <a href="@readiness_checks">automatically updated</a> until further action is performed:', ['@readiness_checks' => 'https://www.drupal.org/docs/8/update/automatic-updates#readiness-checks'])); foreach ($results as $message) { \Drupal::messenger()->addError($message); } } $results = $checker->getResults('warning'); if ($results) { \Drupal::messenger()->addWarning(t('Your site does not pass some readiness checks for automatic updates. Depending on the nature of the failures, it might effect the eligibility for <a href="@readiness_checks">automatic updates</a>.', ['@readiness_checks' => 'https://www.drupal.org/docs/8/update/automatic-updates#readiness-checks'])); foreach ($results as $message) { \Drupal::messenger()->addWarning($message); } } } } /** * Implements hook_cron(). */ function automatic_updates_cron() { /** @var \Drupal\automatic_updates\Services\NotifyInterface $notify */ $notify = \Drupal::service('automatic_updates.psa_notify'); $notify->send(); /** @var \Drupal\automatic_updates\ReadinessChecker\ReadinessCheckerManagerInterface $checker */ $checker = \Drupal::service('automatic_updates.readiness_checker'); foreach ($checker->getCategories() as $category) { $checker->run($category); } } /** * Implements hook_theme(). */ function automatic_updates_theme(array $existing, $type, $theme, $path) { return [ 'automatic_updates_psa_notify' => [ 'variables' => [ 'messages' => [], ], ], ]; } /** * Implements hook_mail(). */ function automatic_updates_mail($key, &$message, $params) { /** @var \Drupal\Core\Render\RendererInterface $renderer */ $renderer = \Drupal::service('renderer'); $message['subject'] = $params['subject']; $message['body'][] = $renderer->render($params['body']); }