Add noratelimit right to list of core rights, was missing.
[lhc/web/wiklou.git] / includes / api / ApiQueryRecentChanges.php
index fb40724..ae024ed 100644 (file)
@@ -32,7 +32,7 @@ if (!defined('MEDIAWIKI')) {
  * A query action to enumerate the recent changes that were done to the wiki.
  * Various filters are supported.
  *
- * @addtogroup API
+ * @ingroup API
  */
 class ApiQueryRecentChanges extends ApiQueryBase {
 
@@ -55,12 +55,13 @@ class ApiQueryRecentChanges extends ApiQueryBase {
                extract($this->extractRequestParams());
 
                /* Build our basic query. Namely, something along the lines of:
-                * SELECT * from recentchanges WHERE rc_timestamp > $start
+                * SELECT * FROM recentchanges WHERE rc_timestamp > $start
                 *              AND rc_timestamp < $end AND rc_namespace = $namespace
                 *              AND rc_deleted = '0'
                 */
                $db = $this->getDB();
-               $rc = $db->tableName('recentchanges');
+               $this->addTables('recentchanges');
+               $this->addOption('USE INDEX', array('recentchanges' => 'rc_timestamp'));
                $this->addWhereRange('rc_timestamp', $dir, $start, $end);
                $this->addWhereFld('rc_namespace', $namespace);
                $this->addWhereFld('rc_deleted', 0);
@@ -94,10 +95,16 @@ class ApiQueryRecentChanges extends ApiQueryBase {
                        if ((isset ($show['minor']) && isset ($show['!minor']))
                                        || (isset ($show['bot']) && isset ($show['!bot']))
                                        || (isset ($show['anon']) && isset ($show['!anon']))
-                                       || (isset ($show['redirect']) && isset ($show['!redirect']))) {
+                                       || (isset ($show['redirect']) && isset ($show['!redirect']))
+                                       || (isset ($show['patrolled']) && isset ($show['!patrolled']))) {
 
                                $this->dieUsage("Incorrect parameter - mutually exclusive values may not be supplied", 'show');
                        }
+                       
+                       // Check permissions
+                       global $wgUser;
+                       if((isset($show['patrolled']) || isset($show['!patrolled'])) && !$wgUser->isAllowed('patrol'))
+                               $this->dieUsage("You need the patrol right to request the patrolled flag", 'permissiondenied');
 
                        /* Add additional conditions to query depending upon parameters. */
                        $this->addWhereIf('rc_minor = 0', isset ($show['!minor']));
@@ -106,6 +113,8 @@ class ApiQueryRecentChanges extends ApiQueryBase {
                        $this->addWhereIf('rc_bot != 0', isset ($show['bot']));
                        $this->addWhereIf('rc_user = 0', isset ($show['anon']));
                        $this->addWhereIf('rc_user != 0', isset ($show['!anon']));
+                       $this->addWhereIf('rc_patrolled = 0', isset($show['!patrolled']));
+                       $this->addWhereIf('rc_patrolled != 0', isset($show['patrolled']));
                        $this->addWhereIf('page_is_redirect = 1', isset ($show['redirect']));
                        // Don't throw log entries out the window here
                        $this->addWhereIf('page_is_redirect = 0 OR page_is_redirect IS NULL', isset ($show['!redirect']));
@@ -156,14 +165,11 @@ class ApiQueryRecentChanges extends ApiQueryBase {
                        $this->addFieldsIf('rc_patrolled', $this->fld_patrolled);
                        if($this->fld_redirect || isset($show['redirect']) || isset($show['!redirect']))
                        {
-                               $page = $db->tableName('page');
-                               $tables = "$page RIGHT JOIN $rc FORCE INDEX(rc_timestamp) ON page_namespace=rc_namespace AND page_title=rc_title";
+                               $this->addTables('page');
+                               $this->addJoinConds(array('page' => array('LEFT JOIN', array('rc_namespace=page_namespace', 'rc_title=page_title'))));
                                $this->addFields('page_is_redirect');
                        }
                }
-               if(!isset($tables))
-                       $tables = "$rc FORCE INDEX(rc_timestamp)";
-               $this->addTables($tables);
                /* Specify the limit for our query. It's $limit+1 because we (possibly) need to
                 * generate a "continue" parameter, to allow paging. */
                $this->addOption('LIMIT', $limit +1);
@@ -352,7 +358,9 @@ class ApiQueryRecentChanges extends ApiQueryBase {
                                        'anon',
                                        '!anon',
                                        'redirect',
-                                       '!redirect'
+                                       '!redirect',
+                                       'patrolled',
+                                       '!patrolled'
                                )
                        ),
                        'limit' => array (