You are here

public function EmergencyForm::submitRegionToBlock in Display Suite 8.3

Same name and namespace in other branches
  1. 8.2 src/Form/EmergencyForm.php \Drupal\ds\Form\EmergencyForm::submitRegionToBlock()

Submit callback for the region to block form.

File

src/Form/EmergencyForm.php, line 138

Class

EmergencyForm
Emergency form for DS.

Namespace

Drupal\ds\Form

Code

public function submitRegionToBlock(array &$form, FormStateInterface $form_state) {
  if ($form_state
    ->getValue('remove_block_region')) {
    $save = FALSE;
    $region_blocks = $this
      ->config('ds_extras.settings')
      ->get('region_blocks');
    $remove = $form_state
      ->getValue('remove_block_region');
    foreach ($remove as $key => $value) {
      if ($value !== 0 && $key == $value) {
        $save = TRUE;

        // Make sure there is no active block instance for this ds block
        // region.
        if (\Drupal::moduleHandler()
          ->moduleExists('block')) {
          $ids = \Drupal::entityQuery('block')
            ->condition('plugin', 'ds_region_block:' . $key)
            ->execute();

          /* @var \Drupal\block\BlockInterface $block_storage */
          $block_storage = \Drupal::service('entity_type.manager')
            ->getStorage('block');
          foreach ($block_storage
            ->loadMultiple($ids) as $block) {
            $block
              ->delete();
          }
        }
        unset($region_blocks[$key]);
      }
    }
    if ($save) {
      $this
        ->messenger()
        ->addMessage($this
        ->t('Block regions were removed.'));

      // Clear cached block and ds plugin definitions.
      \Drupal::service('plugin.manager.block')
        ->clearCachedDefinitions();
      \Drupal::service('plugin.manager.ds')
        ->clearCachedDefinitions();
      $this
        ->config('ds_extras.settings')
        ->set('region_blocks', $region_blocks)
        ->save();
    }
  }
  else {
    $this
      ->messenger()
      ->addMessage($this
      ->t('No block regions were removed.'));
  }
}