Same name and namespace in other branches
  1. 5.0.x src/Plugin/ViewsSlideshowWidgetType/Pager.php \Drupal\views_slideshow\Plugin\ViewsSlideshowWidgetType\Pager::buildConfigurationForm()

Overrides ViewsSlideshowWidgetTypeBase::buildConfigurationForm

File

src/Plugin/ViewsSlideshowWidgetType/Pager.php, line 53

Class

Pager
Provides a pager widget type.

Namespace

Drupal\views_slideshow\Plugin\ViewsSlideshowWidgetType

Code

public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
    $form = parent::buildConfigurationForm($form, $form_state);
    $view = $form_state->get('view')
        ->get('executable');
    
    /**
     * @var \Drupal\Component\Plugin\PluginManagerInterface
     */
    $widgetManager = \Drupal::service('plugin.manager.views_slideshow.widget');
    // Determine if this widget type is compatible with any slideshow type.
    $widgets = [];
    foreach ($widgetManager->getDefinitions($this->getPluginId()) as $widget_id => $widget_info) {
        if ($widgetManager->createInstance($widget_id, [])
            ->checkCompatiblity($view)) {
            $widgets[$widget_id] = $widget_info['label'];
        }
    }
    if (!empty($widgets)) {
        // Need to wrap this so it indents correctly.
        $form['views_slideshow_pager_wrapper'] = [
            '#markup' => '<div class="vs-dependent">',
        ];
        // Create the widget type field.
        $form['type'] = [
            '#type' => 'select',
            '#title' => $this->t('Pager Type'),
            '#description' => $this->t('Style of the pager'),
            '#default_value' => $this->getConfiguration()['type'],
            '#options' => $widgets,
            '#states' => [
                'visible' => [
                    ':input[name="' . $this->getConfiguration()['dependency'] . '[enable]"]' => [
                        'checked' => TRUE,
                    ],
                ],
            ],
        ];
        foreach ($widgetManager->getDefinitions() as $widget_id => $widget_info) {
            // Get the current configuration of this widget.
            $configuration = [];
            if (!empty($this->getConfiguration()[$widget_id])) {
                $configuration = $this->getConfiguration()[$widget_id];
            }
            $configuration['dependency'] = $this->getConfiguration()['dependency'];
            $configuration['view'] = $view;
            $instance = $widgetManager->createInstance($widget_id, $configuration);
            // Get the configuration form of this widget type.
            $form[$widget_id] = isset($form[$widget_id]) ? $form[$widget_id] : [];
            $form[$widget_id] = $instance->buildConfigurationForm($form[$widget_id], $form_state);
        }
        $form['views_slideshow_pager_wrapper_close'] = [
            '#markup' => '</div>',
        ];
    }
    else {
        $form['enable_pager'] = [
            '#markup' => 'There are no pagers available.',
        ];
    }
    return $form;
}