diff --git a/src/Plugin/Field/FieldType/TablefieldItem.php b/src/Plugin/Field/FieldType/TablefieldItem.php index 82b903d03f2117bfe1df33363fa330abebc542a5..9598b1b40d47c6ed18c266743e1ad3103e592248 100644 --- a/src/Plugin/Field/FieldType/TablefieldItem.php +++ b/src/Plugin/Field/FieldType/TablefieldItem.php @@ -171,8 +171,8 @@ class TablefieldItem extends FieldItemBase { unset($values['value']['tablefield']['rebuild']); } // In case this is being loaded from storage recalculate rows/cols. - elseif (empty($values['rebuild'])) { - if (array_key_exists('value', $values) && array_key_exists('caption', $values['value'])) { + elseif (is_array($values['value']) && empty($values['rebuild'])) { + if (array_key_exists('caption', $values['value'])) { unset($values['value']['caption']); } $values['rebuild']['rows'] = isset($values['value']) ? count($values['value']) : 0; @@ -183,7 +183,7 @@ class TablefieldItem extends FieldItemBase { } } - if (isset($values['caption'])) { + if (is_array($values['value']) && isset($values['caption'])) { $values['value']['caption'] = $values['caption']; } diff --git a/tests/src/Functional/TablefieldDeleteFieldTest.php b/tests/src/Functional/TablefieldDeleteFieldTest.php new file mode 100644 index 0000000000000000000000000000000000000000..0dd29bc40708897cc3c92d8b0586b1c546b28c35 --- /dev/null +++ b/tests/src/Functional/TablefieldDeleteFieldTest.php @@ -0,0 +1,70 @@ +<?php + +namespace Drupal\Tests\tablefield\Functional; + +use Drupal\Tests\BrowserTestBase; + +/** + * Simple test to ensure that a field can be created. + * + * @group tablefield + */ +class TablefieldDeleteFieldTest extends BrowserTestBase { + + use TablefieldCreationTrait; + + /** + * {@inheritdoc} + */ + protected $defaultTheme = 'stark'; + + /** + * {@inheritdoc} + */ + protected static $modules = ['node', 'tablefield', 'field_ui']; + + /** + * {@inheritdoc} + */ + protected function setUp(): void { + parent::setUp(); + + $this->drupalLogin($this->rootUser); + + $this->drupalCreateContentType(['type' => 'article', 'name' => 'Article']); + $this->createTableField('field_table', 'article'); + } + + /** + * Create a node with a tablefield, and ensure it's displayed correctly. + */ + public function testTableField() { + $this->drupalGet('node/add/article'); + // Create a node. + $edit = []; + $edit['title[0][value]'] = 'Llamas are cool'; + $edit['body[0][value]'] = 'Llamas are very cool'; + $edit['field_table[0][caption]'] = 'Table caption'; + $edit['field_table[0][tablefield][table][0][0]'] = 'Header 1'; + $edit['field_table[0][tablefield][table][0][1]'] = 'Header 2'; + $edit['field_table[0][tablefield][table][0][2]'] = 'Header 3'; + $edit['field_table[0][tablefield][table][1][0]'] = 'Row 1-1'; + $edit['field_table[0][tablefield][table][1][1]'] = 'Row 1-2'; + $edit['field_table[0][tablefield][table][1][2]'] = 'Row 1-3'; + $edit['field_table[0][tablefield][table][2][0]'] = 'Row 2-1'; + $edit['field_table[0][tablefield][table][2][1]'] = 'Row 2-2'; + $edit['field_table[0][tablefield][table][2][2]'] = 'Row 2-3'; + + $this->submitForm($edit, 'Save'); + $assert_session = $this->assertSession(); + $this->drupalGet('admin/structure/types/manage/article/fields'); + $assert_session->pageTextContains('field_table'); + $this->drupalGet('admin/structure/types/manage/article/fields/node.article.field_table'); + $assert_session->elementExists('css', '#edit-delete'); + $this->click('#edit-delete'); + $assert_session->elementExists('css', '#edit-submit'); + $this->click('#edit-submit'); + $assert_session->pageTextContains('The field field_table has been deleted from the Article content type.'); + } + +}