Esempio n. 1
0
 /**
  * Protected method for vufind (i.e. User) defined holds
  *
  * @param string $id     A Bib ID
  * @param string $type   The holds mode to be applied from:
  * (disabled, always, availability, driver)
  * @param array  $patron Patron
  *
  * @return mixed A url on success, boolean false on failure
  */
 protected function generateHold($id, $type, $patron)
 {
     $any_available = false;
     $addlink = false;
     $data = ['id' => $id, 'level' => 'title'];
     // Are holds allows?
     $checkHolds = $this->catalog->checkFunction('Holds', compact('id', 'patron'));
     if ($checkHolds != false) {
         if ($type == 'always') {
             $addlink = true;
         } elseif ($type == 'availability') {
             $holdings = $this->getHoldings($id);
             foreach ($holdings as $holding) {
                 if ($holding['availability'] && !in_array($holding['location'], $this->hideHoldings)) {
                     $any_available = true;
                 }
             }
             $addlink = !$any_available;
         }
         if ($addlink) {
             if ($checkHolds['function'] == 'getHoldLink') {
                 // Return opac link
                 return $this->catalog->getHoldLink($id, $data);
             } else {
                 // Return non-opac link
                 return $this->getHoldDetails($data, $checkHolds['HMACKeys']);
             }
         }
     }
     return false;
 }
Esempio n. 2
0
 /**
  * Protected method for vufind (i.e. User) defined holdings
  *
  * @param array  $result     A result set returned from a driver
  * @param string $type       The holds mode to be applied from:
  * (all, holds, recalls, availability)
  * @param array  $holdConfig Hold configuration from driver
  *
  * @return array A sorted results set
  */
 protected function generateHoldings($result, $type, $holdConfig)
 {
     $holdings = [];
     $any_available = false;
     $holds_override = isset($this->config->Catalog->allow_holds_override) ? $this->config->Catalog->allow_holds_override : false;
     if (count($result)) {
         foreach ($result as $copy) {
             $show = !in_array($copy['location'], $this->hideHoldings);
             if ($show) {
                 $groupKey = $this->getHoldingsGroupKey($copy);
                 $holdings[$groupKey][] = $copy;
                 // Are any copies available?
                 if ($copy['availability'] == true) {
                     $any_available = true;
                 }
             }
         }
         if ($holdConfig && is_array($holdings)) {
             // Generate Links
             // Loop through each holding
             foreach ($holdings as $location_key => $location) {
                 foreach ($location as $copy_key => $copy) {
                     // Override the default hold behavior with a value from
                     // the ILS driver if allowed and applicable:
                     $currentType = $holds_override && isset($copy['holdOverride']) ? $copy['holdOverride'] : $type;
                     switch ($currentType) {
                         case "all":
                             $addlink = true;
                             // always provide link
                             break;
                         case "holds":
                             $addlink = $copy['availability'];
                             break;
                         case "recalls":
                             $addlink = !$copy['availability'];
                             break;
                         case "availability":
                             $addlink = !$copy['availability'] && $any_available == false;
                             break;
                         default:
                             $addlink = false;
                             break;
                     }
                     // If a valid holdable status has been set, use it to
                     // determine if a hold link is created
                     $addlink = isset($copy['is_holdable']) ? $addlink && $copy['is_holdable'] : $addlink;
                     if ($addlink) {
                         if ($holdConfig['function'] == "getHoldLink") {
                             /* Build opac link */
                             $holdings[$location_key][$copy_key]['link'] = $this->catalog->getHoldLink($copy['id'], $copy);
                         } else {
                             /* Build non-opac link */
                             $holdings[$location_key][$copy_key]['link'] = $this->getRequestDetails($copy, $holdConfig['HMACKeys'], 'Hold');
                         }
                     }
                 }
             }
         }
     }
     return $holdings;
 }