From 7c4986c0a9ec7ee401e350be42c2260f663b081f Mon Sep 17 00:00:00 2001 From: Josef Moravec <josef.moravec@gmail.com> Date: Tue, 13 Mar 2018 17:01:44 +0100 Subject: [PATCH] Remove ClaviusSQL ILS Driver (#1140) This driver is probably not used by any library and is not maintained. --- config/vufind/ClaviusSQL.ini | 21 - config/vufind/config.ini | 1 - .../src/VuFind/ILS/Driver/ClaviusSQL.php | 848 ------------------ .../src/VuFind/ILS/Driver/PluginManager.php | 3 - .../VuFindTest/ILS/Driver/ClaviusSQLTest.php | 52 -- 5 files changed, 925 deletions(-) delete mode 100644 config/vufind/ClaviusSQL.ini delete mode 100644 module/VuFind/src/VuFind/ILS/Driver/ClaviusSQL.php delete mode 100644 module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/ClaviusSQLTest.php diff --git a/config/vufind/ClaviusSQL.ini b/config/vufind/ClaviusSQL.ini deleted file mode 100644 index 7b5190ec534..00000000000 --- a/config/vufind/ClaviusSQL.ini +++ /dev/null @@ -1,21 +0,0 @@ -[Catalog] -; mysql host server: -host = mysql.myuniversity.edu -; mysql port: -port = 3306 -; mysql username: -username = clavius -; mysql password -password = mypassword -; mysql database - usually clavius -database = clavius -; base URL to your catalog, without ending "l.dll", or "baze.htm" -url = http://www.myuniversity.edu/katalog/ -; If you are importing records with id with prefixes (KN3112....) the id_prefix setting needs to be true -id_prefix = true -; if your library enters barcodes to items manually, the use_barcode setting needs to be true, if barcodes are generated by Clavius, use false -use_barcodes = false -; your library's prefix, usually 5-digit number -prefix = 99000 -; how long are new items should be hidden in katalog -hide_days = 0 diff --git a/config/vufind/config.ini b/config/vufind/config.ini index 83f2033cea8..d6514f4b101 100644 --- a/config/vufind/config.ini +++ b/config/vufind/config.ini @@ -180,7 +180,6 @@ session_name = VUFIND_SESSION ; Available drivers: ; - Aleph ; - Amicus -; - ClaviusSQL ; - DAIA (using either XML or JSON API) ; - Demo (fake ILS driver returning complex responses) ; - Evergreen diff --git a/module/VuFind/src/VuFind/ILS/Driver/ClaviusSQL.php b/module/VuFind/src/VuFind/ILS/Driver/ClaviusSQL.php deleted file mode 100644 index 2dedeff7756..00000000000 --- a/module/VuFind/src/VuFind/ILS/Driver/ClaviusSQL.php +++ /dev/null @@ -1,848 +0,0 @@ -<?php -/** - * Clavius SQL ILS Driver - * - * PHP version 5 - * - * Copyright (C) Josef Moravec, Municipal Library Ústà nad Orlicà 2012. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * @category VuFind - * @package ILS_Drivers - * @author Josef Moravec <josef.moravec@knihovna-uo.cz> - * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License - * @link https://vufind.org/wiki/development:plugins:ils_drivers Wiki - */ -namespace VuFind\ILS\Driver; - -use PDO; -use PDOException; -use VuFind\Exception\ILS as ILSException; - -/** - * VuFind Driver for Clavius SQL (version: 0.1 dev) - * - * @category VuFind - * @package ILS_Drivers - * @author Josef Moravec <josef.moravec@knihovna-uo.cz> - * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License - * @link https://vufind.org/wiki/development:plugins:ils_drivers Wiki - */ -class ClaviusSQL extends AbstractBase -{ - /** - * Database connection. - * - * @var object - */ - protected $db; - - /** - * URL to Clavius original katalog - * - * @var string - */ - protected $ilsBaseUrl; - - /** - * Library prefix in czech library system - used for ids and barcodes - * - * @var string - */ - protected $prefix; - - /** - * If is library prefix used also for record ids in vufind - * - * @var bool - */ - protected $idPrefix; - - /** - * If is library using manually entered barcodes - * - * @var bool - */ - protected $useBarcodes; - - /** - * Library departments and branches, filled from database by getDepartments - * - * @var array - */ - protected $locations; - - /** - * How many days is new document hidden in catalog - * - * @var int - */ - protected $hideNewItemsDays; - - /** - * Fine codes and descriptions, filled from database by getFineTypes - * - * @var array - */ - protected $fineTypes; - - /** - * Initialize the driver. - * - * Validate configuration and perform all resource-intensive tasks needed to - * make the driver active. - * - * @throws ILSException - * @return void - */ - public function init() - { - if (empty($this->config)) { - throw new ILSException('Configuration needs to be set.'); - } - //Connect to MySQL - $this->db = new PDO( - 'mysql:host=' . $this->config['Catalog']['host'] . - ';port=' . $this->config['Catalog']['port'] . - ';dbname=' . $this->config['Catalog']['database'], - $this->config['Catalog']['username'], - $this->config['Catalog']['password'] - ); - // Throw PDOExceptions if something goes wrong - $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - // Return result set like mysql_fetch_assoc() - $this->db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); - //character set utf8 - $this->db->exec("SET NAMES utf8"); - //Storing the base URL of ILS - $this->ilsBaseUrl = $this->config['Catalog']['url']; - //Boolean - use id prefixes like "KN31120" or not - $this->idPrefix = $this->config['Catalog']['id_prefix']; - //Boolean - indicates if library uses barcodes (true), or if barcodes are - // generated automatically (false) - $this->useBarcodes = $this->config['Catalog']['use_barcodes']; - //set number prefix for library - $this->prefix = $this->config['Catalog']['prefix']; - //how long (in days) hide new items - $this->hideNewItemsDays = 0; - if (isset($this->config['Catalog']['hide_days'])) { - $this->c = $this->config['Catalog']['hide_days']; - } - } - - /** - * Get list of departments - * - * This method queries the ILS for a list of departments to be used as input - * to the findReserves method - * - * @throws ILSException - * - * @return array An associative array with key = department ID, - * value = department name. - */ - public function getDepartments() - { - if (!is_array($this->locations)) { - $this->locations = []; - try { - // TODO - overit/upavit funkcnost na MSSQL a Oracle - $sqlLoc = "SELECT TRIM(lokace) as lokace, TRIM(jmeno) as jmeno " . - "FROM deflok ORDER BY lokace"; - $sqlSt = $this->db->prepare($sqlLoc); - $sqlSt->execute(); - foreach ($sqlSt->fetchAll() as $l) { - $this->locations[$l["lokace"]] = $l["jmeno"]; - } - } catch (PDOException $e) { - throw new ILSException($e->getMessage()); - } - } - return $this->locations; - } - - /** - * Get list of fine types - * - * This method queries the ILS for a list of fine types - * - * @throws ILSException - * - * @return array An associative array with key = fine code, - * value = fine description - */ - public function getFineTypes() - { - if (!is_array($this->fineTypes)) { - $this->fineTypes = ["G" => "Registracnà poplatek", - "H" => "UpomÃnka", - "J" => "Poplatek za rezervaci", - "L" => "Poplatek za pujcenÃ", - "M" => "Kauce za výpujcku" - ]; - // TODO MSsql Oracle - $sql = "SELECT kod, nazev FROM defpopl"; - try { - $sqlSt = $this->db->prepare($sql); - $sqlSt->execute(); - foreach ($sqlSt->fetchAll() as $row) { - $this->fineTypes[$row['kod']] = $row['nazev']; - } - } catch (PDOException $e) { - throw new ILSException($e->getMessage()); - } - } - return $this->fineTypes; - } - - /** - * Get a list of funds that can be used to limit the "new item" search - * - * @throws ILSException - * - * @return array An associative array with key = fund ID, value = fund name. - */ - public function getFunds() - { - return $this->getDepartments(); - } - - /** - * Get New Items - * - * Retrieve the IDs of items recently added to the catalog. - * - * @param int $page Page number of results to retrieve (counting starts at 1) - * @param int $limit The size of each page of results to retrieve - * @param int $daysOld The maximum age of records to retrieve in days (max. 30) - * @param int $fundId optional fund ID to use for limiting results (use a value - * returned by getFunds, or exclude for no limit); note that "fund" may be a - * misnomer - if funds are not an appropriate way to limit your new item - * results, you can return a different set of values from getFunds. The - * important thing is that this parameter supports an ID returned by getFunds, - * whatever that may mean. - * - * @return array An associative array with two keys: 'count' (the number - * of items in the 'results' array) and 'results' (an array of associative - * arrays, each with a single key: 'id', a record ID). - */ - public function getNewItems($page, $limit, $daysOld, $fundId = null) - { - $limitFrom = ($page - 1) * $limit; - //TODO better escaping; mssql, oracle - $sql = "SELECT t.tcislo as tcislo, t.druhdoku as druhdoku " - . "FROM svazky s JOIN tituly t ON s.tcislo = t.tcislo " - . "WHERE s.datumvloz > DATE_SUB(CURDATE(),INTERVAL " - . $this->db->quote($daysOld) - . " DAY) AND s.datumvloz <= DATE_SUB(CURDATE(),INTERVAL " - . $this->db->quote($this->hideNewItemsDays) . " DAY)"; - if ($fundId) { - $sql .= " AND s.lokace = " . $this->db->quote($fundId); - } - $sql .= " ORDER BY s.datumvloz DESC LIMIT $limitFrom, $limit"; - try { - $sqlSt = $this->db->prepare($sql); - $sqlSt->execute(); - $result = $sqlSt->fetchAll(); - $return = ['count' => count($result), 'results' => []]; - foreach ($result as $row) { - $return['results'][] = [ - 'id' => $this->getLongId($row['tcislo'], $row['druhdoku']) - ]; - } - return $return; - } catch (PDOException $e) { - throw new ILSException($e->getMessage()); - } - } - - /** - * Get Short ID - * - * This method make short id (only title number - tcislo), from full identifier - * - * @param string $id The full record id - * - * @return string Short id - */ - protected function getShortID($id) - { - $shortId = $id; - if ($this->idPrefix) { - $shortId = ltrim(substr($id, -11), "0"); - } - return $shortId; - } - - /** - * Get Long ID - * - * This method make long id (full identifier) from short id (only title number) - * - * @param string $id The short record id - * @param string $docPrefix Two chars prefix indicated type of document - * - * @return string Long id - */ - protected function getLongID($id, $docPrefix = "KN") - { - $longId = $id; - if ($this->idPrefix) { - $prefix1 = $docPrefix . $this->prefix; - $longId = $prefix1 - . str_pad($id, 18 - strlen($prefix1), "0", STR_PAD_LEFT); - } - return $longId; - } - - /** - * Get Holding - * - * This is responsible for retrieving the holding information of a certain - * record. - * - * @param string $id The record id to retrieve the holdings for - * @param array $patron Patron data - * - * @throws \VuFind\Exception\Date - * @throws ILSException - * @return array On success, an associative array with the following - * keys: id, availability (bool), status, location, reserve, callnumber, - * duedate, number, barcode. - */ - public function getHolding($id, array $patron = null) - { - $holding = []; - $originalId = $id; - //if ($this->idPrefix) { $id = ltrim(substr($id, -11), "0"); } - $id = $this->getShortID($id); - // TODO - overit/upavit funkcnost na MSSQL a Oracle - $sql = "SELECT trim(pcislo) as number, TRIM(lokace) as location, scislo, " - . "TRIM(sign) as callnumber, TRIM(ckod) as barcode " - . "FROM svazky WHERE tcislo = :id ORDER BY number"; - $sql2 = "SELECT (co = 'V') as availability, " - . "IF(co = 'P',DATE_FORMAT(datum2,'%e. %c. %Y'),'') as duedate, " - . "IF(co = 'V', 'Available', 'Checked Out') as status " - . "FROM kpujcky WHERE scislo = :scislo ORDER BY datum2 DESC LIMIT 1"; - try { - $sqlSt = $this->db->prepare($sql); - $sqlSt->execute([':id' => $id]); - $sqlSt2 = $this->db->prepare($sql2); - foreach ($sqlSt->fetchAll() as $item) { - // TODO: add course reserves support - $reserve = "N"; - $sqlSt2->execute([':scislo' => $item['scislo']]); - $item2 = $sqlSt2->fetch(); - if (!$item2) { - $availability = true; - $status = "K dispozici"; - $duedate = ''; - } else { - $availability = ($item2['availability'] == 1) ? true : false; - $status = $item2['status']; - $duedate = $item2['duedate']; - } - $locs = $this->getDepartments(); - $holding[] = [ - 'id' => $originalId, - //'location' => $item['location'], - 'location' => $locs[$item['location']], - 'callnumber' => ($item['callnumber'] == "") - ? null : $item['callnumber'], - 'number' => intval($item['number']), - 'barcode' => ($this->useBarcodes) - ? $item['barcode'] : $item['number'], - 'availability' => $availability, - 'status' => $status, - 'duedate' => $duedate, - 'reserve' => $reserve, - ]; - } - return $holding; - } catch (PDOException $e) { - throw new ILSException($e->getMessage()); - } - } - - /** - * Get Hold Link - * - * The goal for this method is to return a URL to a "place hold" web page on - * the ILS OPAC. This is used for ILSs that do not support an API or method - * to place Holds. - * - * @param string $id The id of the bib record - * @param array $details Item details from getHoldings return array - * - * @return string URL to ILS's OPAC's place hold screen. - * - * @SuppressWarnings(PHPMD.UnusedFormalParameter) - */ - public function getHoldLink($id, $details) - { - // Web link of the ILS for placing hold on the item - return $this->ilsBaseUrl . "l.dll?clr~" . $this->getShortID($id); - } - - /** - * Get Patron Fines - * - * This method queries the ILS for a patron's current fines - * - * @param array $patron The patron array from patronLogin - * - * @throws \VuFind\Exception\Date - * @throws ILSException - * @return mixed Array associative arrays of the patron's fines on - * success. - * <ul> - * <li>amount - The total amount of the fine IN PENNIES. Be sure to adjust - * decimal points appropriately (i.e. for a $1.00 fine, amount should be set to - * 100).</li> - * <li>checkout - A string representing the date when the item was checked - * out.</li> - * <li>fine - A string describing the reason for the fine (i.e. "Overdue", - * "Long Overdue").</li> - * <li>balance - The unpaid portion of the fine IN PENNIES.</li> - * <li>createdate - A string representing the date when the fine was accrued - * (optional)</li> - * <li>duedate - A string representing the date when the item was due.</li> - * <li>id - The bibliographic ID of the record involved in the fine.</li> - * </ul> - */ - public function getMyFines($patron) - { - $fines = []; - $reasons = $this->getFineTypes(); - // TODO mssql, oracle - $sql = "SELECT scislo as amount, co as reason, " - . "DATE_FORMAT(datum,'%e. %c. %Y') as createdate " - . "FROM poplatky WHERE ccislo = :patronId ORDER BY datum DESC"; - try { - $sqlSt = $this->db->prepare($sql); - $sqlSt->execute([':patronId' => $patron['id']]); - foreach ($sqlSt->fetchAll() as $fine) { - $fines[] = [ - 'amount' => abs($fine['amount']), - 'checkout' => null, // TODO maybe - 'fine' => $reasons[$fine['reason']], - 'balance' => ($fine['amount'] < 0) ? abs($fine['amount']) : 0, - 'createdate' => $fine['createdate'], - 'duedate' => null, // TODO maybe - 'id' => null, // TODO maybe - ]; - } - return $fines; - } catch (PDOException $e) { - throw new ILSException($e->getMessage()); - } - } - - /** - * Get Pick Up Locations - * - * This method returns a list of locations where a user may collect a hold. - * - * @param array $patron Patron information returned by the patronLogin - * method. - * @param array $holdDetails Optional array, only passed in when getting a list - * in the context of placing a hold; contains most of the same values passed to - * placeHold, minus the patron data. May be used to limit the pickup options - * or may be ignored. The driver must not add new options to the return array - * based on this data or other areas of VuFind may behave incorrectly. - * - * @return array An array of associative arrays with locationID and - * locationDisplay keys - * - * @SuppressWarnings(PHPMD.UnusedFormalParameter) - */ - public function getPickUpLocations($patron = false, $holdDetails = null) - { - $locations = []; - foreach ($this->getDepartments() as $id => $text) { - $locations[] = ['locationID' => $id, - 'locationDisplay' => $text - ]; - } - return $locations; - } - - /** - * Get Patron Holds - * - * This is responsible for retrieving all holds by a specific patron. - * - * @param array $patron The patron array from patronLogin - * - * @throws \VuFind\Exception\Date - * @throws ILSException - * @return array Array of associative arrays, one for each hold associated - * with the specified account. Each associative array contains these keys: - * <ul> - * <li>type - A string describing the type of hold - i.e. hold vs. recall - * (optional).</li> - * <li>id - The bibliographic record ID associated with the hold - * (optional).</li> - * <li>location - A string describing the pickup location for the held item - * (optional). In VuFind 1.2, this should correspond with a locationID value from - * getPickUpLocations. In VuFind 1.3 and later, it may be either a locationID - * value or a raw ready-to-display string.</li> - * <li>reqnum - A control number for the request (optional).</li> - * <li>expire - The expiration date of the hold (a string).</li> - * <li>create - The creation date of the hold (a string).</li> - * <li>position - The position of the user in the holds queue (optional)</li> - * <li>available - Whether or not the hold is available (true) or not (false) - * (optional)</li> - * <li>item_id - The item id the request item (optional).</li> - * <li>volume - The volume number of the item (optional)</li> - * <li>publication_year - The publication year of the item (optional)</li> - * <li>title - The title of the item (optional - only used if the record - * cannot be found in VuFind's index).</li> - * </ul> - * - * @SuppressWarnings(PHPMD.UnusedFormalParameter) - */ - public function getMyHolds($patron) - { - // TODO - return []; - } - - /** - * Get Patron Profile - * - * This is responsible for retrieving the profile for a specific patron. - * - * @param array $patron The patron array - * - * @throws ILSException - * @return array Array of the patron's profile data on success. - */ - public function getMyProfile($patron) - { - $profile = []; - $sql = "SELECT jmeno, tulice, tmesto, tpsc, telefon " - . "FROM ctenari WHERE ccislo = :userId"; - try { - $sqlSt = $this->db->prepare($sql); - $sqlSt->execute([':userId' => $patron['id']]); - $patron2 = $sqlSt->fetch(); - $names = $this->explodeName($patron2['jmeno']); - if ($patron2) { - $profile = [ - 'firstname' => $names['firstname'], - 'lastname' => $names['lastname'], - 'address1' => $patron2['tulice'], - 'address2' => $patron2['tmesto'], - 'zip' => $patron2['tpsc'], - 'phone' => $patron2['telefon'] ? $patron2['telefon'] : null, - 'group' => null //TODO - Maybe - ]; - } - } catch (PDOException $e) { - throw new ILSException($e->getMessage()); - } - return $profile; - } - - /** - * Get Purchase History - * - * This is responsible for retrieving the acquisitions history data for the - * specific record (usually recently received issues of a serial). - * - * @param string $id The record id to retrieve the info for - * - * @throws ILSException - * @return array An array with the acquisitions data on success. - * - * @SuppressWarnings(PHPMD.UnusedFormalParameter) - */ - public function getPurchaseHistory($id) - { - // TODO - return []; - } - - /** - * Get Status - * - * This is responsible for retrieving the status information of a certain - * record. - * - * @param string $id The record id to retrieve the holdings for - * - * @throws ILSException - * @return mixed On success, an associative array with the following keys: - * id, availability (bool), status, location, reserve, callnumber. - */ - public function getStatus($id) - { - $statuses = $this->getHolding($id); - foreach ($statuses as $status) { - $status['status'] = ($status['availability']) - ? 'Available' : 'Unavailable'; - } - return $statuses; - } - - /** - * Get Statuses - * - * This is responsible for retrieving the status information for a - * collection of records. - * - * @param array $idLst The array of record ids to retrieve the status for - * - * @throws ILSException - * @return array An array of getStatus() return values on success. - */ - public function getStatuses($idLst) - { - $statusLst = []; - foreach ($idLst as $id) { - $statusLst[] = $this->getStatus($id); - } - return $statusLst; - } - - /** - * Get suppressed records. - * - * @throws ILSException - * @return array ID numbers of suppressed records in the system. - */ - public function getSuppressedRecords() - { - // TODO - MAYBE - return []; - } - - /** - * Get first and last name from name - * - * @param string $name Full Patron Name - * - * @return array associative array with keys firstname, lastname - */ - protected function explodeName($name) - { - $names = []; - $nameArray = explode(" ", $name); - $names['lastname'] = array_pop($nameArray); - $names['firstname'] = implode(" ", $nameArray); - return $names; - } - - /** - * Replace codes - * - * @param string $stringToCode encoded/decoded String - * @param bool $decode true if you want to decode string - * - * @return string coded string - */ - protected function replaceCodes($stringToCode, $decode = false) - { - $from = str_split( - "()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ" - . "[\\]^_`abcdefghijklmnopqrstuvwxyz{|}" - ); - $to = str_split( - "g5p{+.Yt|Cy8(oM)^LTuE-\\1OKxPwv=9@:n7adb2QkIG6XcVe]" - . "[,/ziS3Hf?m0<ZrD_ljA}4FU>Js*WBNhR`;q" - ); - if ($decode) { - $coding = array_combine($to, $from); - } else { - $coding = array_combine($from, $to); - } - $toCodeArray = str_split($stringToCode); - $output = ""; - foreach ($toCodeArray as $char) { - $output .= $coding[$char]; - } - return $output; - } - - /** - * Encode password - * - * @param string $password password given by user - * @param bool $woman true if user is woman - * - * @return string encoded password - */ - protected function encodePassword($password, $woman = false) - { - $password = str_pad($password, 6); - $kod3 = substr($password, 2, 1); - $kod3int = intval($kod3); - if ($kod3int > 4) { - $kod3int = $kod3int - 5; - } - substr_replace($password, chr($kod3int), 2); - $sexConstant = $woman ? 1 : 0; - $kod6 = substr($password, 5, 1); - $kod6r = chr(70 + (intval($kod6) * 2) + $sexConstant); - if ($kod6 != " ") { - $password = substr_replace($password, $kod6r, 5); - } - $password = trim($password); - $encoded = $this->replaceCodes($password); - return $encoded; - } - - /** - * Encode PIN number - * - * @param string $pin password given by user - * @param string $patron number of patron - * - * @return long encoded pin - */ - protected function encodePin($pin, $patron) - { - for ($i = 0; $i < strlen($pin); $i++) { - $char = substr($pin, $i, 1); - $return = 1 + intval($char) + $return * 12; - } - return 2109876543 - $return * 7 * (intval($patron) % 89 + 7); - } - - /** - * Patron Login - * - * This is responsible for authenticating a patron against the catalog. - * - * @param string $username The patron username - * @param string $password The patron's password - * - * @throws ILSException - * @return mixed Associative array of patron info on successful login, - * null on unsuccessful login. - */ - public function patronLogin($username, $password) - { - // TODO - oracle a mssql - $sqlPatron = "SELECT ccislo, jmeno, mail, SUBSTRING(rcislo,1,6) as rcislo," - . " pin, pohlavi FROM ctenari WHERE ccislo = :userId"; - try { - $sqlStPatron = $this->db->prepare($sqlPatron); - $sqlStPatron->execute([':userId' => $username]); - $patronRow = $sqlStPatron->fetch(); - if (!$patronRow) { - return null; - } - } catch (PDOException $e) { - throw new ILSException($e->getMessage()); - } - if ($patronRow['pin'] == "0") { - $encodedPassword - = $this->encodePassword($password, $patronRow['pohlavi']); - if ($encodedPassword != $patronRow['rcislo']) { - return null; - } - } else { - $encodedPin = $this->encodePin($password, $patronRow['ccislo']); - if ($encodedPin != $patronRow['pin']) { - return null; - } - } - $names = $this->explodeName($patronRow['jmeno']); - $patron = [ - 'id' => $patronRow['ccislo'], - 'firstname' => $names['firstname'], - 'lastname' => $names['lastname'], - 'cat_username' => $username, - 'cat_password' => $password, - 'email' => $patronRow['mail'] ? $patronRow['mail'] : null, - 'major' => null, - 'college' => null - ]; - return $patron; - } - - /** - * Get Patron Transactions - * - * This method queries the ILS for a patron's current checked out items - * - * @param array $user The patron array from patronLogin - * @param bool $history Include history of transactions (true) or just get - * current ones (false). - * - * @throws ILSException - * @return array Array of the patron's transactions on success. - * <ul> - * <li>duedate - The item's due date (a string).</li> - * <li>id - The bibliographic ID of the checked out item.</li> - * <li>barcode - The barcode of the item (optional).</li> - * <li>renew - The number of times the item has been renewed (optional).</li> - * <li>request - The number of pending requests for the item (optional).</li> - * <li>volume - The volume number of the item (optional)</li> - * <li>publication_year - The publication year of the item (optional)</li> - * <li>renewable - Whether or not an item is renewable (required for - * renewals)</li> - * <li>message - A message regarding the item (optional)</li> - * <li>title - The title of the item (optional - only used if the record - * cannot be found in VuFind's index).</li> - * <li>item_id - this is used to match up renew responses and must match - * the item_id in the renew response</li> - * </ul> - * - * @SuppressWarnings(PHPMD.UnusedFormalParameter) - */ - public function getMyTransactions($user, $history = false) - { - //TODO mssql a Oracle - $sql = "SELECT DATE_FORMAT(k.datum2,'%e. %c. %Y') as duedate, - TRIM(s.ckod) as barcode, t.druhdoku as druhdoku, t.tcislo as tcislo, - t.rokvydani as year, CONCAT(t.nazev, t.big_nazev) as title, - TRIM(s.pcislo) as item_id - FROM kpujcky k - JOIN svazky s - ON s.scislo = k.scislo - JOIN tituly t - ON s.tcislo = t.tcislo - WHERE k.ccislo = :userId AND k.co = :action"; - try { - $sqlSt = $this->db->prepare($sql); - $sqlSt->execute([':userId' => $user['id'], ':action' => 'P']); - $transactions = []; - foreach ($sqlSt->fetchAll() as $item) { - $id = $this->getLongId($item['tcislo'], $item['druhdoku']); - //TODO - requests - //$requestsSql = ""; - $transactions[] = [ - 'duedate' => $item['duedate'], - 'id' => $id, - 'barcode' => $item['duedate'], - 'renew' => null, - 'request' => null, // TODO - 'volume' => null, // TODO - maybe - 'publication_year' => $item['year'], - 'renewable' => null, //TODO maybe - for renewals - 'message' => '', - 'title' => $item['title'], - 'item_id' => $item['item_id'] // TODO - maybe for renewals - ]; - } - return $transactions; - } catch (PDOException $e) { - throw new ILSException($e->getMessage()); - } - } -} diff --git a/module/VuFind/src/VuFind/ILS/Driver/PluginManager.php b/module/VuFind/src/VuFind/ILS/Driver/PluginManager.php index 48372e583d0..c375665febb 100644 --- a/module/VuFind/src/VuFind/ILS/Driver/PluginManager.php +++ b/module/VuFind/src/VuFind/ILS/Driver/PluginManager.php @@ -46,7 +46,6 @@ class PluginManager extends \VuFind\ServiceManager\AbstractPluginManager protected $aliases = [ 'aleph' => 'VuFind\ILS\Driver\Aleph', 'amicus' => 'VuFind\ILS\Driver\Amicus', - 'claviussql' => 'VuFind\ILS\Driver\ClaviusSQL', 'daia' => 'VuFind\ILS\Driver\DAIA', 'demo' => 'VuFind\ILS\Driver\Demo', 'evergreen' => 'VuFind\ILS\Driver\Evergreen', @@ -80,8 +79,6 @@ class PluginManager extends \VuFind\ServiceManager\AbstractPluginManager protected $factories = [ 'VuFind\ILS\Driver\Aleph' => 'VuFind\ILS\Driver\AlephFactory', 'VuFind\ILS\Driver\Amicus' => 'Zend\ServiceManager\Factory\InvokableFactory', - 'VuFind\ILS\Driver\ClaviusSQL' => - 'Zend\ServiceManager\Factory\InvokableFactory', 'VuFind\ILS\Driver\DAIA' => 'VuFind\ILS\Driver\DriverWithDateConverterFactory', 'VuFind\ILS\Driver\Demo' => 'VuFind\ILS\Driver\DemoFactory', diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/ClaviusSQLTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/ClaviusSQLTest.php deleted file mode 100644 index f9b0637fd21..00000000000 --- a/module/VuFind/tests/unit-tests/src/VuFindTest/ILS/Driver/ClaviusSQLTest.php +++ /dev/null @@ -1,52 +0,0 @@ -<?php -/** - * ILS driver test - * - * PHP version 5 - * - * Copyright (C) Villanova University 2011. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * @category VuFind - * @package Tests - * @author Demian Katz <demian.katz@villanova.edu> - * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License - * @link https://vufind.org Main Page - */ -namespace VuFindTest\ILS\Driver; - -use VuFind\ILS\Driver\ClaviusSQL; - -/** - * ILS driver test - * - * @category VuFind - * @package Tests - * @author Demian Katz <demian.katz@villanova.edu> - * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License - * @link https://vufind.org Main Page - */ -class ClaviusSQLTest extends \VuFindTest\Unit\ILSDriverTestCase -{ - /** - * Standard setup method. - * - * @return void - */ - public function setUp() - { - $this->driver = new ClaviusSQL(); - } -} -- GitLab