You are here

public function ReportsForm::buildForm in Matomo Reports 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

src/Form/ReportsForm.php, line 75

Class

ReportsForm
Class ReportsForm.

Namespace

Drupal\matomo_reports\Form

Code

public function buildForm(array $form, FormStateInterface $form_state, array $sites = NULL) {
  $config = $this->configFactory
    ->get('matomo_reports.matomoreportssettings');
  $session = $this
    ->getRequest()
    ->getSession();
  $allowed_sites = [];
  $allowed_keys = explode(',', $config
    ->get('matomo_reports_allowed_sites'));
  $form['#attributes'] = [
    'class' => [
      'search-form',
      'container-inline',
    ],
  ];
  $form['matomo_filters'] = [
    '#type' => 'fieldset',
    '#title' => $this
      ->t('Select site and time period'),
  ];
  $period = [
    0 => $this
      ->t('Today'),
    1 => $this
      ->t('Yesterday'),
    2 => $this
      ->t('Last week'),
    3 => $this
      ->t('Last month'),
    4 => $this
      ->t('Last year'),
  ];
  $form['matomo_filters']['period'] = [
    '#type' => 'select',
    '#title' => $this
      ->t('When'),
    '#description' => $this
      ->t('Report Period'),
    '#options' => $period,
    '#size' => 1,
    '#default_value' => $session
      ->get('matomo_reports_period') ?? 0,
    '#weight' => '0',
  ];
  if ($sites) {
    if (!function_exists('array_key_first')) {

      // @codingStandardsIgnoreStart

      /**
       * Provides fallback function for PHP < 7.3.
       */
      function array_key_first(array $arr) {
        foreach ($arr as $key => $unused) {
          return $key;
        }
        return NULL;
      }

      // @codingStandardsIgnoreEnd
    }
    foreach ($sites as $site) {
      if (empty($allowed_keys[0]) || in_array($site['idsite'], $allowed_keys)) {
        $allowed_sites[$site['idsite']] = $site['name'];
      }
      if ($session
        ->get('matomo_reports_site') == $site['idsite']) {
        $session_site_exists = TRUE;
      }
    }
    if ($session
      ->get('matomo_reports_site') == '' || !$session_site_exists || !array_key_exists($session
      ->get('matomo_reports_site'), $allowed_sites)) {

      // When not set, set to first of the allowed sites.
      $session
        ->set('matomo_reports_site', array_key_first($allowed_sites));
    }
    if (count($allowed_sites) > 1) {
      $form['matomo_filters']['site'] = [
        '#type' => 'select',
        '#title' => $this
          ->t('Site'),
        '#weight' => -5,
        '#default_value' => $session
          ->get('matomo_reports_site'),
        '#options' => $allowed_sites,
      ];
    }
    elseif (count($allowed_sites) == 1) {
      foreach ($allowed_sites as $siteid => $sitename) {
        break;
      }
      $form['matomo_filters']['site'] = [
        '#type' => 'hidden',
        '#value' => $siteid,
      ];
      $form['matomo_filters']['sitename'] = [
        '#type' => 'textfield',
        '#title' => $this
          ->t('Site'),
        '#weight' => -5,
        '#size' => 25,
        '#value' => $sitename,
        '#disabled' => TRUE,
      ];
      $form['matomo_filters']['period']['#attributes'] = [
        'onchange' => 'this.form.submit();',
      ];
    }
  }
  $form['matomo_filters']['submit'] = [
    '#type' => 'submit',
    '#value' => $this
      ->t('Filter'),
  ];
  return $form;
}