Example #1
0
 function outputMemory($flush = false, $force = false)
 {
     $out = parent::outputMemory($flush);
     if ($this->first_time || $force) {
         return $out;
     }
     return '';
 }
Example #2
0
 /**
  * Read a record from the database
  * 
  * @param $id document identifier
  * @param $prefix optional: OAI identifier prefix
  * @param $header_only optional: just return header
  * @param $dbrow optional: use cached database row, disclaim db request
  * @return myxmlwriter record as XML data
  */
 function record_helper($id, $prefix = 'oas', $header_only = false, $dbrow = false)
 {
     global $config;
     // read record
     if ($dbrow == false) {
         if (!preg_match('/.*:([^:]+).([0-9]+)/', $id, $match)) {
             return false;
         }
         $stmt = $this->dbc->prepare('SELECT * FROM ' . $config['db_table'] . ' WHERE identifier=? AND line=?');
         if (!$stmt->execute(array($match[1], $match[2]))) {
             return false;
         }
         if (!($data = $stmt->fetch())) {
             return false;
         }
     } else {
         $data = $dbrow;
     }
     // Is XML Wellformed? This is the only part where the simplexml extension is needed.
     if (!$this->isXML_Wellformed($data['data'])) {
         $this->_OAI20Error('badRecordXML', $config['oai_identifier_prefix'] . ':' . $data['identifier'] . '.' . $data['line'] . ' with datestamp ' . $data['timestamp'] . ' is not wellformed: ' . $this->getXML_LastErrMsg() . '. (Maybe a database BLOB overflow?)');
         return new MyXmlWriter();
     }
     //Create
     $header = new MyXmlWriter();
     $header->openMemory();
     $header->startElementNS(NULL, 'header', OAI20);
     $header->writeElementNS(NULL, 'identifier', OAI20, $config['oai_identifier_prefix'] . ':' . $data['identifier'] . '.' . $data['line']);
     $header->writeElementNS(NULL, 'datestamp', OAI20, gmdate('Y-m-d\\TH:i:s\\Z', $data['timestamp']));
     $header->endElement();
     //header
     if ($header_only) {
         return $header;
     }
     // asked for record header only
     $rec = new MyXmlWriter();
     $rec->openMemory();
     $rec->startElementNS(NULL, 'record', OAI20);
     $rec->appendXML($header);
     $rec->startElementNS(NULL, 'metadata', OAI20);
     if ($prefix == 'oai_dc') {
         //THIS PART NEEDS REVIEW!
         $rec->startElementNS(NULL, 'oai_dc', OAIDC);
         $rec->writeAttributeNS('xmlns', 'dc', NULL, OAIDC_ELEMENTS);
         $rec->writeAttributeNS('xmlns', 'xsi', NULL, XML_SCHEMA_INSTANCE);
         $rec->writeAttributeNS('xsi', 'schemaLocation', NULL, OAIDC . ' ' . OAIDC_XSD);
         $rec->writeElementNS('dc', 'description', OAIDC_ELEMENTS, 'Logdaten Server webdoc.sub.gwdg.de');
         $rec->writeElementNS('dc', 'identifier', OAIDC_ELEMENTS, 'http://oa-statistik.sub.uni-goettingen.de/ns/logs/webdoc/?id=' . urlencode($id));
         $rec->endElement();
         //oai_dc
     } else {
         $rec->appendRawXML($data['data']);
     }
     $rec->endElement();
     //metadata
     $rec->endElement();
     //record
     return $rec;
 }