public function SwitchPageThemeSettingForm::buildForm in Switch Page Theme 8.2
Same name and namespace in other branches
- 8.3 src/Form/SwitchPageThemeSettingForm.php \Drupal\switch_page_theme\Form\SwitchPageThemeSettingForm::buildForm()
- 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\FormCode
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);
}