/** * Static function for creating a new wikipage object from a * MediaWiki Title object. * * @deprecated This method will vanish before SMW 1.7. If you really need this, simply copy its code. * * @return SMWWikiPageValue */ public static function makePageFromTitle(Title $title) { $dvWikiPage = new SMWWikiPageValue('_wpg'); $diWikiPage = SMWDIWikiPage::newFromTitle($title); $dvWikiPage->setDataItem($diWikiPage); $dvWikiPage->m_title = $title; // optional, just for efficiency return $dvWikiPage; }
/** * This method renders the result set provided by SMW according to the printer * * @param res SMWQueryResult, result set of the ask query provided by SMW * @param outputmode ? * @return String, rendered HTML output of this printer for the ask-query * */ protected function getResultText(SMWQueryResult $res, $outputmode) { if (!is_callable('renderGraphviz')) { wfWarn('The SRF Graph printer needs the GraphViz extension to be installed.'); return ''; } global $wgContLang; // content language object // // GraphViz settings // global $wgGraphVizSettings; $this->isHTML = true; // // Iterate all rows in result set // $row = $res->getNext(); // get initial row (i.e. array of SMWResultArray) while ($row !== false) { /* SMWDataItem */ $subject = $row[0]->getResultSubject(); // get Subject of the Result // creates a new node if $val has type wikipage if ($subject->getDIType() == SMWDataItem::TYPE_WIKIPAGE) { $wikiPageValue = new SMWWikiPageValue('_wpg'); $wikiPageValue->setDataItem($subject); $node = $this->m_process->makeNode($wikiPageValue->getShortWikiText(), $wikiPageValue->getShortWikiText()); } // // Iterate all colums of the row (which describe properties of the proces node) // // FIXME: this does not work with SMW >= 1.6, see // https://bugzilla.wikimedia.org/show_bug.cgi?id=35003 // FIXME: got _a bit_ of redundancy here looks like... :/ foreach ($row as $field) { // check column title $req = $field->getPrintRequest(); switch (strtolower($req->getLabel())) { case strtolower($wgContLang->getNsText(NS_CATEGORY)): foreach ($field->getContent() as $value) { $val = $value->getShortWikiText(); if ($val == $wgContLang->getNsText(NS_CATEGORY) . ':' . $this->m_processCategory) { $node->setAtomic(false); } } break; case "haslabel": $value = current($field->getContent()); // save only the first if ($value !== false) { $val = $value->getLongWikiText(); if ($this->m_process->getUseOtherLabels()) { $val = str_replace("&", "and", $val); $node->setLabel($val); } } break; case "hasrole": foreach ($field->getContent() as $value) { $val = $value->getShortWikiText(); $role = $this->m_process->makeRole($val, $val); $node->addRole($role); } break; case "usesresource": foreach ($field->getContent() as $value) { $val = $value->getShortWikiText(); $xres = $this->m_process->makeRessource($val, $val); $node->addUsedRessource($xres); } break; case "producesresource": foreach ($field->getContent() as $value) { $val = $value->getShortWikiText(); $xres = $this->m_process->makeRessource($val, $val); $node->addProducedRessource($xres); } break; case "hassuccessor": if (count($field->getContent()) > 1) { // SplitParallel $edge = new SplitParallelEdge(); $edge->setFrom($node); foreach ($field->getContent() as $value) { $val = $value->getShortWikiText(); $edge->addTo($this->m_process->makeNode($val, $val)); } } else { // Sequence foreach ($field->getContent() as $value) { $val = $value->getShortWikiText(); $edge = new SequentialEdge(); $edge->setFrom($node); $edge->setTo($this->m_process->makeNode($val, $val)); } } break; case "hasorsuccessor": if (count($field->getContent()) > 0) { // SplitExclusiveOr $edge = new SplitExclusiveOrEdge(); $edge->setFrom($node); foreach ($field->getContent() as $value) { $val = $value->getShortWikiText(); $edge->addTo($this->m_process->makeNode($val, $val)); } } break; case "hascontruesuccessor": if (count($field->getContent()) > 0) { // SplitConditional if (!isset($cond_edge)) { $cond_edge = new SplitConditionalOrEdge(); $cond_edge->setFrom($node); } // should be only one foreach ($field->getContent() as $value) { $val = $value->getShortWikiText(); $cond_edge->setToTrue($this->m_process->makeNode($val, $val)); } } break; case "hasconfalsesuccessor": if (count($field->getContent()) > 0) { // SplitConditional if (!isset($cond_edge)) { $cond_edge = new SplitConditionalOrEdge(); $cond_edge->setFrom($node); } // should be only one foreach ($field->getContent() as $value) { $val = $value->getShortWikiText(); $cond_edge->setToFalse($this->m_process->makeNode($val, $val)); } } break; case "hascondition": if (count($field->getContent()) > 0) { // SplitConditional if (!isset($cond_edge)) { $cond_edge = new SplitConditionalOrEdge(); $cond_edge->setFrom($node); } // should be only one foreach ($field->getContent() as $value) { $val = $value->getShortWikiText(); $cond_edge->setConditionText($val); } } break; case "hasstatus": // should be only one foreach ($field->getContent() as $value) { $val = $value->getShortWikiText(); $node->setStatus($val); } break; default: // TODO - redundant column in result } } // reset row variables unset($node); unset($cond_edge); $row = $res->getNext(); // switch to next row } // // generate graphInput // $graphInput = $this->m_process->getGraphVizCode(); // // render graphViz code // $result = renderGraphviz($graphInput); $debug = ''; if ($this->m_isDebugSet) { $debug = '<pre>' . $graphInput . '</pre>'; } return $result . $debug; }
/** * Create a MediaWiki Title object for this SMWDIWikiPage. The result * can be null if an error occurred. * * @todo From MW 1.17 on, makeTitleSafe supports interwiki prefixes. * This function can be simplified when compatibility to MW 1.16 is * dropped. * @return mixed Title or null */ public function getTitle() { if ($this->m_interwiki === '') { return Title::makeTitleSafe($this->m_namespace, $this->m_dbkey, $this->m_subobjectname); } else { // TODO inefficient; incomplete for fragments (see above commment) $datavalue = new SMWWikiPageValue('_wpg'); $datavalue->setDataItem($this); return Title::newFromText($datavalue->getPrefixedText()); } }
private function getDvShortHtmlText($subject, $linker = null) { $dataValue = new WikiPageValue('_wpg'); $dataValue->setDataItem($subject); $dataValue->setCaption($subject->getTitle()->getSubpageText()); return $dataValue->getShortHtmlText($linker); }