You are here

public function SwitchPageThemeSettingForm::buildForm in Switch Page Theme 8.2

Same name and namespace in other branches
  1. 8.3 src/Form/SwitchPageThemeSettingForm.php \Drupal\switch_page_theme\Form\SwitchPageThemeSettingForm::buildForm()
  2. 8 src/Form/SwitchPageThemeSettingForm.php \Drupal\switch_page_theme\Form\SwitchPageThemeSettingForm::buildForm()

Implements admin settings form.

Parameters

array $form: From render array.

\Drupal\Core\Form\FormStateInterface $form_state: Current state of form.

Overrides ConfigFormBase::buildForm

File

src/Form/SwitchPageThemeSettingForm.php, line 96

Class

SwitchPageThemeSettingForm
Configuration page for Switch page theme settings.

Namespace

Drupal\switch_page_theme\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  $form = parent::buildForm($form, $form_state);

  // Fetch configurations if saved.
  $config = $this
    ->config('switch_page_theme.settings');

  // Instructions.
  $form['desc'] = [
    '#type' => 'markup',
    '#markup' => $this
      ->t('<b>Enabled:</b> Rule will work only if checkbox is checked.<br><b>Pages:</b> Enter one path per line. The "*" character is a wildcard. Example paths are "/node/1" for an individual piece of content or "/node/*" for every piece of content. "@front" is the front page.<br><br>Theme with highest weight will be applied on the page.', [
      '@front' => '<front>',
    ]),
  ];

  // Create headers for table.
  $header = [
    $this
      ->t('Enabled'),
    $this
      ->t('pages'),
    $this
      ->t('Themes'),
    $this
      ->t('Roles'),
  ];
  if ($this->moduleHandler
    ->moduleExists('domain')) {
    $header[] = $this
      ->t('Domain');
  }
  if ($this->languageManager
    ->isMultilingual() || $this->moduleHandler
    ->moduleExists('language')) {
    $header[] = $this
      ->t('Language');
  }
  array_push($header, $this
    ->t('Operation'), $this
    ->t('Weight'));

  // Multi value table form.
  $form['spt_table'] = [
    '#type' => 'table',
    '#header' => $header,
    '#empty' => $this
      ->t('There are no items yet. Add an item.', []),
    '#prefix' => '<div id="spt-fieldset-wrapper">',
    '#suffix' => '</div>',
    '#tabledrag' => [
      [
        'action' => 'order',
        'relationship' => 'sibling',
        'group' => 'spt_table-order-weight',
      ],
    ],
  ];

  // Available themes.
  $themes = system_list('theme');
  $themeNames[''] = '--Select--';
  foreach ($themes as $key => $value) {
    $themeNames[$key] = $value->info['name'];
  }

  // Set table values on Add/Remove or on page load.
  $spt_table = $form_state
    ->get('spt_table');
  if (empty($spt_table)) {

    // Set data from configuration on page load.
    // Set empty element if no configurations are set.
    if (NULL !== $config
      ->get('spt_table')) {
      $spt_table = $config
        ->get('spt_table');
      $form_state
        ->set('spt_table', $spt_table);
    }
    else {
      $spt_table = [
        '',
      ];
      $form_state
        ->set('spt_table', $spt_table);
    }
  }

  // Create row for table.
  foreach ($spt_table as $i => $value) {
    $form['spt_table'][$i]['#attributes']['class'][] = 'draggable';
    $form['spt_table'][$i]['status'] = [
      '#type' => 'checkbox',
      '#title' => $this
        ->t('Status'),
      '#title_display' => 'invisible',
      '#default_value' => NULL !== $value['status'] ? $value['status'] : [],
    ];
    $form['spt_table'][$i]['pages'] = [
      '#type' => 'textarea',
      '#title' => $this
        ->t('Pages'),
      '#title_display' => 'invisible',
      '#required' => TRUE,
      '#cols' => '5',
      '#rows' => '5',
      '#default_value' => NULL !== $value['pages'] ? $value['pages'] : [],
    ];
    $form['spt_table'][$i]['theme'] = [
      '#type' => 'select',
      '#title' => $this
        ->t('Theme'),
      '#title_display' => 'invisible',
      '#options' => $themeNames,
      '#required' => TRUE,
      '#default_value' => NULL !== $value['theme'] ? $value['theme'] : [],
    ];
    $form['spt_table'][$i]['roles'] = [
      '#type' => 'checkboxes',
      '#title' => $this
        ->t('Roles'),
      '#title_display' => 'invisible',
      '#options' => user_role_names(),
      '#required' => TRUE,
      '#default_value' => NULL !== $value['roles'] ? $value['roles'] : [],
    ];

    // Add Domains if domain module is available.
    if ($this->moduleHandler
      ->moduleExists('domain')) {
      foreach ($this->domainLoader
        ->loadMultiple() as $domain_key => $domain) {
        $domainNames[$domain_key] = $domain
          ->getHostname();
      }
      $form['spt_table'][$i]['domain'] = [
        '#type' => 'checkboxes',
        '#title' => $this
          ->t('Domain'),
        '#title_display' => 'invisible',
        '#options' => $domainNames,
        '#required' => TRUE,
        '#default_value' => NULL !== $value['domain'] ? $value['domain'] : [],
      ];
    }

    // Add Language if site is multilingual.
    if ($this->languageManager
      ->isMultilingual() || $this->moduleHandler
      ->moduleExists('language')) {
      foreach ($this->languageManager
        ->getLanguages() as $langkey => $langvalue) {
        $langNames[$langkey] = $langvalue
          ->getName();
      }
      $form['spt_table'][$i]['language'] = [
        '#type' => 'checkboxes',
        '#title' => $this
          ->t('Language'),
        '#title_display' => 'invisible',
        '#options' => $langNames,
        '#required' => TRUE,
        '#default_value' => NULL !== $value['language'] ? $value['language'] : [],
      ];
    }
    $form['spt_table'][$i]['remove'] = [
      '#type' => 'submit',
      '#value' => $this
        ->t('Remove'),
      '#name' => "remove-" . $i,
      '#submit' => [
        '::removeElement',
      ],
      '#limit_validation_errors' => [],
      '#ajax' => [
        'callback' => '::removeCallback',
        'wrapper' => 'spt-fieldset-wrapper',
      ],
      '#index_position' => $i,
    ];

    // TableDrag: Weight column element.
    $form['spt_table'][$i]['weight'] = [
      '#type' => 'weight',
      '#title_display' => 'invisible',
      '#default_value' => NULL !== $value['weight'] ? $value['weight'] : [],
      '#attributes' => [
        'class' => [
          'spt_table-order-weight',
        ],
      ],
    ];
  }
  $form['add_name'] = [
    '#type' => 'submit',
    '#value' => $this
      ->t('Add one more'),
    '#submit' => [
      '::addOne',
    ],
    '#ajax' => [
      'callback' => '::addmoreCallback',
      'wrapper' => 'spt-fieldset-wrapper',
    ],
  ];
  $form_state
    ->setCached(FALSE);
  return parent::buildForm($form, $form_state);
}