* Introduce action=parse to API. It deprecates action=render which will be removed...
authorVictor Vasiliev <vasilievvv@users.mediawiki.org>
Sat, 1 Dec 2007 13:37:02 +0000 (13:37 +0000)
committerVictor Vasiliev <vasilievvv@users.mediawiki.org>
Sat, 1 Dec 2007 13:37:02 +0000 (13:37 +0000)
RELEASE-NOTES
includes/AutoLoader.php
includes/api/ApiMain.php
includes/api/ApiParse.php [new file with mode: 0644]

index 768e906..2463b2a 100644 (file)
@@ -310,6 +310,7 @@ Full API documentation is available at http://www.mediawiki.org/wiki/API
 * Make prop=info check for restrictions in the old format too.
 * Add apihighlimits permission, default for sysops and bots
 * Add limit=max to use maximal limit
+* Add action=parse to render parser output. Use it instead of action=render which is deprecated.
 
 === Languages updated in 1.12 ===
 
index afed43d..57bb812 100644 (file)
@@ -316,6 +316,7 @@ function __autoload($className) {
                'ApiMain' => 'includes/api/ApiMain.php',
                'ApiOpenSearch' => 'includes/api/ApiOpenSearch.php',
                'ApiPageSet' => 'includes/api/ApiPageSet.php',
+               'ApiParse' => 'includes/api/ApiParse.php',
                'ApiQuery' => 'includes/api/ApiQuery.php',
                'ApiQueryAllpages' => 'includes/api/ApiQueryAllpages.php',
                'ApiQueryAllLinks' => 'includes/api/ApiQueryAllLinks.php',
index fbda428..6d81183 100644 (file)
@@ -56,6 +56,7 @@ class ApiMain extends ApiBase {
                'query' => 'ApiQuery',
                'expandtemplates' => 'ApiExpandTemplates',
                'render' => 'ApiRender',
+               'parse' => 'ApiParse',
                'opensearch' => 'ApiOpenSearch',
                'feedwatchlist' => 'ApiFeedWatchlist',
                'help' => 'ApiHelp',
diff --git a/includes/api/ApiParse.php b/includes/api/ApiParse.php
new file mode 100644 (file)
index 0000000..5f2a0c6
--- /dev/null
@@ -0,0 +1,152 @@
+<?php
+
+/*
+ * Created on Dec 01, 2007
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2007 Yuri Astrakhan <Firstname><Lastname>@gmail.com
+ *
+ * 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')) {
+       // Eclipse helper - will be ignored in production
+       require_once ("ApiBase.php");
+}
+
+/**
+ * @addtogroup API
+ */
+class ApiParse extends ApiBase {
+
+       public function __construct($main, $action) {
+               parent :: __construct($main, $action);
+       }
+
+       public function execute() {
+               // Get parameters
+               $params = $this->extractRequestParams();
+               $text = $params['text'];
+               $title = $params['title'];
+               $retval = '';
+
+               //Create title for parser
+               $title_obj = Title :: newFromText($params['title']);
+               if(!$title_obj)
+                       $title_obj = Title :: newFromText("API");       //  Default title is "API". For example, ExpandTemplates uses "ExpendTemplates" for it
+
+               // Parse text
+               global $wgParser;
+               $p_result = $wgParser->parse( $text, $title_obj, new ParserOptions() );
+
+               // Return result
+               $result = $this->getResult();
+               $result_array = array(
+                       'text' => array(),
+                       'langlinks' => $this->formatLangLinks( $p_result->getLanguageLinks() ),
+                       'categories' => $this->formatCategoryLinks( $p_result->getCategories() ),
+                       'links' => $this->formatLinks( $p_result->getLinks() ),
+                       'templates' => $this->formatLinks( $p_result->getTemplates() ),
+                       'images' => array_keys( $p_result->getImages() ),
+                       'externallinks' => array_keys( $p_result->getExternalLinks() ),
+               );
+               $result_mapping = array(
+                       'langlinks' => 'll',
+                       'categories' => 'cl',
+                       'links' => 'pl',
+                       'templates' => 'tl',
+                       'images' => 'img',
+                       'externallinks' => 'el',
+               );
+               $this->setIndexedTagNames( $result_array, $result_mapping );
+               $result->setContent( $result_array['text'], $p_result->getText() );
+               $result->addValue( null, $this->getModuleName(), $result_array );
+       }
+       
+       private function formatLangLinks( $links ) {
+               foreach( $links as $link ) {
+                       $entry = array();
+                       $bits = split( ':', $link, 2 );
+                       $entry['lang'] = $bits[0];
+                       $this->getResult()->setContent( $entry, $bits[1] );
+                       $result[] = $entry;
+               }
+               return $result;
+       }
+       
+       private function formatCategoryLinks( $links ) {
+               foreach( $links as $link => $sortkey ) {
+                       $entry = array();
+                       $entry['sortkey'] = $sortkey;
+                       $this->getResult()->setContent( $entry, $link );
+                       $result[] = $entry;
+               }
+               return $result;
+       }
+       
+       private function formatLinks( $links ) {
+               global $wgContLang;
+               foreach( $links as $ns => $nslinks ) {
+                       foreach( $nslinks as $title => $id ) {
+                               $entry = array();
+                               $entry['ns'] = $ns;
+                               $this->getResult()->setContent( $entry, Title::makeTitle( $ns, $title )->getFullText() );
+                               if( $id != 0 )
+                                       $entry['exists'] = '';
+                               $result[] = $entry;
+                       }
+               }
+               return $result;
+       }
+       
+       private function setIndexedTagNames( &$array, $mapping ) {
+               foreach( $mapping as $key => $name ) {
+                       $this->getResult()->setIndexedTagName( $array[$key], $name );
+               }
+       }
+
+       protected function getAllowedParams() {
+               return array (
+                       'title' => array( 
+                               ApiBase :: PARAM_DFLT => 'API',
+                       ),
+                       'text' => null
+               );
+       }
+
+       protected function getParamDescription() {
+               return array (
+                       'text' => 'Wikitext to parse',
+                       'title' => 'Title of page',
+               );
+       }
+
+       protected function getDescription() {
+               return 'This module parses wikitext and returns parser output';
+       }
+
+       protected function getExamples() {
+               return array (
+                       'api.php?action=parse&text={{Project:Sandbox}}'
+               );
+       }
+
+       public function getVersion() {
+               return __CLASS__ . ': $Id$';
+       }
+}
+