예제 #1
0
 public function importFile($pathname)
 {
     $doc = RDF::documentFromURL($pathname);
     $info = null;
     if (is_object($doc)) {
         $topic = ProgrammesOntology::instanceFromDocument($doc);
         if (is_object($topic)) {
             if ($topic instanceof POBrand) {
                 $info = $this->importBrand($topic);
                 $info['_recurse'] = array();
                 foreach ($topic->episodes as $ep) {
                     $info['_recurse'][] = strval($ep);
                 }
                 foreach ($topic->series as $ep) {
                     $info['_recurse'][] = strval($ep);
                 }
                 foreach ($topic->clips as $ep) {
                     $info['_recurse'][] = strval($ep);
                 }
             } else {
                 if ($topic instanceof POSeries) {
                     $info = $this->importSeries($topic);
                     $info['_recurse'] = array();
                     foreach ($topic->episodes as $ep) {
                         if ($ep->isA(ProgrammesOntology::po . 'episode')) {
                             $ep = $ep->first(ProgrammesOntology::po . 'Episode');
                         }
                         $url = strval($ep);
                         if (!strlen($url)) {
                             print_r($ep);
                             die;
                         }
                         $info['_recurse'][] = $url;
                     }
                     foreach ($topic->clips as $ep) {
                         $info['_recurse'][] = strval($ep);
                     }
                 } else {
                     if ($topic instanceof POEpisode) {
                         $info = $this->importEpisode($topic);
                     } else {
                         echo "Unsupported class " . get_class($topic) . "\n";
                     }
                 }
             }
         } else {
             echo "No primary topic found.\n";
         }
     } else {
         echo "No document found.\n";
     }
     return $info;
 }
예제 #2
0
파일: import.php 프로젝트: nexgenta/media
 protected function importFile($pathname)
 {
     $class = null;
     $base = $pathname;
     if (!strncmp($pathname, 'http:', 5)) {
         uses('rdf');
         $doc = RDF::documentFromURL($pathname);
         if (is_object($doc)) {
             require_once dirname(__FILE__) . '/import-rdf.php';
             $class = 'MediaImportRDF';
         } else {
             echo "No RDF found at {$pathname}\n";
         }
     } else {
         $info = pathinfo($pathname);
         $base = basename($pathname);
         if (!isset($info['extension'])) {
             $info['extension'] = null;
         }
         switch ($info['extension']) {
             case 'xml':
                 require_once dirname(__FILE__) . '/import-xml.php';
                 $class = 'MediaImportXML';
                 break;
             case 'json':
                 require_once dirname(__FILE__) . '/import-json.php';
                 $class = 'MediaImportJSON';
                 break;
             case 'rdf':
                 require_once dirname(__FILE__) . '/import-rdf.php';
                 $class = 'MediaImportRDF';
                 break;
             default:
                 echo $base . ": Error: Unsupported file type\n";
                 return false;
         }
     }
     if (!strlen($class) || !class_exists($class)) {
         echo $base . ": Error: Unable to import (internal error -- class {$class} does not exist)\n";
         return false;
     }
     $inst = new $class();
     $data = $inst->importFile($pathname);
     if (!$data) {
         echo $base . ": Error: Unable to import: import class failed\n";
         return false;
     }
     $recurse = null;
     if (isset($data['_recurse']) && is_array($data['_recurse'])) {
         $recurse = $data['_recurse'];
         unset($data['_recurse']);
     }
     if (!($asset = Asset::objectForData($data))) {
         echo $base . ": Error: Unable to import: could not create asset object\n";
         return false;
     }
     if (true !== ($r = $asset->verify())) {
         echo $base . ": Error: Unable to import: " . $r . "\n";
         return false;
     }
     if (!isset($asset->kind)) {
         $asset->kind = null;
     }
     if (!isset($asset->uuid)) {
         if (isset($asset->curie)) {
             if (null !== ($uuid = $this->model->uuidForCurie($asset->curie))) {
                 echo $base . ": Note: Matched CURIE [" . $asset->curie . "] to existing UUID " . $uuid . "\n";
                 $asset->uuid = $uuid;
             }
         }
         if ($asset instanceof Classification) {
             if (!isset($asset->uuid) && strlen($asset->slug)) {
                 if ($obj = $this->model->locateObject($asset->slug, $asset->parent, $asset->kind)) {
                     $asset->uuid = $obj->uuid;
                 }
             }
             if (!isset($asset->uuid) && isset($asset->sameAs)) {
                 foreach ($asset->sameAs as $sameAs) {
                     if ($obj = $this->model->locateObject($sameAs, false, $asset->kind)) {
                         $asset->uuid = $obj->uuid;
                         break;
                     }
                 }
             }
             if (!isset($asset->slug) && !isset($asset->sameAs)) {
                 echo $base . ": Refusing to import a " . $asset->kind . " with no useful information. Sorry.\n";
                 return false;
             }
         }
     }
     if (isset($asset->uuid)) {
         /* Check to see whether asset already exists with that UUID,
          * and if so whether it's the same kind.
          */
         if ($old = $this->model->dataForUuid($asset->uuid)) {
             if (!isset($old['kind'])) {
                 $old['kind'] = null;
             }
             if (strcmp($asset->kind, $old['kind'])) {
                 echo $base . ": Warning: Updating asset " . $asset->uuid . " from being a '" . $old['kind'] . "' to being a '" . $asset->kind . "'\n";
             } else {
                 echo $base . ": Updating " . $asset->uuid . "\n";
             }
         }
     }
     if (isset($asset->uuid)) {
         $created = false;
     } else {
         $created = true;
     }
     $asset->store();
     if ($created) {
         echo $base . ": Created with UUID " . $asset->uuid . "\n";
     }
     if (is_array($recurse) && count($recurse)) {
         return $recurse;
     }
     return true;
 }