Adding a new hook to allow modification of Special:Random query
authorKaldari <rkaldari@wikimedia.org>
Thu, 13 Aug 2015 02:27:20 +0000 (19:27 -0700)
committerKaldari <rkaldari@wikimedia.org>
Thu, 13 Aug 2015 02:36:06 +0000 (19:36 -0700)
See: Ia84c54dcdadf54e9475c1dc7d0ec7c2c48afeaae
Bug: T9937
Change-Id: I91cd231d1cbf610f20134fd0271af46842a9a17d

RELEASE-NOTES-1.26
includes/specials/SpecialRandompage.php

index 986ebc3..383c682 100644 (file)
@@ -55,6 +55,8 @@ production.
   the store type from $wgObjectCaches. The default is the local database.
 * Interface message overrides in the MediaWiki namespace will now be cached in
   memcached and APC (if available), rather than memcached and local files.
+* Added a new hook, 'RandomPageQuery', to allow modification of the query used
+  by Special:Random to select random pages.
 * $wgTransactionalTimeLimit was added, which controls the request time limit
   for potentially slow POST requests that need to be as atomic as possible.
 
index 73a88b9..9f7ef66 100644 (file)
@@ -135,20 +135,26 @@ class RandomPage extends SpecialPage {
 
        protected function getQueryInfo( $randstr ) {
                $redirect = $this->isRedirect() ? 1 : 0;
+               $tables = array( 'page' );
+               $conds = array_merge( array(
+                       'page_namespace' => $this->namespaces,
+                       'page_is_redirect' => $redirect,
+                       'page_random >= ' . $randstr
+               ), $this->extra );
+               $joinConds = array();
+
+               // Allow extensions to modify the query
+               Hooks::run( 'RandomPageQuery', array( &$tables, &$conds, &$joinConds ) );
 
                return array(
-                       'tables' => array( 'page' ),
+                       'tables' => $tables,
                        'fields' => array( 'page_title', 'page_namespace' ),
-                       'conds' => array_merge( array(
-                               'page_namespace' => $this->namespaces,
-                               'page_is_redirect' => $redirect,
-                               'page_random >= ' . $randstr
-                       ), $this->extra ),
+                       'conds' => $conds,
                        'options' => array(
                                'ORDER BY' => 'page_random',
                                'LIMIT' => 1,
                        ),
-                       'join_conds' => array()
+                       'join_conds' => $joinConds
                );
        }