You are here

public function AnonymousPublishingClAdminSpam::buildForm in Anonymous Publishing 8

Form constructor.

Parameters

array $form: An associative array containing the structure of the form.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

Return value

array The form structure.

Overrides FormInterface::buildForm

File

modules/anonymous_publishing_cl/src/Form/AnonymousPublishingClAdminSpam.php, line 55

Class

AnonymousPublishingClAdminSpam

Namespace

Drupal\anonymous_publishing_cl\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  if (\Drupal::moduleHandler()
    ->moduleExists('ban')) {

    // Build an 'Update options' form.
    $form['options'] = array(
      '#type' => 'details',
      '#title' => $this
        ->t('Update options'),
      '#open' => TRUE,
      '#attributes' => array(
        'class' => array(
          'container-inline',
        ),
      ),
    );
    $options = array(
      'block' => $this
        ->t("Block the IP address"),
      'unblock' => $this
        ->t("Unblock the IP address"),
    );
    $form['options']['operation'] = array(
      '#type' => 'select',
      '#title' => $this
        ->t('Action'),
      '#title_display' => 'invisible',
      '#options' => $options,
      '#default_value' => 'publish',
    );
    $form['options']['submit'] = array(
      '#type' => 'submit',
      '#value' => $this
        ->t('Update'),
    );
  }
  else {
    $form['options'] = array(
      '#markup' => '<p><b>' . $this
        ->t("You can't ban IPs if you don't enable the BAN module.") . '</b></p>',
    );
  }
  $form['apu_info'] = [
    '#markup' => t("<p>The following table shows the IP-addresses and the average hits per day generated by the ten most aggressive spambots hitting the site. To move the bot's IP-address to Drupal's <code>{blocked_ips}</code> table, check the corresponding item line and Update using the proper action.</p><p>As an alternative to the Drupal <code>{blocked_ips}</code> table you may instead deny access to unwanted IP-addresses using the appropriate command in the web server access file.</p>"),
  ];
  $header = array(
    'ip' => array(
      'data' => $this
        ->t('IP-address'),
    ),
    'first' => array(
      'data' => $this
        ->t('First seen'),
    ),
    'last' => array(
      'data' => $this
        ->t('Last seeb'),
    ),
    'visits' => array(
      'data' => $this
        ->t('Total hits'),
    ),
    'freq' => array(
      'data' => $this
        ->t('Daily hits'),
    ),
    'status' => array(
      'data' => $this
        ->t('Status'),
    ),
    'blocked' => array(
      'data' => $this
        ->t('Banned'),
    ),
  );
  $options = array();
  $hidden_values = array();

  // Fetch first 10 bot reports.
  $rows = $this
    ->getAllSpamContents();

  // Build the table.
  foreach ($rows as $row) {
    $freq = $row->visits / ((\Drupal::time()
      ->getRequestTime() - $row->first) / 86400);
    $freq = min([
      $freq,
      $row->visits,
    ]);
    $options[$row->id] = array(
      'ip' => array(
        'data' => array(
          '#markup' => $row->ip,
        ),
      ),
      'first' => array(
        'data' => array(
          '#markup' => $this->dateFormatter
            ->formatInterval(\Drupal::time()
            ->getRequestTime() - $row->first, 1) . ' ' . t('ago'),
        ),
      ),
      'last' => array(
        'data' => array(
          '#markup' => $this->dateFormatter
            ->formatInterval(\Drupal::time()
            ->getRequestTime() - $row->last, 1) . ' ' . t('ago'),
        ),
      ),
      'visits' => array(
        'data' => array(
          '#markup' => $row->visits,
        ),
      ),
      'freq' => array(
        'data' => array(
          '#markup' => round($freq),
        ),
      ),
      'status' => array(
        'data' => array(
          '#markup' => round($freq),
        ),
      ),
      'blocked' => array(
        'data' => array(
          '#markup' => isset($row->iid) ? $this
            ->t('IP is banned') : $this
            ->t('IP is not banned'),
        ),
      ),
    );
    $hidden_values[$row->id] = $row->ip;
  }
  $form['hidden_values'] = array(
    '#type' => 'hidden',
    '#value' => serialize($hidden_values),
  );
  $form['items'] = array(
    '#type' => 'tableselect',
    '#header' => $header,
    '#options' => $options,
    '#empty' => $this
      ->t('There is no unverified content.'),
  );
  $form['pager'] = array(
    '#type' => 'pager',
  );
  return $form;
}