Skip to content
Snippets Groups Projects
Commit e9d8f474 authored by catch's avatar catch
Browse files

Issue #2779321 by nedjo, Akram Khan, smustgrave, Meenakshi_j, pooja saraah,...

Issue #2779321 by nedjo, Akram Khan, smustgrave, Meenakshi_j, pooja saraah, alexpott: Submitting empty block layout form results in breakage for all block entities

(cherry picked from commit e95548be)
parent 675dbcd1
No related branches found
No related tags found
17 merge requests!8506Draft: Issue #3456536 by ibrahim tameme,!5646Issue #3350972 by nod_: [random test failure]...,!5600Issue #3350972 by nod_: [random test failure]...,!5343Issue #3305066 by quietone, Rename RedirectLeadingSlashesSubscriber,!3603#ISSUE 3346218 Add a different message on edit comment,!3555Issue #2473873: Views entity operations lack cacheability support, resulting in incorrect dropbuttons,!3494Issue #3327018 by Spokje, longwave, xjm, mondrake: Update PHPStan to 1.9.3 and...,!3410Issue #3340128: UserLoginForm::submitForm has some dead code,!3389Issue #3325184 by Spokje, andypost, xjm, smustgrave: $this->configFactory is...,!3381Issue #3332363: Refactor Claro's menus-and-lists stylesheet,!3307Issue #3326193: CKEditor 5 can grow past the viewport when there is a lot of content,!3236Issue #3332419: Refactor Claro's messages stylesheet,!3231Draft: Issue #3049525 by longwave, fougere, larowlan, kim.pepper, AaronBauman, Wim...,!3212Issue #3294003: Refactor Claro's entity-meta stylesheet,!3194Issue #3330981: Fix PHPStan L1 error "Relying on entity queries to check access by default is deprecated...",!3143Issue #3313342: [PHP 8.1] Deprecated function: strpos(): Passing null to parameter #1 LayoutBuilderUiCacheContext.php on line 28,!2972Issue #1845004: Replace custom password hashing library with PHP 5.5 password_hash()
......@@ -372,20 +372,27 @@ public function getDefaultOperations(EntityInterface $entity) {
* {@inheritdoc}
*/
public function validateForm(array &$form, FormStateInterface $form_state) {
// No validation.
if (empty($form_state->getValue('blocks'))) {
$form_state->setErrorByName('blocks', 'No blocks settings to update.');
}
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
$entities = $this->storage->loadMultiple(array_keys($form_state->getValue('blocks')));
/** @var \Drupal\block\BlockInterface[] $entities */
foreach ($entities as $entity_id => $entity) {
$entity_values = $form_state->getValue(['blocks', $entity_id]);
$entity->setWeight($entity_values['weight']);
$entity->setRegion($entity_values['region']);
$entity->save();
$blocks = $form_state->getValue('blocks');
// Passing empty value to load Multiple would load all items from storage.
if (!empty($blocks)) {
$entities = $this->storage->loadMultiple(array_keys($blocks));
/** @var \Drupal\block\BlockInterface[] $entities */
foreach ($entities as $entity_id => $entity) {
$entity_values = $form_state->getValue(['blocks', $entity_id]);
$entity->setWeight($entity_values['weight']);
$entity->setRegion($entity_values['region']);
$entity->save();
}
}
$this->messenger->addStatus($this->t('The block settings have been updated.'));
}
......
......@@ -107,6 +107,18 @@ public function testBlockDemoUiPage() {
\Drupal::service('theme_installer')->install(['stable9']);
$this->drupalGet('admin/structure/block/demo/stable9');
$this->assertSession()->statusCodeEquals(404);
// Delete all blocks and verify block layout can be saved.
$block_storage = \Drupal::service('entity_type.manager')->getStorage('block');
$blocks = $block_storage->loadMultiple();
foreach ($blocks as $block) {
$block->delete();
}
$this->drupalGet('admin/structure/block');
$blocks_table = $this->xpath("//tr[@class='block-enabled']");
$this->assertEmpty($blocks_table, 'The blocks table is now empty.');
$this->submitForm([], 'Save blocks');
}
/**
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment