Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. ManifestSerializer.php

class ManifestSerializer

@psalm-suppress MissingConstructor

Hierarchy

  • class \PharIo\Manifest\ManifestSerializer

Expanded class hierarchy of ManifestSerializer

File

vendor/phar-io/manifest/src/ManifestSerializer.php, line 22

Namespace

PharIo\Manifest
View source
class ManifestSerializer {
    
    /** @var XMLWriter */
    private $xmlWriter;
    public function serializeToFile(Manifest $manifest, string $filename) : void {
        file_put_contents($filename, $this->serializeToString($manifest));
    }
    public function serializeToString(Manifest $manifest) : string {
        $this->startDocument();
        $this->addContains($manifest->getName(), $manifest->getVersion(), $manifest->getType());
        $this->addCopyright($manifest->getCopyrightInformation());
        $this->addRequirements($manifest->getRequirements());
        $this->addBundles($manifest->getBundledComponents());
        return $this->finishDocument();
    }
    private function startDocument() : void {
        $xmlWriter = new XMLWriter();
        $xmlWriter->openMemory();
        $xmlWriter->setIndent(true);
        $xmlWriter->setIndentString(str_repeat(' ', 4));
        $xmlWriter->startDocument('1.0', 'UTF-8');
        $xmlWriter->startElement('phar');
        $xmlWriter->writeAttribute('xmlns', 'https://phar.io/xml/manifest/1.0');
        $this->xmlWriter = $xmlWriter;
    }
    private function finishDocument() : string {
        $this->xmlWriter
            ->endElement();
        $this->xmlWriter
            ->endDocument();
        return $this->xmlWriter
            ->outputMemory();
    }
    private function addContains(ApplicationName $name, Version $version, Type $type) : void {
        $this->xmlWriter
            ->startElement('contains');
        $this->xmlWriter
            ->writeAttribute('name', $name->asString());
        $this->xmlWriter
            ->writeAttribute('version', $version->getVersionString());
        switch (true) {
            case $type->isApplication():
                $this->xmlWriter
                    ->writeAttribute('type', 'application');
                break;
            case $type->isLibrary():
                $this->xmlWriter
                    ->writeAttribute('type', 'library');
                break;
            case $type->isExtension():
                $this->xmlWriter
                    ->writeAttribute('type', 'extension');
                
                /* @var $type Extension */
                $this->addExtension($type->getApplicationName(), $type->getVersionConstraint());
                break;
            default:
                $this->xmlWriter
                    ->writeAttribute('type', 'custom');
        }
        $this->xmlWriter
            ->endElement();
    }
    private function addCopyright(CopyrightInformation $copyrightInformation) : void {
        $this->xmlWriter
            ->startElement('copyright');
        foreach ($copyrightInformation->getAuthors() as $author) {
            $this->xmlWriter
                ->startElement('author');
            $this->xmlWriter
                ->writeAttribute('name', $author->getName());
            $this->xmlWriter
                ->writeAttribute('email', $author->getEmail()
                ->asString());
            $this->xmlWriter
                ->endElement();
        }
        $license = $copyrightInformation->getLicense();
        $this->xmlWriter
            ->startElement('license');
        $this->xmlWriter
            ->writeAttribute('type', $license->getName());
        $this->xmlWriter
            ->writeAttribute('url', $license->getUrl()
            ->asString());
        $this->xmlWriter
            ->endElement();
        $this->xmlWriter
            ->endElement();
    }
    private function addRequirements(RequirementCollection $requirementCollection) : void {
        $phpRequirement = new AnyVersionConstraint();
        $extensions = [];
        foreach ($requirementCollection as $requirement) {
            if ($requirement instanceof PhpVersionRequirement) {
                $phpRequirement = $requirement->getVersionConstraint();
                continue;
            }
            if ($requirement instanceof PhpExtensionRequirement) {
                $extensions[] = $requirement->asString();
            }
        }
        $this->xmlWriter
            ->startElement('requires');
        $this->xmlWriter
            ->startElement('php');
        $this->xmlWriter
            ->writeAttribute('version', $phpRequirement->asString());
        foreach ($extensions as $extension) {
            $this->xmlWriter
                ->startElement('ext');
            $this->xmlWriter
                ->writeAttribute('name', $extension);
            $this->xmlWriter
                ->endElement();
        }
        $this->xmlWriter
            ->endElement();
        $this->xmlWriter
            ->endElement();
    }
    private function addBundles(BundledComponentCollection $bundledComponentCollection) : void {
        if (count($bundledComponentCollection) === 0) {
            return;
        }
        $this->xmlWriter
            ->startElement('bundles');
        foreach ($bundledComponentCollection as $bundledComponent) {
            $this->xmlWriter
                ->startElement('component');
            $this->xmlWriter
                ->writeAttribute('name', $bundledComponent->getName());
            $this->xmlWriter
                ->writeAttribute('version', $bundledComponent->getVersion()
                ->getVersionString());
            $this->xmlWriter
                ->endElement();
        }
        $this->xmlWriter
            ->endElement();
    }
    private function addExtension(ApplicationName $applicationName, VersionConstraint $versionConstraint) : void {
        $this->xmlWriter
            ->startElement('extension');
        $this->xmlWriter
            ->writeAttribute('for', $applicationName->asString());
        $this->xmlWriter
            ->writeAttribute('compatible', $versionConstraint->asString());
        $this->xmlWriter
            ->endElement();
    }

}

Members

Title Sort descending Modifiers Object type Summary
ManifestSerializer::$xmlWriter private property @var XMLWriter
ManifestSerializer::addBundles private function
ManifestSerializer::addContains private function
ManifestSerializer::addCopyright private function
ManifestSerializer::addExtension private function
ManifestSerializer::addRequirements private function
ManifestSerializer::finishDocument private function
ManifestSerializer::serializeToFile public function
ManifestSerializer::serializeToString public function
ManifestSerializer::startDocument private function

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal