Merge "Let Html::element do the HTML encoding"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Wed, 28 Aug 2019 06:57:34 +0000 (06:57 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 28 Aug 2019 06:57:34 +0000 (06:57 +0000)
1  2 
includes/Linker.php
tests/parser/parserTests.txt

diff --combined includes/Linker.php
@@@ -688,35 -688,37 +688,37 @@@ class Linker 
                if ( $label == '' ) {
                        $label = $title->getPrefixedText();
                }
-               $encLabel = htmlspecialchars( $label );
                $currentExists = $time
                        && MediaWikiServices::getInstance()->getRepoGroup()->findFile( $title ) !== false;
  
                if ( ( $wgUploadMissingFileUrl || $wgUploadNavigationUrl || $wgEnableUploads )
                        && !$currentExists
                ) {
-                       $redir = RepoGroup::singleton()->getLocalRepo()->checkRedirect( $title );
-                       if ( $redir ) {
-                               // We already know it's a redirect, so mark it
-                               // accordingly
+                       if ( RepoGroup::singleton()->getLocalRepo()->checkRedirect( $title ) ) {
+                               // We already know it's a redirect, so mark it accordingly
                                return self::link(
                                        $title,
-                                       $encLabel,
+                                       htmlspecialchars( $label ),
                                        [ 'class' => 'mw-redirect' ],
                                        wfCgiToArray( $query ),
                                        [ 'known', 'noclasses' ]
                                );
                        }
  
-                       $href = self::getUploadUrl( $title, $query );
-                       return '<a href="' . htmlspecialchars( $href ) . '" class="new" title="' .
-                               htmlspecialchars( $title->getPrefixedText(), ENT_QUOTES ) . '">' .
-                               $encLabel . '</a>';
+                       return Html::element( 'a', [
+                                       'href' => self::getUploadUrl( $title, $query ),
+                                       'class' => 'new',
+                                       'title' => $title->getPrefixedText()
+                               ], $label );
                }
  
-               return self::link( $title, $encLabel, [], wfCgiToArray( $query ), [ 'known', 'noclasses' ] );
+               return self::link(
+                       $title,
+                       htmlspecialchars( $label ),
+                       [],
+                       wfCgiToArray( $query ),
+                       [ 'known', 'noclasses' ]
+               );
        }
  
        /**
  
                        $items[] = self::link( $contribsPage, wfMessage( 'contribslink' )->escaped(), $attribs );
                }
 -              if ( $blockable && $wgUser->isAllowed( 'block' ) ) {
 +              $userCanBlock = MediaWikiServices::getInstance()->getPermissionManager()
 +                      ->userHasRight( $wgUser, 'block' );
 +              if ( $blockable && $userCanBlock ) {
                        $items[] = self::blockLink( $userId, $userText );
                }
  
                                        $services->getNamespaceInfo()->getCanonicalName( NS_MEDIA ), '/' );
                                $medians .= '|';
                                $medians .= preg_quote(
 -                                      MediaWikiServices::getInstance()->getContentLanguage()->getNsText( NS_MEDIA ),
 +                                      $services->getContentLanguage()->getNsText( NS_MEDIA ),
                                        '/'
                                ) . '):';
  
                                        }
                                        if ( $match[1] !== false && $match[1] !== '' ) {
                                                if ( preg_match(
 -                                                      MediaWikiServices::getInstance()->getContentLanguage()->linkTrail(),
 +                                                      $services->getContentLanguage()->linkTrail(),
                                                        $match[3],
                                                        $submatch
                                                ) ) {
  
                                                Title::newFromText( $linkTarget );
                                                try {
 -                                                      $target = MediaWikiServices::getInstance()->getTitleParser()->
 +                                                      $target = $services->getTitleParser()->
                                                                parseTitle( $linkTarget );
  
                                                        if ( $target->getText() == '' && !$target->isExternal()
         * @return string HTML fragment
         */
        public static function getRevDeleteLink( User $user, Revision $rev, LinkTarget $title ) {
 -              $canHide = $user->isAllowed( 'deleterevision' );
 -              if ( !$canHide && !( $rev->getVisibility() && $user->isAllowed( 'deletedhistory' ) ) ) {
 +              $permissionManager = MediaWikiServices::getInstance()->getPermissionManager();
 +              $canHide = $permissionManager->userHasRight( $user, 'deleterevision' );
 +              $canHideHistory = $permissionManager->userHasRight( $user, 'deletedhistory' );
 +              if ( !$canHide && !( $rev->getVisibility() && $canHideHistory ) ) {
                        return '';
                }
  
@@@ -8073,7 -8073,7 +8073,7 @@@ File containing double quotes and space
  !! wikitext
  [[File:Cool "Gator".png]]
  !! html/php+tidy
- <p><a href="/index.php?title=Special:Upload&amp;wpDestFile=Cool_%22Gator%22.png" class="new" title="File:Cool &quot;Gator&quot;.png">File:Cool &quot;Gator&quot;.png</a>
+ <p><a href="/index.php?title=Special:Upload&amp;wpDestFile=Cool_%22Gator%22.png" class="new" title="File:Cool &quot;Gator&quot;.png">File:Cool "Gator".png</a>
  </p>
  !! html/parsoid
  <p><figure-inline class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"apierror-filedoesnotexist","message":"This image does not exist."}]}'><a href="./Special:FilePath/Cool_%22Gator%22.png"><span resource='./File:Cool_"Gator".png' data-parsoid='{"a":{"resource":"./File:Cool_\"Gator\".png"},"sa":{"resource":"File:Cool \"Gator\".png"}}'>File:Cool "Gator".png</span></a></figure-inline></p>
@@@ -8150,8 -8150,8 +8150,8 @@@ Broken image links with HTML captions (
  [[File:Nonexistent|&lt;]]
  [[File:Nonexistent|a<i>b</i>c]]
  !! html/php
- <p><a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">&lt;script&gt;&lt;/script&gt;</a>
- <a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">&lt;script&gt;&lt;/script&gt;</a>
+ <p><a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">&lt;script>&lt;/script></a>
+ <a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">&lt;script>&lt;/script></a>
  <a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">&lt;</a>
  <a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">abc</a>
  </p>
@@@ -15828,7 -15828,7 +15828,7 @@@ parsoid=wt2html,wt2wt,html2htm
  ###################
  
  !! test
 -Link to image page- image page normally doesn't exists, hence edit link
 +Link to image page- image page normally doesn't exist, hence edit link
  Add test with existing image page
  #<p><a href="/wiki/File:Test" title="Image:Test">Image:test</a>
  !! wikitext