/**
  * 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;
 }
Example #5
0
 /**
  * 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;
 }
Example #6
0
 /**
  * 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;
 }
Example #7
0
 /**
  * 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;
 }
Example #8
0
 /**
  * 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;
 }
Example #9
0
 /**
  * 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;
 }
Example #10
0
 /**
  * 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;
 }
Example #12
0
 /**
  * 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;
 }