1
0
mirror of synced 2024-12-05 03:16:04 +03:00

Delete icml.php

This commit is contained in:
Vitaly Artemev 2016-12-06 14:43:59 +04:00 committed by GitHub
parent fbd776a075
commit 4451b996c4

View File

@ -1,294 +0,0 @@
<?php
class RetailCRMIcmlCreator
{
/** @var DOMDocument $dd */
protected $dd;
/** @var DOMElement $eCategories */
protected $eCategories;
/** @var DOMElement $eOffers */
protected $eOffers;
/** @var string $shopName */
protected $shopName = 'shop';
/** @var string $shopUrl */
protected $shopUrl;
public function __construct()
{
$domainsCollection = domainsCollection::getInstance();
$domainsCollectionList = $domainsCollection->getList();
$domainCollection = $domainsCollectionList[1];
$serverProtocol = mainConfiguration::getInstance()->get('system', 'server-protocol') . '://';
$this->shopUrl = $serverProtocol . $domainCollection->getHost();
}
public function generateICML()
{
$string = '<?xml version="1.0" encoding="UTF-8"?>
<yml_catalog date="'.date('Y-m-d H:i:s').'">
<shop>
<name>'.$this->shopName.'</name>
<categories/>
<offers/>
</shop>
</yml_catalog>
';
$xml = new SimpleXMLElement(
$string,
LIBXML_NOENT |LIBXML_NOCDATA | LIBXML_COMPACT | LIBXML_PARSEHUGE
);
$this->dd = new DOMDocument();
$this->dd->preserveWhiteSpace = false;
$this->dd->formatOutput = true;
$this->dd->loadXML($xml->asXML());
$this->eCategories = $this->dd
->getElementsByTagName('categories')->item(0);
$this->eOffers = $this->dd
->getElementsByTagName('offers')->item(0);
$this->addCategories();
$this->addOffers();
$this->dd->saveXML();
$downloadPath = __DIR__ . '/../../../../../';
if (!file_exists($downloadPath)) {
mkdir($downloadPath, 0755);
}
$this->dd->save($downloadPath . 'retailcrm.xml');
}
/**
*
*/
private function addCategories()
{
$categories = new selector('pages');
$categories->types('hierarchy-type')->name('catalog', 'category');
$result = $categories->result();
foreach($result as $category) {
/** @var umiHierarchyElement $category */
/** @var DOMElement $e */
$e = $this->eCategories->appendChild(
$this->dd->createElement(
'category', $category->getName()
)
);
$e->setAttribute('id', $category->getId());
if ($category->getRel() > 0) {
$e->setAttribute('parentId', $category->getRel());
}
}
}
private function getObjectUrl(umiHierarchyElement $obj) {
$url = '';
$url = '/' . $obj->getAltName() . $url;
$parent = new umiHierarchyElement($obj->getRel());
while(true) {
$url = '/' . $parent->getAltName() . $url;
if($parent->getRel() != 0) {
$parent = new umiHierarchyElement($parent->getRel());
} else {
break;
}
}
$url = $this->shopUrl . $url;
return $url;
}
private function getCombinationsFromMultyArray($sourceData) {
$sourceDataKeys = array();
foreach ($sourceData as $key=>$value) {
$sourceDataKeys[] = $key;
}
$data = array();
$data[] = '';
for($i = 0; $i < count($sourceData); $i++) {
$oldData = $data;
$data = array();
foreach($oldData as $value) {
foreach ($sourceData[$sourceDataKeys[$i]] as $value2) {
$data[] = (!empty($value) ? $value.',' : '') . $sourceDataKeys[$i] . '-' . $value2;
}
}
}
$resultData = array();
foreach ($data as $value) {
$items = explode(',', $value);
$columns = array();
foreach ($items as $item) {
$item = explode('-', $item);
$columns[$item[0]] = $item[1];
}
$resultData[] = $columns;
}
return $resultData;
}
private function addOffers()
{
$offers = new selector('pages');
$offers->types('hierarchy-type')->name('catalog', 'object');
$result = $offers->result();
foreach ($result as $offer) {
/** @var umiHierarchyElement $offer */
$objects = umiObjectsCollection::getInstance();
$offerObject = new umiObject($offer->getObjectId());
/** @var umiFieldsGroup $optionsObject */
$optionsObject = $offerObject->getType()->getFieldsGroupByName('catalog_option_props');
$options = array();
$optionValues = array();
$optionGroups = array();
$optionPrices = array();
foreach ($optionsObject->getFields() as $optionField) {
/** @var umiField $optionField */
$optionGroups[$optionField->getId()] = $optionField;
$values = $offerObject->getValue($optionField->getName());
foreach ($values as $value) {
$valueObject = $objects->getObject($value['rel']);
$options[$optionField->getId()][] = $valueObject->getId();
$optionPrices[$valueObject->getId()] = $value['float'];
$optionValues[$valueObject->getId()] = $valueObject;
}
}
if(count($options))
$offerOptions = $this->getCombinationsFromMultyArray($options);
else {
// Если нет опционных товаров(товарных предложений) передаём массив с 1 пустым элементом - базовый товар
$offerOptions = array();
$offerOptions[] = '';
}
foreach ($offerOptions as $offerOption) {
if(!empty($offerOption)) {
$options = array();
foreach ($offerOption as $offerOptionId => $offerOptionValue) {
$options[] = $offerOptionId . '_' . $offerOptionValue;
}
$offerId = $offer->getId() . '#' . implode('-', $options);
} else
$offerId = $offer->getId();
/** @var DOMElement $e */
$e = $this->eOffers->appendChild($this->dd->createElement('offer'));
$e->setAttribute('id', $offerId);
$e->setAttribute('productId', $offer->getId());
$quantity = $offerObject->getPropByName('common_quantity')->getValue();
$e->setAttribute('quantity', !empty($quantity) ? $quantity : 0);
/**
* Offer activity
*/
$activity = $offer->getIsActive() == 1 ? 'Y' : 'N';
$e->appendChild(
$this->dd->createElement('productActivity')
)->appendChild(
$this->dd->createTextNode($activity)
);
/**
* Offer category
*/
$e->appendChild($this->dd->createElement('categoryId'))
->appendChild(
$this->dd->createTextNode($offer->getRel())
);
/**
* Name & price
*/
if(!empty($offerOption)) {
$options = array();
foreach ($offerOption as $offerOptionId => $offerOptionValue) {
$options[] = $optionGroups[$offerOptionId]->getTitle() . ': ' . $optionValues[$offerOptionValue]->getName();
}
$offerName = $offer->getName() . ' (' . implode(', ', $options) . ')';
} else
$offerName = $offer->getName();
$e->appendChild($this->dd->createElement('name'))
->appendChild($this->dd->createTextNode($offerName));
$e->appendChild($this->dd->createElement('productName'))
->appendChild($this->dd->createTextNode($offer->getName()));
$price = $offerObject->getPropByName('price')->getValue();
if(!empty($offerOption)) {
foreach ($offerOption as $offerOptionId => $offerOptionValue) {
$price += $optionPrices[$offerOptionValue];
}
}
$e->appendChild($this->dd->createElement('price'))
->appendChild($this->dd->createTextNode($price));
/**
* Options
*/
if(!empty($offerOption)) {
$options = array();
foreach ($offerOption as $offerOptionId => $offerOptionValue) {
$option = $this->dd->createElement('param');
$option->setAttribute('code', $optionGroups[$offerOptionId]->getName());
$option->setAttribute('name', $optionGroups[$offerOptionId]->getTitle());
$option->appendChild($this->dd->createTextNode($optionValues[$offerOptionValue]->getName()));
$e->appendChild($option);
}
}
/**
* Image
*/
/** @var umiImageFile $photo */
$photo = $offerObject->getPropByName('photo')->getValue();
$photoPath = $photo->getFilePath(true);
$photoFullPath = $this->shopUrl . $photoPath;
$e->appendChild($this->dd->createElement('picture'))
->appendChild($this->dd->createTextNode($photoFullPath));
/**
* Url
*/
$url = $this->getObjectUrl($offer);
$e->appendChild($this->dd->createElement('url'))
->appendChild(
$this->dd->createTextNode($url)
);
/**
* Additional characteristics
*/
if ($offerObject->getPropByName('weight')) {
$weight = $this->dd->createElement('param');
$weight->setAttribute('code', 'weight');
$weight->setAttribute('name', 'Вес');
$weight->appendChild($this->dd->createTextNode($offerObject->getPropByName('weight')->getValue() * 1000));
$e->appendChild($weight);
}
}
}
}
}
?>