From 64ac2f57eb3485ff397b560d9df0bf9cb86f3d8d Mon Sep 17 00:00:00 2001
From: Dorian Merz <merz@ub.uni-leipzig.de>
Date: Thu, 3 Sep 2020 12:05:27 +0200
Subject: [PATCH] refs #18280 [finc] avoid exceptions when trying to load
 Record with not ID

---
 .../src/finc/RecordDriver/FincMissing.php     | 22 +++++++++++--------
 .../src/finc/View/Helper/Root/RecordLink.php  | 13 ++++++-----
 2 files changed, 21 insertions(+), 14 deletions(-)

diff --git a/module/finc/src/finc/RecordDriver/FincMissing.php b/module/finc/src/finc/RecordDriver/FincMissing.php
index 495b45d7907..425ff41ef7a 100644
--- a/module/finc/src/finc/RecordDriver/FincMissing.php
+++ b/module/finc/src/finc/RecordDriver/FincMissing.php
@@ -72,17 +72,21 @@ class FincMissing extends \VuFind\RecordDriver\Missing
      */
     public function setRawData($data)
     {
-        $table = $this->getDbTable('resource');
-        // sets create to FALSE so Resource does not try to generate a DB row on fail
-        $resource = $table->findResource($data['id'], 'solr', FALSE);
-        if ($resource instanceof Resource) {
-            if (empty($resource->extra_metadata ?? '')) {
-                parent::setRawData($data);
+        if (isset($data['id']) && !empty($data['id'])) {
+            $table = $this->getDbTable('resource');
+            // sets create to FALSE so Resource does not try to generate a DB row on fail
+            $resource = $table->findResource($data['id'], 'solr', FALSE);
+            if ($resource instanceof Resource) {
+                if (empty($resource->extra_metadata ?? '')) {
+                    parent::setRawData($data);
+                } else {
+                    $this->deserializeFromResourceTable($resource);
+                }
             } else {
-                $this->deserializeFromResourceTable($resource);
+                $this->fields['id'] = $data['id'];
             }
-        } elseif (isset($data['id'])) {
-            $this->fields['id'] = $data['id'];
+        } else {
+            $this->fields['id'] = '';
         }
     }
 
diff --git a/module/finc/src/finc/View/Helper/Root/RecordLink.php b/module/finc/src/finc/View/Helper/Root/RecordLink.php
index 402b732b9ad..9ced0372af7 100644
--- a/module/finc/src/finc/View/Helper/Root/RecordLink.php
+++ b/module/finc/src/finc/View/Helper/Root/RecordLink.php
@@ -152,11 +152,14 @@ class RecordLink extends \VuFind\View\Helper\Root\RecordLink
      */
     public function getUrl($driver)
     {
-        try {
-            return $this->getTabUrl($driver);
-        }
-        catch (RecordMissingException $exception) {
-            return "";
+        if ($driver->getUniqueID()) {
+            try {
+                return $this->getTabUrl($driver);
+            } catch (RecordMissingException $exception) {
+                // return default result on Missing Record
+                // throw all other Exceptions
+            }
         }
+        return "";
     }
 }
-- 
GitLab