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; }
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; }