--- /dev/null
+<?php
+
+namespace Drupal\security_review\Form;
+
+use Drupal\Core\Form\FormBase;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\security_review\Checklist;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Provides implementation for the Run form.
+ */
+class RunForm extends FormBase {
+
+ /**
+ * The security_review.checklist service.
+ *
+ * @var \Drupal\security_review\Checklist
+ */
+ protected $checklist;
+
+ /**
+ * Constructs a RunForm.
+ *
+ * @param \Drupal\security_review\Checklist $checklist
+ * The security_review.checklist service.
+ */
+ public function __construct(Checklist $checklist) {
+ $this->checklist = $checklist;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public static function create(ContainerInterface $container) {
+ return new static(
+ $container->get('security_review.checklist')
+ );
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getFormId() {
+ return 'security-review-run';
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function buildForm(array $form, FormStateInterface $form_state) {
+ if (!$this->currentUser()->hasPermission('run security checks')) {
+ return [];
+ }
+
+ $form['run_form'] = [
+ '#type' => 'details',
+ '#title' => $this->t('Run'),
+ '#description' => $this->t('Click the button below to run the security checklist and review the results.') . '<br />',
+ '#open' => TRUE,
+ ];
+
+ $form['run_form']['submit'] = [
+ '#type' => 'submit',
+ '#value' => $this->t('Run checklist'),
+ ];
+
+ // Return the finished form.
+ return $form;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function submitForm(array &$form, FormStateInterface $form_state) {
+ $batch = [
+ 'operations' => [],
+ 'finished' => '_security_review_batch_run_finished',
+ 'title' => $this->t('Performing Security Review'),
+ 'init_message' => $this->t('Security Review is starting.'),
+ 'progress_message' => $this->t('Progress @current out of @total.'),
+ 'error_message' => $this->t('An error occurred. Rerun the process or consult the logs.'),
+ ];
+
+ foreach ($this->checklist->getEnabledChecks() as $check) {
+ $batch['operations'][] = [
+ '_security_review_batch_run_op',
+ [$check],
+ ];
+ }
+
+ batch_set($batch);
+ }
+
+}