/** * This function sets up the modules of the import framework according to the * settings, reads the terms and creates articles for them. * * @param string $settings * This XML string contains the modules (Transport Layer, Data Access Layer), * the data source, the import sets and the input, mapping and conflict * policy. * * @return mixed (boolean, string) * <true>, if all terms were successfully imported or an * error message, otherwise. * */ public function importTerms($settings, $termImportName) { echo "Starting to import terms...\n"; echo "\n" . $settings; global $smwgDIIP; require_once $smwgDIIP . '/specials/TermImport/SMW_XMLParser.php'; $parser = new XMLParser($settings); $result = $parser->parse(); if ($result !== TRUE) { return $result; } $tlModule = $parser->getValuesOfElement(array('TLModules', 'Module', 'id')); if (count($tlModule) == 0) { return "Error: Transport layer module was not defined."; //todo: language } $dalModule = $parser->getValuesOfElement(array('DALModules', 'Module', 'id')); if (count($dalModule) == 0) { return "Error: Data access layer module was not defined."; //todo: language } global $smwgDIIP; require_once $smwgDIIP . '/specials/TermImport/SMW_WIL.php'; $wil = new WIL(); $tlModules = $wil->getTLModules(); echo "\n WIL connected"; $res = $wil->connectTL($tlModule[0], $tlModules); if (stripos($res, '<value>true</value>') === false) { return "Connecting the transport layer module {$tlModule['0']} failed."; //todo: language } $dalModules = $wil->getDALModules(); $res = $wil->connectDAL($dalModule[0], $dalModules); if (stripos($res, '<value>true</value>') === false) { return "Connecting the data access layer module {$dalModule['0']} failed."; //todo: language } $source = $parser->serializeElement(array('DataSource')); $importSets = $parser->serializeElement(array('ImportSets')); $inputPolicy = $parser->serializeElement(array('InputPolicy')); $conflictPolicy = $parser->serializeElement(array('ConflictPolicy')); echo "\nGet Terms"; $terms = $wil->getTerms($source, $importSets, $inputPolicy, $conflictPolicy); echo "\nTerms in place"; $mappingPolicy = $parser->serializeElement(array('MappingPolicy')); try { $result = $this->createArticles($terms, $mappingPolicy, $conflictPolicy, $wil, $termImportName); echo "Bot finished!\n"; if ($result === true) { $result = wfMsg('smw_ti_import_successful'); } } catch (Exception $e) { $result = "Something bad happened during the Term Import: " . $e; } return $result; }
/** * * @param $tlID the ID of the Transport Layer * @param $dalID * @param $source_input an XML structure of the given source inputs * @param $givenImportSetName the given import set name (String) * @param $givenInputPol an XML structure with the given input policy * @param $mappingPage The name of the mapping article * @param $givenConflictPol Boolean: overwrite=true, preserve=false * @param $runBot run the bot??? * * @return $result an XML structure */ function smwf_ti_connectTL($tlID, $dalID, $source_input, $givenImportSetName, $givenInputPol, $mappingPage, $givenConflictPol = true, $runBot, $termImportName = null, $updatePolicy = "", $edit = false, $createOnly = false) { global $smwgDIIP, $wgOut; require_once $smwgDIIP . '/specials/TermImport/SMW_WIL.php'; require_once $smwgDIIP . '/specials/TermImport/SMW_XMLParser.php'; $wil = new WIL(); $tlModules = $wil->getTLModules(); //TODO Errorhandling!!! if (!$tlID) { // Error,keine TLID angegeben!!! } $res = $wil->connectTL($tlID, $tlModules); $dalModules = $wil->getDALModules(); //return if no dalID is given if (!$dalID) { $tlModules = str_replace("<?xml version=\"1.0\"?>", "", $tlModules); $dalModules = str_replace("<?xml version=\"1.0\"?>", "", $dalModules); return '<result>' . $tlModules . $dalModules . '</result>'; } $res = $wil->connectDAL($dalID, $dalModules); $source = $wil->getSourceSpecification(); // return if no source is given if ((!$source_input || $source_input == '') && $res) { $tlModules = str_replace("<?xml version=\"1.0\"?>", "", $tlModules); $dalModules = str_replace("<?xml version=\"1.0\"?>", "", $dalModules); $source = str_replace("<?xml version=\"1.0\"?>", "", $source); return '<result>' . $tlModules . $dalModules . $source . '</result>'; } if (isset($source_input)) { $source_xml = new SimpleXMLElement($source_input); $source_xml_alt = new SimpleXMLElement($source); foreach ($source_xml->children() as $second_gen) { $tag = $second_gen->getName(); $value = (string) $second_gen; $result = $source_xml_alt->xpath($tag); //Change the old tag $source_xml_alt->{$tag} = $value; } //get the xml-string $source_result = $source_xml_alt->asXML(); } $importSets = $wil->getImportSets($source_result); $p = new XMLParser($importSets); $result = $p->parse(); if ($result == TRUE && $givenImportSetName && $givenImportSetName != '' && $givenImportSetName != 'ALL') { $p->removeAllParentElements('NAME', $givenImportSetName); } if ($result == TRUE && $givenImportSetName && $givenImportSetName == 'ALL') { $importSets = '<?xml version="1.0"?>' . '<IMPORTSETS XMLNS="http://www.ontoprise.de/smwplus#">' . '</IMPORTSETS>'; } else { $importSets = $p->serialize(); } $properties = $wil->getProperties($source_result, $importSets); if (!$givenInputPol || $givenInputPol == '') { // no input policy defined, create an empty one for getting the term-information $givenInputPol = '<?xml version="1.0"?>' . "\n" . '<InputPolicy xmlns="http://www.ontoprise.de/smwplus#">' . "\n" . '<terms>' . "\n" . ' <regex></regex>' . "\n" . ' <term></term>' . "\n" . '</terms>' . "\n" . '<properties>' . "\n" . ' <property>articleName</property>' . "\n" . '</properties>' . "\n" . '</InputPolicy>' . "\n"; } $terms = $wil->getTermList($source_result, $importSets, $givenInputPol); if ($runBot == 0) { // prepare XML strings for return... $xmlResult = '<result>' . $tlModules . $dalModules . $source_result . $importSets . $properties . $terms . '</result>'; $xmlResult = '<?xml version="1.0"?>' . str_replace('<?xml version="1.0"?>', "", $xmlResult); return $xmlResult; } elseif ($runBot == 1) { //do the Import! $title = Title::newFromText($mappingPage); if (!$title->exists()) { return '<?xml version="1.0"?> <ReturnValue xmlns="http://www.ontoprise.de/smwplus#"> <value>falseMap</value> <message>' . wfMsg('smw_ti_nomappingpage') . '</message> </ReturnValue >'; } $moduleConfig = '<?xml version="1.0"?>' . "\n" . '<ModuleConfiguration xmlns="http://www.ontoprise.de/smwplus#">' . "\n" . ' <TLModules>' . "\n" . ' <Module>' . "\n" . ' <id>' . $tlID . '</id>' . "\n" . ' </Module>' . "\n" . ' </TLModules >' . "\n" . ' <DALModules>' . "\n" . ' <Module>' . "\n" . ' <id>' . $dalID . '</id>' . "\n" . ' </Module>' . "\n" . ' </DALModules >' . "\n" . '</ModuleConfiguration>'; $mappingPolicy = '<?xml version="1.0"?>' . "\n" . '<MappingPolicy xmlns="http://www.ontoprise.de/smwplus#">' . "\n" . ' <page>' . $mappingPage . '</page>' . "\n" . '</MappingPolicy >'; if ($givenConflictPol && $givenConflictPol != '') { $conflictPolicy = '<?xml version="1.0"?>' . "\n" . '<ConflictPolicy xmlns="http://www.ontoprise.de/smwplus#">' . "\n" . ' <overwriteExistingTerms>' . $givenConflictPol . '</overwriteExistingTerms>' . "\n" . '</ConflictPolicy >'; } else { //Error!no conflict policy given... is it possible with <select>?!? } //todo: error handling if ($updatePolicy == 0 || $updatePolicy == "") { $updatePolicy = "<once/>"; } else { $updatePolicy = "<maxAge value=\"" . $updatePolicy . "\"/>"; } $updatePolicy = '<?xml version="1.0"?>' . "\n" . '<UpdatePolicy xmlns="http://www.ontoprise.de/smwplus#">' . "\n" . $updatePolicy . '</UpdatePolicy>'; $articleCreated = smwf_ti_createTIArticle($moduleConfig, $source_result, $mappingPolicy, $conflictPolicy, $givenInputPol, $importSets, $termImportName, $updatePolicy, $edit); if ($articleCreated !== true) { return $articleCreated; } else { if ($createOnly != "false") { return '<?xml version="1.0"?> <ReturnValue xmlns="http://www.ontoprise.de/smwplus#"> <value>articleCreated</value> <message>' . $termImportName . '</message> </ReturnValue >'; } } $terms = $wil->importTerms($moduleConfig, $source_result, $importSets, $givenInputPol, $mappingPolicy, $conflictPolicy, $termImportName); if ($terms == false) { //error while running bot } else { return $terms; } } else { // error, $runBot neither 0 nor 1 } return null; }