MediaWiki  master
ApiRsd.php
Go to the documentation of this file.
1 <?php
2 
27 
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 = [
41  'apis' => $this->formatRsdApiList(),
42  'engineName' => 'MediaWiki',
43  'engineLink' => 'https://www.mediawiki.org/',
44  'homePageLink' => Title::newMainPage()->getCanonicalURL(),
45  ];
46 
47  ApiResult::setSubelementsList( $service, [ 'engineName', 'engineLink', 'homePageLink' ] );
48  ApiResult::setIndexedTagName( $service['apis'], 'api' );
49 
50  $result->addValue( null, 'service', $service );
51  }
52 
53  public function getCustomPrinter() {
54  return new ApiFormatXmlRsd( $this->getMain(), 'xml' );
55  }
56 
57  protected function getExamplesMessages() {
58  return [
59  'action=rsd'
60  => 'apihelp-rsd-example-simple',
61  ];
62  }
63 
64  public function isReadMode() {
65  return false;
66  }
67 
85  protected function getRsdApiList() {
86  $apis = [
87  'MediaWiki' => [
88  // The API link is required for all RSD API entries.
89  'apiLink' => wfExpandUrl( wfScript( 'api' ), PROTO_CURRENT ),
90 
91  // Docs link is optional, but recommended.
92  'docs' => 'https://www.mediawiki.org/wiki/Special:MyLanguage/API',
93 
94  // Some APIs may need a blog ID, but it may be left blank.
95  'blogID' => '',
96 
97  // Additional settings are optional.
98  'settings' => [
99  // Change this to true in the future as an aid to
100  // machine discovery of OAuth for API access.
101  'OAuth' => false,
102  ]
103  ],
104  ];
105  $this->getHookRunner()->onApiRsdServiceApis( $apis );
106 
107  return $apis;
108  }
109 
116  protected function formatRsdApiList() {
117  $apis = $this->getRsdApiList();
118 
119  $outputData = [];
120  foreach ( $apis as $name => $info ) {
121  $data = [
122  'name' => $name,
123  'preferred' => wfBoolToStr( $name == 'MediaWiki' ),
124  'apiLink' => $info['apiLink'],
125  'blogID' => $info['blogID'] ?? '',
126  ];
127  $settings = [];
128  if ( isset( $info['docs'] ) ) {
129  $settings['docs'] = $info['docs'];
130  ApiResult::setSubelementsList( $settings, 'docs' );
131  }
132  if ( isset( $info['settings'] ) ) {
133  foreach ( $info['settings'] as $setting => $val ) {
134  if ( is_bool( $val ) ) {
135  $xmlVal = wfBoolToStr( $val );
136  } else {
137  $xmlVal = $val;
138  }
139  $setting = [ 'name' => $setting ];
140  ApiResult::setContentValue( $setting, 'value', $xmlVal );
141  $settings[] = $setting;
142  }
143  }
144  if ( count( $settings ) ) {
145  ApiResult::setIndexedTagName( $settings, 'setting' );
146  $data['settings'] = $settings;
147  }
148  $outputData[] = $data;
149  }
150 
151  return $outputData;
152  }
153 }
const PROTO_CURRENT
Definition: Defines.php:198
wfExpandUrl( $url, $defaultProto=PROTO_CURRENT)
Expand a potentially local URL to a fully-qualified URL.
wfScript( $script='index')
Get the path to a specified script file, respecting file extensions; this is a wrapper around $wgScri...
wfBoolToStr( $value)
Convenience function converts boolean values into "true" or "false" (string) values.
This abstract class implements many basic API functions, and is the base of all API classes.
Definition: ApiBase.php:59
getMain()
Get the main module.
Definition: ApiBase.php:522
getResult()
Get the result object.
Definition: ApiBase.php:637
getHookRunner()
Get an ApiHookRunner for running core API hooks.
Definition: ApiBase.php:719
static setSubelementsList(array &$arr, $names)
Causes the elements with the specified names to be output as subelements rather than attributes.
Definition: ApiResult.php:553
static setIndexedTagName(array &$arr, $tag)
Set the tag name for numeric-keyed values in XML format.
Definition: ApiResult.php:604
static setContentValue(array &$arr, $name, $value, $flags=0)
Add an output value to the array by name and mark as META_CONTENT.
Definition: ApiResult.php:467
API module for sending out RSD information.
Definition: ApiRsd.php:32
isReadMode()
Indicates whether this module requires read rights.
Definition: ApiRsd.php:64
formatRsdApiList()
Formats the internal list of exposed APIs into an array suitable to pass to the API's XML formatter.
Definition: ApiRsd.php:116
getExamplesMessages()
Returns usage examples for this module.
Definition: ApiRsd.php:57
getRsdApiList()
Builds an internal list of APIs to expose information about.
Definition: ApiRsd.php:85
execute()
Evaluates the parameters, performs the requested query, and sets up the result.
Definition: ApiRsd.php:34
getCustomPrinter()
If the module may only be used with a certain format module, it should override this method to return...
Definition: ApiRsd.php:53
Represents a title within MediaWiki.
Definition: Title.php:82