/** * Format XML for single DC element. * @param $propertyName string * @param $value array * @param $multilingual boolean optional */ function formatElement($propertyName, $values, $multilingual = false) { if (!is_array($values)) { $values = array($values); } // Translate the property name to XML syntax. $openingElement = str_replace(array('[@', ']'), array(' ', ''), $propertyName); $closingElement = String::regexp_replace('/\\[@.*/', '', $propertyName); // Create the actual XML entry. $response = ''; foreach ($values as $key => $value) { if ($multilingual) { $key = str_replace('_', '-', $key); assert(is_array($value)); foreach ($value as $subValue) { if ($key == METADATA_DESCRIPTION_UNKNOWN_LOCALE) { $response .= "\t<{$openingElement}>" . OAIUtils::prepOutput($subValue) . "</{$closingElement}>\n"; } else { $response .= "\t<{$openingElement} xml:lang=\"{$key}\">" . OAIUtils::prepOutput($subValue) . "</{$closingElement}>\n"; } } } else { assert(is_scalar($value)); $response .= "\t<{$openingElement}>" . OAIUtils::prepOutput($value) . "</{$closingElement}>\n"; } } return $response; }
/** * Format XML for single RFC 1807 element. * @param $name string * @param $value mixed */ function formatElement($name, $value) { if (!is_array($value)) { $value = array($value); } $response = ''; foreach ($value as $v) { $response .= "\t<{$name}>" . OAIUtils::prepOutput($v) . "</{$name}>\n"; } return $response; }
/** * Format XML for single MARC21 element. * @param $tag string * @param $ind1 string * @param $ind2 string * @param $code string * @param $value mixed */ function formatElement($tag, $ind1, $ind2, $code, $value) { if (!is_array($value)) { $value = array($value); } $response = ''; foreach ($value as $v) { $response .= "\t<datafield tag=\"{$tag}\" ind1=\"{$ind1}\" ind2=\"{$ind2}\">\n" . "\t\t<subfield code=\"{$code}\">" . OAIUtils::prepOutput($v) . "</subfield>\n" . "\t</datafield>\n"; } return $response; }
/** * Format XML for single MARC element. * @param $id string * @param $i1 string * @param $i2 string * @param $label string * @param $value mixed */ function formatElement($id, $i1, $i2, $label, $value) { if (!is_array($value)) { $value = array($value); } $response = ''; foreach ($value as $v) { $response .= "\t<varfield id=\"{$id}\" i1=\"{$i1}\" i2=\"{$i2}\">\n" . "\t\t<subfield label=\"{$label}\">" . OAIUtils::prepOutput($v) . "</subfield>\n" . "\t</varfield>\n"; } return $response; }
/** * Clean input variables. * @param $data mixed request parameter(s) * @return mixed cleaned request parameter(s) */ function prepInput(&$data) { if (!is_array($data)) { $data = urldecode($data); } else { foreach ($data as $k => $v) { if (is_array($data[$k])) { OAIUtils::prepInput($data[$k]); } else { $data[$k] = urldecode($v); } } } return $data; }
/** * Return OAIIdentifier object from database row. * @param $row array * @return OAIIdentifier */ function &_returnIdentifierFromRow(&$row) { $oaiRecord = new OAIRecord(); $oaiRecord->identifier = $this->oai->recordIdToIdentifier($row['record_id']); $oaiRecord->datestamp = OAIUtils::UTCDate(strtotime($this->datetimeFromDB($row['datestamp']))); $oaiRecord->sets = array($row['archive_id']); return $oaiRecord; }
/** * Return OAIIdentifier object from database row. * @param $row array * @return OAIIdentifier */ function &_returnIdentifierFromRow(&$row) { $record = new OAIRecord(); $conference =& $this->getConference($row['conference_id']); $schedConf =& $this->getSchedConf($row['sched_conf_id']); $track =& $this->getTrack($row['track_id']); $record->identifier = $this->oai->paperIdToIdentifier($row['paper_id']); $record->datestamp = OAIUtils::UTCDate(strtotime($this->datetimeFromDB($row['last_modified']))); $record->sets = array($conference->getPath() . ':' . $track->getLocalizedAbbrev()); return $record; }
/** * Return OAIIdentifier object from database row. * @param $row array * @return OAIIdentifier */ function &_returnIdentifierFromRow(&$row) { $journal =& $this->getJournal($row['journal_id']); $section =& $this->getSection($row['section_id']); $record = new OAIRecord(); $record->identifier = $this->oai->articleIdToIdentifier($row['article_id']); $record->datestamp = OAIUtils::UTCDate(strtotime($this->datetimeFromDB($row['last_modified']))); $record->sets = array($journal->getPath() . ':' . $section->getLocalizedAbbrev()); return $record; }
/** * Common operations for OAIRecord and OAIIdentifier object data set. * @param $record OAIRecord/OAIIdentifier * @param $row array * @return OAIRecord/OAIIdentifier */ function _doCommonOAIFromRowOperations($record, $row) { $record->datestamp = OAIUtils::UTCDate(strtotime($this->datetimeFromDB($row['last_modified']))); if (isset($row['tombstone_id'])) { $record->identifier = $row['oai_identifier']; $record->sets = array($row['set_spec']); $record->status = OAIRECORD_STATUS_DELETED; } else { $record->status = OAIRECORD_STATUS_ALIVE; $record = $this->setOAIData($record, $row, is_a($record, 'OAIRecord')); } return $record; }
/** * Checks if from and until parameters have been passed. * If passed, validate and convert to UNIX timestamps. * @param $params array request parameters * @param $from int from timestamp (output parameter) * @param $until int until timestamp (output parameter) * @return boolean */ function extractDateParams($params, &$from, &$until) { if (isset($params['from'])) { $from = OAIUtils::UTCtoTimestamp($params['from']); if ($from == 'invalid') { $this->error('badArgument', 'Illegal from parameter'); return false; } else { if ($from == 'invalid_granularity') { $this->error('badArgument', 'Illegal granularity for from parameter'); return false; } } } if (isset($params['until'])) { $until = OAIUtils::UTCtoTimestamp($params['until']); if ($until == 'invalid') { $this->error('badArgument', 'Illegal until parameter'); return false; } else { if ($until == 'invalid_granularity') { $this->error('badArgument', 'Illegal granularity for until parameter'); return false; } } // Check that until value is greater than or equal to from value if (isset($from) && $from > $until) { $this->error('badArgument', 'until parameter must be greater than or equal to from parameter'); return false; } // Check that granularities are equal if (isset($from) && strlen($params['from']) != strlen($params['until'])) { $this->error('badArgument', 'until and from parameters must be of the same granularity'); return false; } if (strlen($params['until']) == 10) { // Until date is inclusive $until += 86399; } } return true; }
/** * Format XML for single DC element. * @param $name string * @param $value mixed * @param $multilingual boolean optional */ function formatElement($name, $value, $multilingual = false, $attribs = array()) { if (!is_array($value)) { $value = array($value); } $attribText = ''; foreach ($attribs as $n => $v) { $attribText .= " {$n}=\"" . htmlspecialchars($v) . "\""; } $response = ''; foreach ($value as $key => $v) { $key = str_replace('_', '-', $key); if (!$multilingual) { $response .= "\t<dc:{$name}{$attribText}>" . OAIUtils::prepOutput($v) . "</dc:{$name}>\n"; } else { if (is_array($v)) { foreach ($v as $subV) { $response .= "\t<dc:{$name} xml:lang=\"{$key}\">" . OAIUtils::prepOutput($subV) . "</dc:{$name}>\n"; } } else { $response .= "\t<dc:{$name} xml:lang=\"{$key}\">" . OAIUtils::prepOutput($v) . "</dc:{$name}>\n"; } } } return $response; }
/** * Format XML for single DC element. * @param $name string * @param $value mixed * @param $multilingual boolean optional */ function formatElement($name, $value, $multilingual = false) { if (!is_array($value)) { $value = array($value); } $response = ''; foreach ($value as $key => $v) { $key = str_replace('_', '-', $key); if (!$multilingual) { $response .= "\t<dc:{$name}>" . OAIUtils::prepOutput($v) . "</dc:{$name}>\n"; } else { if (is_array($v)) { foreach ($v as $subV) { $response .= "\t<dc:{$name} xml:lang=\"{$key}\">" . OAIUtils::prepOutput($subV) . "</dc:{$name}>\n"; } } else { $response .= "\t<dc:{$name} xml:lang=\"{$key}\">" . OAIUtils::prepOutput($v) . "</dc:{$name}>\n"; } } } return $response; }