function outputMemory($flush = false, $force = false) { $out = parent::outputMemory($flush); if ($this->first_time || $force) { return $out; } return ''; }
/** * 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; }