You are here

public function GlobalForm::buildForm in Googalytics - Google Analytics 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 ConfigFormBase::buildForm

File

modules/ga_tokens/src/Form/GlobalForm.php, line 65

Class

GlobalForm
Form for editing Google Analytics Global Dimensions settings.

Namespace

Drupal\ga_tokens\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  $gaConfig = $this
    ->config('ga.settings');
  $gaTokenGlobalConfig = $this
    ->config('ga_tokens.global');
  $premium = $gaConfig
    ->get('premium');
  $groupCount = $premium ? 10 : 1;
  if ($premium) {
    $form['dimensions'] = [
      '#type' => 'vertical_tabs',
      '#title' => $this
        ->t('Dimensions'),
      '#description' => $this
        ->t("Custom dimensions must be configured via the Google Analytics Management Interface."),
    ];
  }
  for ($groupIndex = 0; $groupIndex < $groupCount; $groupIndex++) {
    if ($premium) {
      $form['dimensiongroup' . $groupIndex] = [
        '#type' => 'details',
        '#group' => 'dimensions',
        '#title' => $this
          ->t('Dimensions %start to %end', [
          '%start' => $groupIndex * 20 + 1,
          '%end' => ($groupIndex + 1) * 20,
        ]),
        '#tree' => TRUE,
      ];
    }
    else {
      $form['dimensiongroup' . $groupIndex] = [
        '#type' => 'fieldset',
        '#title' => $this
          ->t('Dimensions'),
        '#description' => $this
          ->t("Custom dimensions must be configured via the Google Analytics Management Interface."),
        '#tree' => TRUE,
      ];
    }
    $form['dimensiongroup' . $groupIndex]['table'] = [
      '#type' => 'table',
      '#header' => [
        [
          'data' => $this
            ->t('Index'),
        ],
        [
          'data' => $this
            ->t('Label'),
        ],
        [
          'data' => $this
            ->t('Value'),
        ],
      ],
    ];
    for ($i = $groupIndex * 20 + 1; $i <= ($groupIndex + 1) * 20; $i++) {
      $form['dimensiongroup' . $groupIndex]['table'][$i]['index'] = [
        '#type' => 'markup',
        '#markup' => $i,
      ];
      $form['dimensiongroup' . $groupIndex]['table'][$i]['label'] = [
        '#type' => 'textfield',
        '#parents' => [
          'dimensions',
          $i,
          'label',
        ],
        '#title' => $this
          ->t('Label'),
        '#title_display' => 'invisible',
        '#default_value' => $gaTokenGlobalConfig
          ->get('dimensions.' . $i . '.label') ?: '',
        '#size' => 30,
      ];
      $form['dimensiongroup' . $groupIndex]['table'][$i]['value'] = [
        '#type' => 'textfield',
        '#parents' => [
          'dimensions',
          $i,
          'value',
        ],
        '#title' => $this
          ->t('Value'),
        '#title_display' => 'invisible',
        '#default_value' => $gaTokenGlobalConfig
          ->get('dimensions.' . $i . '.value') ?: '',
        '#element_validate' => [
          'token_element_validate',
        ],
        '#token_types' => [],
      ];
    }
    if ($this->moduleHandler
      ->moduleExists('token')) {
      $form['dimensiongroup' . $groupIndex]['table']['token_help']['index'] = [];
      $form['dimensiongroup' . $groupIndex]['table']['token_help']['label'] = [];
      $form['dimensiongroup' . $groupIndex]['table']['token_help']['value'] = [
        '#theme' => 'token_tree_link',
        '#token_types' => [],
      ];
    }
  }
  if ($premium) {
    $form['metrics'] = [
      '#type' => 'vertical_tabs',
      '#title' => $this
        ->t('Metrics'),
      '#description' => $this
        ->t("Custom metrics must be configured via the Google Analytics Management Interface."),
      '#tree' => TRUE,
    ];
  }
  for ($groupIndex = 0; $groupIndex < $groupCount; $groupIndex++) {
    if ($premium) {
      $form['metricgroup' . $groupIndex] = [
        '#type' => 'details',
        '#group' => 'metrics',
        '#title' => $this
          ->t('Metrics %start to %end', [
          '%start' => $groupIndex * 20 + 1,
          '%end' => ($groupIndex + 1) * 20,
        ]),
        '#tree' => TRUE,
      ];
    }
    else {
      $form['metricgroup' . $groupIndex] = [
        '#type' => 'fieldset',
        '#title' => $this
          ->t('Metrics'),
        '#description' => $this
          ->t("Custom metrics must be configured via the Google Analytics Management Interface."),
        '#tree' => TRUE,
      ];
    }
    $form['metricgroup' . $groupIndex]['table'] = [
      '#type' => 'table',
      '#header' => [
        [
          'data' => $this
            ->t('Index'),
        ],
        [
          'data' => $this
            ->t('Label'),
        ],
        [
          'data' => $this
            ->t('Value'),
        ],
      ],
    ];
    for ($i = $groupIndex * 20 + 1; $i <= ($groupIndex + 1) * 20; $i++) {
      $form['metricgroup' . $groupIndex]['table'][$i]['index'] = [
        '#type' => 'markup',
        '#markup' => $i,
      ];
      $form['metricgroup' . $groupIndex]['table'][$i]['label'] = [
        '#type' => 'textfield',
        '#parents' => [
          'metrics',
          $i,
          'label',
        ],
        '#title' => $this
          ->t('Label'),
        '#title_display' => 'invisible',
        '#default_value' => $gaTokenGlobalConfig
          ->get('metrics.' . $i . '.label') ?: '',
        '#size' => 30,
      ];
      $form['metricgroup' . $groupIndex]['table'][$i]['value'] = [
        '#type' => 'textfield',
        '#parents' => [
          'metrics',
          $i,
          'value',
        ],
        '#title' => $this
          ->t('Value'),
        '#title_display' => 'invisible',
        '#default_value' => $gaTokenGlobalConfig
          ->get('metrics.' . $i . '.value') ?: '',
        '#element_validate' => [
          'token_element_validate',
        ],
        '#token_types' => [],
      ];
    }
    if ($this->moduleHandler
      ->moduleExists('token')) {
      $form['metricgroup' . $groupIndex]['table']['token_help']['index'] = [];
      $form['metricgroup' . $groupIndex]['table']['token_help']['label'] = [];
      $form['metricgroup' . $groupIndex]['table']['token_help']['value'] = [
        '#theme' => 'token_tree_link',
        '#token_types' => [],
      ];
    }
  }
  return parent::buildForm($form, $form_state);
}