Per comments on r88145: unlink file if it is broken
[lhc/web/wiklou.git] / includes / ChangesList.php
index 7600569..f25678d 100644 (file)
@@ -16,6 +16,10 @@ class RCCacheEntry extends RecentChange {
        var $curlink , $difflink, $lastlink, $usertalklink, $versionlink;
        var $userlink, $timestamp, $watched;
 
+       /**
+        * @param $rc RecentChange
+        * @return RCCacheEntry
+        */
        static function newFromParent( $rc ) {
                $rc2 = new RCCacheEntry;
                $rc2->mAttribs = $rc->mAttribs;
@@ -28,9 +32,16 @@ class RCCacheEntry extends RecentChange {
  * Base class for all changes lists
  */
 class ChangesList {
+
+       /**
+        * @var Skin
+        */
        public $skin;
+
        protected $watchlist = false;
-       
+
+       protected $message;
+
        /**
        * Changeslist contructor
        * @param $skin Skin
@@ -45,7 +56,7 @@ class ChangesList {
         * Some users might want to use an enhanced list format, for instance
         *
         * @param $user User to fetch the list class for
-        * @return ChangesList derivative
+        * @return ChangesList|EnhancedChangesList|OldChangesList derivative
         */
        public static function newFromUser( $user ) {
                global $wgRequest;
@@ -59,7 +70,7 @@ class ChangesList {
                        return $list;
                }
        }
-       
+
        /**
         * Sets the list to use a <li class="watchlist-(namespace)-(page)"> tag
         * @param $value Boolean
@@ -83,7 +94,7 @@ class ChangesList {
 
        /**
         * Returns the appropriate flags for new page, minor change and patrolling
-        * @param $flags Associative array of 'flag' => Bool
+        * @param $flags Array Associative array of 'flag' => Bool
         * @param $nothing String to use for empty space
         * @return String
         */
@@ -103,17 +114,17 @@ class ChangesList {
         * unpatrolled edit.  By default in English it will contain "N", "m", "b",
         * "!" respectively, plus it will have an appropriate title and class.
         *
-        * @param $key String: 'newpage', 'unpatrolled', 'minor', or 'bot'
+        * @param $flag String: 'newpage', 'unpatrolled', 'minor', or 'bot'
         * @return String: Raw HTML
         */
        public static function flag( $flag ) {
                static $messages = null;
                if ( is_null( $messages ) ) {
-                       $messages = array( 
+                       $messages = array(
                                'newpage' => array( 'newpageletter', 'recentchanges-label-newpage' ),
                                'minoredit' => array( 'minoreditletter', 'recentchanges-label-minor' ),
                                'botedit' => array( 'boteditletter', 'recentchanges-label-bot' ),
-                               'unpatrolled' => array( 'unpatrolledletter', 'recentchanges-label-unpatrolled' ), 
+                               'unpatrolled' => array( 'unpatrolledletter', 'recentchanges-label-unpatrolled' ),
                        );
                        foreach( $messages as &$value ) {
                                $value[0] = wfMsgExt( $value[0], 'escapenoentities' );
@@ -147,12 +158,12 @@ class ChangesList {
                $this->rclistOpen = false;
                return '';
        }
-       
+
        /**
         * Show formatted char difference
         * @param $old Integer: bytes
         * @param $new Integer: bytes
-        * @returns String
+        * @return String
         */
        public static function showCharacterDifference( $old, $new ) {
                global $wgRCChangedSizeThreshold, $wgLang, $wgMiserMode;
@@ -163,29 +174,29 @@ class ChangesList {
                if ( !isset($fastCharDiff[$code]) ) {
                        $fastCharDiff[$code] = $wgMiserMode || wfMsgNoTrans( 'rc-change-size' ) === '$1';
                }
-                       
+
                $formatedSize = $wgLang->formatNum($szdiff);
 
                if ( !$fastCharDiff[$code] ) {
                        $formatedSize = wfMsgExt( 'rc-change-size', array( 'parsemag', 'escape' ), $formatedSize );
                }
-                       
+
                if( abs( $szdiff ) > abs( $wgRCChangedSizeThreshold ) ) {
                        $tag = 'strong';
                } else {
-                   $tag = 'span';
+                       $tag = 'span';
                }
                if( $szdiff === 0 ) {
                        return "<$tag class='mw-plusminus-null'>($formatedSize)</$tag>";
                } elseif( $szdiff > 0 ) {
                        return "<$tag class='mw-plusminus-pos'>(+$formatedSize)</$tag>";
-           } else {
+               } else {
                        return "<$tag class='mw-plusminus-neg'>($formatedSize)</$tag>";
                }
        }
 
        /**
-        * Returns text for the end of RC
+        * Returns text for the end of RC
         * @return String
         */
        public function endRecentChangesList() {
@@ -196,6 +207,11 @@ class ChangesList {
                }
        }
 
+       /**
+        * @param $s
+        * @param $rc RecentChange
+        * @return void
+        */
        public function insertMove( &$s, $rc ) {
                # Diff
                $s .= '(' . $this->message['diff'] . ') (';
@@ -253,11 +269,17 @@ class ChangesList {
                ) . ')';
        }
 
+       /**
+        * @param $s
+        * @param $rc RecentChange
+        * @param $unpatrolled
+        * @return void
+        */
        public function insertDiffHist( &$s, &$rc, $unpatrolled ) {
                # Diff link
                if( $rc->mAttribs['rc_type'] == RC_NEW || $rc->mAttribs['rc_type'] == RC_LOG ) {
                        $diffLink = $this->message['diff'];
-               } else if( !self::userCan($rc,Revision::DELETED_TEXT) ) {
+               } elseif( !self::userCan($rc,Revision::DELETED_TEXT) ) {
                        $diffLink = $this->message['diff'];
                } else {
                        $query = array(
@@ -293,6 +315,13 @@ class ChangesList {
                $s .= ') . . ';
        }
 
+       /**
+        * @param $s
+        * @param $rc RecentChange
+        * @param $unpatrolled
+        * @param $watched
+        * @return void
+        */
        public function insertArticleLink( &$s, &$rc, $unpatrolled, $watched ) {
                global $wgContLang;
                # If it's a new article, there is no diff link, but if it hasn't been
@@ -334,23 +363,34 @@ class ChangesList {
                $s .= " $articlelink";
        }
 
+       /**
+        * @param $s
+        * @param $rc RecentChange
+        * @return void
+        */
        public function insertTimestamp( &$s, $rc ) {
                global $wgLang;
-               $s .= $this->message['semicolon-separator'] . 
+               $s .= $this->message['semicolon-separator'] .
                        $wgLang->time( $rc->mAttribs['rc_timestamp'], true, true ) . ' . . ';
        }
 
-       /** Insert links to user page, user talk page and eventually a blocking link */
+       /** Insert links to user page, user talk page and eventually a blocking link
+        *
+        * @param $rc RecentChange
+        */
        public function insertUserRelatedLinks( &$s, &$rc ) {
                if( $this->isDeleted( $rc, Revision::DELETED_USER ) ) {
-                  $s .= ' <span class="history-deleted">' . wfMsgHtml( 'rev-deleted-user' ) . '</span>';
+                       $s .= ' <span class="history-deleted">' . wfMsgHtml( 'rev-deleted-user' ) . '</span>';
                } else {
-                 $s .= $this->skin->userLink( $rc->mAttribs['rc_user'], $rc->mAttribs['rc_user_text'] );
-                 $s .= $this->skin->userToolLinks( $rc->mAttribs['rc_user'], $rc->mAttribs['rc_user_text'] );
+                       $s .= $this->skin->userLink( $rc->mAttribs['rc_user'], $rc->mAttribs['rc_user_text'] );
+                       $s .= $this->skin->userToolLinks( $rc->mAttribs['rc_user'], $rc->mAttribs['rc_user_text'] );
                }
        }
 
-       /** insert a formatted action */
+       /** insert a formatted action
+        *
+        * @param $rc RecentChange
+        */
        public function insertAction( &$s, &$rc ) {
                if( $rc->mAttribs['rc_type'] == RC_LOG ) {
                        if( $this->isDeleted( $rc, LogPage::DELETED_ACTION ) ) {
@@ -362,7 +402,10 @@ class ChangesList {
                }
        }
 
-       /** insert a formatted comment */
+       /** insert a formatted comment
+        *
+        * @param $rc RecentChange
+        */
        public function insertComment( &$s, &$rc ) {
                if( $rc->mAttribs['rc_type'] != RC_MOVE && $rc->mAttribs['rc_type'] != RC_MOVE_OVER_REDIRECT ) {
                        if( $this->isDeleted( $rc, Revision::DELETED_COMMENT ) ) {
@@ -431,8 +474,12 @@ class ChangesList {
                        return '<span class="mw-rc-unwatched">' . $link . '</span>';
                }
        }
-       
-       /** Inserts a rollback link */
+
+       /** Inserts a rollback link
+        *
+        * @param $s
+        * @param $rc RecentChange
+        */
        public function insertRollback( &$s, &$rc ) {
                global $wgUser;
                if( !$rc->mAttribs['rc_new'] && $rc->mAttribs['rc_this_oldid'] && $rc->mAttribs['rc_cur_id'] ) {
@@ -453,10 +500,16 @@ class ChangesList {
                }
        }
 
+       /**
+        * @param $s
+        * @param $rc RecentChange
+        * @param $classes
+        * @return
+        */
        public function insertTags( &$s, &$rc, &$classes ) {
                if ( empty($rc->mAttribs['ts_tags']) )
                        return;
-                       
+
                list($tagSummary, $newClasses) = ChangeTags::formatSummaryRow( $rc->mAttribs['ts_tags'], 'changeslist' );
                $classes = array_merge( $classes, $newClasses );
                $s .= ' ' . $tagSummary;
@@ -474,6 +527,8 @@ class ChangesList {
 class OldChangesList extends ChangesList {
        /**
         * Format a line using the old system (aka without any javascript).
+        *
+        * @param $rc RecentChange
         */
        public function recentChangesLine( &$rc, $watched = false, $linenumber = null ) {
                global $wgLang, $wgRCShowChangedSize, $wgUser;
@@ -505,7 +560,7 @@ class OldChangesList extends ChangesList {
                        $this->insertLog( $s, $logtitle, $rc->mAttribs['rc_log_type'] );
                // Log entries (old format) or log targets, and special pages
                } elseif( $rc->mAttribs['rc_namespace'] == NS_SPECIAL ) {
-                       list( $name, $subpage ) = SpecialPage::resolveAliasWithSubpage( $rc->mAttribs['rc_title'] );
+                       list( $name, $subpage ) = SpecialPageFactory::resolveAlias( $rc->mAttribs['rc_title'] );
                        if( $name == 'Log' ) {
                                $this->insertLog( $s, $rc->getTitle(), $subpage );
                        }
@@ -513,11 +568,11 @@ class OldChangesList extends ChangesList {
                } else {
                        $this->insertDiffHist( $s, $rc, $unpatrolled );
                        # M, N, b and ! (minor, new, bot and unpatrolled)
-                       $s .= $this->recentChangesFlags( 
+                       $s .= $this->recentChangesFlags(
                                array(
                                        'newpage' => $rc->mAttribs['rc_new'],
                                        'minor' => $rc->mAttribs['rc_minor'],
-                                       'unpatrolled' => $unpatrolled, 
+                                       'unpatrolled' => $unpatrolled,
                                        'bot' => $rc->mAttribs['rc_bot']
                                ),
                                ''
@@ -545,17 +600,17 @@ class OldChangesList extends ChangesList {
                $this->insertRollback( $s, $rc );
                # For subclasses
                $this->insertExtra( $s, $rc, $classes );
-               
+
                # How many users watch this page
                if( $rc->numberofWatchingusers > 0 ) {
-                       $s .= ' ' . wfMsgExt( 'number_of_watching_users_RCview', 
+                       $s .= ' ' . wfMsgExt( 'number_of_watching_users_RCview',
                                array( 'parsemag', 'escape' ), $wgLang->formatNum( $rc->numberofWatchingusers ) );
                }
-               
+
                if( $this->watchlist ) {
                        $classes[] = Sanitizer::escapeClass( 'watchlist-'.$rc->mAttribs['rc_namespace'].'-'.$rc->mAttribs['rc_title'] );
                }
-               
+
                wfRunHooks( 'OldChangesListRecentChangesLine', array(&$this, &$s, $rc) );
 
                wfProfileOut( __METHOD__ );
@@ -584,10 +639,15 @@ class EnhancedChangesList extends ChangesList {
        }
        /**
         * Format a line for enhanced recentchange (aka with javascript and block of lines).
+        *
+        * @param $baseRC RecentChange
+        * @param $watched bool
+        *
+        * @return string
         */
        public function recentChangesLine( &$baseRC, $watched = false ) {
                global $wgLang, $wgUser;
-               
+
                wfProfileIn( __METHOD__ );
 
                # Create a specialised object
@@ -608,7 +668,7 @@ class EnhancedChangesList extends ChangesList {
 
                # Should patrol-related stuff be shown?
                if( $wgUser->useRCPatrol() ) {
-                       $rc->unpatrolled = !$rc->mAttribs['rc_patrolled'];
+                       $rc->unpatrolled = !$rc->mAttribs['rc_patrolled'];
                } else {
                        $rc->unpatrolled = false;
                }
@@ -624,14 +684,14 @@ class EnhancedChangesList extends ChangesList {
                                array(), array( 'redirect' => 'no' ) ),
                                $this->skin->linkKnown( $rc->getMovedToTitle() ) );
                // New unpatrolled pages
-               } else if( $rc->unpatrolled && $type == RC_NEW ) {
+               } elseif( $rc->unpatrolled && $type == RC_NEW ) {
                        $clink = $this->skin->linkKnown( $rc->getTitle(), null, array(),
                                array( 'rcid' => $rc->mAttribs['rc_id'] ) );
                // Log entries
-               } else if( $type == RC_LOG ) {
+               } elseif( $type == RC_LOG ) {
                        if( $logType ) {
                                $logtitle = SpecialPage::getTitleFor( 'Log', $logType );
-                               $clink = '(' . $this->skin->linkKnown( $logtitle, 
+                               $clink = '(' . $this->skin->linkKnown( $logtitle,
                                        LogPage::logName( $logType ) ) . ')';
                        } else {
                                $clink = $this->skin->link( $rc->getTitle() );
@@ -639,7 +699,7 @@ class EnhancedChangesList extends ChangesList {
                        $watched = false;
                // Log entries (old format) and special pages
                } elseif( $rc->mAttribs['rc_namespace'] == NS_SPECIAL ) {
-                       list( $specialName, $logtype ) = SpecialPage::resolveAliasWithSubpage( $rc->mAttribs['rc_title'] );
+                       list( $specialName, $logtype ) = SpecialPageFactory::resolveAlias( $rc->mAttribs['rc_title'] );
                        if ( $specialName == 'Log' ) {
                                # Log updates, etc
                                $logname = LogPage::logName( $logtype );
@@ -680,7 +740,7 @@ class EnhancedChangesList extends ChangesList {
                if( !$showdifflinks ) {
                        $curLink = $this->message['cur'];
                        $diffLink = $this->message['diff'];
-               } else if( in_array( $type, array( RC_NEW, RC_LOG, RC_MOVE, RC_MOVE_OVER_REDIRECT ) ) ) {
+               } elseif( in_array( $type, array( RC_NEW, RC_LOG, RC_MOVE, RC_MOVE_OVER_REDIRECT ) ) ) {
                        if ( $type != RC_NEW ) {
                                $curLink = $this->message['cur'];
                        } else {
@@ -698,7 +758,7 @@ class EnhancedChangesList extends ChangesList {
                # Make "last" link
                if( !$showdifflinks || !$lastOldid ) {
                        $lastLink = $this->message['last'];
-               } else if( in_array( $type, array( RC_LOG, RC_MOVE, RC_MOVE_OVER_REDIRECT ) ) ) {
+               } elseif( in_array( $type, array( RC_LOG, RC_MOVE, RC_MOVE_OVER_REDIRECT ) ) ) {
                        $lastLink = $this->message['last'];
                } else {
                        $lastLink = $this->skin->linkKnown( $rc->getTitle(), $this->message['last'],
@@ -814,7 +874,7 @@ class EnhancedChangesList extends ChangesList {
                        array_push( $users, $text );
                }
 
-               $users = ' <span class="changedby">[' . 
+               $users = ' <span class="changedby">[' .
                        implode( $this->message['semicolon-separator'], $users ) . ']</span>';
 
                # Title for <a> tags
@@ -833,7 +893,7 @@ class EnhancedChangesList extends ChangesList {
                $r .= '<td class="mw-enhanced-rc">' . $this->recentChangesFlags( array(
                        'newpage' => $isnew,
                        'minor' => false,
-                       'unpatrolled' => $unpatrolled, 
+                       'unpatrolled' => $unpatrolled,
                        'bot' => $bot ,
                ) );
 
@@ -843,7 +903,7 @@ class EnhancedChangesList extends ChangesList {
                # Article link
                if( $namehidden ) {
                        $r .= ' <span class="history-deleted">' . wfMsgHtml( 'rev-deleted-event' ) . '</span>';
-               } else if( $allLogs ) {
+               } elseif( $allLogs ) {
                        $r .= $this->maybeWatchedLink( $block[0]->link, $block[0]->watched );
                } else {
                        $this->insertArticleLink( $r, $block[0], $block[0]->unpatrolled, $block[0]->watched );
@@ -864,13 +924,13 @@ class EnhancedChangesList extends ChangesList {
                        $r .= '(';
                        if( !ChangesList::userCan( $rcObj, Revision::DELETED_TEXT ) ) {
                                $r .= $nchanges[$n];
-                       } else if( $isnew ) {
+                       } elseif( $isnew ) {
                                $r .= $nchanges[$n];
                        } else {
                                $params = $queryParams;
                                $params['diff'] = $currentRevision;
                                $params['oldid'] = $oldid;
-                               
+
                                $r .= $this->skin->link(
                                        $block[0]->getTitle(),
                                        $nchanges[$n],
@@ -884,7 +944,7 @@ class EnhancedChangesList extends ChangesList {
                # History
                if( $allLogs ) {
                        // don't show history link for logs
-               } else if( $namehidden || !$block[0]->getTitle()->exists() ) {
+               } elseif( $namehidden || !$block[0]->getTitle()->exists() ) {
                        $r .= $this->message['pipe-separator'] . $this->message['hist'] . ')';
                } else {
                        $params = $queryParams;
@@ -937,7 +997,7 @@ class EnhancedChangesList extends ChangesList {
                        $r .= $this->recentChangesFlags( array(
                                'newpage' => $rcObj->mAttribs['rc_new'],
                                'minor' => $rcObj->mAttribs['rc_minor'],
-                               'unpatrolled' => $rcObj->unpatrolled, 
+                               'unpatrolled' => $rcObj->unpatrolled,
                                'bot' => $rcObj->mAttribs['rc_bot'],
                        ) );
                        $r .= '&#160;</td><td class="mw-enhanced-rc-nested"><span class="mw-enhanced-rc-time">';
@@ -952,7 +1012,7 @@ class EnhancedChangesList extends ChangesList {
                        if( $type == RC_LOG ) {
                                $link = $rcObj->timestamp;
                        # Revision link
-                       } else if( !ChangesList::userCan($rcObj,Revision::DELETED_TEXT) ) {
+                       } elseif( !ChangesList::userCan($rcObj,Revision::DELETED_TEXT) ) {
                                $link = '<span class="history-deleted">'.$rcObj->timestamp.'</span> ';
                        } else {
                                if ( $rcObj->unpatrolled && $type == RC_NEW) {
@@ -1053,6 +1113,8 @@ class EnhancedChangesList extends ChangesList {
 
        /**
         * Enhanced RC ungrouped line.
+        *
+        * @param $rcObj RecentChange
         * @return String: a HTML formated line (generated using $r)
         */
        protected function recentChangesBlockLine( $rcObj ) {
@@ -1080,7 +1142,7 @@ class EnhancedChangesList extends ChangesList {
                        $r .= $this->recentChangesFlags( array(
                                'newpage' => $type == RC_NEW,
                                'mino' => $rcObj->mAttribs['rc_minor'],
-                               'unpatrolled' => $rcObj->unpatrolled, 
+                               'unpatrolled' => $rcObj->unpatrolled,
                                'bot' => $rcObj->mAttribs['rc_bot'],
                        ) );
                }
@@ -1145,6 +1207,8 @@ class EnhancedChangesList extends ChangesList {
        /**
         * If enhanced RC is in use, this function takes the previously cached
         * RC lines, arranges them, and outputs the HTML
+        *
+        * @return string
         */
        protected function recentChangesBlock() {
                if( count ( $this->rc_cache ) == 0 ) {
@@ -1168,7 +1232,7 @@ class EnhancedChangesList extends ChangesList {
        }
 
        /**
-        * Returns text for the end of RC
+        * Returns text for the end of RC
         * If enhanced RC is in use, returns pretty much all the text
         */
        public function endRecentChangesList() {