[ Index ]

PHP Cross Reference of MediaWiki-1.24.0

title

Body

[close]

/includes/api/ -> ApiRsd.php (source)

   1  <?php
   2  
   3  /**
   4   * API for MediaWiki 1.17+
   5   *
   6   * Created on October 26, 2010
   7   *
   8   * Copyright © 2010 Bryan Tong Minh and Brion Vibber
   9   *
  10   * This program is free software; you can redistribute it and/or modify
  11   * it under the terms of the GNU General Public License as published by
  12   * the Free Software Foundation; either version 2 of the License, or
  13   * (at your option) any later version.
  14   *
  15   * This program is distributed in the hope that it will be useful,
  16   * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  18   * GNU General Public License for more details.
  19   *
  20   * You should have received a copy of the GNU General Public License along
  21   * with this program; if not, write to the Free Software Foundation, Inc.,
  22   * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  23   * http://www.gnu.org/copyleft/gpl.html
  24   *
  25   * @file
  26   */
  27  
  28  /**
  29   * API module for sending out RSD information
  30   * @ingroup API
  31   */
  32  class ApiRsd extends ApiBase {
  33  
  34  	public function execute() {
  35          $result = $this->getResult();
  36  
  37          $result->addValue( null, 'version', '1.0' );
  38          $result->addValue( null, 'xmlns', 'http://archipelago.phrasewise.com/rsd' );
  39  
  40          $service = array( 'apis' => $this->formatRsdApiList() );
  41          ApiResult::setContent( $service, 'MediaWiki', 'engineName' );
  42          ApiResult::setContent( $service, 'https://www.mediawiki.org/', 'engineLink' );
  43          ApiResult::setContent( $service, Title::newMainPage()->getCanonicalURL(), 'homePageLink' );
  44  
  45          $result->setIndexedTagName( $service['apis'], 'api' );
  46  
  47          $result->addValue( null, 'service', $service );
  48      }
  49  
  50  	public function getCustomPrinter() {
  51          return new ApiFormatXmlRsd( $this->getMain(), 'xml' );
  52      }
  53  
  54  	public function getAllowedParams() {
  55          return array();
  56      }
  57  
  58  	public function getParamDescription() {
  59          return array();
  60      }
  61  
  62  	public function getDescription() {
  63          return 'Export an RSD (Really Simple Discovery) schema.';
  64      }
  65  
  66  	public function getExamples() {
  67          return array(
  68              'api.php?action=rsd'
  69          );
  70      }
  71  
  72  	public function isReadMode() {
  73          return false;
  74      }
  75  
  76      /**
  77       * Builds an internal list of APIs to expose information about.
  78       * Normally this only lists the MediaWiki API, with its base URL,
  79       * link to documentation, and a marker as to available authentication
  80       * (to aid in OAuth client apps switching to support in the future).
  81       *
  82       * Extensions can expose other APIs, such as WordPress or Twitter-
  83       * compatible APIs, by hooking 'ApiRsdServiceApis' and adding more
  84       * elements to the array.
  85       *
  86       * See http://cyber.law.harvard.edu/blogs/gems/tech/rsd.html for
  87       * the base RSD spec, and check WordPress and StatusNet sites for
  88       * in-production examples listing several blogging and micrblogging
  89       * APIs.
  90       *
  91       * @return array
  92       */
  93  	protected function getRsdApiList() {
  94          $apis = array(
  95              'MediaWiki' => array(
  96                  // The API link is required for all RSD API entries.
  97                  'apiLink' => wfExpandUrl( wfScript( 'api' ), PROTO_CURRENT ),
  98  
  99                  // Docs link is optional, but recommended.
 100                  'docs' => 'https://www.mediawiki.org/wiki/API',
 101  
 102                  // Some APIs may need a blog ID, but it may be left blank.
 103                  'blogID' => '',
 104  
 105                  // Additional settings are optional.
 106                  'settings' => array(
 107                      // Change this to true in the future as an aid to
 108                      // machine discovery of OAuth for API access.
 109                      'OAuth' => false,
 110                  )
 111              ),
 112          );
 113          wfRunHooks( 'ApiRsdServiceApis', array( &$apis ) );
 114  
 115          return $apis;
 116      }
 117  
 118      /**
 119       * Formats the internal list of exposed APIs into an array suitable
 120       * to pass to the API's XML formatter.
 121       *
 122       * @return array
 123       */
 124  	protected function formatRsdApiList() {
 125          $apis = $this->getRsdApiList();
 126  
 127          $outputData = array();
 128          foreach ( $apis as $name => $info ) {
 129              $data = array(
 130                  'name' => $name,
 131                  'preferred' => wfBoolToStr( $name == 'MediaWiki' ),
 132                  'apiLink' => $info['apiLink'],
 133                  'blogID' => isset( $info['blogID'] ) ? $info['blogID'] : '',
 134              );
 135              $settings = array();
 136              if ( isset( $info['docs'] ) ) {
 137                  ApiResult::setContent( $settings, $info['docs'], 'docs' );
 138              }
 139              if ( isset( $info['settings'] ) ) {
 140                  foreach ( $info['settings'] as $setting => $val ) {
 141                      if ( is_bool( $val ) ) {
 142                          $xmlVal = wfBoolToStr( $val );
 143                      } else {
 144                          $xmlVal = $val;
 145                      }
 146                      $setting = array( 'name' => $setting );
 147                      ApiResult::setContent( $setting, $xmlVal );
 148                      $settings[] = $setting;
 149                  }
 150              }
 151              if ( count( $settings ) ) {
 152                  $this->getResult()->setIndexedTagName( $settings, 'setting' );
 153                  $data['settings'] = $settings;
 154              }
 155              $outputData[] = $data;
 156          }
 157  
 158          return $outputData;
 159      }
 160  }
 161  
 162  class ApiFormatXmlRsd extends ApiFormatXml {
 163  	public function __construct( ApiMain $main, $format ) {
 164          parent::__construct( $main, $format );
 165          $this->setRootElement( 'rsd' );
 166      }
 167  
 168  	public function getMimeType() {
 169          return 'application/rsd+xml';
 170      }
 171  }


Generated: Fri Nov 28 14:03:12 2014 Cross-referenced by PHPXref 0.7.1