From 598dbc56de11de01a4dff1cb8562fba4fbe9f176 Mon Sep 17 00:00:00 2001 From: Jackmcbarn Date: Sat, 24 May 2014 19:21:33 -0400 Subject: [PATCH] Allow filtering log entries by namespace (API) Add parameter lenamespace to the API, allowing filtering of log entries by namespace. Change-Id: I53c4c6411e0b9e6383969afced0e4c193f1b64a1 --- RELEASE-NOTES-1.24 | 4 ++++ includes/api/ApiQueryLogEvents.php | 13 +++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/RELEASE-NOTES-1.24 b/RELEASE-NOTES-1.24 index f83ed469c3..18dd7f769f 100644 --- a/RELEASE-NOTES-1.24 +++ b/RELEASE-NOTES-1.24 @@ -71,6 +71,10 @@ production. a particular interwiki map entry. * ApiQueryLogEvents now provides logpage, which is the page ID from the logging table, if ids are requested and the user has the permissions. +* action=logevents will now return an error if both letitle and leprefix are + specified. +* action=logevents has a new parameter, lenamespace, to allow filtering by + namespace. === Languages updated in 1.24 === diff --git a/includes/api/ApiQueryLogEvents.php b/includes/api/ApiQueryLogEvents.php index 0977439752..2d9d71026f 100644 --- a/includes/api/ApiQueryLogEvents.php +++ b/includes/api/ApiQueryLogEvents.php @@ -43,6 +43,7 @@ class ApiQueryLogEvents extends ApiQueryBase { public function execute() { $params = $this->extractRequestParams(); $db = $this->getDB(); + $this->requireMaxOneParameter( $params, 'title', 'prefix', 'namespace' ); $prop = array_flip( $params['prop'] ); @@ -179,6 +180,10 @@ class ApiQueryLogEvents extends ApiQueryBase { $this->addWhereFld( 'log_title', $titleObj->getDBkey() ); } + if ( $params['namespace'] !== null ) { + $this->addWhereFld( 'log_namespace', $params['namespace'] ); + } + $prefix = $params['prefix']; if ( !is_null( $prefix ) ) { @@ -196,7 +201,7 @@ class ApiQueryLogEvents extends ApiQueryBase { } // Paranoia: avoid brute force searches (bug 17342) - if ( !is_null( $title ) || !is_null( $user ) ) { + if ( $params['namespace'] !== null || !is_null( $title ) || !is_null( $user ) ) { if ( !$this->getUser()->isAllowed( 'deletedhistory' ) ) { $titleBits = LogPage::DELETED_ACTION; $userBits = LogPage::DELETED_USER; @@ -207,7 +212,7 @@ class ApiQueryLogEvents extends ApiQueryBase { $titleBits = 0; $userBits = 0; } - if ( !is_null( $title ) && $titleBits ) { + if ( ( $params['namespace'] !== null || !is_null( $title ) ) && $titleBits ) { $this->addWhere( $db->bitAnd( 'log_deleted', $titleBits ) . " != $titleBits" ); } if ( !is_null( $user ) && $userBits ) { @@ -510,6 +515,9 @@ class ApiQueryLogEvents extends ApiQueryBase { ), 'user' => null, 'title' => null, + 'namespace' => array( + ApiBase::PARAM_TYPE => 'namespace' + ), 'prefix' => null, 'tag' => null, 'limit' => array( @@ -550,6 +558,7 @@ class ApiQueryLogEvents extends ApiQueryBase { 'dir' => $this->getDirectionDescription( $p ), 'user' => 'Filter entries to those made by the given user', 'title' => 'Filter entries to those related to a page', + 'namespace' => 'Filter entries to those in the given namespace', 'prefix' => 'Filter entries that start with this prefix. Disabled in Miser Mode', 'limit' => 'How many total event entries to return', 'tag' => 'Only list event entries tagged with this tag', -- 2.20.1