Пример #1
0
 public function placeILLRequest($user, $attrs)
 {
     $payment = $attrs['payment'];
     unset($attrs['payment']);
     $new = $attrs['new'];
     unset($attrs['new']);
     $additional_authors = $attrs['additional_authors'];
     unset($attrs['additional_authors']);
     $source = $attrs['source'];
     $publisher = $attrs['publisher'];
     unset($attrs['source']);
     if (!isset($attrs['ill-unit'])) {
         $attrs['ill-unit'] = $this->defaultIllUnit;
     }
     if (!isset($attrs['pickup-location'])) {
         $attrs['pickup-location'] = $this->defaultIllPickupPlocation;
     }
     try {
         $attrs['last-interest-date'] = $this->dateConverter->convertFromDisplayDate('Ymd', $attrs['last-interest-date']);
     } catch (DateException $de) {
         return array('success' => false, 'sysMessage' => 'hold_date_invalid');
     }
     $attrs['allowed-media'] = $attrs['media'];
     $attrs['send-directly'] = 'N';
     $attrs['delivery-method'] = 'S';
     if ($new == 'serial') {
         $new = 'SE';
     } else {
         if ($new == 'monography') {
             $new = 'MN';
         }
     }
     $patronId = $user['id'];
     $illDom = new \DOMDocument('1.0', 'UTF-8');
     $illRoot = $illDom->createElement('ill-parameters');
     $illRootNode = $illDom->appendChild($illRoot);
     foreach ($attrs as $key => $value) {
         $element = $illDom->createElement($key);
         $element->appendChild($illDom->createTextNode($value));
         $illRootNode->appendChild($element);
     }
     $xml = $illDom->saveXML();
     try {
         $path = array('patron', $patronId, 'record', $new, 'ill');
         $result = $this->alephWebService->doRestDLFRequest($path, null, 'PUT', 'post_xml=' . $xml);
     } catch (\Exception $ex) {
         return array('success' => false, 'sysMessage' => $ex->getMessage());
     }
     $baseAndDocNumber = $result->{'create-ill'}->{'request-number'};
     $base = substr($baseAndDocNumber, 0, 5);
     $docNum = substr($baseAndDocNumber, 5);
     $findDocParams = array('base' => $base, 'doc_num' => $docNum);
     $document = $this->alephWebService->doXRequest('find-doc', $findDocParams, true);
     // create varfield for ILL request type
     $varfield = $document->{'record'}->{'metadata'}->{'oai_marc'}->addChild('varfield');
     $varfield->addAttribute('id', 'PNZ');
     $varfield->addAttribute('i1', ' ');
     $varfield->addAttribute('i2', ' ');
     $subfield = $varfield->addChild('subfield', $payment);
     $subfield->addAttribute('label', 'a');
     if (!empty($additional_authors)) {
         $varfield = $document->{'record'}->{'metadata'}->{'oai_marc'}->addChild('varfield');
         $varfield->addAttribute('id', '700');
         $varfield->addAttribute('i1', '1');
         $varfield->addAttribute('i2', ' ');
         $subfield = $varfield->addChild('subfield', $additional_authors);
         $subfield->addAttribute('label', 'a');
     }
     if (!empty($source)) {
         $varfield = $document->{'record'}->{'metadata'}->{'oai_marc'}->addChild('varfield');
         $varfield->addAttribute('id', '590');
         $varfield->addAttribute('i1', ' ');
         $varfield->addAttribute('i2', ' ');
         $subfield = $varfield->addChild('subfield', htmlspecialchars($source));
         $subfield->addAttribute('label', 'a');
     }
     if (!empty($publisher)) {
         $varfield = $document->{'record'}->{'metadata'}->{'oai_marc'}->addChild('varfield');
         $varfield->addAttribute('id', '260');
         $varfield->addAttribute('i1', ' ');
         $varfield->addAttribute('i2', ' ');
         $subfield = $varfield->addChild('subfield', htmlspecialchars($source));
         $subfield->addAttribute('label', 'b');
     }
     $updateDocParams = array('library' => $base, 'doc_num' => $docNum);
     $updateDocParams['xml_full_req'] = $document->asXml();
     $updateDocParams['doc_action'] = 'UPDATE';
     try {
         $update = $this->alephWebService->doXRequestUsingPost('update-doc', $updateDocParams, true);
     } catch (\Exception $ex) {
         return array('success' => false, 'sysMessage' => $ex->getMessage());
     }
     return array('success' => true, 'id' => $docNum);
 }