protected function getHoldings($arrIDs) { $items = new Xerxes_Record_Items(); $cache_id = ""; // id used in cache $bib_id = ""; // bibliographic id number $oclc = ""; // oclc number // figure out what is what foreach ($arrIDs as $id) { if (stristr($id, "ISBN:")) { continue; } if (stristr($id, "OCLC:")) { $oclc = $id; } else { $bib_id = $id; } } // no bib id supplied, so use oclc number as id if ($bib_id == "") { if ($oclc == "") { throw new Exception("no bibliographic id or oclc number suppled in availability lookup"); } $cache_id = str_replace("OCLC:", "", $oclc); } else { $cache_id = $bib_id; } // get url to availability server $strSource = $this->getSource(); $url = $this->getHoldingsURL($strSource); // no holdings source defined or somehow id's are blank if ($url == null || count($arrIDs) == 0) { return $items; // empty items } // get the data $url .= "?action=status&id=" . urlencode(implode(" ", $arrIDs)); $data = Xerxes_Framework_Parser::request($url); // echo $url; exit; // no data, what's up with that? if ($data == "") { throw new Exception("could not connect to availability server"); } // echo $data; exit; // response is (currently) an array of json objects $arrResults = json_decode($data); // parse the response if (is_array($arrResults)) { if (count($arrResults) > 0) { // now just slot them into our item object foreach ($arrResults as $holding) { $is_holdings = property_exists($holding, "holding"); if ($is_holdings == true) { $item = new Xerxes_Record_Holding(); } else { $item = new Xerxes_Record_Item(); } foreach ($holding as $property => $value) { $item->setProperty($property, $value); } $items->addItem($item); } } } // cache it for the future // expiry set for two hours $expiry = $this->config->getConfig("HOLDINGS_CACHE_EXPIRY", false, 2 * 60 * 60); $expiry += time(); $cache = new Xerxes_Data_Cache(); $cache->source = $this->getSource(); $cache->id = $cache_id; $cache->expiry = $expiry; $cache->data = serialize($items); $this->data_map->setCache($cache); return $items; }