(bug 15466) Added action=purge to the API. Modified patch by ^demon
authorRoan Kattouw <catrope@users.mediawiki.org>
Thu, 4 Sep 2008 21:53:43 +0000 (21:53 +0000)
committerRoan Kattouw <catrope@users.mediawiki.org>
Thu, 4 Sep 2008 21:53:43 +0000 (21:53 +0000)
RELEASE-NOTES
includes/AutoLoader.php
includes/api/ApiBase.php
includes/api/ApiMain.php
includes/api/ApiPurge.php [new file with mode: 0644]

index aa1a158..34cf164 100644 (file)
@@ -214,6 +214,7 @@ it from source control: http://www.mediawiki.org/wiki/Download_from_SVN
   return just "Unknown error"
 * (bug 15448) YAML output returns empty values instead of 0
 * (bug 15445) Added action=patrol
+* (bug 15466) Added action=purge
 
 === Languages updated in 1.14 ===
 
index 0ca2c94..d134004 100644 (file)
@@ -240,6 +240,7 @@ $wgAutoloadLocalClasses = array(
        'ApiParse' => 'includes/api/ApiParse.php',
        'ApiPatrol' => 'includes/api/ApiPatrol.php',
        'ApiProtect' => 'includes/api/ApiProtect.php',
+       'ApiPurge' => 'includes/api/ApiPurge.php',
        'ApiQuery' => 'includes/api/ApiQuery.php',
        'ApiQueryAllCategories' => 'includes/api/ApiQueryAllCategories.php',
        'ApiQueryAllimages' => 'includes/api/ApiQueryAllimages.php',
index 387b2b5..144f61f 100644 (file)
@@ -680,6 +680,7 @@ abstract class ApiBase {
                'createonly-exists' => array('code' => 'articleexists', 'info' => "The article you tried to create has been created already"),
                'nocreate-missing' => array('code' => 'missingtitle', 'info' => "The article you tried to edit doesn't exist"),
                'nosuchrcid' => array('code' => 'nosuchrcid', 'info' => "There is no change with rcid ``$1''"),
+               'cantpurge' => array('code' => 'cantpurge', 'info' => "Only users with the 'purge' right can purge pages via the API"),
 
                // ApiEditPage messages
                'noimageredirect-anon' => array('code' => 'noimageredirect-anon', 'info' => "Anonymous users can't create image redirects"),
index ef05326..4c41209 100644 (file)
@@ -65,6 +65,7 @@ class ApiMain extends ApiBase {
                'feedwatchlist' => 'ApiFeedWatchlist',
                'help' => 'ApiHelp',
                'paraminfo' => 'ApiParamInfo',
+               'purge' => 'ApiPurge',
        );
 
        private static $WriteModules = array (
diff --git a/includes/api/ApiPurge.php b/includes/api/ApiPurge.php
new file mode 100644 (file)
index 0000000..96df1ad
--- /dev/null
@@ -0,0 +1,102 @@
+<?php
+
+/*
+ * Created on Sep 2, 2008
+ *
+ * API for MediaWiki 1.14+
+ *
+ * Copyright (C) 2008 Chad Horohoe
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+if (!defined('MEDIAWIKI')) {
+       require_once ('ApiBase.php');
+}
+
+class ApiPurge extends ApiBase {
+
+       public function __construct($main, $action) {
+               parent :: __construct($main, $action);
+       }
+
+       /**
+        * Purges the cache of a page
+        */
+       public function execute() {
+               global $wgUser;
+               $params = $this->extractRequestParams();
+               if(!$wgUser->isAllowed('purge'))
+                       $this->dieUsageMsg(array('cantpurge'));
+               if(!isset($params['titles']))
+                       $this->dieUsageMsg(array('missingparam', 'titles'));
+               $result = array();
+               foreach($params['titles'] as $t) {
+                       $r = array();
+                       $title = Title::newFromText($t);
+                       if(!$title instanceof Title)
+                       {
+                               $r['title'] = $t;
+                               $r['invalid'] = '';
+                               $result[] = $r;
+                               continue;
+                       }
+                       ApiQueryBase::addTitleInfo($r, $title);
+                       if(!$title->exists())
+                       {
+                               $r['missing'] = '';
+                               $result[] = $r;
+                               continue;
+                       }
+                       $article = new Article($title);
+                       $article->doPurge(); // Directly purge and skip the UI part of purge().
+                       $r['purged'] = '';
+                       $result[] = $r;
+               }
+               $this->getResult()->setIndexedTagName($result, 'page');
+               $this->getResult()->addValue(null, $this->getModuleName(), $result);
+       }
+
+       public function getAllowedParams() {
+               return array (
+                       'titles' => array(
+                               ApiBase :: PARAM_ISMULTI => true
+                       )
+               );
+       }
+
+       public function getParamDescription() {
+               return array (
+                       'titles' => 'A list of titles',
+               );
+       }
+
+       public function getDescription() {
+               return array (
+                       'Purge the cache for the given titles.'
+               );
+       }
+
+       protected function getExamples() {
+               return array(
+                       'api.php?action=purge&titles=Main_Page|API'
+               );
+       }
+
+       public function getVersion() {
+               return __CLASS__ . ': $Id$';
+       }
+}