/** * Get info about given wikitext with double brackets syntax (templates, magic words, parser functions) */ public static function resolveDoubleBrackets() { global $wgRequest, $wgTitle, $wgRDBEnabled, $wgRDBData, $wgParser; // initialization of required objects and settings $wgParser->getstriplist(); //we need to create (unstub) this object, because of in_array($tagName, $stripList) in parser $parser = new Parser(); //$parser->mDefaultStripList = $parser->mStripList = array(); $parser->mTagHooks =& $wgParser->mTagHooks; $parser->mStripList =& $wgParser->mStripList; $parserOptions = new ParserOptions(); $parserOptions->setEditSection(false); // parsing wikitext in RDB (resolve double backets) mode $wgRDBEnabled = true; $wikitext = $wgRequest->getVal('wikitext', ''); $html = $parser->parse($wikitext, $wgTitle, $parserOptions)->getText(); // processing data from RDB mode if (!is_array($wgRDBData) || !isset($wgRDBData['type']) || $wgRDBData['type'] == 'error') { $out = array('type' => 'unknown'); } else { if ($wgRDBData['type'] == 'tpl') { $out = array(); $out['title'] = $wgRDBData['title']->getPrefixedDBkey(); $out['exists'] = $wgRDBData['title']->exists() ? true : false; if ($out['exists']) { $out['availableParams'] = RTE::getTemplateParams($wgRDBData['title'], $parser); } for ($i = 0; $i < $wgRDBData['args']->node->length; $i++) { $arg = new PPNode_DOM($wgRDBData['args']->node->item($i)); $argSplited = $arg->splitArg(); $key = !empty($argSplited['index']) ? $argSplited['index'] : $argSplited['name']->node->textContent; $value = $argSplited['value']->node->textContent; $out['passedParams'][trim($key)] = trim($value); } } $out['type'] = $wgRDBData['type']; $out['html'] = $html; } return $out; }
/** * Get info about given wikitext with double brackets syntax (templates, magic words, parser functions) */ public static function resolveDoubleBrackets() { global $wgRequest, $wgTitle, $wgRDBData; $templateHelper = new TemplatePageHelper(); $wikitext = $wgRequest->getVal('wikitext', ''); $html = $templateHelper->getHtml($wikitext, $wgTitle); // processing data from RDB mode if (!is_array($wgRDBData) || !isset($wgRDBData['type']) || $wgRDBData['type'] == 'error') { $out = array('type' => 'unknown'); } else { if ($wgRDBData['type'] == 'tpl') { $out = array(); $out['title'] = $wgRDBData['title']->getPrefixedDBkey(); $out['exists'] = $wgRDBData['title']->exists() ? true : false; if ($out['exists']) { $templateHelper->setTemplateByTitle($wgRDBData['title']); $out['availableParams'] = $templateHelper->getTemplateParams(); } // Get key and value for each argument for ($argIndex = 0; $argIndex < $wgRDBData['args']->node->length; $argIndex++) { $argNode = new PPNode_DOM($wgRDBData['args']->node->item($argIndex)); $argParts = $argNode->splitArg(); $key = !empty($argParts['index']) ? $argParts['index'] : $argParts['name']->node->textContent; $valueNodes = $argParts['value']->getChildren(); $value = ""; // Loop through all children and concatenate their contents, parsing tags if necessary for ($valueIndex = 0; $valueIndex < $valueNodes->node->length; $valueIndex++) { $valueNode = new PPNode_DOM($valueNodes->node->item($valueIndex)); // Parse extension tags (BugId:43779) if ($valueNode->node->nodeName == 'ext') { $extParts = $valueNode->splitExt(); // Name and attr are required parameters, the others are optional. $value .= "<" . $extParts['name']->node->textContent . $extParts['attr']->node->textContent . ">"; if (isset($extParts['inner'])) { $value .= $extParts['inner']->node->textContent; } if (isset($extParts['close'])) { $value .= $extParts['close']->node->textContent; } // Just use text content } else { $value .= $valueNode->node->textContent; } $out['passedParams'][trim($key)] = trim($value); } } } $out['type'] = $wgRDBData['type']; $out['html'] = $html; } return $out; }
/** * Parses an argument to extract a variable and/or a value * * @internal * @param PPNode_DOM $arg Argument * @return array a tuple of the variable (if exists) its corresponding value */ protected function parseArgument( PPNode_DOM $arg ) { /* if ( $arg instanceof PPNode_DOM ) { # See below: */ $bits = $arg->splitArg(); $index = $bits['index']; if ($index === '') { # Found $var = trim($this->frame->expand($bits['name'])); $value = trim($this->frame->expand($bits['value'])); } else { # Not found $var = Null; $value = trim($this->frame->expand($arg)); } /* This commented-out code would be required if $this->arg[0] * were passed to this function, since that argument is pre-expanded * and not a PPNode_DOM object, at least in the version of MediaWiki * when this was written. } else { $parts = array_map('trim', explode( '=', $arg, 2 ) ); if ( count( $parts ) == 2 ) { # Found "=" $var = $parts[ 0 ]; $value = $parts[ 1 ]; } else { # Not found $var = NULL; $value = $arg; } } */ return array( $var, $value ); }