/**
  * {@inheritdoc}
  */
 public function buildConfigurationForm(array $form, FormStateInterface $form_state)
 {
     $form = parent::buildConfigurationForm($form, $form_state);
     // Get all possible status codes defined by Symfony.
     $options = Response::$statusTexts;
     // Move 403/404/500 to the top.
     $options = ['404' => $options['404'], '403' => $options['403'], '500' => $options['500']] + $options;
     // Add the HTTP status code, so it's easier for people to find it.
     array_walk($options, function ($title, $code) use(&$options) {
         $options[$code] = $this->t('@code (!title)', ['@code' => $code, '!title' => $title]);
     });
     $form['status_code'] = ['#title' => $this->t('HTTP status code'), '#type' => 'select', '#default_value' => $this->configuration['status_code'], '#options' => $options];
     return $form;
 }
Esempio n. 2
0
 /**
  * {@inheritdoc}
  */
 public function buildConfigurationForm(array $form, FormStateInterface $form_state)
 {
     $form = parent::buildConfigurationForm($form, $form_state);
     // Allow to configure the page title, even when adding a new display.
     // Default to the page label in that case.
     $form['page_title'] = ['#type' => 'textfield', '#title' => $this->t('Page title'), '#description' => $this->t('Configure the page title that will be used for this display.'), '#default_value' => !$this->id() ? $this->executable->getPage()->label() : $this->configuration['page_title']];
     // Do not allow blocks to be added until the display variant has been saved.
     if (!$this->id()) {
         return $form;
     }
     // Determine the page ID, used for links below.
     $page_id = $this->executable->getPage()->id();
     // Set up the attributes used by a modal to prevent duplication later.
     $attributes = ['class' => ['use-ajax'], 'data-dialog-type' => 'modal', 'data-dialog-options' => Json::encode(['width' => 'auto'])];
     $add_button_attributes = NestedArray::mergeDeep($attributes, ['class' => ['button', 'button--small', 'button-action']]);
     if ($block_assignments = $this->getRegionAssignments()) {
         // Build a table of all blocks used by this display variant.
         $form['block_section'] = ['#type' => 'details', '#title' => $this->t('Blocks'), '#open' => TRUE];
         $form['block_section']['add'] = ['#type' => 'link', '#title' => $this->t('Add new block'), '#url' => Url::fromRoute('page_manager.display_variant_select_block', ['page' => $page_id, 'display_variant_id' => $this->id()]), '#attributes' => $add_button_attributes, '#attached' => ['library' => ['core/drupal.ajax']]];
         $form['block_section']['blocks'] = ['#type' => 'table', '#header' => [$this->t('Label'), $this->t('Plugin ID'), $this->t('Region'), $this->t('Weight'), $this->t('Operations')], '#empty' => $this->t('There are no regions for blocks.'), '#parents' => ['display_variant', 'blocks']];
         // Loop through the blocks per region.
         foreach ($block_assignments as $region => $blocks) {
             // Add a section for each region and allow blocks to be dragged between
             // them.
             $form['block_section']['blocks']['#tabledrag'][] = ['action' => 'match', 'relationship' => 'sibling', 'group' => 'block-region-select', 'subgroup' => 'block-region-' . $region, 'hidden' => FALSE];
             $form['block_section']['blocks']['#tabledrag'][] = ['action' => 'order', 'relationship' => 'sibling', 'group' => 'block-weight', 'subgroup' => 'block-weight-' . $region];
             $form['block_section']['blocks'][$region] = ['#attributes' => ['class' => ['region-title', 'region-title-' . $region], 'no_striping' => TRUE]];
             $form['block_section']['blocks'][$region]['title'] = ['#markup' => $this->getRegionName($region), '#wrapper_attributes' => ['colspan' => 5]];
             $form['block_section']['blocks'][$region . '-message'] = ['#attributes' => ['class' => ['region-message', 'region-' . $region . '-message', empty($blocks) ? 'region-empty' : 'region-populated']]];
             $form['block_section']['blocks'][$region . '-message']['message'] = ['#markup' => '<em>' . $this->t('No blocks in this region') . '</em>', '#wrapper_attributes' => ['colspan' => 5]];
             /** @var $blocks \Drupal\Core\Block\BlockPluginInterface[] */
             foreach ($blocks as $block_id => $block) {
                 $row = ['#attributes' => ['class' => ['draggable']]];
                 $row['label']['#markup'] = $block->label();
                 $row['id']['#markup'] = $block->getPluginId();
                 // Allow the region to be changed for each block.
                 $row['region'] = ['#title' => $this->t('Region'), '#title_display' => 'invisible', '#type' => 'select', '#options' => $this->getRegionNames(), '#default_value' => $this->getRegionAssignment($block_id), '#attributes' => ['class' => ['block-region-select', 'block-region-' . $region]]];
                 // Allow the weight to be changed for each block.
                 $configuration = $block->getConfiguration();
                 $row['weight'] = ['#type' => 'weight', '#default_value' => isset($configuration['weight']) ? $configuration['weight'] : 0, '#title' => $this->t('Weight for @block block', ['@block' => $block->label()]), '#title_display' => 'invisible', '#attributes' => ['class' => ['block-weight', 'block-weight-' . $region]]];
                 // Add the operation links.
                 $operations = [];
                 $operations['edit'] = ['title' => $this->t('Edit'), 'url' => Url::fromRoute('page_manager.display_variant_edit_block', ['page' => $page_id, 'display_variant_id' => $this->id(), 'block_id' => $block_id]), 'attributes' => $attributes];
                 $operations['delete'] = ['title' => $this->t('Delete'), 'url' => Url::fromRoute('page_manager.display_variant_delete_block', ['page' => $page_id, 'display_variant_id' => $this->id(), 'block_id' => $block_id]), 'attributes' => $attributes];
                 $row['operations'] = ['#type' => 'operations', '#links' => $operations];
                 $form['block_section']['blocks'][$block_id] = $row;
             }
         }
     }
     return $form;
 }
Esempio n. 3
0
 /**
  * {@inheritdoc}
  */
 public function buildConfigurationForm(array $form, array &$form_state)
 {
     // Adding
     $adding_variant = !isset($this->configuration['layout']);
     $form = parent::buildConfigurationForm($form, $form_state);
     $form['layout'] = array('#title' => t('Layout'), '#type' => 'select', '#default_value' => $this->getLayoutId(), '#options' => Layout::getLayoutOptions(), '#disabled' => !$adding_variant, '#description' => t('Note: change a template would require salvaging blocks from disappearing regions. We will do that ... soon.'), '#required' => TRUE);
     $page = $form_state['build_info']['args'][0];
     if (!$adding_variant) {
         $page_variant = $page->getVariant($form_state['build_info']['args'][1]);
         $page_variant->init($page->getExecutable());
         $form['links'] = array('#type' => 'markup', '#markup' => l(t('Preview layout'), $page->get('path'), array('attributes' => array('target' => drupal_html_id($page->id())))));
         // This is just a quick hack, we need some form of theme_layout_ui call.
         $form['blocks'] = array('#title' => t('Blocks'), '#markup' => '<label>' . t('Layout UI') . '</label>' . '<div class="layout-configure-form">' . '<div id="layout-app">' . '<div class="operations">' . '<a class="highlight-blocks" href="#blocks">' . $this->t('Focus on blocks') . '</a> ' . '<a class="highlight-regions" href="#regions">' . $this->t('Focus on regions') . '</a> ' . '</div>' . '<div class="layout-app-inner"></div>' . '</div>' . '</div>', '#default_value' => '', '#attached' => array('library' => array('page_layout/layout'), 'js' => array(array('data' => PageLayout::getLayoutPageVariantClientData($page_variant), 'type' => 'setting'))));
     }
     return $form;
 }