1
|
|
|
<?php |
2
|
|
|
/** |
3
|
|
|
* Plugin manifest.xml parser for Elgg 1.8 and above. |
4
|
|
|
* |
5
|
|
|
* @package Elgg.Core |
6
|
|
|
* @subpackage Plugins |
7
|
|
|
* @since 1.8 |
8
|
|
|
*/ |
9
|
|
|
class ElggPluginManifestParser18 extends \ElggPluginManifestParser { |
10
|
|
|
/** |
11
|
|
|
* The valid top level attributes and defaults for a 1.8 manifest array. |
12
|
|
|
* |
13
|
|
|
* @var array |
14
|
|
|
*/ |
15
|
|
|
protected $validAttributes = array( |
16
|
|
|
'name', |
17
|
|
|
'author', |
18
|
|
|
'version', |
19
|
|
|
'blurb', |
20
|
|
|
'description', |
21
|
|
|
'id', |
22
|
|
|
'website', |
23
|
|
|
'copyright', |
24
|
|
|
'license', |
25
|
|
|
'requires', |
26
|
|
|
'suggests', |
27
|
|
|
'screenshot', |
28
|
|
|
'contributor', |
29
|
|
|
'category', |
30
|
|
|
'conflicts', |
31
|
|
|
'provides', |
32
|
|
|
'activate_on_install', |
33
|
|
|
'repository', |
34
|
|
|
'bugtracker', |
35
|
|
|
'donations', |
36
|
|
|
); |
37
|
|
|
|
38
|
|
|
/** |
39
|
|
|
* Required attributes for a valid 1.8 manifest |
40
|
|
|
* |
41
|
|
|
* @var array |
42
|
|
|
*/ |
43
|
|
|
protected $requiredAttributes = array( |
44
|
|
|
'name', 'author', 'version', 'description', 'requires' |
45
|
|
|
); |
46
|
|
|
|
47
|
|
|
/** |
48
|
|
|
* Parse a manifest object from 1.8 and later |
49
|
|
|
* |
50
|
|
|
* @return bool |
51
|
|
|
* |
52
|
|
|
* @throws PluginException |
53
|
|
|
*/ |
54
|
|
|
public function parse() { |
55
|
|
|
$parsed = array(); |
56
|
|
|
foreach ($this->manifestObject->children as $element) { |
57
|
|
|
switch ($element->name) { |
58
|
|
|
// single elements |
59
|
|
|
case 'blurb': |
60
|
|
|
case 'description': |
61
|
|
|
case 'name': |
62
|
|
|
case 'author': |
63
|
|
|
case 'version': |
64
|
|
|
case 'id': |
65
|
|
|
case 'website': |
66
|
|
|
case 'copyright': |
67
|
|
|
case 'license': |
68
|
|
|
case 'repository': |
69
|
|
|
case 'bugtracker': |
70
|
|
|
case 'donations': |
71
|
|
|
case 'activate_on_install': |
72
|
|
|
$parsed[$element->name] = $element->content; |
73
|
|
|
break; |
74
|
|
|
|
75
|
|
|
// arrays |
76
|
|
|
case 'category': |
77
|
|
|
$parsed[$element->name][] = $element->content; |
78
|
|
|
break; |
79
|
|
|
|
80
|
|
|
// 3d arrays |
81
|
|
|
case 'screenshot': |
82
|
|
|
case 'contributor': |
83
|
|
|
case 'provides': |
84
|
|
|
case 'conflicts': |
85
|
|
|
case 'requires': |
86
|
|
|
case 'suggests': |
87
|
|
|
if (!isset($element->children)) { |
88
|
|
|
return false; |
89
|
|
|
} |
90
|
|
|
|
91
|
|
|
$info = array(); |
92
|
|
|
foreach ($element->children as $child_element) { |
93
|
|
|
$info[$child_element->name] = $child_element->content; |
94
|
|
|
} |
95
|
|
|
|
96
|
|
|
$parsed[$element->name][] = $info; |
97
|
|
|
break; |
98
|
|
|
} |
99
|
|
|
} |
100
|
|
|
|
101
|
|
|
// check we have all the required fields |
102
|
|
|
foreach ($this->requiredAttributes as $attr) { |
103
|
|
|
if (!array_key_exists($attr, $parsed)) { |
104
|
|
|
throw new \PluginException(_elgg_services()->translator->translate('PluginException:ParserErrorMissingRequiredAttribute', |
105
|
|
|
array($attr, $this->caller->getPluginID()))); |
106
|
|
|
} |
107
|
|
|
} |
108
|
|
|
|
109
|
|
|
$this->manifest = $parsed; |
110
|
|
|
|
111
|
|
|
if (!$this->manifest) { |
|
|
|
|
112
|
|
|
return false; |
113
|
|
|
} |
114
|
|
|
|
115
|
|
|
return true; |
116
|
|
|
} |
117
|
|
|
} |
118
|
|
|
|
This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.
Consider making the comparison explicit by using
empty(..)
or! empty(...)
instead.