MediaWiki  master
ApiQueryFileRepoInfo.php
Go to the documentation of this file.
1 <?php
31 
32  public function __construct( ApiQuery $query, $moduleName ) {
33  parent::__construct( $query, $moduleName, 'fri' );
34  }
35 
36  protected function getInitialisedRepoGroup() {
37  $repoGroup = RepoGroup::singleton();
38  $repoGroup->initialiseRepos();
39 
40  return $repoGroup;
41  }
42 
43  public function execute() {
44  $conf = $this->getConfig();
45 
46  $params = $this->extractRequestParams();
47  $props = array_flip( $params['prop'] );
48 
49  $repos = [];
50 
51  $repoGroup = $this->getInitialisedRepoGroup();
52  $foreignTargets = $conf->get( 'ForeignUploadTargets' );
53 
54  $repoGroup->forEachForeignRepo( function ( $repo ) use ( &$repos, $props, $foreignTargets ) {
55  $repoProps = $repo->getInfo();
56  $repoProps['canUpload'] = in_array( $repoProps['name'], $foreignTargets );
57 
58  $repos[] = array_intersect_key( $repoProps, $props );
59  } );
60 
61  $localInfo = $repoGroup->getLocalRepo()->getInfo();
62  $localInfo['canUpload'] = $conf->get( 'EnableUploads' );
63  $repos[] = array_intersect_key( $localInfo, $props );
64 
65  $result = $this->getResult();
66  ApiResult::setIndexedTagName( $repos, 'repo' );
67  ApiResult::setArrayTypeRecursive( $repos, 'assoc' );
68  ApiResult::setArrayType( $repos, 'array' );
69  $result->addValue( [ 'query' ], 'repos', $repos );
70  }
71 
72  public function getCacheMode( $params ) {
73  return 'public';
74  }
75 
76  public function getAllowedParams() {
77  $props = $this->getProps();
78 
79  return [
80  'prop' => [
81  ApiBase::PARAM_DFLT => implode( '|', $props ),
82  ApiBase::PARAM_ISMULTI => true,
83  ApiBase::PARAM_TYPE => $props,
85  ],
86  ];
87  }
88 
89  public function getProps() {
90  $props = [];
91  $repoGroup = $this->getInitialisedRepoGroup();
92 
93  $repoGroup->forEachForeignRepo( function ( $repo ) use ( &$props ) {
94  $props = array_merge( $props, array_keys( $repo->getInfo() ) );
95  } );
96 
97  $propValues = array_values( array_unique( array_merge(
98  $props,
99  array_keys( $repoGroup->getLocalRepo()->getInfo() )
100  ) ) );
101 
102  $propValues[] = 'canUpload';
103 
104  sort( $propValues );
105  return $propValues;
106  }
107 
108  protected function getExamplesMessages() {
109  $examples = [];
110 
111  $props = array_intersect( [ 'apiurl', 'name', 'displayname' ], $this->getProps() );
112  if ( $props ) {
113  $examples['action=query&meta=filerepoinfo&friprop=' . implode( '|', $props )] =
114  'apihelp-query+filerepoinfo-example-simple';
115  }
116 
117  return $examples;
118  }
119 
120  public function getHelpUrls() {
121  return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Filerepoinfo';
122  }
123 }
const PARAM_TYPE
(string|string[]) Either an array of allowed value strings, or a string type as described below...
Definition: ApiBase.php:94
getResult()
Get the result object.
Definition: ApiBase.php:640
const PARAM_DFLT
(null|boolean|integer|string) Default value of the parameter.
Definition: ApiBase.php:55
This is a base class for all Query modules.
extractRequestParams( $options=[])
Using getAllowedParams(), this function makes an array of the values provided by the user...
Definition: ApiBase.php:761
const PARAM_HELP_MSG_PER_VALUE
((string|array|Message)[]) When PARAM_TYPE is an array, this is an array mapping those values to $msg...
Definition: ApiBase.php:164
static setIndexedTagName(array &$arr, $tag)
Set the tag name for numeric-keyed values in XML format.
Definition: ApiResult.php:616
A query action to return meta information about the foreign file repos configured on the wiki...
__construct(ApiQuery $query, $moduleName)
static singleton()
Definition: RepoGroup.php:60
static setArrayTypeRecursive(array &$arr, $type, $kvpKeyName=null)
Set the array data type recursively.
Definition: ApiResult.php:759
This is the main query class.
Definition: ApiQuery.php:37
const PARAM_ISMULTI
(boolean) Accept multiple pipe-separated values for this parameter (e.g.
Definition: ApiBase.php:58
static setArrayType(array &$arr, $type, $kvpKeyName=null)
Set the array data type.
Definition: ApiResult.php:728