From d7080dfe1eea308dfa5bbff803569921828d96c1 Mon Sep 17 00:00:00 2001
From: Demian Katz <demian.katz@villanova.edu>
Date: Thu, 13 Sep 2018 12:55:43 -0400
Subject: [PATCH] Make LibGuides base URL configurable, update defaults. - Use
 SSL endpoint URL and version 2 in default configuration. - Retain version 1
 as default in code for backward compatibility. - Resolves VUFIND-1225.

---
 config/vufind/LibGuides.ini                   |  5 ++++-
 .../Factory/LibGuidesBackendFactory.php       | 19 +++++++++----------
 .../Backend/LibGuides/Connector.php           | 12 ++++++++----
 3 files changed, 21 insertions(+), 15 deletions(-)

diff --git a/config/vufind/LibGuides.ini b/config/vufind/LibGuides.ini
index 7259b38f9df..9e91e418b0e 100644
--- a/config/vufind/LibGuides.ini
+++ b/config/vufind/LibGuides.ini
@@ -7,7 +7,10 @@ timeout = 30
 iid = my-id
 
 ; API version to use (1 or 2)
-version = 1
+version = 2
+
+; Base URL for API
+baseUrl = https://lgapi.libapps.com/widgets.php
 
 ; This section controls the result limit options for search results. default_limit
 ; sets the default number of results per page. limit_options is a comma-separated
diff --git a/module/VuFind/src/VuFind/Search/Factory/LibGuidesBackendFactory.php b/module/VuFind/src/VuFind/Search/Factory/LibGuidesBackendFactory.php
index 40437ccd5e1..e5cdf06beb8 100644
--- a/module/VuFind/src/VuFind/Search/Factory/LibGuidesBackendFactory.php
+++ b/module/VuFind/src/VuFind/Search/Factory/LibGuidesBackendFactory.php
@@ -102,8 +102,7 @@ class LibGuidesBackendFactory implements FactoryInterface
      */
     protected function createBackend(Connector $connector)
     {
-        $defaultSearch = isset($this->libGuidesConfig->General->defaultSearch)
-            ? $this->libGuidesConfig->General->defaultSearch : null;
+        $defaultSearch = $this->libGuidesConfig->General->defaultSearch ?? null;
         $backend = new Backend(
             $connector, $this->createRecordCollectionFactory(), $defaultSearch
         );
@@ -120,20 +119,20 @@ class LibGuidesBackendFactory implements FactoryInterface
     protected function createConnector()
     {
         // Load credentials:
-        $iid = isset($this->libGuidesConfig->General->iid)
-            ? $this->libGuidesConfig->General->iid : null;
+        $iid = $this->libGuidesConfig->General->iid ?? null;
 
         // Pick version:
-        $ver = isset($this->libGuidesConfig->General->version)
-            ? $this->libGuidesConfig->General->version : 1;
+        $ver = $this->libGuidesConfig->General->version ?? 1;
+
+        // Get base URI, if available:
+        $baseUrl = $this->libGuidesConfig->General->baseUrl ?? null;
 
         // Build HTTP client:
         $client = $this->serviceLocator->get('VuFindHttp\HttpService')
-            ->createClient();
-        $timeout = isset($this->libGuidesConfig->General->timeout)
-            ? $this->libGuidesConfig->General->timeout : 30;
+            ->createClient($baseUrl);
+        $timeout = $this->libGuidesConfig->General->timeout ?? 30;
         $client->setOptions(['timeout' => $timeout]);
-        $connector = new Connector($iid, $client, $ver);
+        $connector = new Connector($iid, $client, $ver, $baseUrl);
         $connector->setLogger($this->logger);
         return $connector;
     }
diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/LibGuides/Connector.php b/module/VuFindSearch/src/VuFindSearch/Backend/LibGuides/Connector.php
index 6dd9f6e3a9b..2456a221959 100644
--- a/module/VuFindSearch/src/VuFindSearch/Backend/LibGuides/Connector.php
+++ b/module/VuFindSearch/src/VuFindSearch/Backend/LibGuides/Connector.php
@@ -81,14 +81,18 @@ class Connector implements \Zend\Log\LoggerAwareInterface
      * @param string     $iid        Institution ID
      * @param HttpClient $client     HTTP client
      * @param float      $apiVersion API version number
+     * @param string     $baseUrl    API base URL (optional)
      */
-    public function __construct($iid, $client, $apiVersion = 1)
+    public function __construct($iid, $client, $apiVersion = 1, $baseUrl = null)
     {
         $this->apiVersion = $apiVersion;
-        if ($this->apiVersion < 2) {
-            $this->host = "http://api.libguides.com/api_search.php?";
+        if (empty($baseUrl)) {
+            $this->host = ($this->apiVersion < 2)
+                ? "http://api.libguides.com/api_search.php?"
+                : "http://lgapi.libapps.com/widgets.php?";
         } else {
-            $this->host = "http://lgapi.libapps.com/widgets.php?";
+            // Ensure appropriate number of question marks:
+            $this->host = rtrim($baseUrl, '?') . '?';
         }
         $this->iid = $iid;
         $this->client = $client;
-- 
GitLab