예제 #1
0
 public function testRedactedFields()
 {
     $instance = new FilteredRecord();
     $instance->setRedactedFields(array('bar'));
     $instance->set('bar', 42);
     $this->assertFalse($instance->has('bar'));
     $instance->append('bar', 'foobar');
     $this->assertFalse($instance->has('bar'));
     $this->assertEmpty($instance->getRecordFields());
 }
예제 #2
0
 private function findElementsForPubMed(DOMDocument $domDocument)
 {
     foreach ($domDocument->getElementsByTagName('PubDate') as $item) {
         foreach ($item->getElementsByTagName('Year') as $i) {
             $this->filteredRecord->set('year', $i->nodeValue);
         }
     }
     foreach ($domDocument->getElementsByTagName('Abstract') as $item) {
         $this->filteredRecord->set('abstract', preg_replace('#\\s{2,}#', ' ', trim($item->nodeValue)));
     }
     foreach ($domDocument->getElementsByTagName('MeshHeading') as $item) {
         $this->filteredRecord->append('subject', preg_replace('#\\s{2,}#', ' ', trim($item->nodeValue)));
     }
     // http://www.library.illinois.edu/biotech/j-abbrev.html notes:
     // "... database uses the "standard abbreviation", as defined by ISSN
     // and used also by BIOSIS and CASSI ..."
     foreach ($domDocument->getElementsByTagName('ISOAbbreviation') as $item) {
         $this->filteredRecord->append('iso-abbreviation', trim($item->nodeValue));
     }
 }
예제 #3
0
 private function doProcessCiteproc($citeproc)
 {
     foreach ($citeproc as $key => $value) {
         switch ($key) {
             case 'type':
                 $this->filteredRecord->set('type', $value);
                 break;
             case 'subject':
                 $this->filteredRecord->set('subject', $value);
                 break;
             case 'editor':
             case 'author':
                 $this->collectAuthors($key, $value);
                 break;
             case 'title':
                 $this->filteredRecord->set('title', $value);
                 break;
             case 'issue':
                 $this->filteredRecord->set('issue', $value);
                 break;
             case 'volume':
                 $this->filteredRecord->set('volume', $value);
                 break;
             case 'page':
                 $this->filteredRecord->set('pages', $value);
                 break;
             case 'publisher':
                 $this->filteredRecord->set('publisher', $value);
                 break;
             case 'container-title':
                 $this->filteredRecord->set('journal', $value);
                 break;
             case 'DOI':
                 $this->filteredRecord->set('doi', $value);
                 break;
             case 'ISSN':
                 $this->filteredRecord->set('issn', $value);
                 break;
             case 'deposited':
                 // Dataset
             // Dataset
             case 'issued':
                 if (isset($value['raw'])) {
                     $this->filteredRecord->set('year', $value['raw']);
                 } else {
                     $date = end($value['date-parts']);
                     $this->filteredRecord->set('year', $date[0]);
                 }
                 break;
         }
     }
     // Part of the auto generated key
     $this->filteredRecord->append('reference', $this->filteredRecord->get('year') . mb_substr(strtolower($this->filteredRecord->get('title')), 0, 2));
 }
예제 #4
0
 private function collectIdentifiers($value)
 {
     foreach ($value as $id => $v) {
         if ($id === 'openlibrary') {
             $id = 'olid';
         }
         if ($id === 'isbn_13' || $id === 'isbn_10') {
             $id = 'isbn';
         }
         // No commercial provider
         if (!in_array($id, array('isbn', 'olid', 'oclc', 'lccn'))) {
             continue;
         }
         $this->filteredRecord->append($id, end($v));
     }
 }
예제 #5
0
 private function collectAbstract($values)
 {
     foreach ($values as $key => $value) {
         if (is_array($value)) {
             $this->collectAbstract($value);
             continue;
         }
         // This is pure guess work since the description list is
         // an unordered list with no indication of what type of
         // content is stored, use `--` is indicator that is not
         // the abstract
         if (strpos($value, '--') !== false) {
             continue;
         }
         if ($key === '@value') {
             $this->filteredRecord->append('abstract', $value);
         }
     }
 }