You are here

function panelizer_form_entity_view_display_edit_form_alter in Panelizer 8.3

Same name and namespace in other branches
  1. 8.5 panelizer.module \panelizer_form_entity_view_display_edit_form_alter()
  2. 8.4 panelizer.module \panelizer_form_entity_view_display_edit_form_alter()

Implements hook_form_FORM_ID_alter().

File

./panelizer.module, line 189
Hook implementations for the Panelizer module.

Code

function panelizer_form_entity_view_display_edit_form_alter(&$form, FormStateInterface $form_state, $form_id) {

  /** @var \Drupal\Core\Entity\EntityFormInterface $form_object */
  $form_object = $form_state
    ->getFormObject();

  /** @var \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display */
  $display = $form_object
    ->getEntity();

  /** @var \Drupal\panelizer\Plugin\PanelizerEntityManager $panelizer_manager */
  $panelizer_manager = \Drupal::service('plugin.manager.panelizer_entity');

  /** @var \Drupal\panelizer\PanelizerInterface $panelizer */
  $panelizer = \Drupal::service('panelizer');
  $entity_type_id = $display
    ->getTargetEntityTypeId();
  $bundle = $display
    ->getTargetBundle();
  $mode = $display
    ->getMode();
  if ($panelizer_manager
    ->hasDefinition($entity_type_id)) {
    $settings = $panelizer
      ->getPanelizerSettings($entity_type_id, $bundle, $mode, $display);

    // Always put the field table below the Panelizer options.
    $form['fields']['#weight'] = 10;
    $form['panelizer'] = [
      '#tree' => TRUE,
    ];
    $form['panelizer']['enable'] = [
      '#type' => 'checkbox',
      '#title' => t('Panelize this view mode'),
      '#default_value' => isset($settings['enable']) ? $settings['enable'] : FALSE,
    ];
    $entity_type = \Drupal::entityTypeManager()
      ->getDefinition($entity_type_id);
    $form['panelizer']['options'] = [
      '#type' => 'details',
      '#open' => TRUE,
      '#title' => t('Panelizer options'),
      '#states' => [
        'visible' => [
          '#edit-panelizer-enable' => [
            'checked' => TRUE,
          ],
        ],
      ],
      '#parents' => [
        'panelizer',
      ],
    ];
    $form['panelizer']['options']['custom'] = [
      '#type' => 'checkbox',
      '#title' => t('Allow each @entity to have its display customized', [
        '@entity' => $entity_type
          ->getSingularLabel(),
      ]),
      '#default_value' => isset($settings['custom']) ? $settings['custom'] : FALSE,
    ];
    $form['panelizer']['options']['allow'] = [
      '#type' => 'checkbox',
      '#title' => t('Allow users to select which display to use'),
      '#description' => t('When multiple default displays are available for a view mode it can be useful to allow content creators to choose which display to use for an individual @entity.', [
        '@entity' => $entity_type
          ->getSingularLabel(),
      ]),
      '#default_value' => isset($settings['allow']) ? $settings['allow'] : FALSE,
    ];

    // If this display mode is panelized, then show the available displays in a
    // table.
    if (!empty($settings['enable'])) {
      $form['#cache']['tags'][] = "panelizer_default:{$entity_type_id}:{$bundle}:{$mode}";
      $form['panelizer']['displays'] = [
        '#type' => 'table',
        '#caption' => t('Default displays available for this view mode'),
        '#header' => [
          t('Name'),
          t('Use as default'),
          t('Operations'),
        ],
      ];
      foreach ($display
        ->getThirdPartySetting('panelizer', 'displays', []) as $machine_name => $panels_display) {

        // Reset operations when in the foreach loop.
        $operations = [];
        $display_name = $machine_name;
        $machine_name = "{$entity_type_id}__{$bundle}__{$mode}__{$machine_name}";
        $operations['edit'] = [
          'title' => t('Edit'),
          'url' => Url::fromRoute('panelizer.wizard.edit', [
            'machine_name' => $machine_name,
          ]),
        ];
        if ($settings['default'] != $display_name) {
          $operations['set_default'] = [
            'title' => t('Use as default'),
            'url' => Url::fromRoute('panelizer.default.select', [
              'machine_name' => $machine_name,
            ]),
          ];
          $operations['delete'] = [
            'title' => t('Delete'),
            'url' => Url::fromRoute('panelizer.default.delete', [
              'machine_name' => $machine_name,
            ]),
          ];
        }
        $form['panelizer']['displays'][$machine_name] = [
          'label' => [
            '#markup' => $panels_display['label'],
          ],
          'default' => [
            '#markup' => $settings['default'] == $display_name ? '✓' : '',
          ],
          'operations' => [
            'data' => [
              '#type' => 'operations',
              '#links' => $operations,
            ],
          ],
        ];
      }
      $form['fields']['#access'] = FALSE;
    }
    $form['#attached']['library'][] = 'panelizer/panelizer_default_form';
    $form['actions']['submit']['#submit'][] = 'panelizer_form_entity_view_display_edit_submit';
  }
}