diff --git a/core/modules/system/src/Form/CronForm.php b/core/modules/system/src/Form/CronForm.php index 751b3379eb3c00f2039b3fb18e8df0642dbdd8b3..8a3f23175cdb09bff59f30fef0af5f034a2da9ec 100644 --- a/core/modules/system/src/Form/CronForm.php +++ b/core/modules/system/src/Form/CronForm.php @@ -16,6 +16,7 @@ * Configure cron settings for this site. */ class CronForm extends FormBase { + use ConfigFormBaseTrait; /** @@ -104,6 +105,7 @@ public function buildForm(array $form, FormStateInterface $form_state) { $form['run'] = [ '#type' => 'submit', '#value' => t('Run cron'), + '#submit' => ['::runCron'], ]; $status = '<p>' . $this->t('Last run: %time ago.', ['%time' => $this->dateFormatter->formatTimeDiffSince($this->state->get('system.cron_last'))]) . '</p>'; $form['status'] = [ @@ -145,22 +147,25 @@ public function buildForm(array $form, FormStateInterface $form_state) { } /** - * Runs cron and reloads the page. + * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { $this->config('system.cron') ->set('logging', $form_state->getValue('logging')) ->save(); drupal_set_message(t('The configuration options have been saved.')); + } - // Run cron manually from Cron form. + /** + * Form submission handler for running cron manually. + */ + public function runCron(array &$form, FormStateInterface $form_state) { if ($this->cron->run()) { - drupal_set_message(t('Cron ran successfully.')); + drupal_set_message($this->t('Cron ran successfully.')); } else { - drupal_set_message(t('Cron run failed.'), 'error'); + drupal_set_message($this->t('Cron run failed.'), 'error'); } - } } diff --git a/core/modules/system/src/Tests/System/CronRunTest.php b/core/modules/system/src/Tests/System/CronRunTest.php index 111cc00870b10ebd05b5e4c2b74716f04c8ad07e..ec4e649bf73b32a60e6a0b3d05ea6b7897f98188 100644 --- a/core/modules/system/src/Tests/System/CronRunTest.php +++ b/core/modules/system/src/Tests/System/CronRunTest.php @@ -105,9 +105,19 @@ public function testCronUI() { // the time will start at 1 January 1970. $this->assertNoText('years'); - $this->drupalPostForm(NULL, [], t('Save configuration')); - $this->assertText(t('The configuration options have been saved.')); + $cron_last = time() - 200; + \Drupal::state()->set('system.cron_last', $cron_last); + + $this->drupalPostForm(NULL, [], 'Save configuration'); + $this->assertText('The configuration options have been saved.'); $this->assertUrl('admin/config/system/cron'); + + // Check that cron does not run when saving the configuration form. + $this->assertEqual($cron_last, \Drupal::state()->get('system.cron_last'), 'Cron does not run when saving the configuration form.'); + + // Check that cron runs when triggered manually. + $this->drupalPostForm(NULL, [], 'Run cron'); + $this->assertTrue($cron_last < \Drupal::state()->get('system.cron_last'), 'Cron runs when triggered manually.'); } /**