Mercurial > hg > isophonics-drupal-site
diff core/modules/ban/src/Form/BanAdmin.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 1fec387a4317 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/ban/src/Form/BanAdmin.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,125 @@ +<?php + +namespace Drupal\ban\Form; + +use Drupal\Core\Form\FormBase; +use Drupal\ban\BanIpManagerInterface; +use Drupal\Core\Form\FormStateInterface; +use Drupal\Core\Url; +use Symfony\Component\DependencyInjection\ContainerInterface; + +/** + * Displays banned IP addresses. + */ +class BanAdmin extends FormBase { + + /** + * @var \Drupal\ban\BanIpManagerInterface + */ + protected $ipManager; + + /** + * Constructs a new BanAdmin object. + * + * @param \Drupal\ban\BanIpManagerInterface $ip_manager + */ + public function __construct(BanIpManagerInterface $ip_manager) { + $this->ipManager = $ip_manager; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('ban.ip_manager') + ); + } + + /** + * {@inheritdoc} + */ + public function getFormId() { + return 'ban_ip_form'; + } + + /** + * {@inheritdoc} + * + * @param string $default_ip + * (optional) IP address to be passed on to + * \Drupal::formBuilder()->getForm() for use as the default value of the IP + * address form field. + */ + public function buildForm(array $form, FormStateInterface $form_state, $default_ip = '') { + $rows = []; + $header = [$this->t('banned IP addresses'), $this->t('Operations')]; + $result = $this->ipManager->findAll(); + foreach ($result as $ip) { + $row = []; + $row[] = $ip->ip; + $links = []; + $links['delete'] = [ + 'title' => $this->t('Delete'), + 'url' => Url::fromRoute('ban.delete', ['ban_id' => $ip->iid]), + ]; + $row[] = [ + 'data' => [ + '#type' => 'operations', + '#links' => $links, + ], + ]; + $rows[] = $row; + } + + $form['ip'] = [ + '#title' => $this->t('IP address'), + '#type' => 'textfield', + '#size' => 48, + '#maxlength' => 40, + '#default_value' => $default_ip, + '#description' => $this->t('Enter a valid IP address.'), + ]; + $form['actions'] = ['#type' => 'actions']; + $form['actions']['submit'] = [ + '#type' => 'submit', + '#value' => $this->t('Add'), + ]; + + $form['ban_ip_banning_table'] = [ + '#type' => 'table', + '#header' => $header, + '#rows' => $rows, + '#empty' => $this->t('No blocked IP addresses available.'), + '#weight' => 120, + ]; + return $form; + } + + /** + * {@inheritdoc} + */ + public function validateForm(array &$form, FormStateInterface $form_state) { + $ip = trim($form_state->getValue('ip')); + if ($this->ipManager->isBanned($ip)) { + $form_state->setErrorByName('ip', $this->t('This IP address is already banned.')); + } + elseif ($ip == $this->getRequest()->getClientIP()) { + $form_state->setErrorByName('ip', $this->t('You may not ban your own IP address.')); + } + elseif (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE) == FALSE) { + $form_state->setErrorByName('ip', $this->t('Enter a valid IP address.')); + } + } + + /** + * {@inheritdoc} + */ + public function submitForm(array &$form, FormStateInterface $form_state) { + $ip = trim($form_state->getValue('ip')); + $this->ipManager->banIp($ip); + drupal_set_message($this->t('The IP address %ip has been banned.', ['%ip' => $ip])); + $form_state->setRedirect('ban.admin_page'); + } + +}