Allow modification of flags on Recent Changes
authorumherirrender <umherirrender_de.wp@web.de>
Thu, 20 Jun 2013 19:34:07 +0000 (21:34 +0200)
committerBrad Jorsch <bjorsch@wikimedia.org>
Fri, 21 Jun 2013 17:07:39 +0000 (13:07 -0400)
Moved the message map in ChangesList::flag to a new setting named
$wgRecentChangesFlags and used it keys to iterate over the flags
Also allow setting the class to deal with minor vs. minoredit

Also make ChangesList::recentChangesFlags public to be used from
extensions, when they will build its own line

Changed one list of placeholders to use recentChangesFlags to have the
correct number of spaces there

Change-Id: If69de05c4edec4e84c3e059090b9cb89845e3269

RELEASE-NOTES-1.22
includes/ChangesList.php
includes/DefaultSettings.php

index 33c6351..71f44d4 100644 (file)
@@ -111,6 +111,8 @@ production.
 * Add new hook AbortTalkPageEmailNotification, this will be used to determine
   whether to send the regular talk page email notification
 * (bug 46513) Vector: Add the collapsibleTabs script from the Vector extension.
+* Added $wgRecentChangesFlags for defining new flags for RecentChanges and
+  watchlists.
 
 === Bug fixes in 1.22 ===
 * Disable Special:PasswordReset when $wgEnableEmail is false. Previously one
index 02c02e0..d54e7f0 100644 (file)
@@ -136,9 +136,10 @@ class ChangesList extends ContextSource {
         * @param string $nothing to use for empty space
         * @return String
         */
-       protected function recentChangesFlags( $flags, $nothing = '&#160;' ) {
+       public function recentChangesFlags( $flags, $nothing = '&#160;' ) {
+               global $wgRecentChangesFlags;
                $f = '';
-               foreach ( array( 'newpage', 'minor', 'bot', 'unpatrolled' ) as $flag ) {
+               foreach ( array_keys( $wgRecentChangesFlags ) as $flag ) {
                        $f .= isset( $flags[$flag] ) && $flags[$flag]
                                ? self::flag( $flag )
                                : $nothing;
@@ -152,36 +153,35 @@ class ChangesList extends ContextSource {
         * unpatrolled edit.  By default in English it will contain "N", "m", "b",
         * "!" respectively, plus it will have an appropriate title and class.
         *
-        * @param string $flag 'newpage', 'unpatrolled', 'minor', or 'bot'
+        * @param string $flag One key of $wgRecentChangesFlags
         * @return String: Raw HTML
         */
        public static function flag( $flag ) {
-               static $messages = null;
-               if ( is_null( $messages ) ) {
-                       $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' ),
-                       );
-                       foreach ( $messages as &$value ) {
-                               $value[0] = wfMessage( $value[0] )->escaped();
-                               $value[1] = wfMessage( $value[1] )->escaped();
+               static $flagInfos = null;
+               if ( is_null( $flagInfos ) ) {
+                       global $wgRecentChangesFlags;
+                       $flagInfos = array();
+                       foreach ( $wgRecentChangesFlags as $key => $value ) {
+                               $flagInfos[$key]['letter'] = wfMessage( $value['letter'] )->escaped();
+                               $flagInfos[$key]['title'] = wfMessage( $value['title'] )->escaped();
+                               // Allow customized class name, fall back to flag name
+                               $flagInfos[$key]['class'] = Sanitizer::escapeClass(
+                                       isset( $value['class'] ) ? $value['class'] : $key );
                        }
                }
 
-               # Inconsistent naming, bleh
+               // Inconsistent naming, bleh, kepted for b/c
                $map = array(
-                       'newpage' => 'newpage',
-                       'minor' => 'minoredit',
-                       'bot' => 'botedit',
-                       'unpatrolled' => 'unpatrolled',
-                       'minoredit' => 'minoredit',
-                       'botedit' => 'botedit',
+                       'minoredit' => 'minor',
+                       'botedit' => 'bot',
                );
-               $flag = $map[$flag];
+               if ( isset( $map[$flag] ) ) {
+                       $flag = $map[$flag];
+               }
 
-               return "<abbr class='$flag' title='" . $messages[$flag][1] . "'>" . $messages[$flag][0] . '</abbr>';
+               return "<abbr class='" . $flagInfos[$flag]['class'] . "' title='" . $flagInfos[$flag]['title'] . "'>" .
+                       $flagInfos[$flag]['letter'] .
+                       '</abbr>';
        }
 
        /**
@@ -1198,7 +1198,7 @@ class EnhancedChangesList extends ChangesList {
                $r .= '<td class="mw-enhanced-rc"><span class="mw-enhancedchanges-arrow-space"></span>';
                # Flag and Timestamp
                if ( $type == RC_MOVE || $type == RC_MOVE_OVER_REDIRECT ) {
-                       $r .= '&#160;&#160;&#160;&#160;'; // 4 flags -> 4 spaces
+                       $r .= $this->recentChangesFlags( array() ); // no flags, but need the placeholders
                } else {
                        $r .= $this->recentChangesFlags( array(
                                'newpage' => $type == RC_NEW,
index ecb2664..65f2477 100644 (file)
@@ -5218,6 +5218,26 @@ $wgUseTagFilter = true;
  */
 $wgUnwatchedPageThreshold = false;
 
+/**
+ * Recent changes flag, shown in Recentchanges and watchlist
+ *
+ * Adding a new one:
+ *   $wgRecentChangesFlags['flag'] => array( 'letter-msg', 'tooltip-msg' );
+ * 'class' allows to set a css class different than the flag name
+ *
+ * @since 1.22
+ */
+$wgRecentChangesFlags = array(
+       'newpage' => array( 'letter' => 'newpageletter',
+               'title' => 'recentchanges-label-newpage' ),
+       'minor' => array( 'letter' => 'minoreditletter',
+               'title' => 'recentchanges-label-minor', 'class' => 'minoredit' ),
+       'bot' => array( 'letter' => 'boteditletter',
+               'title' => 'recentchanges-label-bot', 'class' => 'botedit' ),
+       'unpatrolled' => array( 'letter' => 'unpatrolledletter',
+               'title' => 'recentchanges-label-unpatrolled' ),
+);
+
 /** @} */ # end RC/watchlist }
 
 /************************************************************************//**