1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
/** |
4
|
|
|
* Base class for mapping services. Deriving classes hold mapping service specific |
5
|
|
|
* information and functionality, which can be used by any mapping feature. |
6
|
|
|
* |
7
|
|
|
* @since 0.6.3 |
8
|
|
|
* |
9
|
|
|
* @licence GNU GPL v2+ |
10
|
|
|
* @author Jeroen De Dauw < [email protected] > |
11
|
|
|
*/ |
12
|
|
|
abstract class MapsMappingService implements iMappingService { |
13
|
|
|
|
14
|
|
|
/** |
15
|
|
|
* The internal name of the service. |
16
|
|
|
* |
17
|
|
|
* @since 0.6.3 |
18
|
|
|
* |
19
|
|
|
* @var string |
20
|
|
|
*/ |
21
|
|
|
protected $serviceName; |
22
|
|
|
|
23
|
|
|
/** |
24
|
|
|
* A list of aliases for the internal name. |
25
|
|
|
* |
26
|
|
|
* @since 0.6.3 |
27
|
|
|
* |
28
|
|
|
* @var array |
29
|
|
|
*/ |
30
|
|
|
protected $aliases; |
31
|
|
|
|
32
|
|
|
/** |
33
|
|
|
* A list of features that support the service, used for validation and defaulting. |
34
|
|
|
* |
35
|
|
|
* @since 0.6.3 |
36
|
|
|
* |
37
|
|
|
* @var array |
38
|
|
|
*/ |
39
|
|
|
protected $features; |
40
|
|
|
|
41
|
|
|
/** |
42
|
|
|
* A list of names of resource modules to add. |
43
|
|
|
* |
44
|
|
|
* @since 0.7.3 |
45
|
|
|
* |
46
|
|
|
* @var array |
47
|
|
|
*/ |
48
|
|
|
protected $resourceModules = []; |
49
|
|
|
|
50
|
|
|
/** |
51
|
|
|
* A list of dependencies (header items) that have been added. |
52
|
|
|
* |
53
|
|
|
* @since 0.6.3 |
54
|
|
|
* |
55
|
|
|
* @var array |
56
|
|
|
*/ |
57
|
|
|
private $addedDependencies = []; |
58
|
|
|
|
59
|
|
|
/** |
60
|
|
|
* A list of dependencies (header items) that need to be added. |
61
|
|
|
* |
62
|
|
|
* @since 0.6.3 |
63
|
|
|
* |
64
|
|
|
* @var array |
65
|
|
|
*/ |
66
|
|
|
private $dependencies = []; |
67
|
|
|
|
68
|
|
|
/** |
69
|
|
|
* Constructor. Creates a new instance of MapsMappingService. |
70
|
|
|
* |
71
|
|
|
* @since 0.6.3 |
72
|
|
|
* |
73
|
|
|
* @param string $serviceName |
74
|
|
|
* @param array $aliases |
75
|
|
|
*/ |
76
|
|
|
public function __construct( $serviceName, array $aliases = [] ) { |
77
|
|
|
$this->serviceName = $serviceName; |
78
|
|
|
$this->aliases = $aliases; |
79
|
|
|
} |
80
|
|
|
|
81
|
|
|
/** |
82
|
|
|
* @see iMappingService::addParameterInfo |
83
|
|
|
* |
84
|
|
|
* @since 0.7 |
85
|
|
|
* |
86
|
|
|
* @param $parameterInfo array of IParam |
87
|
|
|
*/ |
88
|
|
|
public function addParameterInfo( array &$parameterInfo ) { |
89
|
|
|
} |
90
|
|
|
|
91
|
|
|
/** |
92
|
|
|
* @see iMappingService::addFeature |
93
|
|
|
* |
94
|
|
|
* @since 0.6.3 |
95
|
|
|
*/ |
96
|
|
|
public function addFeature( $featureName, $handlingClass ) { |
97
|
|
|
$this->features[$featureName] = $handlingClass; |
98
|
|
|
} |
99
|
|
|
|
100
|
|
|
/** |
101
|
|
|
* @see iMappingService::addDependencies |
102
|
|
|
* |
103
|
|
|
* @since 0.6.3 |
104
|
|
|
*/ |
105
|
|
|
public final function addDependencies( &$parserOrOut ) { |
106
|
|
|
$dependencies = $this->getDependencyHtml(); |
107
|
|
|
|
108
|
|
|
// Only add a head item when there are dependencies. |
109
|
|
|
if ( $parserOrOut instanceof Parser ) { |
|
|
|
|
110
|
|
|
if ( $dependencies ) { |
|
|
|
|
111
|
|
|
$parserOrOut->getOutput()->addHeadItem( $dependencies ); |
112
|
|
|
} |
113
|
|
|
|
114
|
|
|
$parserOrOut->getOutput()->addModules( $this->getResourceModules() ); |
115
|
|
|
} |
116
|
|
|
elseif ( $parserOrOut instanceof OutputPage ) { |
|
|
|
|
117
|
|
|
if ( $dependencies !== false ) { |
118
|
|
|
$parserOrOut->addHeadItem( md5( $dependencies ), $dependencies ); |
119
|
|
|
} |
120
|
|
|
|
121
|
|
|
$parserOrOut->addModules( $this->getResourceModules() ); |
122
|
|
|
} |
123
|
|
|
} |
124
|
|
|
|
125
|
|
|
/** |
126
|
|
|
* Returns a list of all config variables that should be passed to the JS. |
127
|
|
|
* |
128
|
|
|
* @since 1.0.1 |
129
|
|
|
* |
130
|
|
|
* @return array |
131
|
|
|
*/ |
132
|
|
|
public function getConfigVariables() { |
133
|
|
|
return []; |
134
|
|
|
} |
135
|
|
|
|
136
|
|
|
/** |
137
|
|
|
* @see iMappingService::getDependencyHtml |
138
|
|
|
* |
139
|
|
|
* @since 0.6.3 |
140
|
|
|
*/ |
141
|
|
|
public final function getDependencyHtml() { |
142
|
|
|
$allDependencies = array_merge( $this->getDependencies(), $this->dependencies ); |
143
|
|
|
$dependencies = []; |
144
|
|
|
|
145
|
|
|
// Only add dependnecies that have not yet been added. |
146
|
|
|
foreach ( $allDependencies as $dependency ) { |
147
|
|
|
if ( !in_array( $dependency, $this->addedDependencies ) ) { |
148
|
|
|
$dependencies[] = $dependency; |
149
|
|
|
$this->addedDependencies[] = $dependency; |
150
|
|
|
} |
151
|
|
|
} |
152
|
|
|
|
153
|
|
|
// If there are dependencies, put them all together in a string, otherwise return false. |
154
|
|
|
return $dependencies !== [] ? implode( '', $dependencies ) : false; |
155
|
|
|
} |
156
|
|
|
|
157
|
|
|
/** |
158
|
|
|
* Returns a list of html fragments, such as script includes, the current service depends on. |
159
|
|
|
* |
160
|
|
|
* @since 0.6.3 |
161
|
|
|
* |
162
|
|
|
* @return array |
163
|
|
|
*/ |
164
|
|
|
protected function getDependencies() { |
165
|
|
|
return []; |
166
|
|
|
} |
167
|
|
|
|
168
|
|
|
/** |
169
|
|
|
* @see iMappingService::getName |
170
|
|
|
* |
171
|
|
|
* @since 0.6.3 |
172
|
|
|
*/ |
173
|
|
|
public function getName() { |
174
|
|
|
return $this->serviceName; |
175
|
|
|
} |
176
|
|
|
|
177
|
|
|
/** |
178
|
|
|
* @see iMappingService::getFeature |
179
|
|
|
* |
180
|
|
|
* @since 0.6.3 |
181
|
|
|
*/ |
182
|
|
|
public function getFeature( $featureName ) { |
183
|
|
|
return array_key_exists( $featureName, $this->features ) ? $this->features[$featureName] : false; |
184
|
|
|
} |
185
|
|
|
|
186
|
|
|
/** |
187
|
|
|
* @see iMappingService::getFeatureInstance |
188
|
|
|
* |
189
|
|
|
* @since 0.6.6 |
190
|
|
|
*/ |
191
|
|
|
public function getFeatureInstance( $featureName ) { |
192
|
|
|
$className = $this->getFeature( $featureName ); |
193
|
|
|
|
194
|
|
|
if ( $className === false || !class_exists( $className ) ) { |
195
|
|
|
throw new MWException( 'Could not create a mapping feature class instance' ); |
196
|
|
|
} |
197
|
|
|
|
198
|
|
|
return new $className( $this ); |
199
|
|
|
} |
200
|
|
|
|
201
|
|
|
/** |
202
|
|
|
* @see iMappingService::getAliases |
203
|
|
|
* |
204
|
|
|
* @since 0.6.3 |
205
|
|
|
*/ |
206
|
|
|
public function getAliases() { |
207
|
|
|
return $this->aliases; |
208
|
|
|
} |
209
|
|
|
|
210
|
|
|
/** |
211
|
|
|
* @see iMappingService::hasAlias |
212
|
|
|
* |
213
|
|
|
* @since 0.6.3 |
214
|
|
|
*/ |
215
|
|
|
public function hasAlias( $alias ) { |
216
|
|
|
return in_array( $alias, $this->aliases ); |
217
|
|
|
} |
218
|
|
|
|
219
|
|
|
/** |
220
|
|
|
* Returns the resource modules that need to be loaded to use this mapping service. |
221
|
|
|
* |
222
|
|
|
* @since 0.7.3 |
223
|
|
|
* |
224
|
|
|
* @return array of string |
225
|
|
|
*/ |
226
|
|
|
public function getResourceModules() { |
227
|
|
|
return $this->resourceModules; |
228
|
|
|
} |
229
|
|
|
|
230
|
|
|
/** |
231
|
|
|
* Add one or more names of resource modules that should be loaded. |
232
|
|
|
* |
233
|
|
|
* @since 0.7.3 |
234
|
|
|
* |
235
|
|
|
* @param mixed $modules Array of string or string |
236
|
|
|
*/ |
237
|
|
|
public function addResourceModules( $modules ) { |
238
|
|
|
$this->resourceModules = array_merge( $this->resourceModules, (array)$modules ); |
239
|
|
|
} |
240
|
|
|
|
241
|
|
|
/** |
242
|
|
|
* @since 0.6.3 |
243
|
|
|
* |
244
|
|
|
* @param $dependencyHtml |
245
|
|
|
*/ |
246
|
|
|
public final function addHtmlDependency( $dependencyHtml ) { |
247
|
|
|
$this->dependencies[] = $dependencyHtml; |
248
|
|
|
} |
249
|
|
|
|
250
|
|
|
/** |
251
|
|
|
* Adds dependencies. |
252
|
|
|
* |
253
|
|
|
* @param array $dependencies |
254
|
|
|
*/ |
255
|
|
|
public function addHtmlDependencies(array $dependencies ) { |
256
|
|
|
foreach ( $dependencies as $dependency ) { |
257
|
|
|
$this->addHtmlDependency( $dependency ); |
258
|
|
|
} |
259
|
|
|
} |
260
|
|
|
|
261
|
|
|
/** |
262
|
|
|
* @see iMappingService::getEarthZoom |
263
|
|
|
* |
264
|
|
|
* @since 1.0 |
265
|
|
|
*/ |
266
|
|
|
public function getEarthZoom() { |
267
|
|
|
return 1; |
268
|
|
|
} |
269
|
|
|
|
270
|
|
|
} |
271
|
|
|
|
This error could be the result of:
1. Missing dependencies
PHP Analyzer uses your
composer.json
file (if available) to determine the dependencies of your project and to determine all the available classes and functions. It expects thecomposer.json
to be in the root folder of your repository.Are you sure this class is defined by one of your dependencies, or did you maybe not list a dependency in either the
require
orrequire-dev
section?2. Missing use statement
PHP does not complain about undefined classes in
ìnstanceof
checks. For example, the following PHP code will work perfectly fine:If you have not tested against this specific condition, such errors might go unnoticed.