Mercurial > hg > isophonics-drupal-site
comparison vendor/phar-io/manifest/src/ManifestSerializer.php @ 14:1fec387a4317
Update Drupal core to 8.5.2 via Composer
author | Chris Cannam |
---|---|
date | Mon, 23 Apr 2018 09:46:53 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
13:5fb285c0d0e3 | 14:1fec387a4317 |
---|---|
1 <?php | |
2 /* | |
3 * This file is part of PharIo\Manifest. | |
4 * | |
5 * (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de> | |
6 * | |
7 * For the full copyright and license information, please view the LICENSE | |
8 * file that was distributed with this source code. | |
9 */ | |
10 | |
11 namespace PharIo\Manifest; | |
12 | |
13 use PharIo\Version\AnyVersionConstraint; | |
14 use PharIo\Version\Version; | |
15 use PharIo\Version\VersionConstraint; | |
16 use XMLWriter; | |
17 | |
18 class ManifestSerializer { | |
19 /** | |
20 * @var XMLWriter | |
21 */ | |
22 private $xmlWriter; | |
23 | |
24 public function serializeToFile(Manifest $manifest, $filename) { | |
25 file_put_contents( | |
26 $filename, | |
27 $this->serializeToString($manifest) | |
28 ); | |
29 } | |
30 | |
31 public function serializeToString(Manifest $manifest) { | |
32 $this->startDocument(); | |
33 | |
34 $this->addContains($manifest->getName(), $manifest->getVersion(), $manifest->getType()); | |
35 $this->addCopyright($manifest->getCopyrightInformation()); | |
36 $this->addRequirements($manifest->getRequirements()); | |
37 $this->addBundles($manifest->getBundledComponents()); | |
38 | |
39 return $this->finishDocument(); | |
40 } | |
41 | |
42 private function startDocument() { | |
43 $xmlWriter = new XMLWriter(); | |
44 $xmlWriter->openMemory(); | |
45 $xmlWriter->setIndent(true); | |
46 $xmlWriter->setIndentString(str_repeat(' ', 4)); | |
47 $xmlWriter->startDocument('1.0', 'UTF-8'); | |
48 $xmlWriter->startElement('phar'); | |
49 $xmlWriter->writeAttribute('xmlns', 'https://phar.io/xml/manifest/1.0'); | |
50 | |
51 $this->xmlWriter = $xmlWriter; | |
52 } | |
53 | |
54 private function finishDocument() { | |
55 $this->xmlWriter->endElement(); | |
56 $this->xmlWriter->endDocument(); | |
57 | |
58 return $this->xmlWriter->outputMemory(); | |
59 } | |
60 | |
61 private function addContains($name, Version $version, Type $type) { | |
62 $this->xmlWriter->startElement('contains'); | |
63 $this->xmlWriter->writeAttribute('name', $name); | |
64 $this->xmlWriter->writeAttribute('version', $version->getVersionString()); | |
65 | |
66 switch (true) { | |
67 case $type->isApplication(): { | |
68 $this->xmlWriter->writeAttribute('type', 'application'); | |
69 break; | |
70 } | |
71 | |
72 case $type->isLibrary(): { | |
73 $this->xmlWriter->writeAttribute('type', 'library'); | |
74 break; | |
75 } | |
76 | |
77 case $type->isExtension(): { | |
78 /* @var $type Extension */ | |
79 $this->xmlWriter->writeAttribute('type', 'extension'); | |
80 $this->addExtension($type->getApplicationName(), $type->getVersionConstraint()); | |
81 break; | |
82 } | |
83 | |
84 default: { | |
85 $this->xmlWriter->writeAttribute('type', 'custom'); | |
86 } | |
87 } | |
88 | |
89 $this->xmlWriter->endElement(); | |
90 } | |
91 | |
92 private function addCopyright(CopyrightInformation $copyrightInformation) { | |
93 $this->xmlWriter->startElement('copyright'); | |
94 | |
95 foreach($copyrightInformation->getAuthors() as $author) { | |
96 $this->xmlWriter->startElement('author'); | |
97 $this->xmlWriter->writeAttribute('name', $author->getName()); | |
98 $this->xmlWriter->writeAttribute('email', (string) $author->getEmail()); | |
99 $this->xmlWriter->endElement(); | |
100 } | |
101 | |
102 $license = $copyrightInformation->getLicense(); | |
103 | |
104 $this->xmlWriter->startElement('license'); | |
105 $this->xmlWriter->writeAttribute('type', $license->getName()); | |
106 $this->xmlWriter->writeAttribute('url', $license->getUrl()); | |
107 $this->xmlWriter->endElement(); | |
108 | |
109 $this->xmlWriter->endElement(); | |
110 } | |
111 | |
112 private function addRequirements(RequirementCollection $requirementCollection) { | |
113 $phpRequirement = new AnyVersionConstraint(); | |
114 $extensions = []; | |
115 | |
116 foreach($requirementCollection as $requirement) { | |
117 if ($requirement instanceof PhpVersionRequirement) { | |
118 $phpRequirement = $requirement->getVersionConstraint(); | |
119 continue; | |
120 } | |
121 | |
122 if ($requirement instanceof PhpExtensionRequirement) { | |
123 $extensions[] = (string) $requirement; | |
124 } | |
125 } | |
126 | |
127 $this->xmlWriter->startElement('requires'); | |
128 $this->xmlWriter->startElement('php'); | |
129 $this->xmlWriter->writeAttribute('version', $phpRequirement->asString()); | |
130 | |
131 foreach($extensions as $extension) { | |
132 $this->xmlWriter->startElement('ext'); | |
133 $this->xmlWriter->writeAttribute('name', $extension); | |
134 $this->xmlWriter->endElement(); | |
135 } | |
136 | |
137 $this->xmlWriter->endElement(); | |
138 $this->xmlWriter->endElement(); | |
139 } | |
140 | |
141 private function addBundles(BundledComponentCollection $bundledComponentCollection) { | |
142 if (count($bundledComponentCollection) === 0) { | |
143 return; | |
144 } | |
145 $this->xmlWriter->startElement('bundles'); | |
146 | |
147 foreach($bundledComponentCollection as $bundledComponent) { | |
148 $this->xmlWriter->startElement('component'); | |
149 $this->xmlWriter->writeAttribute('name', $bundledComponent->getName()); | |
150 $this->xmlWriter->writeAttribute('version', $bundledComponent->getVersion()->getVersionString()); | |
151 $this->xmlWriter->endElement(); | |
152 } | |
153 | |
154 $this->xmlWriter->endElement(); | |
155 } | |
156 | |
157 private function addExtension($application, VersionConstraint $versionConstraint) { | |
158 $this->xmlWriter->startElement('extension'); | |
159 $this->xmlWriter->writeAttribute('for', $application); | |
160 $this->xmlWriter->writeAttribute('compatible', $versionConstraint->asString()); | |
161 $this->xmlWriter->endElement(); | |
162 } | |
163 } |