From b174fb09323c701eb26ed598854920e760eb5e7a Mon Sep 17 00:00:00 2001 From: catch <6915-catch@users.noreply.drupalcode.org> Date: Wed, 7 May 2025 09:59:33 +0100 Subject: [PATCH] Issue #3161212 by joseph.olstad, acbramley, asubit, eduardo morales alberti, sandeepsingh199, berdir, catch: Node add/edit gives a Call to a member function getAccountName() on null when author is NULL (cherry picked from commit ca57f2128a279b995e69287b05b1a284dc159e04) --- core/modules/node/src/NodeForm.php | 2 +- .../node_no_default_author.info.yml | 5 +++ .../src/Hook/NodeNoDefaultAuthorHooks.php | 31 +++++++++++++++++++ .../tests/src/Functional/NodeEditFormTest.php | 10 ++++++ 4 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 core/modules/node/tests/modules/node_no_default_author/node_no_default_author.info.yml create mode 100644 core/modules/node/tests/modules/node_no_default_author/src/Hook/NodeNoDefaultAuthorHooks.php diff --git a/core/modules/node/src/NodeForm.php b/core/modules/node/src/NodeForm.php index ab81a4e3f928..a47abb073060 100644 --- a/core/modules/node/src/NodeForm.php +++ b/core/modules/node/src/NodeForm.php @@ -163,7 +163,7 @@ class NodeForm extends ContentEntityForm { $form['meta']['author'] = [ '#type' => 'item', '#title' => $this->t('Author'), - '#markup' => $node->getOwner()->getAccountName(), + '#markup' => $node->getOwner()?->getAccountName(), '#wrapper_attributes' => ['class' => ['entity-meta__author']], ]; diff --git a/core/modules/node/tests/modules/node_no_default_author/node_no_default_author.info.yml b/core/modules/node/tests/modules/node_no_default_author/node_no_default_author.info.yml new file mode 100644 index 000000000000..c4f56344370f --- /dev/null +++ b/core/modules/node/tests/modules/node_no_default_author/node_no_default_author.info.yml @@ -0,0 +1,5 @@ +name: 'Node no default author' +type: module +description: 'Disables the default value callback for the uid field on node.' +package: Testing +version: VERSION diff --git a/core/modules/node/tests/modules/node_no_default_author/src/Hook/NodeNoDefaultAuthorHooks.php b/core/modules/node/tests/modules/node_no_default_author/src/Hook/NodeNoDefaultAuthorHooks.php new file mode 100644 index 000000000000..700e82236adc --- /dev/null +++ b/core/modules/node/tests/modules/node_no_default_author/src/Hook/NodeNoDefaultAuthorHooks.php @@ -0,0 +1,31 @@ +id() === 'node') { + $fields['uid']->setDefaultValueCallback(static::class . '::noDefaultAuthor'); + } + } + + /** + * An empty callback to set for the default value callback of uid. + */ + public static function noDefaultAuthor(): void { + } + +} diff --git a/core/modules/node/tests/src/Functional/NodeEditFormTest.php b/core/modules/node/tests/src/Functional/NodeEditFormTest.php index e43e0adf05a6..576c85e43eff 100644 --- a/core/modules/node/tests/src/Functional/NodeEditFormTest.php +++ b/core/modules/node/tests/src/Functional/NodeEditFormTest.php @@ -258,6 +258,16 @@ class NodeEditFormTest extends NodeTestBase { $this->assertSession()->pageTextContains($this->container->get('date.formatter')->format($node->getChangedTime(), 'short')); } + /** + * Tests the node form when the author is NULL. + */ + public function testNodeFormNullAuthor(): void { + \Drupal::service('module_installer')->install(['node_no_default_author']); + $this->drupalLogin($this->adminUser); + $this->drupalGet('node/add/page'); + $this->assertSession()->statusCodeEquals(200); + } + /** * Checks that the "authored by" works correctly with various values. *