WSOD after installing the module
>>> [!note] Migrated issue <!-- Drupal.org comment --> <!-- Migrated from issue #3580947. --> Reported by: [avpaderno](https://www.drupal.org/user/55077) Related to !16 !15 >>> <h3 id="summary-problem-motivation">Problem/Motivation</h3> <p>After installing the module, a WSOD is shown. The full error message is the following one.</p> <pre>The website encountered an unexpected error. Try again later.<br><br>Error: Call to undefined method Drupal\Core\Session\UserSession::hasField() in Drupal\system_account\Hook\SystemAccountEntityHooks-&gt;userFormatNameAlter() (line 60 of modules/contrib/system_account/src/Hook/SystemAccountEntityHooks.php).<br><br>Drupal\Core\Extension\ModuleHandler-&gt;alter() (Line: 178)<br>Drupal\Core\Session\UserSession-&gt;getDisplayName() (Line: 163)<br>Drupal\Core\Session\AccountProxy-&gt;getDisplayName() (Line: 336)<br>Drupal\user\Hook\UserHooks-&gt;toolbar()<br>call_user_func_array() (Line: 389)<br>Drupal\Core\Extension\ModuleHandler-&gt;{closure:Drupal\Core\Extension\ModuleHandler::invokeAll():388}() (Line: 340)<br>Drupal\Core\Extension\ModuleHandler-&gt;invokeAllWith() (Line: 388)<br>Drupal\Core\Extension\ModuleHandler-&gt;invokeAll() (Line: 77)<br>Drupal\toolbar\Element\Toolbar::preRenderToolbar()<br>call_user_func_array() (Line: 107)<br>Drupal\Core\Render\Renderer-&gt;doTrustedCallback() (Line: 910)<br>Drupal\Core\Render\Renderer-&gt;doCallback() (Line: 441)<br>Drupal\Core\Render\Renderer-&gt;doRender() (Line: 513)<br>Drupal\Core\Render\Renderer-&gt;doRender() (Line: 230)<br>Drupal\Core\Render\Renderer-&gt;render() (Line: 501)<br>Drupal\Core\Template\TwigExtension-&gt;escapeFilter() (Line: 87)<br>__TwigTemplate_ddc5abd7059ea5dea22fd4d841e2487f-&gt;doDisplay() (Line: 402)<br>Twig\Template-&gt;yield() (Line: 386)<br>Twig\Template-&gt;render() (Line: 51)<br>Twig\TemplateWrapper-&gt;render() (Line: 35)<br>Drupal\Core\Template\TwigThemeEngine-&gt;renderTemplate() (Line: 428)<br>Drupal\Core\Theme\ThemeManager-&gt;render() (Line: 500)<br>Drupal\Core\Render\Renderer-&gt;doRender() (Line: 230)<br>Drupal\Core\Render\Renderer-&gt;render() (Line: 162)<br>Drupal\Core\Render\MainContent\HtmlRenderer-&gt;{closure:Drupal\Core\Render\MainContent\HtmlRenderer::renderResponse():157}() (Line: 634)<br>Drupal\Core\Render\Renderer::{closure:Drupal\Core\Render\Renderer::executeInRenderContext():634}()<br>Fiber-&gt;start() (Line: 635)<br>Drupal\Core\Render\Renderer-&gt;executeInRenderContext() (Line: 157)<br>Drupal\Core\Render\MainContent\HtmlRenderer-&gt;renderResponse() (Line: 90)<br>Drupal\Core\EventSubscriber\MainContentViewSubscriber-&gt;onViewRenderArray() (Line: 246)<br>Symfony\Component\EventDispatcher\EventDispatcher::{closure:Symfony\Component\EventDispatcher\EventDispatcher::optimizeListeners():241}() (Line: 206)<br>Symfony\Component\EventDispatcher\EventDispatcher-&gt;callListeners() (Line: 56)<br>Symfony\Component\EventDispatcher\EventDispatcher-&gt;dispatch() (Line: 188)<br>Symfony\Component\HttpKernel\HttpKernel-&gt;handleRaw() (Line: 76)<br>Symfony\Component\HttpKernel\HttpKernel-&gt;handle() (Line: 53)<br>Drupal\Core\StackMiddleware\Session-&gt;handle() (Line: 48)<br>Drupal\Core\StackMiddleware\KernelPreHandle-&gt;handle() (Line: 28)<br>Drupal\Core\StackMiddleware\ContentLength-&gt;handle() (Line: 32)<br>Drupal\big_pipe\StackMiddleware\ContentLength-&gt;handle() (Line: 118)<br>Drupal\page_cache\StackMiddleware\PageCache-&gt;pass() (Line: 92)<br>Drupal\page_cache\StackMiddleware\PageCache-&gt;handle() (Line: 48)<br>Drupal\Core\StackMiddleware\ReverseProxyMiddleware-&gt;handle() (Line: 51)<br>Drupal\Core\StackMiddleware\NegotiationMiddleware-&gt;handle() (Line: 53)<br>Drupal\Core\StackMiddleware\AjaxPageState-&gt;handle() (Line: 54)<br>Drupal\Core\StackMiddleware\StackedHttpKernel-&gt;handle() (Line: 745)<br>Drupal\Core\DrupalKernel-&gt;handle() (Line: 19)</pre><h3 id="summary-proposed-resolution">Proposed resolution</h3> <p>Change the code to load the full user object before checking the <em>User</em> entity has the field added by the module.</p> <pre>&nbsp; public function userFormatNameAlter(&amp;$name, $account): void {<br>&nbsp;&nbsp;&nbsp; if ($account-&gt;getAccountName() == 'system_account') {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $user = User::load($account-&gt;id());<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($user &amp;&amp; $user-&gt;hasField('system_account') &amp;&amp; $user-&gt;get('system_account')-&gt;value) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $name = $this-&gt;configFactory-&gt;get('system_account.settings')<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;get('display_name');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp; }</pre><p>Checking the account name is not required to fix the issue described here, but since we are changing that code, we should also change it not to assume there is only a system account.</p>
issue