/**
* this is for importing a list of value vocabulary files.
*
* it's designed specifically to import the list of marc21 VES files,
* but may be modified and expanded to support more things
*
* @param $task
* @param $args
*
* @throws Exception
*/
function run_import_list($task, $args)
{
xdebug_break();
//check the argument counts
//check the argument counts
if (count($args) < 1) {
throw new Exception('You must provide a vocabulary type.');
}
if (count($args) < 2) {
throw new Exception('You must provide a file name.');
}
//set the arguments
$type = strtolower($args[0]);
$filePath = $args[1];
$batchId = $args[3];
//does the file exist?
if (! file_exists($filePath)) {
throw new Exception('You must supply a valid file to import');
}
//is the file a valid type?
if (preg_match('/^.+\.([[:alpha:]]{2,4})$/', $filePath, $matches)) {
if (! in_array(
strtolower($matches[1]),
array(
"json",
"rdf",
"csv",
"xml"
)
)
) {
throw new Exception('You must provide a valid file type based on the extension');
}
} else {
throw new Exception("File type cannot be determined from the file extension");
}
/************************************************************
* Set Defaults Here *
*************************************************************/
$fileType = $matches[1];
//todo: need to figure out a way to pass defaults dynamically
$importTask = new pakeTask('import-vocabulary');
// parse file to get the fields/columns and data
$file = fopen($filePath, "r");
if (! $file) {
throw new Exception("Can't read supplied file");
}
switch ($fileType) {
case "csv":
try {
$reader = new aCsvReader($filePath);
} catch(Exception $e) {
throw new Exception("Not a happy CSV file! Error: " . $e);
}
$uploadPath = $GLOBALS['uploadPath'];
;
if ('vocab' == $type) {
// Get array of heading names found
$headings = $reader->getHeadings();
$fields = VocabularyPeer::getFieldNames();
try {
while ($row = $reader->getRow()) {
// lookup the URI (or the OMR ID if available) for a match
if (empty($row["VES"])) {
//skip this one
break;
}
$uri = $baseDomain . $row["VES"] . "#";
$vocab = VocabularyPeer::getVocabularyByUri($uri);
$updateTime = time();
if (! $vocab) {
// create a new concept or element
$vocab = new Vocabulary();
$vocab->setUri($uri);
$vocab->setCreatedAt($updateTime);
$vocab->setCreatedUserId($userId);
$vocab->setAgentId($agentID);
$vocab->setBaseDomain($baseDomain);
$vocab->setCommunity("Libraries, MARC21");
$vocab->setLanguage("en");
$vocab->setStatusId(1);
} else {
$vocab->setLastUpdated($updateTime);
$vocab->setUpdatedUserId($userId);
}
$vocab->setName(fixEncoding(rtrim($row['Name'])));
$vocab->setNote(fixEncoding(rtrim($row['Note'])));
$vocab->setToken($row['VES']);
$vocab->save();
//type
$args[0] = "vocab";
//vocabid
$args[2] = $vocab->getId();
//filepath
$args[1] = $GLOBALS['uploadPath'] . $row['VES'] . ".csv";
$args[3] = $batchId;
$args[4] = "-d";
run_import_vocabulary($importTask, $args);
$foo = $vocab->countConcepts();
}
} catch(Exception $e) {
throw new Exception($e);
}
} else //it's a schema
{
try {
while ($row = $reader->getRow()) {
//NOTE: this is explicitly tuned to a particular import file
//TODO: generalize this import mapping
// lookup the URI (or the OMR ID if available) for a match
if (empty($row["URI"])) {
//skip this one
break;
}
$uri = $row["URI"];
$schema = SchemaPeer::getschemaByUri($uri);
$updateTime = time();
if (! $schema) {
// create a new vocabulary
$schema = new Schema();
$schema->setUri($uri);
$schema->setCreatedAt($updateTime);
$schema->setCreatedUserId($userId);
$schema->setAgentId($agentID);
$schema->setBaseDomain($baseDomain);
$schema->setProfileId(1);
} else {
$schema->setUpdatedAt($updateTime);
$schema->setUpdatedUserId($userId);
}
$schema->setCommunity($row['Tags']);
$schema->setLanguage($row['Language']);
$schema->setNsType("slash");
$schema->setName($row['Label']);
$schema->setNote($row['Note']);
$schema->setStatusId(1);
$schema->setToken($row['Name']);
$schema->setUrl($row['URL']);
$schema->save();
//todo: create a new import batch here and pass it to the import args
//see importVocabulary->saveresults()
//$batchId =
//type
$args[0] = "schema";
//filepath
$args[1] = $GLOBALS['uploadPath'] . $row['File Name'];
//vocabid
$args[2] = $schema->getId();
$args[3] = $batchId;
$args[4] = "-d";
run_import_vocabulary($importTask, $args);
$foo = $schema->countSchemaPropertys();
}
} catch(Exception $e) {
throw new Exception($e);
}
}
break;
default:
}
}