PluginProbe ʕ •ᴥ•ʔ
Presto Player / 4.3.3
Presto Player v4.3.3
4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.4 4.2.3 4.2.2 4.2.0 4.2.1 trunk 1.10.0 1.10.1 1.10.2 1.11.0 1.12.0 1.13.0 1.14.0 1.14.1 1.5.10 1.5.11 1.5.12 1.5.13 1.5.14 1.5.15 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.10 1.6.11 1.6.12 1.6.13 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.11 2.0.12 2.0.13 2.0.14 2.0.15 2.0.16 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.2.0 2.2.1 2.2.2 2.2.3 2.2.3-beta1 2.3.0 2.3.1 2.3.2 2.3.3 3.0.0 3.0.0-beta1 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.1.0 3.1.1 3.1.2 3.1.3 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4
presto-player / vendor / level-2 / dice / Loader / Xml.php
presto-player / vendor / level-2 / dice / Loader Last commit date
Xml.php 5 years ago
Xml.php
88 lines
1 <?php
2 /* @description Dice - A minimal Dependency Injection Container for PHP *
3 * @author Tom Butler tom@r.je *
4 * @copyright 2012-2018 Tom Butler <tom@r.je> | https:// r.je/dice.html *
5 * @license http:// www.opensource.org/licenses/bsd-license.php BSD License *
6 * @version 3.0 */
7 namespace PrestoPlayer\Dice\Loader;
8 class Xml {
9 private function getComponent(\SimpleXmlElement $element, $forceInstance = false) {
10 if ($forceInstance) return [\Dice\Dice::INSTANCE => (string) $element];
11 else if ($element->instance) return [\Dice\Dice::INSTANCE => (string) $element->instance];
12 else return (string) $element;
13 }
14
15 private function loadV1(\SimpleXmlElement $xml, \Dice\Dice $dice) {
16 $rules = [];
17
18 foreach ($xml as $key => $value) {
19 $rule = $dice->getRule((string) $value->name);
20
21 if (isset($value->shared)) $rule['shared'] = ((string) $value->shared === 'true');
22
23 if (isset($value->inherit)) $rule['inherit'] = ($value->inherit == 'false') ? false : true;
24 if ($value->call) {
25 foreach ($value->call as $name => $call) {
26 $callArgs = [];
27 if ($call->params) foreach ($call->params->children() as $key => $param) $callArgs[] = $this->getComponent($param);
28 $rule['call'][] = [(string) $call->method, $callArgs];
29 }
30 }
31 if ($value->instanceOf) $rule['instanceOf'] = (string) $value->instanceOf;
32 if ($value->newInstances) foreach ($value->newInstances as $ni) $rule['newInstances'][] = (string) $ni;
33 if ($value->substitutions) foreach ($value->substitutions as $use) $rule['substitutions'][(string) $use->as] = $this->getComponent($use->use, true);
34 if ($value->constructParams) foreach ($value->constructParams->children() as $child) $rule['constructParams'][] = $this->getComponent($child);
35 if ($value->shareInstances) foreach ($value->shareInstances as $share) $rule['shareInstances'][] = $this->getComponent($share);
36 $rules[$value['name']] = $rule;
37 $dice->addRule((string) $value->name, $rule);
38 }
39 return $rules;
40 }
41
42 private function loadV2(\SimpleXmlElement $xml, \Dice\Dice $dice) {
43 $rules = [];
44
45 foreach ($xml as $key => $value) {
46 $rule = $dice->getRule((string) $value->name);
47
48 if ($value->call) {
49 foreach ($value->call as $name => $call) {
50 $callArgs = [];
51 foreach ($call->children() as $key => $param) $callArgs[] = $this->getComponent($param);
52 $rule['call'][] = [(string) $call['method'], $callArgs];
53 }
54 }
55 if (isset($value['inherit'])) $rule['inherit'] = ($value['inherit'] == 'false') ? false : true;
56 if ($value['instanceOf']) $rule['instanceOf'] = (string) $value['instanceOf'];
57 if (isset($value['shared'])) $rule['shared'] = ((string) $value['shared'] === 'true');
58 if ($value->constructParams) foreach ($value->constructParams->children() as $child) $rule['constructParams'][] = $this->getComponent($child);
59 if ($value->substitute) foreach ($value->substitute as $use) $rule['substitutions'][(string) $use['as']] = $this->getComponent($use['use'], true);
60 if ($value->shareInstances) foreach ($value->shareInstances->children() as $share) $rule['shareInstances'][] = $this->getComponent($share);
61 $rules[$value['name']] = $rule;
62 $dice->addRule((string) $value['name'], $rule);
63 }
64 return $rules;
65 }
66
67 public function load($xml, \Dice\Dice $dice = null, $displayWarning = true) {
68
69 if ($displayWarning) {
70 trigger_error('Deprecated: The XML loader is being removed in the next version of Dice please use PrestoPlayer\$xmlLoader->convert(\'' . $xml . '\', \'path/to/rules.json\'); to convert the rules to JSON format', E_USER_WARNING);
71 }
72
73 if ($dice === null) $dice = new \Dice\Dice;
74 if (!($xml instanceof \SimpleXmlElement)) $xml = simplexml_load_file($xml);
75 $ns = $xml->getNamespaces();
76 $nsName = (isset($ns[''])) ? $ns[''] : '';
77
78 if ($nsName == 'https://r.je/dice/2.0') return $this->loadV2($xml, $dice);
79 else return $this->loadV1($xml, $dice);
80 }
81
82 public function convert($xml, $outputJson) {
83 $rules = $this->load($xml);
84
85 file_put_contents($outputJson, json_encode($rules, JSON_PRETTY_PRINT));
86 }
87 }
88