You are here

public function OverviewForm::buildForm in Events Log Track 8

Same name and namespace in other branches
  1. 8.2 src/OverviewForm.php \Drupal\event_log_track\OverviewForm::buildForm()

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

src/OverviewForm.php, line 28

Class

OverviewForm
Configure user settings for this site.

Namespace

Drupal\event_log_track

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  $form['filters'] = array(
    '#type' => 'details',
    '#title' => $this
      ->t('Filters'),
    '#description' => $this
      ->t('Filter the events.'),
    '#open' => TRUE,
  );
  $handlers = event_log_track_get_event_handlers();
  $options = array();
  foreach ($handlers as $type => $handler) {
    $options[$type] = $handler['title'];
  }
  $form['filters']['type'] = array(
    '#type' => 'select',
    '#title' => $this
      ->t('Type'),
    '#description' => $this
      ->t('Event type'),
    '#options' => array(
      '' => 'Select a type',
    ) + $options,
    '#ajax' => array(
      'callback' => '::formGetAjaxOperation',
      'event' => 'change',
    ),
  );
  $form['filters']['operation'] = EventLogStorage::formGetOperations(empty($form_state
    ->getUserInput()['type']) ? '' : $form_state
    ->getUserInput()['type']);
  $form['filters']['user'] = array(
    '#type' => 'entity_autocomplete',
    '#target_type' => 'user',
    '#selection_settings' => [
      'include_anonymous' => FALSE,
    ],
    '#title' => $this
      ->t('User'),
    '#description' => $this
      ->t('The user that triggered this event.'),
    '#size' => 30,
    '#maxlength' => 60,
  );
  $form['filters']['id'] = array(
    '#type' => 'textfield',
    '#size' => 5,
    '#title' => $this
      ->t('ID'),
    '#description' => $this
      ->t('The id of the events (numeric).'),
  );
  $form['filters']['ip'] = array(
    '#type' => 'textfield',
    '#size' => 20,
    '#title' => $this
      ->t('IP'),
    '#description' => $this
      ->t('The ip address of the visitor.'),
  );
  $form['filters']['name'] = array(
    '#type' => 'textfield',
    '#size' => 10,
    '#title' => $this
      ->t('Name'),
    '#description' => $this
      ->t('The name or machine name.'),
  );
  $form['filters']['path'] = array(
    '#type' => 'textfield',
    '#size' => 30,
    '#title' => $this
      ->t('Path'),
    '#description' => $this
      ->t('keyword in the path.'),
  );
  $form['filters']['keyword'] = array(
    '#type' => 'textfield',
    '#size' => 10,
    '#title' => $this
      ->t('Description'),
    '#description' => $this
      ->t('Keyword in the description.'),
  );
  $form['filters']['submit'] = array(
    '#type' => 'submit',
    '#value' => $this
      ->t('Submit'),
  );
  if (!empty($form_state
    ->getUserInput())) {
    $form['filters']['reset'] = array(
      '#type' => 'submit',
      '#value' => $this
        ->t('Reset'),
      '#limit_validation_errors' => array(),
      '#submit' => array(
        '::resetForm',
      ),
    );
  }
  $header = array(
    array(
      'data' => $this
        ->t('Updated'),
      'field' => 'created',
      'sort' => 'desc',
    ),
    array(
      'data' => $this
        ->t('Type'),
      'field' => 'type',
    ),
    array(
      'data' => $this
        ->t('Operation'),
      'field' => 'operation',
    ),
    array(
      'data' => $this
        ->t('Path'),
      'field' => 'path',
    ),
    array(
      'data' => $this
        ->t('Description'),
      'field' => 'description',
    ),
    array(
      'data' => $this
        ->t('User'),
      'field' => 'uid',
    ),
    array(
      'data' => $this
        ->t('IP'),
      'field' => 'ip',
    ),
    array(
      'data' => $this
        ->t('ID'),
      'field' => 'ref_numeric',
    ),
    array(
      'data' => $this
        ->t('Name'),
      'field' => 'ref_char',
    ),
  );
  $formData = !empty($form_state
    ->getUserInput()) ? $form_state
    ->getUserInput() : array();
  $limit = 20;
  $result = EventLogStorage::getSearchData($formData, $header, $limit);
  $rows = array();
  foreach ($result as $record) {
    if (!empty($record->uid)) {
      $account = User::load($record->uid);
      $userLink = $this
        ->l($account
        ->getUsername(), Url::fromUri('internal:/user/' . $account
        ->id()));
    }
    else {
      $account = NULL;
    }
    $rows[] = array(
      array(
        'data' => Html::escape(date("Y-m-d H:i:s", $record->created)),
      ),
      array(
        'data' => Html::escape($record->type),
      ),
      array(
        'data' => Html::escape($record->operation),
      ),
      array(
        'data' => Html::escape($record->path),
      ),
      array(
        'data' => strip_tags($record->description),
      ),
      array(
        'data' => empty($account) ? '' : $userLink,
      ),
      array(
        'data' => Html::escape($record->ip),
      ),
      array(
        'data' => Html::escape($record->ref_numeric),
      ),
      array(
        'data' => Html::escape($record->ref_char),
      ),
    );
  }

  // Generate the table.
  $build['config_table'] = array(
    '#theme' => 'table',
    '#header' => $header,
    '#rows' => $rows,
    '#empty' => $this
      ->t('No events found.'),
  );

  // Finally add the pager.
  $build['pager'] = array(
    '#type' => 'pager',
  );
  $form['results'] = $build;
  return $form;
}