Example #1
0
 /**
  * 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;
 }
Example #2
0
 /**
  * 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 );
	}