Stop overwriting $cache in User::getCacheKey()
[lhc/web/wiklou.git] / includes / Linker.php
index 731317e..d1434f8 100644 (file)
@@ -910,10 +910,12 @@ class Linker {
         * @param int $flags Customisation flags (e.g. Linker::TOOL_LINKS_NOBLOCK
         *   and Linker::TOOL_LINKS_EMAIL).
         * @param int|null $edits User edit count (optional, for performance)
+        * @param bool $useParentheses (optional) Wrap comments in parentheses where needed
         * @return string HTML fragment
         */
        public static function userToolLinks(
-               $userId, $userText, $redContribsWhenNoEdits = false, $flags = 0, $edits = null
+               $userId, $userText, $redContribsWhenNoEdits = false, $flags = 0, $edits = null,
+               $useParentheses = true
        ) {
                global $wgUser, $wgDisableAnonTalk, $wgLang;
                $talkable = !( $wgDisableAnonTalk && $userId == 0 );
@@ -956,14 +958,23 @@ class Linker {
 
                Hooks::run( 'UserToolLinksEdit', [ $userId, $userText, &$items ] );
 
-               if ( $items ) {
+               if ( !$items ) {
+                       return '';
+               }
+
+               if ( $useParentheses ) {
                        return wfMessage( 'word-separator' )->escaped()
                                . '<span class="mw-usertoollinks">'
                                . wfMessage( 'parentheses' )->rawParams( $wgLang->pipeList( $items ) )->escaped()
                                . '</span>';
-               } else {
-                       return '';
                }
+
+               $tools = [];
+               foreach ( $items as $tool ) {
+                       $tools[] = Html::rawElement( 'span', [], $tool );
+               }
+               return ' <span class="mw-usertoollinks mw-changeslist-links">' .
+                       implode( ' ', $tools ) . '</span>';
        }
 
        /**
@@ -1452,16 +1463,15 @@ class Linker {
                // compatibility, acc. to brion -ævar
                if ( $comment == '' || $comment == '*' ) {
                        return '';
+               }
+               $formatted = self::formatComment( $comment, $title, $local, $wikiId );
+               if ( $useParentheses ) {
+                       $formatted = wfMessage( 'parentheses' )->rawParams( $formatted )->escaped();
+                       $classNames = 'comment';
                } else {
-                       $formatted = self::formatComment( $comment, $title, $local, $wikiId );
-                       if ( $useParentheses ) {
-                               $formatted = wfMessage( 'parentheses' )->rawParams( $formatted )->escaped();
-                               $classNames = 'comment';
-                       } else {
-                               $classNames = 'comment comment--without-parentheses';
-                       }
-                       return " <span class=\"$classNames\">$formatted</span>";
+                       $classNames = 'comment comment--without-parentheses';
                }
+               return " <span class=\"$classNames\">$formatted</span>";
        }
 
        /**
@@ -1575,11 +1585,18 @@ class Linker {
         *
         * @since 1.16.3
         * @param string $toc Html of the Table Of Contents
-        * @param string|Language|bool $lang Language for the toc title, defaults to user language
+        * @param string|Language|bool|null $lang Language for the toc title, defaults to user language.
+        *  The types string and bool are deprecated.
         * @return string Full html of the TOC
         */
-       public static function tocList( $toc, $lang = false ) {
-               $lang = wfGetLangObj( $lang );
+       public static function tocList( $toc, $lang = null ) {
+               global $wgLang;
+               $lang = $lang ?? $wgLang;
+               if ( !is_object( $lang ) ) {
+                       wfDeprecated( __METHOD__ . ' with type other than Language for $lang', '1.33' );
+                       $lang = wfGetLangObj( $lang );
+               }
+
                $title = wfMessage( 'toc' )->inLanguage( $lang )->escaped();
 
                return '<div id="toc" class="toc">'
@@ -1611,10 +1628,11 @@ class Linker {
         *
         * @since 1.16.3. $lang added in 1.17
         * @param array $tree Return value of ParserOutput::getSections()
-        * @param string|Language|bool $lang Language for the toc title, defaults to user language
+        * @param string|Language|bool|null $lang Language for the toc title, defaults to user language.
+        *  The types string and bool are deprecated.
         * @return string HTML fragment
         */
-       public static function generateTOC( $tree, $lang = false ) {
+       public static function generateTOC( $tree, $lang = null ) {
                $toc = '';
                $lastLevel = 0;
                foreach ( $tree as $section ) {
@@ -2070,27 +2088,26 @@ class Linker {
 
                if ( !$rev->userCan( Revision::DELETED_RESTRICTED, $user ) ) {
                        return self::revDeleteLinkDisabled( $canHide ); // revision was hidden from sysops
+               }
+               if ( $rev->getId() ) {
+                       // RevDelete links using revision ID are stable across
+                       // page deletion and undeletion; use when possible.
+                       $query = [
+                               'type' => 'revision',
+                               'target' => $title->getPrefixedDBkey(),
+                               'ids' => $rev->getId()
+                       ];
                } else {
-                       if ( $rev->getId() ) {
-                               // RevDelete links using revision ID are stable across
-                               // page deletion and undeletion; use when possible.
-                               $query = [
-                                       'type' => 'revision',
-                                       'target' => $title->getPrefixedDBkey(),
-                                       'ids' => $rev->getId()
-                               ];
-                       } else {
-                               // Older deleted entries didn't save a revision ID.
-                               // We have to refer to these by timestamp, ick!
-                               $query = [
-                                       'type' => 'archive',
-                                       'target' => $title->getPrefixedDBkey(),
-                                       'ids' => $rev->getTimestamp()
-                               ];
-                       }
-                       return self::revDeleteLink( $query,
-                               $rev->isDeleted( Revision::DELETED_RESTRICTED ), $canHide );
+                       // Older deleted entries didn't save a revision ID.
+                       // We have to refer to these by timestamp, ick!
+                       $query = [
+                               'type' => 'archive',
+                               'target' => $title->getPrefixedDBkey(),
+                               'ids' => $rev->getTimestamp()
+                       ];
                }
+               return self::revDeleteLink( $query,
+                       $rev->isDeleted( Revision::DELETED_RESTRICTED ), $canHide );
        }
 
        /**