/** * This function is called, when a <ImportSettings>-tag for a Term Import * has been found in an article. * */ function termImportParserHook($input, $args, $parser) { require_once "SMW_TermImportDefinitionValidator.php"; $attr = ""; foreach ($args as $k => $v) { $attr .= " " . $k . '="' . $v . '"'; } $completeImportSettings = "<ImportSettings{$attr}>" . $input . "</ImportSettings>\n"; $messages = ""; $tiDV = new SMWTermImportDefinitionValidator($completeImportSettings); if (!$tiDV->isValidXML()) { $messages .= "\n* Invalid XML"; } else { if (!$tiDV->isValidModuleConfiguration()) { $messages .= "\n* Invalid ModuleConfiguration."; } if (!$tiDV->isValidDataSource()) { $messages .= "\n* Invalid data source definition."; } if (!$tiDV->isValidConflictPolicy()) { $messages .= "\n* Invalid conflict policy."; } if (!$tiDV->isValidMappingPolicy()) { $messages .= "\n* Invalid mapping policy."; } if (!$tiDV->isValidImportSet()) { $messages .= "\n* Invalid import set."; } if (!$tiDV->isValidInputPolicy()) { $messages .= "\n* Invalid Input Policy."; } if (!$tiDV->isValidUpdatePolicy()) { $messages .= "\n* Invalid update policy."; } } if (strlen($messages) > 0) { $messages = '<h4><span class="mw-headline">The Term Import Definition is erronious</span></h4>' . $messages; } else { global $wgArticlePath; if (strpos($wgArticlePath, "?") > 0) { $url = Title::makeTitleSafe(NS_SPECIAL, "TermImport")->getFullURL() . "&tiname=" . $parser->getTitle()->getText(); } else { $url = Title::makeTitleSafe(NS_SPECIAL, "TermImport")->getFullURL() . "?tiname=" . $parser->getTitle()->getText(); } $messages = '<h4><a href="' . $url . '">Click here to edit the Term Import definition in the GUI</a></h4>'; } $completeImportSettings = '<h4><span class="mw-headline">Term Import definition</span></h4>' . '<pre>' . trim(htmlspecialchars($completeImportSettings)) . '</pre>'; return $completeImportSettings . $messages; }
private function getNecessaryTermImports() { require_once "SMW_TermImportDefinitionValidator.php"; $log = SGAGardeningIssuesAccess::getGardeningIssuesAccess(); SMWQueryProcessor::processFunctionParams(array("[[TermImport:+]] [[Category:TermImport]]"), $querystring, $params, $printouts); $queryResult = explode("|", SMWQueryProcessor::getResultFromQueryString($querystring, $params, $printouts, SMW_OUTPUT_WIKI)); unset($queryResult[0]); $necessaryTermImports = array(); foreach ($queryResult as $tiArticleName) { $tiArticleName = substr($tiArticleName, 0, strpos($tiArticleName, "]]")); $xmlString = smwf_om_GetWikiText('TermImport:' . $tiArticleName); $start = strpos($xmlString, "<ImportSettings>"); $end = strpos($xmlString, "</ImportSettings>") + 17 - $start; $xmlString = substr($xmlString, $start, $end); SMWQueryProcessor::processFunctionParams(array("[[belongsToTermImport::TermImport:" . $tiArticleName . "]]", "?hasImportDate", "limit=1", "sort=hasImportDate", "order=descending", "format=list", "mainlabel=-", "searchlabel="), $querystring, $params, $printouts); $queryResult = SMWQueryProcessor::getResultFromQueryString($querystring, $params, $printouts, SMW_OUTPUT_WIKI); // timestamp creation depends on property type (page or date) $queryResult = trim(substr($queryResult, strpos($queryResult, "]]") + 2)); if (strpos($queryResult, "[[:") === 0) { //type page $queryResult = trim(substr($queryResult, strpos($queryResult, "|") + 1)); $queryResult = trim(substr($queryResult, 0, strpos($queryResult, "]"))); } else { //type date $queryResult = trim(substr($queryResult, 0, strpos($queryResult, "["))); } $timestamp = strtotime($queryResult); $tiDV = new SMWTermImportDefinitionValidator($xmlString); if (!$tiDV->validate()) { echo "\nThe Term Import definition of " . $tiArticleName . " is invalid.\n"; $title = Title::newFromText("TermImport:" . $tiArticleName); $log->addGardeningIssueAboutArticle($this->id, SMW_GARDISSUE_UPDATE_FAILURE, $title); continue; } $simpleXMLElement = new SimpleXMLElement($xmlString); $maxAge = $simpleXMLElement->xpath("//UpdatePolicy/maxAge/@value"); //echo("\ntimestamp: ".$imestamp); if ($maxAge != "") { if ($timestamp == 0 || wfTime() - $timestamp - $maxAge[0]->value * 60 > 0) { echo "\nRun this term import: " . $tiArticleName; $necessaryTermImports[$tiArticleName] = $xmlString; } } else { $title = Title::newFromText("TermImport:" . $tiArticleName); $log->addGardeningIssueAboutArticle($this->id, SMW_GARDISSUE_UPDATE_NOT_NECESSARY, $title); } } return $necessaryTermImports; }