You are here

public function PopupSettingsForm::buildForm in Popup Dialog 8.2

Same name and namespace in other branches
  1. 8 src/Form/PopupSettingsForm.php \Drupal\popup_dialog\Form\PopupSettingsForm::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 ConfigFormBase::buildForm

File

src/Form/PopupSettingsForm.php, line 74

Class

PopupSettingsForm
Class PopupSettingsForm.

Namespace

Drupal\popup_dialog\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  $config = $this
    ->config('popup_dialog.settings');
  $form['popup_enabled'] = [
    '#type' => 'checkbox',
    '#title' => $this
      ->t('Enabled'),
    '#description' => $this
      ->t('Popup will be enabled when the checkbox is active.'),
    '#default_value' => $config
      ->get('popup_enabled'),
  ];
  $prefix_class = $config
    ->get('popup_enabled') == 0 ? 'hidden' : '';
  $form['popup_settings'] = [
    '#type' => 'details',
    '#title' => $this
      ->t('Popup Box Settings'),
    '#open' => TRUE,
    '#prefix' => '<div id="config-form-section" ' . $prefix_class . '>',
  ];
  $category_settings = !empty($config
    ->get('category_settings')) ? $config
    ->get('category_settings') : 1;
  $form['popup_settings']['category_settings'] = [
    '#type' => 'radios',
    '#title' => $this
      ->t('Category Settings'),
    '#options' => [
      '1' => $this
        ->t('Custom Content'),
      '2' => $this
        ->t('Blocks'),
      '3' => $this
        ->t('Views'),
    ],
    '#default_value' => $category_settings,
  ];
  $form['popup_settings']['custom_content'] = [
    '#type' => 'details',
    '#title' => $this
      ->t('Custom Content'),
    '#open' => TRUE,
    '#states' => [
      'visible' => [
        ':input[name="category_settings"]' => [
          'value' => '1',
        ],
      ],
    ],
  ];
  $form['popup_settings']['custom_content']['popup_box_title'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Title'),
    '#description' => $this
      ->t('The title for the popup dialog box.'),
    '#maxlength' => 64,
    '#size' => 64,
    '#default_value' => $config
      ->get('popup_box_title'),
  ];
  $form['popup_settings']['custom_content']['popup_box_body'] = [
    '#type' => 'text_format',
    '#title' => $this
      ->t('Body'),
    '#default_value' => $config
      ->get('popup_box_body')['value'],
    '#format' => $config
      ->get('popup_box_body')['format'],
  ];

  // Get blocks definition.
  $definitions = $this->blockManager
    ->getDefinitionsForContexts($this->contextRepository
    ->getAvailableContexts());
  $definitions = $this->blockManager
    ->getSortedDefinitions($definitions);
  foreach ($definitions as $plugin_id => $plugin_definition) {
    $title = (string) $plugin_definition['admin_label'];
    $list_of_blocks[$plugin_id . '|' . $title] = (string) $title;
  }
  $form['popup_settings']['blocks'] = [
    '#type' => 'details',
    '#title' => $this
      ->t('Blocks'),
    '#open' => TRUE,
    '#states' => [
      'visible' => [
        ':input[name="category_settings"]' => [
          'value' => '2',
        ],
      ],
    ],
  ];
  $form['popup_settings']['blocks']['list_of_blocks'] = [
    '#type' => 'select',
    '#title' => $this
      ->t('List of Blocks'),
    '#options' => [
      '0' => 'Please select block',
    ] + $list_of_blocks,
    '#default_value' => $config
      ->get('list_of_blocks'),
  ];

  // List of views.
  $list_of_views = Views::getViewsAsOptions(FALSE, 'all', NULL, FALSE, TRUE);
  $form['popup_settings']['views'] = [
    '#type' => 'details',
    '#title' => $this
      ->t('Views'),
    '#open' => TRUE,
    '#states' => [
      'visible' => [
        ':input[name="category_settings"]' => [
          'value' => '3',
        ],
      ],
    ],
  ];
  $form['popup_settings']['views']['list_of_views'] = [
    '#type' => 'select',
    '#title' => $this
      ->t('List of Views'),
    '#options' => [
      '0' => 'Please select view',
    ] + $list_of_views,
    '#default_value' => $config
      ->get('list_of_views'),
  ];
  $form['popup_settings']['views']['arguments'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Arguments'),
    '#description' => $this
      ->t('Please give arguments in a comma format.'),
    '#default_value' => $config
      ->get('arguments'),
  ];
  $form['popup_settings']['delay'] = [
    '#type' => 'number',
    '#title' => $this
      ->t('Delay'),
    '#description' => $this
      ->t('Show message after the enter number of seconds. Enter 0 to show instantly.'),
    '#default_value' => $config
      ->get('delay'),
    '#min' => 0,
  ];
  $form['popup_settings']['popup_top_position'] = [
    '#type' => 'number',
    '#title' => $this
      ->t('Top Offset'),
    '#description' => $this
      ->t('Set the offset in px how much the popup box should be away from the top edge of the screen.'),
    '#min' => 0,
    '#default_value' => $config
      ->get('popup_top_position'),
  ];
  $popup_interval = !empty($config
    ->get('popup_interval')) ? $config
    ->get('popup_interval') : 1;
  $form['popup_settings']['popup_interval'] = [
    '#type' => 'radios',
    '#title' => $this
      ->t('Popup time interval settings'),
    '#options' => [
      '1' => $this
        ->t('One time (By default the pop-up will display once in 6 months.)'),
      '2' => $this
        ->t('Time Interval'),
    ],
    '#default_value' => $popup_interval,
  ];
  $form['popup_settings']['time_interval_fieldset'] = [
    '#type' => 'details',
    '#title' => $this
      ->t('Set time interval'),
    '#open' => TRUE,
    '#states' => [
      'visible' => [
        ':input[name="popup_interval"]' => [
          'value' => '2',
        ],
      ],
    ],
  ];
  $form['popup_settings']['time_interval_fieldset']['time_interval'] = [
    '#type' => 'number',
    '#title' => $this
      ->t('Time interval'),
    '#description' => $this
      ->t('Time interval for popup dialog box (in: Days).'),
    '#min' => 1,
    '#default_value' => $config
      ->get('time_interval'),
    '#suffix' => '</div>',
  ];
  return parent::buildForm($form, $form_state);
}