API: added query parameter indexpageids to list the page ids of all returned page...
[lhc/web/wiklou.git] / includes / api / ApiFormatJson.php
index bce60d9..16a2375 100644 (file)
@@ -1,12 +1,11 @@
 <?php
 
-
 /*
  * Created on Sep 19, 2006
  *
  * API for MediaWiki 1.8+
  *
- * Copyright (C) 2006 Yuri Astrakhan <FirstnameLastname@gmail.com>
+ * Copyright (C) 2006 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
@@ -29,24 +28,65 @@ if (!defined('MEDIAWIKI')) {
        require_once ('ApiFormatBase.php');
 }
 
+/**
+ * @addtogroup API
+ */
 class ApiFormatJson extends ApiFormatBase {
 
+       private $mIsRaw;
+
        public function __construct($main, $format) {
                parent :: __construct($main, $format);
+               $this->mIsRaw = ($format === 'rawfm');
        }
 
        public function getMimeType() {
                return 'application/json';
        }
 
+       public function getNeedsRawData() {
+               return $this->mIsRaw;
+       }
+
        public function execute() {
-               require ('ApiFormatJson_json.php');
-               $json = new Services_JSON();
-               $this->printText($json->encode($this->getResult()->getData(), true));
+               $prefix = $suffix = "";
+
+               $params = $this->extractRequestParams();
+               $callback = $params['callback'];
+               if(!is_null($callback)) {
+                       $prefix = ereg_replace("[^_A-Za-z0-9]", "", $callback ) . "(";
+                       $suffix = ")";
+               }
+
+               if (!function_exists('json_encode') || $this->getIsHtml()) {
+                       $json = new Services_JSON();
+                       $this->printText($prefix . $json->encode($this->getResultData(), $this->getIsHtml()) . $suffix);
+               } else {
+                       $this->printText($prefix . json_encode($this->getResultData()) . $suffix);
+               }
+       }
+
+       protected function getAllowedParams() {
+               return array (
+                       'callback' => null
+               );
+       }
+
+       protected function getParamDescription() {
+               return array (
+                       'callback' => 'If specified, wraps the output into a given function call',
+               );
        }
 
        protected function getDescription() {
-               return 'Output data in JSON format';
+               if ($this->mIsRaw)
+                       return 'Output data with the debuging elements in JSON format' . parent :: getDescription();
+               else
+                       return 'Output data in JSON format' . parent :: getDescription();
+       }
+
+       public function getVersion() {
+               return __CLASS__ . ': $Id$';
        }
 }
-?>
\ No newline at end of file
+?>