Ejemplo n.º 1
0
 /**
  * Builds the HTML code for this component
  *
  * @return String the HTML code
  */
 public function getHtml()
 {
     $element = $this->getDomElement();
     if ($element === null) {
         return '';
     }
     $msgKey = $element->getAttribute('message');
     $menuFactory = new MenuFactory();
     if (empty($msgKey)) {
         $text = $element->textContent;
         $menu = $menuFactory->getMenuFromMessageText($text);
     } else {
         $menu = $menuFactory->getMenuFromMessage($msgKey);
     }
     $menu->setMenuItemFormatter(function ($href, $text, $depth, $subitems) {
         $href = \Sanitizer::cleanUrl($href);
         $text = htmlspecialchars($text);
         if ($depth === 1 && !empty($subitems)) {
             return "<li class=\"dropdown\"><a class=\"dropdown-toggle\" href=\"#\"  data-toggle=\"dropdown\">{$text}<b class=\"caret\"></b></a>{$subitems}</li>";
         } else {
             return "<li><a href=\"{$href}\">{$text}</a>{$subitems}</li>";
         }
     });
     $menu->setItemListFormatter(function ($rawItemsHtml, $depth) {
         if ($depth === 0) {
             return $rawItemsHtml;
         } elseif ($depth === 1) {
             return "<ul class=\"dropdown-menu\">{$rawItemsHtml}</ul>";
         } else {
             return "<ul>{$rawItemsHtml}</ul>";
         }
     });
     return $menu->getHtml();
 }
Ejemplo n.º 2
0
    }
    ?>
					</tr>
					<?php 
    foreach ($content as $item) {
        ?>
						<tr class="insights-list-item">
							<td class="insights-list-item-page insights-list-cell insights-list-first-column">
								<a class="insights-list-item-title <?php 
        echo Sanitizer::encodeAttribute($item['link']['classes']);
        ?>
" title="<?php 
        echo Sanitizer::encodeAttribute($item['link']['title']);
        ?>
" href="<?php 
        echo Sanitizer::cleanUrl($item['link']['url']);
        ?>
"><?php 
        echo Sanitizer::escapeHtmlAllowEntities($item['link']['text']);
        ?>
</a>
								<?php 
        if (isset($item['metadata'])) {
            ?>
									<p class="insights-list-item-metadata">
										<?php 
            if (isset($item['metadata']['lastRevision'])) {
                ?>
											<?php 
                echo wfMessage('insights-last-edit')->rawParams(Xml::element('a', ['href' => $item['metadata']['lastRevision']['userpage']], $item['metadata']['lastRevision']['username']), date('F j, Y', $item['metadata']['lastRevision']['timestamp']))->escaped();
                ?>
Ejemplo n.º 3
0
 /**
  * Replace external links (REL)
  *
  * Note: this is all very hackish and the order of execution matters a lot.
  * Make sure to run tests/parserTests.php if you change this code.
  *
  * @private
  *
  * @param $text string
  *
  * @throws MWException
  * @return string
  */
 function replaceExternalLinks($text)
 {
     wfProfileIn(__METHOD__);
     $bits = preg_split($this->mExtLinkBracketedRegex, $text, -1, PREG_SPLIT_DELIM_CAPTURE);
     if ($bits === false) {
         wfProfileOut(__METHOD__);
         throw new MWException("PCRE needs to be compiled with --enable-unicode-properties in order for MediaWiki to function");
     }
     $s = array_shift($bits);
     $i = 0;
     while ($i < count($bits)) {
         $url = $bits[$i++];
         $i++;
         // protocol
         $text = $bits[$i++];
         $trail = $bits[$i++];
         # The characters '<' and '>' (which were escaped by
         # removeHTMLtags()) should not be included in
         # URLs, per RFC 2396.
         $m2 = array();
         if (preg_match('/&(lt|gt);/', $url, $m2, PREG_OFFSET_CAPTURE)) {
             $text = substr($url, $m2[0][1]) . ' ' . $text;
             $url = substr($url, 0, $m2[0][1]);
         }
         # If the link text is an image URL, replace it with an <img> tag
         # This happened by accident in the original parser, but some people used it extensively
         $img = $this->maybeMakeExternalImage($text);
         if ($img !== false) {
             $text = $img;
         }
         $dtrail = '';
         # Set linktype for CSS - if URL==text, link is essentially free
         $linktype = $text === $url ? 'free' : 'text';
         # No link text, e.g. [http://domain.tld/some.link]
         if ($text == '') {
             # Autonumber
             $langObj = $this->getTargetLanguage();
             $text = '[' . $langObj->formatNum(++$this->mAutonumber) . ']';
             $linktype = 'autonumber';
         } else {
             # Have link text, e.g. [http://domain.tld/some.link text]s
             # Check for trail
             list($dtrail, $trail) = Linker::splitTrail($trail);
         }
         $text = $this->getConverterLanguage()->markNoConversion($text);
         $url = Sanitizer::cleanUrl($url);
         # Use the encoded URL
         # This means that users can paste URLs directly into the text
         # Funny characters like ö aren't valid in URLs anyway
         # This was changed in August 2004
         $s .= Linker::makeExternalLink($url, $text, false, $linktype, $this->getExternalLinkAttribs($url)) . $dtrail . $trail;
         # Register link in the output object.
         # Replace unnecessary URL escape codes with the referenced character
         # This prevents spammers from hiding links from the filters
         $pasteurized = self::replaceUnusualEscapes($url);
         $this->mOutput->addExternalLink($pasteurized);
     }
     wfProfileOut(__METHOD__);
     return $s;
 }
Ejemplo n.º 4
0
 /**
  * Replace anything that looks like a URL with a link
  * @private
  */
 function replaceFreeExternalLinks($text)
 {
     global $wgContLang;
     $fname = 'Parser::replaceFreeExternalLinks';
     wfProfileIn($fname);
     $bits = preg_split('/(\\b(?:' . wfUrlProtocols() . '))/S', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
     $s = array_shift($bits);
     $i = 0;
     $sk = $this->mOptions->getSkin();
     while ($i < count($bits)) {
         $protocol = $bits[$i++];
         $remainder = $bits[$i++];
         $m = array();
         if (preg_match('/^(' . self::EXT_LINK_URL_CLASS . '+)(.*)$/s', $remainder, $m)) {
             # Found some characters after the protocol that look promising
             $url = $protocol . $m[1];
             $trail = $m[2];
             # special case: handle urls as url args:
             # http://www.example.com/foo?=http://www.example.com/bar
             if (strlen($trail) == 0 && isset($bits[$i]) && preg_match('/^' . wfUrlProtocols() . '$/S', $bits[$i]) && preg_match('/^(' . self::EXT_LINK_URL_CLASS . '+)(.*)$/s', $bits[$i + 1], $m)) {
                 # add protocol, arg
                 $url .= $bits[$i] . $m[1];
                 # protocol, url as arg to previous link
                 $i += 2;
                 $trail = $m[2];
             }
             # The characters '<' and '>' (which were escaped by
             # removeHTMLtags()) should not be included in
             # URLs, per RFC 2396.
             $m2 = array();
             if (preg_match('/&(lt|gt);/', $url, $m2, PREG_OFFSET_CAPTURE)) {
                 $trail = substr($url, $m2[0][1]) . $trail;
                 $url = substr($url, 0, $m2[0][1]);
             }
             # Move trailing punctuation to $trail
             $sep = ',;\\.:!?';
             # If there is no left bracket, then consider right brackets fair game too
             if (strpos($url, '(') === false) {
                 $sep .= ')';
             }
             $numSepChars = strspn(strrev($url), $sep);
             if ($numSepChars) {
                 $trail = substr($url, -$numSepChars) . $trail;
                 $url = substr($url, 0, -$numSepChars);
             }
             $url = Sanitizer::cleanUrl($url);
             # Is this an external image?
             $text = $this->maybeMakeExternalImage($url);
             if ($text === false) {
                 # Not an image, make a link
                 $text = $sk->makeExternalLink($url, $wgContLang->markNoConversion($url), true, 'free', $this->mTitle->getNamespace());
                 # Register it in the output object...
                 # Replace unnecessary URL escape codes with their equivalent characters
                 $pasteurized = Parser::replaceUnusualEscapes($url);
                 $this->mOutput->addExternalLink($pasteurized);
             }
             $s .= $text . $trail;
         } else {
             $s .= $protocol . $remainder;
         }
     }
     wfProfileOut($fname);
     return $s;
 }
Ejemplo n.º 5
0
 /**
  * Replace external links (REL)
  *
  * Note: this is all very hackish and the order of execution matters a lot.
  * Make sure to run maintenance/parserTests.php if you change this code.
  *
  * @private
  *
  * @param $text string
  *
  * @return string
  */
 function replaceExternalLinks($text)
 {
     wfProfileIn(__METHOD__);
     $bits = preg_split($this->mExtLinkBracketedRegex, $text, -1, PREG_SPLIT_DELIM_CAPTURE);
     $s = array_shift($bits);
     $i = 0;
     while ($i < count($bits)) {
         $url = $bits[$i++];
         $protocol = $bits[$i++];
         $text = $bits[$i++];
         $trail = $bits[$i++];
         # The characters '<' and '>' (which were escaped by
         # removeHTMLtags()) should not be included in
         # URLs, per RFC 2396.
         $m2 = array();
         if (preg_match('/&(lt|gt);/', $url, $m2, PREG_OFFSET_CAPTURE)) {
             $text = substr($url, $m2[0][1]) . ' ' . $text;
             $url = substr($url, 0, $m2[0][1]);
         }
         # If the link text is an image URL, replace it with an <img> tag
         # This happened by accident in the original parser, but some people used it extensively
         $img = $this->maybeMakeExternalImage($text);
         if ($img !== false) {
             $text = $img;
         }
         $dtrail = '';
         # Set linktype for CSS - if URL==text, link is essentially free
         $linktype = $text === $url ? 'free' : 'text';
         # RTE (Rich Text Editor) - begin
         # @author: Inez Korczyński
         global $wgRTEParserEnabled;
         if (!empty($wgRTEParserEnabled)) {
             $RTE_wikitextIdx = RTEMarker::getDataIdx(RTEMarker::EXTERNAL_WIKITEXT, $trail);
             $wasblank = $text == '';
         }
         # RTE - end
         # No link text, e.g. [http://domain.tld/some.link]
         if ($text == '') {
             # Autonumber
             $langObj = $this->getTargetLanguage();
             $text = '[' . $langObj->formatNum(++$this->mAutonumber) . ']';
             $linktype = 'autonumber';
         } else {
             # Have link text, e.g. [http://domain.tld/some.link text]s
             # Check for trail
             list($dtrail, $trail) = Linker::splitTrail($trail);
         }
         $text = $this->getConverterLanguage()->markNoConversion($text);
         $url = Sanitizer::cleanUrl($url);
         # Use the encoded URL
         # This means that users can paste URLs directly into the text
         # Funny characters like ö aren't valid in URLs anyway
         # This was changed in August 2004
         # RTE (Rich Text Editor) - begin
         # @author: Inez Korczyński
         if (!empty($wgRTEParserEnabled)) {
             $text = RTEMarker::generate(RTEMarker::EXTERNAL_DATA, RTEData::put('data', array('type' => 'external', 'wikitextIdx' => $RTE_wikitextIdx, 'text' => $text, 'link' => $url, 'linktype' => $linktype, 'wasblank' => $wasblank))) . $text;
         }
         # RTE - end
         $s .= Linker::makeExternalLink($url, $text, false, $linktype, $this->getExternalLinkAttribs($url)) . $dtrail . $trail;
         # Register link in the output object.
         # Replace unnecessary URL escape codes with the referenced character
         # This prevents spammers from hiding links from the filters
         $pasteurized = self::replaceUnusualEscapes($url);
         $this->mOutput->addExternalLink($pasteurized);
     }
     wfProfileOut(__METHOD__);
     return $s;
 }
Ejemplo n.º 6
0
 /**
  * Replace external links (REL)
  *
  * Note: this is all very hackish and the order of execution matters a lot.
  * Make sure to run maintenance/parserTests.php if you change this code.
  *
  * @private
  */
 function replaceExternalLinks($text)
 {
     global $wgContLang;
     wfProfileIn(__METHOD__);
     $sk = $this->mOptions->getSkin();
     $bits = preg_split($this->mExtLinkBracketedRegex, $text, -1, PREG_SPLIT_DELIM_CAPTURE);
     $s = array_shift($bits);
     $i = 0;
     while ($i < count($bits)) {
         $url = $bits[$i++];
         $protocol = $bits[$i++];
         $text = $bits[$i++];
         $trail = $bits[$i++];
         # The characters '<' and '>' (which were escaped by
         # removeHTMLtags()) should not be included in
         # URLs, per RFC 2396.
         $m2 = array();
         if (preg_match('/&(lt|gt);/', $url, $m2, PREG_OFFSET_CAPTURE)) {
             $text = substr($url, $m2[0][1]) . ' ' . $text;
             $url = substr($url, 0, $m2[0][1]);
         }
         # If the link text is an image URL, replace it with an <img> tag
         # This happened by accident in the original parser, but some people used it extensively
         $img = $this->maybeMakeExternalImage($text);
         if ($img !== false) {
             $text = $img;
         }
         $dtrail = '';
         # Set linktype for CSS - if URL==text, link is essentially free
         $linktype = $text === $url ? 'free' : 'text';
         # No link text, e.g. [http://domain.tld/some.link]
         if ($text == '') {
             # Autonumber if allowed. See bug #5918
             if (strpos(wfUrlProtocols(), substr($protocol, 0, strpos($protocol, ':'))) !== false) {
                 $langObj = $this->getFunctionLang();
                 $text = '[' . $langObj->formatNum(++$this->mAutonumber) . ']';
                 $linktype = 'autonumber';
             } else {
                 # Otherwise just use the URL
                 $text = htmlspecialchars($url);
                 $linktype = 'free';
             }
         } else {
             # Have link text, e.g. [http://domain.tld/some.link text]s
             # Check for trail
             list($dtrail, $trail) = Linker::splitTrail($trail);
         }
         $text = $wgContLang->markNoConversion($text);
         $url = Sanitizer::cleanUrl($url);
         if ($this->mOptions->mExternalLinkTarget) {
             $attribs = array('target' => $this->mOptions->mExternalLinkTarget);
         } else {
             $attribs = array();
         }
         # Use the encoded URL
         # This means that users can paste URLs directly into the text
         # Funny characters like &ouml; aren't valid in URLs anyway
         # This was changed in August 2004
         $s .= $sk->makeExternalLink($url, $text, false, $linktype, $this->getExternalLinkAttribs()) . $dtrail . $trail;
         # Register link in the output object.
         # Replace unnecessary URL escape codes with the referenced character
         # This prevents spammers from hiding links from the filters
         $pasteurized = self::replaceUnusualEscapes($url);
         $this->mOutput->addExternalLink($pasteurized);
     }
     wfProfileOut(__METHOD__);
     return $s;
 }
</th>
		</tr>
	<?php 
    foreach ($flagTypes as $flagTypeId => $flag) {
        ?>
		<?php 
        $title = Title::newFromText($flag['flag_view'], NS_TEMPLATE);
        ?>
		<tr class="flags-special-list-item">
			<td class="flags-special-list-item-name"><?php 
        echo $flag['flag_name'];
        ?>
</td>
			<td class="flags-special-list-item-template">
				<a class="flags-special-list-item-template-link" href="<?php 
        echo Sanitizer::cleanUrl($title->getFullURL());
        ?>
" target="_blank">
					<?php 
        echo $flag['flag_view'];
        ?>
				</a>
			</td>
			<td class="flags-special-list-item-params">
				<?php 
        $paramsNames = json_decode($flag['flag_params_names'], true);
        if (is_array($paramsNames)) {
            ?>
					<?php 
            foreach ($paramsNames as $name => $description) {
                ?>