Prevent white page in BookNavigation block blockAccess if Node is not a book
>>> [!note] Migrated issue <!-- Drupal.org comment --> <!-- Migrated from issue #3585615. --> Reported by: [scorpionghost](https://www.drupal.org/user/1580648) Related to !173 >>> <h3 id="summary-problem-motivation">Problem/Motivation</h3> <p>If the BlockNavigation block is not configured to be shown on all pages, Nodes that are not books where the block is rendered will display a white page.</p> <h4 id="summary-steps-reproduce">Steps to reproduce</h4> <ol> <li>Add a book navigation block to a region. Make sure to <em>not</em> select a value different from "Show block on all pages" as configuration for "Book navigation block display". </li> <li>Go to a Node that is <em>not</em> configured to be a book page.</li> </ol> <h5 id="summary-steps-reproduce">Expected result</h5> <p>Node shown as usual.</p> <h5 id="summary-steps-reproduce">Actual result</h5> <p>White page with error message. See below for a stack trace.</p> <h3 id="summary-proposed-resolution">Proposed resolution</h3> <p>Check, whether the Node implements BookInterface in blockAccess before calling a method from that interface.</p> <h4>Stack trace provided by original reporter</h4> <p>Error: Call to undefined method Drupal\node\Entity\Node::getBook() in Drupal\book\Plugin\Block\BookNavigationBlock-&gt;blockAccess() (line 310 of web\modules\contrib\book\src\Plugin\Block\BookNavigationBlock.php).</p> <p>#0 web\core\lib\Drupal\Core\Block\BlockPluginTrait.php(127): Drupal\book\Plugin\Block\BookNavigationBlock-&gt;blockAccess(Object(Drupal\Core\Session\AccountProxy))<br> #1 web\core\modules\block\src\BlockAccessControlHandler.php(124): Drupal\Core\Block\BlockBase-&gt;access(Object(Drupal\Core\Session\AccountProxy), true)<br> #2 web\core\lib\Drupal\Core\Entity\EntityAccessControlHandler.php(109): Drupal\block\BlockAccessControlHandler-&gt;checkAccess(Object(Drupal\block\Entity\Block), 'view', Object(Drupal\Core\Session\AccountProxy))<br> #3 web\core\lib\Drupal\Core\Entity\EntityBase.php(345): Drupal\Core\Entity\EntityAccessControlHandler-&gt;access(Object(Drupal\block\Entity\Block), 'view', Object(Drupal\Core\Session\AccountProxy), true)<br> #4 web\core\modules\block\src\BlockRepository.php(63): Drupal\Core\Entity\EntityBase-&gt;access('view', NULL, true)<br> #5 web\core\modules\block\src\Plugin\DisplayVariant\BlockPageVariant.php(138): Drupal\block\BlockRepository-&gt;getVisibleBlocksPerRegion(Array)<br> #6 web\core\lib\Drupal\Core\Render\MainContent\HtmlRenderer.php(274): Drupal\block\Plugin\DisplayVariant\BlockPageVariant-&gt;build()<br> #7 web\core\lib\Drupal\Core\Render\MainContent\HtmlRenderer.php(131): Drupal\Core\Render\MainContent\HtmlRenderer-&gt;prepare(Array, Object(Symfony\Component\HttpFoundation\Request), Object(Drupal\Core\Routing\CurrentRouteMatch))<br> #8 web\core\lib\Drupal\Core\EventSubscriber\MainContentViewSubscriber.php(90): Drupal\Core\Render\MainContent\HtmlRenderer-&gt;renderResponse(Array, Object(Symfony\Component\HttpFoundation\Request), Object(Drupal\Core\Routing\CurrentRouteMatch))<br> #9 vendor\symfony\event-dispatcher\EventDispatcher.php(246): Drupal\Core\EventSubscriber\MainContentViewSubscriber-&gt;onViewRenderArray(Object(Symfony\Component\HttpKernel\Event\ViewEvent), 'kernel.view', Object(Symfony\Component\EventDispatcher\EventDispatcher))<br> #10 vendor\symfony\event-dispatcher\EventDispatcher.php(206): Symfony\Component\EventDispatcher\EventDispatcher::{closure:Symfony\Component\EventDispatcher\EventDispatcher::optimizeListeners():241}(Object(Symfony\Component\HttpKernel\Event\ViewEvent), 'kernel.view', Object(Symfony\Component\EventDispatcher\EventDispatcher))<br> #11 vendor\symfony\event-dispatcher\EventDispatcher.php(56): Symfony\Component\EventDispatcher\EventDispatcher-&gt;callListeners(Array, 'kernel.view', Object(Symfony\Component\HttpKernel\Event\ViewEvent))<br> #12 vendor\symfony\http-kernel\HttpKernel.php(188): Symfony\Component\EventDispatcher\EventDispatcher-&gt;dispatch(Object(Symfony\Component\HttpKernel\Event\ViewEvent), 'kernel.view')<br> #13 vendor\symfony\http-kernel\HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel-&gt;handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1)<br> #14 web\core\lib\Drupal\Core\StackMiddleware\Session.php(53): Symfony\Component\HttpKernel\HttpKernel-&gt;handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)<br> #15 web\core\lib\Drupal\Core\StackMiddleware\KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session-&gt;handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)<br> #16 web\core\lib\Drupal\Core\StackMiddleware\ContentLength.php(28): Drupal\Core\StackMiddleware\KernelPreHandle-&gt;handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)<br> #17 web\core\modules\big_pipe\src\StackMiddleware\ContentLength.php(32): Drupal\Core\StackMiddleware\ContentLength-&gt;handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)<br> #18 web\core\modules\page_cache\src\StackMiddleware\PageCache.php(203): Drupal\big_pipe\StackMiddleware\ContentLength-&gt;handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)<br> #19 web\core\modules\page_cache\src\StackMiddleware\PageCache.php(140): Drupal\page_cache\StackMiddleware\PageCache-&gt;fetch(Object(Symfony\Component\HttpFoundation\Request), 1, true)<br> #20 web\core\modules\page_cache\src\StackMiddleware\PageCache.php(89): Drupal\page_cache\StackMiddleware\PageCache-&gt;lookup(Object(Symfony\Component\HttpFoundation\Request), 1, true)<br> #21 web\core\lib\Drupal\Core\StackMiddleware\ReverseProxyMiddleware.php(48): Drupal\page_cache\StackMiddleware\PageCache-&gt;handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)<br> #22 web\core\lib\Drupal\Core\StackMiddleware\NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware-&gt;handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)<br> #23 web\core\lib\Drupal\Core\StackMiddleware\AjaxPageState.php(53): Drupal\Core\StackMiddleware\NegotiationMiddleware-&gt;handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)<br> #24 web\core\lib\Drupal\Core\StackMiddleware\StackedHttpKernel.php(54): Drupal\Core\StackMiddleware\AjaxPageState-&gt;handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)<br> #25 web\core\lib\Drupal\Core\DrupalKernel.php(745): Drupal\Core\StackMiddleware\StackedHttpKernel-&gt;handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)<br> #26 web\index.php(19): Drupal\Core\DrupalKernel-&gt;handle(Object(Symfony\Component\HttpFoundation\Request))<br> #27 {main}</p>
issue