/** * @covers eZ\Publish\Core\FieldType\Page\Parts\Page::__construct * @covers eZ\Publish\Core\FieldType\Page\Parts\Base::__construct * @covers eZ\Publish\Core\FieldType\Page\Parts\Base::getState */ public function testGetState() { $zone1 = new Zone(array('id' => 'foo')); $zone2 = new Zone(array('id' => 'bar')); $zone3 = new Zone(array('id' => 'baz')); $properties = array('layout' => 'my_layout', 'zones' => array($zone1, $zone2, $zone3)); $page = new Page($properties); $this->assertEquals($properties + array('zonesById' => array('foo' => $zone1, 'bar' => $zone2, 'baz' => $zone3), 'attributes' => array()), $page->getState()); }
/** * Generates XML string from $page object to be stored in storage engine * * @param \eZ\Publish\Core\FieldType\Page\Parts\Page $page * * @return string */ public function generateXmlString(Parts\Page $page) { $dom = new DOMDocument('1.0', 'utf-8'); $dom->formatOutput = true; $dom->loadXML('<page />'); $pageNode = $dom->documentElement; foreach ($page->getState() as $attrName => $attrValue) { switch ($attrName) { case 'id': $pageNode->setAttribute('id', $attrValue); break; case 'zones': foreach ($page->{$attrName} as $zone) { $pageNode->appendChild($this->generateZoneXmlString($zone, $dom)); } break; case 'layout': $node = $dom->createElement('zone_layout', $attrValue); $pageNode->appendChild($node); break; case 'attributes': foreach ($attrValue as $arrayItemKey => $arrayItemValue) { $this->addNewXmlElement($dom, $pageNode, $arrayItemKey, $arrayItemValue); } break; case 'zonesById': // Do not store break; default: $this->addNewNotEmptyXmlElement($dom, $pageNode, $attrName, $attrValue); break; } } return $dom->saveXML(); }