state = $state; $this->cron = $cron; $this->dateFormatter = $date_formatter; $this->moduleHandler = $module_handler; } /** * {@inheritdoc} */ protected function getEditableConfigNames() { return ['system.cron']; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container) { return new static( $container->get('config.factory'), $container->get('state'), $container->get('cron'), $container->get('date.formatter'), $container->get('module_handler') ); } /** * {@inheritdoc} */ public function getFormId() { return 'system_cron_settings'; } /** * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state) { $form['description'] = [ '#markup' => '

' . t('Cron takes care of running periodic tasks like checking for updates and indexing content for search.') . '

', ]; $form['run'] = [ '#type' => 'submit', '#value' => t('Run cron'), '#submit' => ['::runCron'], ]; $status = '

' . $this->t('Last run: %time ago.', ['%time' => $this->dateFormatter->formatTimeDiffSince($this->state->get('system.cron_last'))]) . '

'; $form['status'] = [ '#markup' => $status, ]; $cron_url = $this->url('system.cron', ['key' => $this->state->get('system.cron_key')], ['absolute' => TRUE]); $form['cron_url'] = [ '#markup' => '

' . t('To run cron from outside the site, go to @cron', [':cron' => $cron_url, '@cron' => $cron_url]) . '

', ]; if (!$this->moduleHandler->moduleExists('automated_cron')) { $form['automated_cron'] = [ '#markup' => $this->t('Enable the Automated Cron module to allow cron execution at the end of a server response.'), ]; } $form['cron'] = [ '#title' => t('Cron settings'), '#type' => 'details', '#open' => TRUE, ]; $form['cron']['logging'] = [ '#type' => 'checkbox', '#title' => t('Detailed cron logging'), '#default_value' => $this->config('system.cron')->get('logging'), '#description' => $this->t('Run times of individual cron jobs will be written to watchdog'), ]; $form['actions']['#type'] = 'actions'; $form['actions']['submit'] = [ '#type' => 'submit', '#value' => t('Save configuration'), '#button_type' => 'primary', ]; return $form; } /** * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { $this->config('system.cron') ->set('logging', $form_state->getValue('logging')) ->save(); $this->messenger()->addStatus(t('The configuration options have been saved.')); } /** * Form submission handler for running cron manually. */ public function runCron(array &$form, FormStateInterface $form_state) { if ($this->cron->run()) { $this->messenger()->addStatus($this->t('Cron ran successfully.')); } else { $this->messenger()->addError($this->t('Cron run failed.')); } } }