/**
  * Parses the XML from the legacy database.
  *
  * Returns only the data required by the FieldType, nothing more.
  *
  * @param string $xml
  *
  * @return array
  */
 protected function parseLegacyXml($xml)
 {
     $extractedData = array();
     $dom = new \DOMDocument();
     $dom->loadXml($xml);
     $ezimageTag = $dom->documentElement;
     if (!$ezimageTag->hasAttribute('url')) {
         throw new \RuntimeException('Missing attribute "url" in <ezimage/> tag.');
     }
     if (($legacyUrl = $ezimageTag->getAttribute('url')) === '') {
         // Detected XML considered "empty" by the legacy storage
         return null;
     }
     $url = $this->urlRedecorator->redecorateFromTarget($legacyUrl);
     $extractedData['id'] = $this->imageIoService->loadBinaryFileByUri($url)->id;
     if (!$ezimageTag->hasAttribute('filename')) {
         throw new \RuntimeException('Missing attribute "filename" in <ezimage/> tag.');
     }
     $extractedData['fileName'] = $ezimageTag->getAttribute('filename');
     $extractedData['width'] = $ezimageTag->getAttribute('width');
     $extractedData['height'] = $ezimageTag->getAttribute('height');
     $extractedData['mime'] = $ezimageTag->getAttribute('mime_type');
     if (!$ezimageTag->hasAttribute('alternative_text')) {
         throw new \RuntimeException('Missing attribute "alternative_text" in <ezimage/> tag.');
     }
     $extractedData['alternativeText'] = $ezimageTag->getAttribute('alternative_text');
     return $extractedData;
 }
 public function extractFilesFromXml($xml)
 {
     if (empty($xml)) {
         // Empty image value
         return null;
     }
     $files = array();
     $dom = new \DOMDocument();
     $dom->loadXml($xml);
     if ($dom->documentElement->hasAttribute('dirpath')) {
         $url = $dom->documentElement->getAttribute('url');
         if (empty($url)) {
             return null;
         }
         $files['original'] = $this->redecorator->redecorateFromTarget($url);
         /** @var \DOMNode $childNode */
         foreach ($dom->documentElement->childNodes as $childNode) {
             if ($childNode->nodeName != 'alias') {
                 continue;
             }
             $files[$childNode->getAttribute('name')] = $this->redecorator->redecorateFromTarget($childNode->getAttribute('url'));
         }
         return $files;
     }
     return null;
 }
 public function testRedecorateFromTarget()
 {
     $this->targetDecoratorMock->expects($this->once())->method('undecorate')->with('/var/test/storage/images/file.png')->will($this->returnValue('images/file.png'));
     $this->sourceDecoratorMock->expects($this->once())->method('decorate')->with('images/file.png')->will($this->returnValue('http://static.example.com/images/file.png'));
     self::assertEquals('http://static.example.com/images/file.png', $this->redecorator->redecorateFromTarget('/var/test/storage/images/file.png'));
 }