/** * Render the attribute. * * @return string */ public function render() { if ($this->isEmpty()) { return ''; } $name = Xml::escape($this->name); $value = Xml::escape($this->value); $isVariant = Xml::escape($this->isVariant); $rank = Xml::escape($this->rank); return <<<XML <NameValueAttribute> <name>{$name}</name> <type>{$this->type}</type> <isVariant>{$isVariant}</isVariant> <variantResourceType>{$this->variantResourceType}</variantResourceType> <value> <value>{$value}</value> <rank>{$rank}</rank> <isVariant>{$isVariant}</isVariant> </value> </NameValueAttribute> XML; }
/** * Render the XML. * * @return string */ public function render() { $unitCostAmount = Xml::escape($this->unitCost['amount']); $unitCostCurrency = Xml::escape($this->unitCost['currency']); $legacyDistributorId = Xml::escape($this->legacyDistributorId); $mdsfamId = Xml::escape($this->shipNodeSupply['mdsfamId']); $vendorStockId = Xml::escape($this->shipNodeSupply['vendorStockId']); $assumeInfiniteInventory = Xml::escape($this->assumeInfiniteInventory); $onHandSafetyFactorQuantityValue = Xml::escape($this->onHandSafetyFactorQuantity['value']); $onHandSafetyFactorQuantityUnit = Xml::escape($this->onHandSafetyFactorQuantity['unit']); $inventoryAvailabilityThresholdXml = $this->renderInventoryAvailabilityThreshold(); $preferredDistributorsXml = $this->renderPreferredDistributors(); return <<<XML <itemLogistics> <!-- START: Required Dummy Values --> <reportingHierarchy> <reportingHierarchyLevel> <levelId>1</levelId> <nodeId>str1234</nodeId> </reportingHierarchyLevel> </reportingHierarchy> <marketAttributes></marketAttributes> <preorderInfo> <isPreOrder>false</isPreOrder> <streetDate>2015-03-30T00:00:00</streetDate> <streetDateType>DELIVER_BY</streetDateType> </preorderInfo> <programEligibilities></programEligibilities> <packages></packages> <isPerishable>false</isPerishable> <isHazmat>false</isHazmat> <!-- END: Required Dummy Values --> <!-- START: Dummy LIMO Values --> {$inventoryAvailabilityThresholdXml} <onHandSafetyFactorQuantity> <value>{$onHandSafetyFactorQuantityValue}</value> <unit>{$onHandSafetyFactorQuantityUnit}</unit> </onHandSafetyFactorQuantity> <assumeInfiniteInventory>{$assumeInfiniteInventory}</assumeInfiniteInventory> <unitCost> <currency>{$unitCostCurrency}</currency> <amount>{$unitCostAmount}</amount> </unitCost> <primarySupplyItemId>2947757</primarySupplyItemId> <alternateSupplyItemId>str1234</alternateSupplyItemId> {$preferredDistributorsXml} <!-- END: Dummy LIMO Values --> <!-- START: Required Dummy Values --> <fulfillmentOptions></fulfillmentOptions> <shipAsIs>true</shipAsIs> <signatureOnDelivery>NEVER</signatureOnDelivery> <isConveyable>false</isConveyable> <bundleFulfillmentMode>SHIP_ALONE</bundleFulfillmentMode> <storageType>AMBIENT</storageType> <!-- END: Required Dummy Values --> <shipNodes> <shipNode> <legacyDistributorId>{$legacyDistributorId}</legacyDistributorId> <!-- START: Required Dummy Values --> <shipNodeStatus>ACTIVE</shipNodeStatus> <preOrderMaxQty> <value>1</value> <unit>EA</unit> </preOrderMaxQty> <handlingCost> <currency>GBP</currency> <amount>123.45</amount> </handlingCost> <unitCost> <currency>GBP</currency> <amount>4.00</amount> </unitCost> <shipNodeItemId>str1234</shipNodeItemId> <initialAvailabilityCode>AA</initialAvailabilityCode> <availabilityThreshold> <low>123</low> <mid>123</mid> <high>123</high> </availabilityThreshold> <inventoryOwnerId>EEB3A0D4-309A-4DAA-9296-77BE4AEFB2CE</inventoryOwnerId> <programEligibilities></programEligibilities> <!-- END: Required Dummy Values --> <shipNodeSupplies> <shipNodeSupply> <mdsfamId>{$mdsfamId}</mdsfamId> <vendorStockId>{$vendorStockId}</vendorStockId> </shipNodeSupply> </shipNodeSupplies> </shipNode> </shipNodes> </itemLogistics> XML; }
/** * Only urls need passing, the type is automatically set to PRIMARY for the first url, SECONDARY for others * If all urls share the same prefix, can pass that in as an optional parameter (so only need to pass unique ids) * * @param array $urls * @param string $urlPrefix */ public function setAssets(array $urls, $urlPrefix = '') { $urls = array_filter($urls); foreach ($urls as $index => $asset) { $asset = Xml::escape($urlPrefix . $asset); $type = $index > 0 ? 'SECONDARY' : 'PRIMARY'; $attribute = new NameValueAttribute('provider_name', 'asda.scene7.com'); $this->assets .= <<<XML <Asset> <assetURL>{$asset}</assetURL> <usageType>{$type}</usageType> <rank>1</rank> <AssetAttributes>{$attribute->render()}</AssetAttributes> </Asset> XML; } }
/** * @expectedException \Pangaea\PangaeaException * @expectedExceptionRegExp /xmlParseEntityRef: no name/ */ public function testValidateInvalidXml() { $xmlPath = __DIR__ . '/fixtures/invalid_items.xml'; $schemaPath = __DIR__ . '/../xsd/feed/Feed.xsd'; $this->assertFalse(Xml::validate($xmlPath, $schemaPath)); }
/** * Render the attribute. * * @return string */ public function render() { if ($this->isEmpty()) { return ''; } $name = Xml::escape($this->name); $valuesXml = ''; foreach ($this->value as $value) { $valuesXml .= '<value><value>' . Xml::escape($value) . '</value></value>'; } return <<<XML <NameValueAttribute> <name>{$name}</name> <type>{$this->type}</type> {$valuesXml} </NameValueAttribute> XML; }
/** * Validates the document and saves to the specified path * * @param $path * @return boolean * @throws \PangaeaException */ public function save($path) { $result = file_put_contents($path, $this->render()); Xml::validate($path, __DIR__ . '/../xsd/feed/Feed.xsd'); return $result > 0; }