Channelpilotsolutions_Channelpilot - Version 2.2.5

Version Notes

- general bugfixes
- improved performance for feed export
- added support to use the admin area for order import

Download this release

Release Info

Developer Magento Core Team
Extension Channelpilotsolutions_Channelpilot
Version 2.2.5
Comparing to
See all releases


Code changes from version 2.2.4.1 to 2.2.5

app/code/community/Channelpilotsolutions/Channelpilot/Block/Adminhtml/Field/Exportfields.php CHANGED
@@ -53,6 +53,8 @@ class Channelpilotsolutions_Channelpilot_Block_Adminhtml_Field_Exportfields exte
53
$attributes[]['attribute_code'] = 'cp_color_attribute_id';
54
$attributes[]['attribute_code'] = 'type_id';
55
$attributes[]['attribute_code'] = 'parent_id';
56
asort($attributes);
57
foreach ($attributes as $attribute) {
58
if($attribute['attribute_code'] == 'group_price') {
53
$attributes[]['attribute_code'] = 'cp_color_attribute_id';
54
$attributes[]['attribute_code'] = 'type_id';
55
$attributes[]['attribute_code'] = 'parent_id';
56
+ $attributes[]['attribute_code'] = 'min_sale_qty';
57
+ $attributes[]['attribute_code'] = 'max_sale_qty';
58
asort($attributes);
59
foreach ($attributes as $attribute) {
60
if($attribute['attribute_code'] == 'group_price') {
app/code/community/Channelpilotsolutions/Channelpilot/Block/Adminhtml/Field/Replacefields.php CHANGED
@@ -49,7 +49,8 @@ class Channelpilotsolutions_Channelpilot_Block_Adminhtml_Field_Replacefields ext
49
$attributes[]['attribute_code'] = 'qty';
50
$attributes[]['attribute_code'] = 'stock_status';
51
$attributes[]['attribute_code'] = 'cp_color_attribute_id';
52
- $attributes[]['attribute_code'] = 'parent_id';
53
54
$attributes[]['attribute_code'] = 'categories';
55
$attributes[]['attribute_code'] = 'cp_image_url';
@@ -59,7 +60,7 @@ class Channelpilotsolutions_Channelpilot_Block_Adminhtml_Field_Replacefields ext
59
$attributes[]['attribute_code'] = 'cp_additional_image_3';
60
asort($attributes);
61
foreach ($attributes as $attribute) {
62
- $rendered .= '<option value="' . $attribute['attribute_code'] . '">' . $attribute['attribute_code'] . '</option>';
63
}
64
$rendered .= '</select>';
65
return $rendered;
49
$attributes[]['attribute_code'] = 'qty';
50
$attributes[]['attribute_code'] = 'stock_status';
51
$attributes[]['attribute_code'] = 'cp_color_attribute_id';
52
+ $attributes[]['attribute_code'] = 'min_sale_qty';
53
+ $attributes[]['attribute_code'] = 'max_sale_qty';
54
55
$attributes[]['attribute_code'] = 'categories';
56
$attributes[]['attribute_code'] = 'cp_image_url';
60
$attributes[]['attribute_code'] = 'cp_additional_image_3';
61
asort($attributes);
62
foreach ($attributes as $attribute) {
63
+ $rendered .= '<option value="' . $attribute['attribute_code'] . '">' . $attribute['attribute_code'] . '</option>';
64
}
65
$rendered .= '</select>';
66
return $rendered;
app/code/community/Channelpilotsolutions/Channelpilot/Helper/Data.php CHANGED
@@ -159,13 +159,6 @@ class Channelpilotsolutions_Channelpilot_Helper_Data extends Mage_Core_Helper_Ab
159
$hook = $handler->handle();
160
break;
161
162
- // Send method + limit + shopId ( + last)
163
- case self::GET_EXPORT:
164
- $this->checkActivation(array($exportActive), 'export');
165
- $handler = new CPExportHandler();
166
- $hook = $handler->handle(CPExportHandler::METHOD_JSON);
167
- break;
168
-
169
// Send method + limit + shopId ( + last)
170
case self::GET_DEBUG:
171
$this->checkSignature();
159
$hook = $handler->handle();
160
break;
161
162
// Send method + limit + shopId ( + last)
163
case self::GET_DEBUG:
164
$this->checkSignature();
app/code/community/Channelpilotsolutions/Channelpilot/Helper/handler/CPExportHandler.php CHANGED
@@ -9,32 +9,31 @@ class CPExportHandler extends CPAbstractHandler {
9
10
private $_storeId;
11
private $_siteId;
12
private $_mediaUrl;
13
private $_webUrl;
14
private $_allCat;
15
- private $oldCatPath;
16
private $_limit;
17
private $_last;
18
private $_blankProduct;
19
- private $_exportMethod;
20
private $_configurableAttributes = array();
21
private $_imageBaseUrl;
22
private $_maxAdditionalImages;
23
private $_exportFields;
24
private $_currencyChange;
25
private $_replaceFields;
26
-
27
- const METHOD_XML = 0;
28
- const METHOD_JSON = 1;
29
30
/**
31
* Handle status event
32
*
33
*/
34
- public function handle($exportMethod = self::METHOD_XML) {
35
$limit = Mage::app()->getRequest()->getParam('limit', null);
36
$store = Mage::app()->getRequest()->getParam('store', null);
37
- $this->_exportMethod = $exportMethod;
38
$this->_limit = $limit;
39
$this->_last = Mage::app()->getRequest()->getParam('last', null);
40
try {
@@ -45,19 +44,16 @@ class CPExportHandler extends CPAbstractHandler {
45
}
46
47
$this->initExport();
48
- $productData = $this->_export();
49
50
- switch($this->_exportMethod) {
51
- case self::METHOD_XML:
52
- $this->_toXml($productData);
53
- break;
54
- case self::METHOD_JSON:
55
- $this->_toJson($productData);
56
- break;
57
- default:
58
- echo "Export method not supported.";
59
- return;
60
- }
61
}
62
63
/**
@@ -66,20 +62,11 @@ class CPExportHandler extends CPAbstractHandler {
66
*/
67
private function _handleStoreException() {
68
// The exception thrown by Mage::app()->getStore() has an empty message ...
69
- switch($this->_exportMethod) {
70
- case self::METHOD_XML:
71
- $xml = new SimpleXMLElement('<root></root>');
72
- $xml->addChild('error', 'Error retrieving store.');
73
- header('Content-Type: text/xml; charset=utf-8');
74
- echo $xml->asXML();
75
- break;
76
- case self::METHOD_JSON:
77
- default:
78
- $hook = new CPHookResponse();
79
- $hook->resultCode = CPResultCodes::SYSTEM_ERROR;
80
- $hook->resultMessage = "Error retrieving store.";
81
- $hook->writeResponse(self::defaultHeader, json_encode($hook));
82
- }
83
}
84
85
/**
@@ -92,20 +79,11 @@ class CPExportHandler extends CPAbstractHandler {
92
if ($currencyCode && $currencyCode != '') {
93
$result = Mage::getModel('directory/currency')->getCurrencyRates(Mage::app()->getBaseCurrencyCode(), $currencyCode);
94
if(count($result) === 0){
95
- switch($this->_exportMethod) {
96
- case self::METHOD_XML:
97
- $xml = new SimpleXMLElement('<root></root>');
98
- $xml->addChild('error', 'wrong currency');
99
- header('Content-Type: text/xml; charset=utf-8');
100
- echo $xml->asXML();
101
- exit();
102
- case self::METHOD_JSON:
103
- default:
104
- $hook = new CPHookResponse();
105
- $hook->resultCode = CPResultCodes::SYSTEM_ERROR;
106
- $hook->resultMessage = "wrong currency";
107
- $hook->writeResponse(self::defaultHeader, json_encode($hook));
108
- }
109
}
110
$this->_currencyChange = $result[$currencyCode];
111
}
@@ -115,8 +93,6 @@ class CPExportHandler extends CPAbstractHandler {
115
* Initialize the export.
116
*/
117
private function initExport() {
118
- ini_set('max_execution_time', 7200);
119
-
120
// Initialize the admin application
121
Mage::app('admin');
122
@@ -151,6 +127,7 @@ class CPExportHandler extends CPAbstractHandler {
151
try {
152
$store = Mage::app()->getStore($this->_storeId);
153
$this->_siteId = $store->getWebsiteId();
154
$this->_webUrl = $store->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
155
$this->_mediaUrl = $store->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA);
156
} catch (Exception $e) {
@@ -170,6 +147,8 @@ class CPExportHandler extends CPAbstractHandler {
170
$this->_maxAdditionalImages = Mage::getStoreConfig('channelpilot_export/channelpilot_productfeed/channelpilot_imagenumber');
171
$this->_exportFields = unserialize(Mage::getStoreConfig('channelpilot_export/channelpilot_productfeed/channelpilot_exportfields'));
172
$this->_replaceFields = unserialize(Mage::getStoreConfig('channelpilot_export/channelpilot_productfeed/channelpilot_replacefields'));
173
}
174
175
/**
@@ -177,7 +156,6 @@ class CPExportHandler extends CPAbstractHandler {
177
*/
178
public function buildCategoryTree() {
179
$this->_allCat = array();
180
- $this->oldCatPath = '';
181
182
$categoryCollection = Mage::getModel('catalog/category')->getCollection()
183
->addAttributeToSelect('name')
@@ -257,6 +235,74 @@ class CPExportHandler extends CPAbstractHandler {
257
return $attributeOptions;
258
}
259
260
/**
261
* Export the products and return them as array.
262
* @return array
@@ -279,14 +325,43 @@ class CPExportHandler extends CPAbstractHandler {
279
}
280
281
/** @var $collection Mage_Catalog_Model_Resource_Product_Collection */
282
- $collection = Mage::getModel('catalog/product')->getCollection()
283
- ->addAttributeToSelect('*')
284
->joinField('qty',
285
'cataloginventory/stock_item',
286
'qty',
287
'product_id=entity_id',
288
'{{table}}.stock_id=1',
289
'left')
290
->addAttributeToSort('type_id')
291
->setStoreId($this->_storeId);
292
@@ -305,40 +380,17 @@ class CPExportHandler extends CPAbstractHandler {
305
}
306
}
307
308
- if($this->_last) {
309
- $collection->setCurPage($this->_last);
310
- }
311
-
312
- if($this->_limit) {
313
- $collection->setPageSize($this->_limit);
314
- }
315
-
316
- /** @var $backendModel Mage_Catalog_Model_Product_Attribute_Backend_Media */
317
- $backendModel = $collection->getResource()->getAttribute('media_gallery')->getBackend();
318
-
319
- $onlyStockAndPriceData = (Mage::app()->getRequest()->getParam('priceStock', '') === "true");
320
-
321
- $productData = array();
322
323
- /** @var $item Mage_Catalog_Model_Product */
324
- foreach ($collection as $item) {
325
-
326
- if($onlyStockAndPriceData) {
327
- $product = $this->_getOnlyStockAndPriceData($item);
328
- } else {
329
- $backendModel->afterLoad($item);
330
- $product = $this->_getFullProductData($item);
331
- }
332
-
333
- $productData[] = $product;
334
- }
335
336
// stop emulating admin store and set initial environment
337
if ($flatEnabled) {
338
$emulationModel->stopEnvironmentEmulation($initialEnvironmentInfo);
339
}
340
-
341
- return $productData;
342
}
343
344
/**
@@ -360,9 +412,7 @@ class CPExportHandler extends CPAbstractHandler {
360
$parentId = null;
361
if ($item->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_SIMPLE) {
362
$parentId = Mage::getModel('catalog/product_type_configurable')->getParentIdsByChild($item->getId());
363
- if(is_array($parentId) && !empty($parentId)) {
364
- $parentId = $parentId[0];
365
- }
366
}
367
368
$configurableAttributes = array();
@@ -377,8 +427,12 @@ class CPExportHandler extends CPAbstractHandler {
377
// workaround... $item->getProductUrl() sometimes adds store code to url (e.g. <url>?___store=default)
378
$productUrl = $this->_webUrl . $item->getUrlPath();
379
$colorText = $item->getAttributeText('color');
380
- $rulePrice = Mage::getModel('catalogrule/rule')->calcProductPriceRule($item->setStoreId($this->_storeId),$item->getPrice());
381
- $price = ($rulePrice) ? $rulePrice : $item->getPrice();
382
383
$product = $this->_blankProduct;
384
@@ -386,8 +440,8 @@ class CPExportHandler extends CPAbstractHandler {
386
$product['sku'] = $item->getSku();
387
$product['parent_id'] = $parentId;
388
$product['variationTheme'] = $configurableAttributes;
389
- $product['name'] = html_entity_decode($item->getName());
390
- $product['description'] = html_entity_decode($item->getDescription());
391
392
$product['price'] = $price;
393
if($this->_currencyChange) {
@@ -395,31 +449,58 @@ class CPExportHandler extends CPAbstractHandler {
395
}
396
397
$product['categories'] = $this->_getCategoryInformation($item);
398
- $product['manufacturer'] = html_entity_decode($item->getManufacturer());
399
- $product['manufacturer_name'] = html_entity_decode($item->getAttributeText('manufacturer'));
400
$product['cp_product_url'] = $productUrl;
401
$product['cp_image_url'] = $imageUrl;
402
- $product['color'] = ($colorText) ? html_entity_decode($colorText) : null;
403
$product['weight'] = $item->getWeight();
404
405
$counter = 1;
406
- foreach ($item->getMediaGalleryImages() as $image) {
407
// break if the maximum amount of additional images has been reached
408
if ($counter > $this->_maxAdditionalImages) {
409
break;
410
}
411
412
// ignore the base image; it has already been added
413
- if ($image->getFile() == $item->getImage()) {
414
continue;
415
}
416
417
- $product['cp_additional_image_' . $counter] = $this->_imageBaseUrl . $image->getFile();
418
$counter++;
419
}
420
421
- $product['is_parent'] = $isParent;
422
423
foreach($this->_exportFields as $field) {
424
$code = $field['productattribute'];
425
if(strpos($code, 'group_price') !== false) {
@@ -429,27 +510,40 @@ class CPExportHandler extends CPAbstractHandler {
429
$product['group_price_'.$groupCode] = $item->getData('group_price_'.$customerGroup->getId());
430
} else {
431
switch($code) {
432
case 'qty':
433
$product[$code] = $item->getQty();
434
break;
435
case 'stock_status':
436
- $product[$code] = $item->getStockItem()->getIsInStock();
437
break;
438
case 'tax_class_id':
439
$product[$code] = $item->getData($code);
440
break;
441
default:
442
- $attributeText = $item->getAttributeText($code);
443
if(is_array($attributeText)) {
444
$attributeText = implode(',',$attributeText);
445
}
446
- $product[$code] = ($attributeText) ? html_entity_decode($attributeText) : html_entity_decode($item->getData($code));
447
}
448
}
449
}
450
451
- if(!empty($this->_replaceFields) && !$isParent && $parentId !== null) {
452
- $parent = Mage::getModel('catalog/product')->load($parentId);
453
foreach($this->_replaceFields as $field) {
454
$code = $field['productattribute'];
455
if(strpos($code, 'group_price') !== false) {
@@ -462,29 +556,44 @@ class CPExportHandler extends CPAbstractHandler {
462
$product['group_price_'.$groupCode] = $groupPrice['price'];
463
}
464
}
465
} else {
466
switch($code) {
467
case 'qty':
468
- $product[$code] = $parent->getStockItem->getQty();
469
break;
470
case 'stock_status':
471
$product[$code] = $parent->getStockItem()->getIsInStock();
472
break;
473
case 'tax_class_id':
474
$product[$code] = $parent->getData($code);
475
break;
476
default:
477
- $attributeText = $parent->getAttributeText($code);
478
if(is_array($attributeText)) {
479
$attributeText = implode(',',$attributeText);
480
}
481
- $product[$code] = ($attributeText) ? html_entity_decode($attributeText) : html_entity_decode($parent->getData($code));
482
}
483
}
484
}
485
}
486
-
487
- return $product;
488
}
489
490
/**
@@ -511,23 +620,6 @@ class CPExportHandler extends CPAbstractHandler {
511
return $product;
512
}
513
514
- /**
515
- * Creates and shows an XML based on the values of the $productData array created by the export method.
516
- * Sends a Content-Type header.
517
- * @param array $productData
518
- */
519
- private function _toXml(array $productData) {
520
- $xml = new SimpleXMLElement('<root></root>');
521
- $xmlCatalog = $xml->addChild('catalog');
522
- foreach($productData as $product) {
523
- $xmlProduct = $xmlCatalog->addChild('product');
524
- $this->_productToXml($product, $xmlProduct);
525
- }
526
- header('Content-Type: text/xml; charset=utf-8');
527
- echo $xml->asXML();
528
- exit();
529
- }
530
-
531
/**
532
* Adds the values of the $product array to the $xml structure.
533
* @param array $product
@@ -544,59 +636,53 @@ class CPExportHandler extends CPAbstractHandler {
544
}
545
}
546
547
- /**
548
- * Shows the content of $productData as JSON.
549
- * @param array $productData
550
- */
551
- private function _toJson(array $productData) {
552
- $hook = new CPHookResponse();
553
- $hook->resultCode = CPResultCodes::SUCCESS;
554
- $hook->products = $productData;
555
- $hook->resultMessage = "ProductData of " . sizeof($hook->products) . " articles";
556
- $hook->moreAvailable = true;
557
- if (sizeof($hook->products) < $this->_limit) {
558
- $hook->moreAvailable = false;
559
- }
560
- $hook->writeResponse(self::defaultHeader, json_encode($hook));
561
- }
562
-
563
/**
564
* Get the category information for a product.
565
* @param Mage_Catalog_Model_Product $product
566
* @return string
567
*/
568
private function _getCategoryInformation(Mage_Catalog_Model_Product $product) {
569
- $categorieField = '';
570
- $this->oldCatPath = '';
571
572
/** @var $category Mage_Catalog_Model_Category */
573
foreach($product->getCategoryCollection() as $category) {
574
- if (($this->oldCatPath == '') || (strpos($category->getPath(), $this->oldCatPath) != 0)) {
575
- // Start tree
576
- if ($this->oldCatPath != '') {
577
- if ($categorieField != '') {
578
- $categorieField = $categorieField . ', ' . $this->_allCat[$this->oldCatPath];
579
- } else {
580
- $categorieField = $this->_allCat[$this->oldCatPath];
581
- }
582
- }
583
- $this->oldCatPath = $category->getPath();
584
- } else {
585
- // Add to tree
586
- $this->oldCatPath = $category->getPath();
587
- }
588
-
589
}
590
591
- if ($categorieField != '') {
592
- $categorieField = $categorieField . ', ' . $this->_allCat[$this->oldCatPath];
593
- } else {
594
- if ($this->oldCatPath != '') {
595
- $categorieField = $this->_allCat[$this->oldCatPath];
596
- }
597
}
598
599
- return ltrim($categorieField, '>');
600
}
601
}
602
9
10
private $_storeId;
11
private $_siteId;
12
+ private $_customerGroupId;
13
private $_mediaUrl;
14
private $_webUrl;
15
private $_allCat;
16
private $_limit;
17
private $_last;
18
private $_blankProduct;
19
private $_configurableAttributes = array();
20
private $_imageBaseUrl;
21
private $_maxAdditionalImages;
22
private $_exportFields;
23
private $_currencyChange;
24
private $_replaceFields;
25
+ private $_parents;
26
+ private $_onlyStockAndPriceData;
27
+ private $_backendModel;
28
29
/**
30
* Handle status event
31
*
32
*/
33
+ public function handle() {
34
+ ini_set('max_execution_time', 7200);
35
$limit = Mage::app()->getRequest()->getParam('limit', null);
36
$store = Mage::app()->getRequest()->getParam('store', null);
37
$this->_limit = $limit;
38
$this->_last = Mage::app()->getRequest()->getParam('last', null);
39
try {
44
}
45
46
$this->initExport();
47
48
+ // start the xml output right now to output the exported products as soon as
49
+ // each product has been processed
50
+ header('Content-Type: text/xml; charset=utf-8');
51
+ echo '<?xml version="1.0"?>';
52
+ echo '<root><catalog>';
53
+
54
+ $this->_export();
55
+
56
+ echo "</catalog></root>";
57
}
58
59
/**
62
*/
63
private function _handleStoreException() {
64
// The exception thrown by Mage::app()->getStore() has an empty message ...
65
+ $xml = new SimpleXMLElement('<root></root>');
66
+ $xml->addChild('error', 'Error retrieving store.');
67
+ header('Content-Type: text/xml; charset=utf-8');
68
+ echo $xml->asXML();
69
+ exit();
70
}
71
72
/**
79
if ($currencyCode && $currencyCode != '') {
80
$result = Mage::getModel('directory/currency')->getCurrencyRates(Mage::app()->getBaseCurrencyCode(), $currencyCode);
81
if(count($result) === 0){
82
+ $xml = new SimpleXMLElement('<root></root>');
83
+ $xml->addChild('error', 'wrong currency');
84
+ header('Content-Type: text/xml; charset=utf-8');
85
+ echo $xml->asXML();
86
+ exit();
87
}
88
$this->_currencyChange = $result[$currencyCode];
89
}
93
* Initialize the export.
94
*/
95
private function initExport() {
96
// Initialize the admin application
97
Mage::app('admin');
98
127
try {
128
$store = Mage::app()->getStore($this->_storeId);
129
$this->_siteId = $store->getWebsiteId();
130
+ $this->_customerGroupId = Mage_Customer_Model_Group::NOT_LOGGED_IN_ID;
131
$this->_webUrl = $store->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
132
$this->_mediaUrl = $store->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA);
133
} catch (Exception $e) {
147
$this->_maxAdditionalImages = Mage::getStoreConfig('channelpilot_export/channelpilot_productfeed/channelpilot_imagenumber');
148
$this->_exportFields = unserialize(Mage::getStoreConfig('channelpilot_export/channelpilot_productfeed/channelpilot_exportfields'));
149
$this->_replaceFields = unserialize(Mage::getStoreConfig('channelpilot_export/channelpilot_productfeed/channelpilot_replacefields'));
150
+
151
+ $this->_parents = array();
152
}
153
154
/**
156
*/
157
public function buildCategoryTree() {
158
$this->_allCat = array();
159
160
$categoryCollection = Mage::getModel('catalog/category')->getCollection()
161
->addAttributeToSelect('name')
235
return $attributeOptions;
236
}
237
238
+ /**
239
+ * Callback function used for the collection iterator.
240
+ * The function receives an array containing the fetched row from the database.
241
+ * Saves the product to export in the _productData array.
242
+ * @param $args array
243
+ */
244
+ public function productCallback($args)
245
+ {
246
+ $product = Mage::getModel('catalog/product');
247
+ $product->setData($args['row']);
248
+
249
+ if($this->_onlyStockAndPriceData) {
250
+ $result = $this->_getOnlyStockAndPriceData($product);
251
+ } else {
252
+ $this->_backendModel->afterLoad($product);
253
+ $result = $this->_getFullProductData($product);
254
+ }
255
+
256
+ // instead of saving the result and creating the complete xml later,
257
+ // the xml for the product is created and echoed right now to improve time and memory usage
258
+ $productXml = new SimpleXMLElement('<product></product>');
259
+ $this->_productToXml($result, $productXml);
260
+ $dom = dom_import_simplexml($productXml);
261
+ echo $dom->ownerDocument->saveXML($dom->ownerDocument->documentElement);
262
+ }
263
+
264
+ /**
265
+ * Get all attributes that need to be selected from the database.
266
+ * @param $attributes array
267
+ * @return array
268
+ */
269
+ private function _getAttributesForSelect($attributes) {
270
+ $attributesToSelect = array(
271
+ 'entity_id',
272
+ 'sku',
273
+ 'name',
274
+ 'description',
275
+ 'price',
276
+ 'manufacturer',
277
+ 'color',
278
+ 'weight',
279
+ 'media_gallery',
280
+ 'url_key',
281
+ 'url_path',
282
+ 'image',
283
+ 'type_id'
284
+ );
285
+
286
+ $attributeCodes = array();
287
+
288
+ // save all available attribute codes
289
+ foreach($attributes as $code => $attribute) {
290
+ $attributeCodes[] = $code;
291
+ }
292
+
293
+ // add all attributes from the config if the attribute is a Magento attribute and it has
294
+ // not already been added to the $attributesToSelect array
295
+ foreach($this->_exportFields as $field) {
296
+ $attrCode = $field['productattribute'];
297
+ if(in_array($attrCode, $attributeCodes) && !in_array($attrCode, $attributesToSelect)) {
298
+ $attributesToSelect[] = $attrCode;
299
+ }
300
+ }
301
+
302
+ return $attributesToSelect;
303
+
304
+ }
305
+
306
/**
307
* Export the products and return them as array.
308
* @return array
325
}
326
327
/** @var $collection Mage_Catalog_Model_Resource_Product_Collection */
328
+ $collection = Mage::getModel('catalog/product')->getCollection();
329
+ $attributes = $collection->getEntity()->loadAllAttributes()->getAttributesByCode();
330
+
331
+ // only use the needed attributes instead of every available
332
+ $attributeCodes = $this->_getAttributesForSelect($attributes);
333
+
334
+ // addPriceData uses inner join to get the price data for a website_id and a customer_group id
335
+ // so all products that are not associated to $this->_siteId and the customerGroupId (NOT LOGGED IN (0) by default)
336
+ // are not included in this collection.
337
+ // addPriceData is needed for getting the minimal price for bundels
338
+ $collection
339
+ ->addAttributeToSelect($attributeCodes, 'left')
340
+ ->addPriceData($this->_customerGroupId, $this->_siteId)
341
->joinField('qty',
342
'cataloginventory/stock_item',
343
'qty',
344
'product_id=entity_id',
345
'{{table}}.stock_id=1',
346
'left')
347
+ ->joinField('min_sale_qty',
348
+ 'cataloginventory/stock_item',
349
+ 'min_sale_qty',
350
+ 'product_id=entity_id',
351
+ '{{table}}.stock_id=1',
352
+ 'left')
353
+ ->joinField('max_sale_qty',
354
+ 'cataloginventory/stock_item',
355
+ 'max_sale_qty',
356
+ 'product_id=entity_id',
357
+ '{{table}}.stock_id=1',
358
+ 'left')
359
+ ->joinField('is_in_stock',
360
+ 'cataloginventory/stock_item',
361
+ 'is_in_stock',
362
+ 'product_id=entity_id',
363
+ '{{table}}.stock_id=1',
364
+ 'left')
365
->addAttributeToSort('type_id')
366
->setStoreId($this->_storeId);
367
380
}
381
}
382
383
+ $this->_backendModel = $collection->getResource()->getAttribute('media_gallery')->getBackend();
384
+ $this->_onlyStockAndPriceData = (Mage::app()->getRequest()->getParam('priceStock', '') === "true");
385
386
+ /** @var $iterator Mage_Core_Model_Resource_Iterator */
387
+ $iterator = Mage::getSingleton('core/resource_iterator');
388
+ $iterator->walk($collection->getSelect(), array(array($this, 'productCallback')));
389
390
// stop emulating admin store and set initial environment
391
if ($flatEnabled) {
392
$emulationModel->stopEnvironmentEmulation($initialEnvironmentInfo);
393
}
394
}
395
396
/**
412
$parentId = null;
413
if ($item->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_SIMPLE) {
414
$parentId = Mage::getModel('catalog/product_type_configurable')->getParentIdsByChild($item->getId());
415
+ $parentId = (is_array($parentId) && !empty($parentId)) ? $parentId[0] : null;
416
}
417
418
$configurableAttributes = array();
427
// workaround... $item->getProductUrl() sometimes adds store code to url (e.g. <url>?___store=default)
428
$productUrl = $this->_webUrl . $item->getUrlPath();
429
$colorText = $item->getAttributeText('color');
430
+
431
+ // set the value to the minimal price if the current product is a bundle, otherwise the product's price
432
+ $calcPrice = ($item->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_BUNDLE) ? Mage::getModel('bundle/product_price')->getTotalPrices($item, 'min', true, false) : $item->getPrice();
433
+
434
+ $rulePrice = Mage::getModel('catalogrule/rule')->calcProductPriceRule($item->setStoreId($this->_storeId),$calcPrice);
435
+ $price = ($rulePrice) ? $rulePrice : $calcPrice;
436
437
$product = $this->_blankProduct;
438
440
$product['sku'] = $item->getSku();
441
$product['parent_id'] = $parentId;
442
$product['variationTheme'] = $configurableAttributes;
443
+ $product['name'] = $this->_getCleanedStringForXml($item->getName());
444
+ $product['description'] = $this->_getCleanedStringForXml($item->getDescription());
445
446
$product['price'] = $price;
447
if($this->_currencyChange) {
449
}
450
451
$product['categories'] = $this->_getCategoryInformation($item);
452
+ $product['manufacturer'] = $this->_getCleanedStringForXml($item->getManufacturer());
453
+ $product['manufacturer_name'] = $this->_getCleanedStringForXml($item->getAttributeText('manufacturer'));
454
$product['cp_product_url'] = $productUrl;
455
$product['cp_image_url'] = $imageUrl;
456
+ $product['color'] = ($colorText) ? $this->_getCleanedStringForXml($colorText) : null;
457
$product['weight'] = $item->getWeight();
458
459
+ $product = array_merge($product, $this->_getAdditionalImages($item));
460
+
461
+ $product['is_parent'] = $isParent;
462
+
463
+ $this->_addExportFields($product, $item);
464
+
465
+ if(!empty($this->_replaceFields) && !$isParent && $parentId !== null) {
466
+ $this->_replaceFields($product, $parentId);
467
+ }
468
+
469
+ return $product;
470
+ }
471
+
472
+ /**
473
+ * Get the additional images for a product
474
+ * @param Mage_Catalog_Model_Product $product
475
+ * @return array
476
+ */
477
+ private function _getAdditionalImages(Mage_Catalog_Model_Product $product) {
478
$counter = 1;
479
+ $productData = array();
480
+ foreach ($product->getMediaGalleryImages() as $image) {
481
// break if the maximum amount of additional images has been reached
482
if ($counter > $this->_maxAdditionalImages) {
483
break;
484
}
485
486
// ignore the base image; it has already been added
487
+ if ($image->getFile() == $product->getImage()) {
488
continue;
489
}
490
491
+ $productData['cp_additional_image_' . $counter] = $this->_imageBaseUrl . $image->getFile();
492
$counter++;
493
}
494
495
+ return $productData;
496
+ }
497
498
+ /**
499
+ * Add all fields to a product that need to be exported
500
+ * @param $product
501
+ * @param Mage_Catalog_Model_Product $item
502
+ */
503
+ private function _addExportFields(&$product, Mage_Catalog_Model_Product $item) {
504
foreach($this->_exportFields as $field) {
505
$code = $field['productattribute'];
506
if(strpos($code, 'group_price') !== false) {
510
$product['group_price_'.$groupCode] = $item->getData('group_price_'.$customerGroup->getId());
511
} else {
512
switch($code) {
513
+ // ignore
514
+ case 'parent_id':
515
+ break;
516
case 'qty':
517
$product[$code] = $item->getQty();
518
break;
519
case 'stock_status':
520
+ $product[$code] = $item->getIsInStock();
521
break;
522
+ case 'min_sale_qty':
523
+ case 'max_sale_qty':
524
case 'tax_class_id':
525
$product[$code] = $item->getData($code);
526
break;
527
default:
528
+ $attributeText = ($item->getResource()->getAttribute($code)) ? $item->getAttributeText($code) : false;
529
if(is_array($attributeText)) {
530
$attributeText = implode(',',$attributeText);
531
}
532
+ $product[$code] = ($attributeText) ? $this->_getCleanedStringForXml($attributeText) : $this->_getCleanedStringForXml($item->getData($code));
533
}
534
}
535
}
536
+ }
537
538
+ /**
539
+ * Replace all selected fields with the parent's values.
540
+ * @param $product
541
+ * @param $parentId
542
+ */
543
+ private function _replaceFields(&$product, $parentId) {
544
+ $parent = $this->_getParentById($parentId);
545
+ if($parent !== null && $parent->getId()) {
546
+ $parentImages = $this->_getAdditionalImages($parent);
547
foreach($this->_replaceFields as $field) {
548
$code = $field['productattribute'];
549
if(strpos($code, 'group_price') !== false) {
556
$product['group_price_'.$groupCode] = $groupPrice['price'];
557
}
558
}
559
+ } else if(strpos($code, 'cp_additional_image') !== false && isset($parentImages[$code])) {
560
+ $product[$code] = $parentImages[$code];
561
} else {
562
switch($code) {
563
+ case 'categories':
564
+ $product['categories'] = $this->_getCategoryInformation($parent);
565
+ break;
566
+ case 'cp_product_url':
567
+ $product[$code] = $this->_webUrl . $parent->getUrlPath();
568
+ break;
569
+ case 'cp_image_url':
570
+ $product[$code] = $this->_imageBaseUrl . $parent->getImage();
571
+ break;
572
case 'qty':
573
+ $product[$code] = $parent->getStockItem()->getQty();
574
break;
575
case 'stock_status':
576
$product[$code] = $parent->getStockItem()->getIsInStock();
577
break;
578
+ case 'min_sale_qty':
579
+ $product[$code] = $parent->getStockItem()->getMinSaleQty();
580
+ break;
581
+ case 'max_sale_qty':
582
+ $product[$code] = $parent->getStockItem()->getMaxSaleQty();
583
+ break;
584
case 'tax_class_id':
585
$product[$code] = $parent->getData($code);
586
break;
587
default:
588
+ $attributeText = ($parent->getResource()->getAttribute($code)) ? $parent->getAttributeText($code) : false;
589
if(is_array($attributeText)) {
590
$attributeText = implode(',',$attributeText);
591
}
592
+ $product[$code] = ($attributeText) ? $this->_getCleanedStringForXml($attributeText) : $this->_getCleanedStringForXml($parent->getData($code));
593
}
594
}
595
}
596
}
597
}
598
599
/**
620
return $product;
621
}
622
623
/**
624
* Adds the values of the $product array to the $xml structure.
625
* @param array $product
636
}
637
}
638
639
/**
640
* Get the category information for a product.
641
* @param Mage_Catalog_Model_Product $product
642
* @return string
643
*/
644
private function _getCategoryInformation(Mage_Catalog_Model_Product $product) {
645
+ $arrPath = array();
646
647
/** @var $category Mage_Catalog_Model_Category */
648
foreach($product->getCategoryCollection() as $category) {
649
+ $arrPath[] = $this->_allCat[$category->getPath()];
650
}
651
652
+ return ltrim(implode(',', $arrPath), '>');
653
+ }
654
+
655
+ /**
656
+ * Get a product by its id. Save the loaded product to an array to cache it.
657
+ * It is used for parent products only so these products do not need to be loaded by each
658
+ * of its child products.
659
+ * @param $parentId
660
+ * @return mixed
661
+ */
662
+ private function _getParentById($parentId) {
663
+ if(!isset($this->_parents[$parentId])) {
664
+ $parent = Mage::getModel('catalog/product')->load($parentId);
665
+ $this->_parents[$parentId] = ($parent->getId()) ? $parent : null;
666
}
667
+ return $this->_parents[$parentId];
668
+ }
669
+
670
+ /**
671
+ * Clean a string for usage in XML.
672
+ * @param $string
673
+ * @return mixed
674
+ */
675
+ private function _getCleanedStringForXml($string) {
676
+ return $this->_utf8ForXml(html_entity_decode($string));
677
+ }
678
679
+ /**
680
+ * Replace all UTF-8 characters that are not allowed in XML with a space.
681
+ * @param $string
682
+ * @return mixed
683
+ */
684
+ private function _utf8ForXml($string) {
685
+ return preg_replace ('/[^\x{0009}\x{000a}\x{000d}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}]+/u', ' ', $string);
686
}
687
}
688
app/code/community/Channelpilotsolutions/Channelpilot/Helper/handler/CPOrderHandler.php CHANGED
@@ -86,10 +86,21 @@ class CPOrderHandler extends CPAbstractHandler {
86
87
private function _getQuote($apiOrder) {
88
try {
89
- $quote = Mage::getModel('sales/quote')->setStoreId($this->shopId);
90
$customer = self::getCustomer($apiOrder);
91
$quote->assignCustomer($customer);
92
93
foreach ($apiOrder->itemsOrdered as $orderItem) {
94
$product = $this->getProduct($orderItem->article->id);
95
if ($product == null) {
@@ -129,6 +140,10 @@ class CPOrderHandler extends CPAbstractHandler {
129
130
$quote->collectTotals()->save();
131
132
return $quote;
133
} catch(Exception $e) {
134
CPErrorHandler::logError("Exception during _getQuote: " . $e->getMessage() . "\n" . $e->getTraceAsString());
@@ -247,19 +262,22 @@ class CPOrderHandler extends CPAbstractHandler {
247
foreach ($apiOrder->itemsOrdered as $orderItem) {
248
if ($orderItem->article->id == $item->getSku() || $orderItem->article->id == $item->getProductId()) {
249
$item->setPrice($orderItem->costsSingle->net);
250
- $item->setCustomPrice($orderItem->costsSingle->net);
251
$item->setBasePrice($orderItem->costsSingle->net);
252
- $item->setOriginalCustomPrice($orderItem->costsSingle->net);
253
- $item->setOriginalPrice($orderItem->costsSingle->net);
254
- $item->setTaxAmount($orderItem->costsTotal->tax);
255
$item->setTaxPercent($orderItem->costsTotal->taxRate);
256
$item->setRowTotal($orderItem->costsTotal->net);
257
- $item->setRowTotalInclTax($orderItem->costsTotal->gross);
258
- $item->setPriceInclTax($orderItem->costsSingle->gross);
259
- $item->setBaseOriginalPrice($orderItem->costsSingle->net);
260
$item->setBaseRowTotal($orderItem->costsTotal->net);
261
- $item->setBasePriceInclTax($orderItem->costsSingle->gross);
262
$item->setBaseRowTotalInclTax($orderItem->costsTotal->gross);
263
$item->save();
264
$orderItem->id = $item->getId();
265
$orderItemsResponse[] = $orderItem;
@@ -292,7 +310,7 @@ class CPOrderHandler extends CPAbstractHandler {
292
->addFieldToFilter('order_id', array('eq' => $order->getId()));
293
$collection->walk('delete');
294
$marketplaceOrder = Mage::getModel('channelpilot/order')->load($order->getId());
295
- $marketplaceOrder->delete();
296
Mage::register('isSecureArea', true);
297
Mage::app('admin');
298
$order->delete();
@@ -303,17 +321,28 @@ class CPOrderHandler extends CPAbstractHandler {
303
return $apiOrder;
304
}
305
$apiOrder->itemsOrdered = $orderItemsResponse;
306
$order->setBaseSubtotal($apiOrder->summary->totalSumItems->net);
307
- $order->setBaseTaxAmount($apiOrder->summary->totalSumItems->tax);
308
- // $order->setBaseDiscountAmount(...);
309
- $order->setBaseShippingAmount($apiOrder->shipping->costs->gross);
310
$order->setBaseGrandTotal($apiOrder->summary->totalSumOrder->gross);
311
-
312
- $order->setSubtotal($apiOrder->summary->totalSumItems->net);
313
- $order->setTaxAmount($apiOrder->summary->totalSumItems->tax);
314
- // $order->setDiscountAmount(...);
315
- $order->setShippingAmount($apiOrder->shipping->costs->gross);
316
- $order->setGrandTotal($apiOrder->summary->totalSumOrder->gross);
317
318
$order->setCreatedAt($apiOrder->orderHeader->orderTime);
319
@@ -335,7 +364,7 @@ class CPOrderHandler extends CPAbstractHandler {
335
$apiOrder->orderHeader->status->errorMessage = "Exception during importOrder: " . $e->getMessage();
336
$apiOrder->orderHeader->status->errorCode = CPResultCodes::SYSTEM_ERROR;
337
}
338
- //$this->ordersImported[] = $order->getIncrementId();
339
return $apiOrder;
340
}
341
@@ -456,9 +485,11 @@ class CPOrderHandler extends CPAbstractHandler {
456
} else {
457
$customer->firstname = $apiOrder->customer->nameFirst;
458
$customer->lastname = $apiOrder->customer->nameLast;
459
- foreach ($apiOrder->customer->customerGroups as $userGroup) {
460
- $customer->setData('group_id', $userGroup->id);
461
- }
462
if ($apiOrder->addressInvoice->genderId == 1) {
463
$customer->setGender(
464
Mage::getResourceModel('customer/customer')
86
87
private function _getQuote($apiOrder) {
88
try {
89
+ $useAdminMode = Mage::getStoreConfigFlag('channelpilot_marketplace/channelpilot_marketplace/use_admin_mode');
90
+ /** @var $quote Mage_Sales_Model_Quote */
91
+ $quote = ($useAdminMode) ? Mage::getSingleton('adminhtml/session_quote')->getQuote()->setStoreId($this->shopId) : Mage::getModel('sales/quote')->setStoreId($this->shopId);
92
$customer = self::getCustomer($apiOrder);
93
$quote->assignCustomer($customer);
94
95
+ $useEmulation = false;
96
+ if($useAdminMode && class_exists('Mage_Core_Model_App_Emulation')) {
97
+ /* @var $emulationModel Mage_Core_Model_App_Emulation */
98
+ $emulationModel = Mage::getModel('core/app_emulation');
99
+ // emulate admin store to ignore restrictions like min_sale_qty
100
+ $initialEnvironmentInfo = $emulationModel->startEnvironmentEmulation(0, Mage_Core_Model_App_Area::AREA_ADMINHTML);
101
+ $useEmulation = true;
102
+ }
103
+
104
foreach ($apiOrder->itemsOrdered as $orderItem) {
105
$product = $this->getProduct($orderItem->article->id);
106
if ($product == null) {
140
141
$quote->collectTotals()->save();
142
143
+ if($useAdminMode && $useEmulation) {
144
+ $emulationModel->stopEnvironmentEmulation($initialEnvironmentInfo);
145
+ }
146
+
147
return $quote;
148
} catch(Exception $e) {
149
CPErrorHandler::logError("Exception during _getQuote: " . $e->getMessage() . "\n" . $e->getTraceAsString());
262
foreach ($apiOrder->itemsOrdered as $orderItem) {
263
if ($orderItem->article->id == $item->getSku() || $orderItem->article->id == $item->getProductId()) {
264
$item->setPrice($orderItem->costsSingle->net);
265
$item->setBasePrice($orderItem->costsSingle->net);
266
+ $item->setPriceInclTax($orderItem->costsSingle->gross);
267
+ $item->setBasePriceInclTax($orderItem->costsSingle->gross);
268
+
269
+ $item->setOriginalPrice($orderItem->costsSingle->gross);
270
+ $item->setBaseOriginalPrice($orderItem->costsSingle->gross);
271
+
272
$item->setTaxPercent($orderItem->costsTotal->taxRate);
273
+ $item->setTaxAmount($orderItem->costsTotal->tax);
274
+ $item->setBaseTaxAmount($orderItem->costsTotal->tax);
275
+
276
$item->setRowTotal($orderItem->costsTotal->net);
277
$item->setBaseRowTotal($orderItem->costsTotal->net);
278
+ $item->setRowTotalInclTax($orderItem->costsTotal->gross);
279
$item->setBaseRowTotalInclTax($orderItem->costsTotal->gross);
280
+
281
$item->save();
282
$orderItem->id = $item->getId();
283
$orderItemsResponse[] = $orderItem;
310
->addFieldToFilter('order_id', array('eq' => $order->getId()));
311
$collection->walk('delete');
312
$marketplaceOrder = Mage::getModel('channelpilot/order')->load($order->getId());
313
+ $marketplaceOrder->delete();
314
Mage::register('isSecureArea', true);
315
Mage::app('admin');
316
$order->delete();
321
return $apiOrder;
322
}
323
$apiOrder->itemsOrdered = $orderItemsResponse;
324
+
325
+ // Subtotal
326
$order->setBaseSubtotal($apiOrder->summary->totalSumItems->net);
327
+ $order->setSubtotal($apiOrder->summary->totalSumItems->net);
328
+ $order->setBaseSubtotalInclTax($apiOrder->summary->totalSumItems->gross);
329
+ $order->setSubtotalInclTax($apiOrder->summary->totalSumItems->gross);
330
+
331
+ // Tax
332
+ $order->setBaseTaxAmount($apiOrder->summary->totalSumOrder->tax);
333
+ $order->setTaxAmount($apiOrder->summary->totalSumOrder->tax);
334
+ $order->setBaseShippingTaxAmount($apiOrder->shipping->costs->tax);
335
+ $order->setShippingTaxAmount($apiOrder->shipping->costs->tax);
336
+
337
+ // Shipping
338
+ $order->setBaseShippingAmount($apiOrder->shipping->costs->net);
339
+ $order->setShippingAmount($apiOrder->shipping->costs->net);
340
+ $order->setShippingInclTax($apiOrder->shipping->costs->gross);
341
+ $order->setBaseShippingInclTax($apiOrder->shipping->costs->gross);
342
+
343
+ // Grand total
344
$order->setBaseGrandTotal($apiOrder->summary->totalSumOrder->gross);
345
+ $order->setGrandTotal($apiOrder->summary->totalSumOrder->gross);
346
347
$order->setCreatedAt($apiOrder->orderHeader->orderTime);
348
364
$apiOrder->orderHeader->status->errorMessage = "Exception during importOrder: " . $e->getMessage();
365
$apiOrder->orderHeader->status->errorCode = CPResultCodes::SYSTEM_ERROR;
366
}
367
+
368
return $apiOrder;
369
}
370
485
} else {
486
$customer->firstname = $apiOrder->customer->nameFirst;
487
$customer->lastname = $apiOrder->customer->nameLast;
488
+ if(isset($apiOrder->customer->customerGroups)) {
489
+ foreach ($apiOrder->customer->customerGroups as $userGroup) {
490
+ $customer->setData('group_id', $userGroup->id);
491
+ }
492
+ }
493
if ($apiOrder->addressInvoice->genderId == 1) {
494
$customer->setGender(
495
Mage::getResourceModel('customer/customer')
app/code/community/Channelpilotsolutions/Channelpilot/etc/config.xml CHANGED
@@ -24,7 +24,7 @@
24
<config>
25
<modules>
26
<Channelpilotsolutions_Channelpilot>
27
- <version>2.2.4</version>
28
</Channelpilotsolutions_Channelpilot>
29
</modules>
30
<global>
@@ -170,6 +170,7 @@
170
<channelpilot_marketplace>
171
<channelpilot_marketplace>
172
<channelpilot_useMarketplaces>0</channelpilot_useMarketplaces>
173
</channelpilot_marketplace>
174
</channelpilot_marketplace>
175
<channelpilot_pricecontrol>
24
<config>
25
<modules>
26
<Channelpilotsolutions_Channelpilot>
27
+ <version>2.2.5</version>
28
</Channelpilotsolutions_Channelpilot>
29
</modules>
30
<global>
170
<channelpilot_marketplace>
171
<channelpilot_marketplace>
172
<channelpilot_useMarketplaces>0</channelpilot_useMarketplaces>
173
+ <use_admin_mode>0</use_admin_mode>
174
</channelpilot_marketplace>
175
</channelpilot_marketplace>
176
<channelpilot_pricecontrol>
app/code/community/Channelpilotsolutions/Channelpilot/etc/system.xml CHANGED
@@ -24,7 +24,6 @@
24
<config>
25
<tabs>
26
<channelpilot_config translate="label" module="channelpilot">
27
- <!--<label>Channelpilot</label>-->
28
<label><![CDATA[<div style="overflow:hidden; background-image: url('https://go.channelpilot.com/css/gfx/logo.channelPilot.png');background-size: 150px; background-repeat: no-repeat; background-position: -4px -9px;"><div style="display:block; height: 20px;"></div></div>]]></label>
29
<class>tab-channelpilot</class>
30
<sort_order>401</sort_order>
@@ -292,33 +291,16 @@
292
<show_in_website>1</show_in_website>
293
<show_in_store>1</show_in_store>
294
</channelpilot_orderStatusImportedUnpayed>
295
- <!-- <channelpilot_orderStatusPayed>
296
- <label>CP OrderStatus Payed?</label>
297
- <frontend_type>select</frontend_type>
298
- <source_model>channelpilot_adminhtml/orderstatus_values</source_model>
299
- <sort_order>3</sort_order>
300
- <show_in_default>1</show_in_default>
301
- <show_in_website>1</show_in_website>
302
- <show_in_store>1</show_in_store>
303
- </channelpilot_orderStatusPayed>
304
- <channelpilot_orderStatusCancelled>
305
- <label>CP OrderStatus Cancelled?</label>
306
- <frontend_type>select</frontend_type>
307
- <source_model>channelpilot_adminhtml/orderstatus_values</source_model>
308
- <sort_order>4</sort_order>
309
- <show_in_default>1</show_in_default>
310
- <show_in_website>1</show_in_website>
311
- <show_in_store>1</show_in_store>
312
- </channelpilot_orderStatusCancelled>
313
- <channelpilot_orderStatusDeliveried>
314
- <label>CP OrderStatus Deliveried?</label>
315
- <frontend_type>select</frontend_type>
316
- <source_model>channelpilot_adminhtml/orderstatus_values</source_model>
317
- <sort_order>5</sort_order>
318
- <show_in_default>1</show_in_default>
319
- <show_in_website>1</show_in_website>
320
- <show_in_store>1</show_in_store>
321
- </channelpilot_orderStatusDeliveried>-->
322
</fields>
323
</channelpilot_marketplace>
324
</groups>
@@ -377,15 +359,6 @@
377
<show_in_website>1</show_in_website>
378
<show_in_store>1</show_in_store>
379
<fields>
380
- <!-- <channelpilot_usePricecontrol>
381
- <label>Active</label>
382
- <frontend_type>select</frontend_type>
383
- <source_model>channelpilot_adminhtml/truefalse_values</source_model>
384
- <sort_order>0</sort_order>
385
- <show_in_default>1</show_in_default>
386
- <show_in_website>1</show_in_website>
387
- <show_in_store>1</show_in_store>
388
- </channelpilot_usePricecontrol>-->
389
<channelpilot_generalPriceField>
390
<label>CP Field for price</label>
391
<comment>CP This field would be overwritten by the new product price.</comment>
@@ -398,25 +371,6 @@
398
</channelpilot_generalPriceField>
399
</fields>
400
</general_prices>
401
- <!-- <campaign_prices translate="label">
402
- <label>Campaign Price Control</label>
403
- <frontend_type>text</frontend_type>
404
- <sort_order>3</sort_order>
405
- <show_in_default>1</show_in_default>
406
- <show_in_website>1</show_in_website>
407
- <show_in_store>1</show_in_store>
408
- <fields>
409
- <channelpilot_usePricecontrol>
410
- <label>Active</label>
411
- <frontend_type>select</frontend_type>
412
- <source_model>channelpilot_adminhtml/truefalse_values</source_model>
413
- <sort_order>0</sort_order>
414
- <show_in_default>1</show_in_default>
415
- <show_in_website>1</show_in_website>
416
- <show_in_store>1</show_in_store>
417
- </channelpilot_usePricecontrol>
418
- </fields>
419
- </campaign_prices>-->
420
</groups>
421
</channelpilot_pricecontrol>
422
<payment>
24
<config>
25
<tabs>
26
<channelpilot_config translate="label" module="channelpilot">
27
<label><![CDATA[<div style="overflow:hidden; background-image: url('https://go.channelpilot.com/css/gfx/logo.channelPilot.png');background-size: 150px; background-repeat: no-repeat; background-position: -4px -9px;"><div style="display:block; height: 20px;"></div></div>]]></label>
28
<class>tab-channelpilot</class>
29
<sort_order>401</sort_order>
291
<show_in_website>1</show_in_website>
292
<show_in_store>1</show_in_store>
293
</channelpilot_orderStatusImportedUnpayed>
294
+ <use_admin_mode translate="label comment">
295
+ <label>CP Use Admin Mode for order import</label>
296
+ <comment>CP When importing marketplace orders you can use the admin mode. When choosing the admin mode please note that all checks are disabled thar are normally applied, like: ordering a product which amount is less than the configured minimum allowed quantity in shopping cart, import orders which have products that are sold out or the available amount is less than the ordered amount.</comment>
297
+ <frontend_type>select</frontend_type>
298
+ <source_model>adminhtml/system_config_source_yesno</source_model>
299
+ <sort_order>40</sort_order>
300
+ <show_in_default>1</show_in_default>
301
+ <show_in_website>0</show_in_website>
302
+ <show_in_store>0</show_in_store>
303
+ </use_admin_mode>
304
</fields>
305
</channelpilot_marketplace>
306
</groups>
359
<show_in_website>1</show_in_website>
360
<show_in_store>1</show_in_store>
361
<fields>
362
<channelpilot_generalPriceField>
363
<label>CP Field for price</label>
364
<comment>CP This field would be overwritten by the new product price.</comment>
371
</channelpilot_generalPriceField>
372
</fields>
373
</general_prices>
374
</groups>
375
</channelpilot_pricecontrol>
376
<payment>
app/code/community/Channelpilotsolutions/Channelpilot/sql/channelpilot_setup/mysql4-upgrade-2.2.5-2.2.6.php ADDED
@@ -0,0 +1,60 @@
1
+ <?php
2
+ /**
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the GNU General Public License (GPL 3)
7
+ * that is bundled with this package in the file LICENSE.txt
8
+ *
9
+ * DISCLAIMER
10
+ *
11
+ * Do not edit or add to this file if you wish to upgrade Channelpilotsolutions_Channelpilot to newer
12
+ * versions in the future. If you wish to customize Channelpilotsolutions_Channelpilot for your
13
+ * needs please refer to http://www.channelpilot.com for more information.
14
+ *
15
+ * @category Channelpilotsolutions
16
+ * @package Channelpilotsolutions_Channelpilot
17
+ * @copyright Copyright (c) 2012 <info@channelpilot.com> - www.channelpilot.com
18
+ * @author Bj�rn Wehner <info@channelpilot.com>
19
+ * @license <http://www.gnu.org/licenses/> GNU General Public License (GPL 3)
20
+ * @link http://www.channelpilot.com
21
+ */
22
+
23
+ $installer = $this;
24
+
25
+ $installer->startSetup();
26
+ $adapter = $installer->getConnection();
27
+
28
+ /**
29
+ * Create table 'channelpilot/productexport'
30
+ */
31
+ $table = $adapter->newTable($installer->getTable('channelpilot/productexport'))
32
+ ->addColumn('id', Varien_Db_Ddl_Table::TYPE_INTEGER, 11, array(
33
+ 'auto_increment' => true,
34
+ 'unsigned' => true,
35
+ 'nullable' => false,
36
+ 'primary' => true,
37
+ ), 'id')
38
+ ->addColumn('product_id', Varien_Db_Ddl_Table::TYPE_INTEGER, 11, array(
39
+ 'nullable' => false,
40
+ 'unsigned' => true,
41
+ ), 'product_id')
42
+ ->addColumn('store_id', Varien_Db_Ddl_Table::TYPE_INTEGER, 11, array(
43
+ 'nullable' => false,
44
+ 'unsigned' => true,
45
+ ), 'store_id')
46
+ ->addColumn('is_update_needed', Varien_Db_Ddl_Table::TYPE_TINYINT, 1, array(
47
+ 'nullable' => false,
48
+ 'unsigned' => true,
49
+ 'default' => 1,
50
+ ), 'is_update_needed')
51
+ ->addColumn('product_data', Varien_Db_Ddl_Table::TYPE_TEXT, null, array(
52
+ 'nullable' => false,
53
+ 'unsigned' => true,
54
+ 'default' => '',
55
+ ), 'product_data');
56
+ $adapter->createTable($table);
57
+
58
+ $installer->endSetup();
59
+
60
+ Mage::getModel('channelpilot/productexport')->initializeProductExport();
app/locale/de_AT/Channelpilotsolutions_Channelpilot.csv CHANGED
@@ -65,4 +65,7 @@
65
66
"CP Tracking Method","Tracking Methode"
67
"CP Image","Bild"
68
- "CP JavaScript","JavaScript"
65
66
"CP Tracking Method","Tracking Methode"
67
"CP Image","Bild"
68
+ "CP JavaScript","JavaScript"
69
+
70
+ "CP Use Admin Mode for order import","Admin-Modus für den Import der Marktplatzbestellungen benutzen"
71
+ "CP When importing marketplace orders you can use the admin mode. When choosing the admin mode please note that all checks are disabled thar are normally applied, like: ordering a product which amount is less than the configured minimum allowed quantity in shopping cart, import orders which have products that are sold out or the available amount is less than the ordered amount.","Wenn Marktplatzbestellungen importiert werden kann der Admin-Modus genutz werden. Sollte dieser genutzt werden dann bedenken Sie bitte, dass sämtliche Prüfungen nicht durchlaufen werden die es normalerweise tun, wie: die bestellte Menge ist geringer als die eingestellte Mindestbestellmenge; Bestellungen werden importiert die Produkte haben die ausverkauft oder nur noch in einer geringeren Stückzahl vorhanden sind."
app/locale/de_CH/Channelpilotsolutions_Channelpilot.csv CHANGED
@@ -65,4 +65,7 @@
65
66
"CP Tracking Method","Tracking Methode"
67
"CP Image","Bild"
68
- "CP JavaScript","JavaScript"
65
66
"CP Tracking Method","Tracking Methode"
67
"CP Image","Bild"
68
+ "CP JavaScript","JavaScript"
69
+
70
+ "CP Use Admin Mode for order import","Admin-Modus für den Import der Marktplatzbestellungen benutzen"
71
+ "CP When importing marketplace orders you can use the admin mode. When choosing the admin mode please note that all checks are disabled thar are normally applied, like: ordering a product which amount is less than the configured minimum allowed quantity in shopping cart, import orders which have products that are sold out or the available amount is less than the ordered amount.","Wenn Marktplatzbestellungen importiert werden kann der Admin-Modus genutz werden. Sollte dieser genutzt werden dann bedenken Sie bitte, dass sämtliche Prüfungen nicht durchlaufen werden die es normalerweise tun, wie: die bestellte Menge ist geringer als die eingestellte Mindestbestellmenge; Bestellungen werden importiert die Produkte haben die ausverkauft oder nur noch in einer geringeren Stückzahl vorhanden sind."
app/locale/de_DE/Channelpilotsolutions_Channelpilot.csv CHANGED
@@ -65,4 +65,7 @@
65
66
"CP Tracking Method","Tracking Methode"
67
"CP Image","Bild"
68
- "CP JavaScript","JavaScript"
65
66
"CP Tracking Method","Tracking Methode"
67
"CP Image","Bild"
68
+ "CP JavaScript","JavaScript"
69
+
70
+ "CP Use Admin Mode for order import","Admin-Modus für den Import der Marktplatzbestellungen benutzen"
71
+ "CP When importing marketplace orders you can use the admin mode. When choosing the admin mode please note that all checks are disabled thar are normally applied, like: ordering a product which amount is less than the configured minimum allowed quantity in shopping cart, import orders which have products that are sold out or the available amount is less than the ordered amount.","Wenn Marktplatzbestellungen importiert werden kann der Admin-Modus genutz werden. Sollte dieser genutzt werden dann bedenken Sie bitte, dass sämtliche Prüfungen nicht durchlaufen werden die es normalerweise tun, wie: die bestellte Menge ist geringer als die eingestellte Mindestbestellmenge; Bestellungen werden importiert die Produkte haben die ausverkauft oder nur noch in einer geringeren Stückzahl vorhanden sind."
app/locale/en_AU/Channelpilotsolutions_Channelpilot.csv CHANGED
@@ -65,4 +65,7 @@
65
66
"CP Tracking Method","Tracking Method"
67
"CP Image","Image"
68
- "CP JavaScript","JavaScript"
65
66
"CP Tracking Method","Tracking Method"
67
"CP Image","Image"
68
+ "CP JavaScript","JavaScript"
69
+
70
+ "CP Use Admin Mode for order import","Use Admin Mode for order import"
71
+ "CP When importing marketplace orders you can use the admin mode. When choosing the admin mode please note that all checks are disabled thar are normally applied, like: ordering a product which amount is less than the configured minimum allowed quantity in shopping cart, import orders which have products that are sold out or the available amount is less than the ordered amount.","CP When importing marketplace orders you can use the admin mode. When choosing the admin mode please note that all checks are disabled thar are normally applied, like: ordering a product which amount is less than the configured minimum allowed quantity in shopping cart, import orders which have products that are sold out or the available amount is less than the ordered amount."
app/locale/en_CA/Channelpilotsolutions_Channelpilot.csv CHANGED
@@ -65,4 +65,7 @@
65
66
"CP Tracking Method","Tracking Method"
67
"CP Image","Image"
68
- "CP JavaScript","JavaScript"
65
66
"CP Tracking Method","Tracking Method"
67
"CP Image","Image"
68
+ "CP JavaScript","JavaScript"
69
+
70
+ "CP Use Admin Mode for order import","Use Admin Mode for order import"
71
+ "CP When importing marketplace orders you can use the admin mode. When choosing the admin mode please note that all checks are disabled thar are normally applied, like: ordering a product which amount is less than the configured minimum allowed quantity in shopping cart, import orders which have products that are sold out or the available amount is less than the ordered amount.","CP When importing marketplace orders you can use the admin mode. When choosing the admin mode please note that all checks are disabled thar are normally applied, like: ordering a product which amount is less than the configured minimum allowed quantity in shopping cart, import orders which have products that are sold out or the available amount is less than the ordered amount."
app/locale/en_GB/Channelpilotsolutions_Channelpilot.csv CHANGED
@@ -65,4 +65,7 @@
65
66
"CP Tracking Method","Tracking Method"
67
"CP Image","Image"
68
- "CP JavaScript","JavaScript"
65
66
"CP Tracking Method","Tracking Method"
67
"CP Image","Image"
68
+ "CP JavaScript","JavaScript"
69
+
70
+ "CP Use Admin Mode for order import","Use Admin Mode for order import"
71
+ "CP When importing marketplace orders you can use the admin mode. When choosing the admin mode please note that all checks are disabled thar are normally applied, like: ordering a product which amount is less than the configured minimum allowed quantity in shopping cart, import orders which have products that are sold out or the available amount is less than the ordered amount.","CP When importing marketplace orders you can use the admin mode. When choosing the admin mode please note that all checks are disabled thar are normally applied, like: ordering a product which amount is less than the configured minimum allowed quantity in shopping cart, import orders which have products that are sold out or the available amount is less than the ordered amount."
app/locale/en_IE/Channelpilotsolutions_Channelpilot.csv CHANGED
@@ -65,4 +65,7 @@
65
66
"CP Tracking Method","Tracking Method"
67
"CP Image","Image"
68
- "CP JavaScript","JavaScript"
65
66
"CP Tracking Method","Tracking Method"
67
"CP Image","Image"
68
+ "CP JavaScript","JavaScript"
69
+
70
+ "CP Use Admin Mode for order import","Use Admin Mode for order import"
71
+ "CP When importing marketplace orders you can use the admin mode. When choosing the admin mode please note that all checks are disabled thar are normally applied, like: ordering a product which amount is less than the configured minimum allowed quantity in shopping cart, import orders which have products that are sold out or the available amount is less than the ordered amount.","CP When importing marketplace orders you can use the admin mode. When choosing the admin mode please note that all checks are disabled thar are normally applied, like: ordering a product which amount is less than the configured minimum allowed quantity in shopping cart, import orders which have products that are sold out or the available amount is less than the ordered amount."
app/locale/en_NZ/Channelpilotsolutions_Channelpilot.csv CHANGED
@@ -65,4 +65,7 @@
65
66
"CP Tracking Method","Tracking Method"
67
"CP Image","Image"
68
- "CP JavaScript","JavaScript"
65
66
"CP Tracking Method","Tracking Method"
67
"CP Image","Image"
68
+ "CP JavaScript","JavaScript"
69
+
70
+ "CP Use Admin Mode for order import","Use Admin Mode for order import"
71
+ "CP When importing marketplace orders you can use the admin mode. When choosing the admin mode please note that all checks are disabled thar are normally applied, like: ordering a product which amount is less than the configured minimum allowed quantity in shopping cart, import orders which have products that are sold out or the available amount is less than the ordered amount.","CP When importing marketplace orders you can use the admin mode. When choosing the admin mode please note that all checks are disabled thar are normally applied, like: ordering a product which amount is less than the configured minimum allowed quantity in shopping cart, import orders which have products that are sold out or the available amount is less than the ordered amount."
app/locale/en_US/Channelpilotsolutions_Channelpilot.csv CHANGED
@@ -65,4 +65,7 @@
65
66
"CP Tracking Method","Tracking Method"
67
"CP Image","Image"
68
- "CP JavaScript","JavaScript"
65
66
"CP Tracking Method","Tracking Method"
67
"CP Image","Image"
68
+ "CP JavaScript","JavaScript"
69
+
70
+ "CP Use Admin Mode for order import","Use Admin Mode for order import"
71
+ "CP When importing marketplace orders you can use the admin mode. When choosing the admin mode please note that all checks are disabled thar are normally applied, like: ordering a product which amount is less than the configured minimum allowed quantity in shopping cart, import orders which have products that are sold out or the available amount is less than the ordered amount.","CP When importing marketplace orders you can use the admin mode. When choosing the admin mode please note that all checks are disabled thar are normally applied, like: ordering a product which amount is less than the configured minimum allowed quantity in shopping cart, import orders which have products that are sold out or the available amount is less than the ordered amount."
package.xml CHANGED
@@ -1,7 +1,7 @@
1
<?xml version="1.0"?>
2
<package>
3
<name>Channelpilotsolutions_Channelpilot</name>
4
- <version>2.2.4.1</version>
5
<stability>stable</stability>
6
<license uri="http://www.opensource.org/licenses/gpl-license.php">GPL</license>
7
<channel>community</channel>
@@ -26,11 +26,13 @@
26
&lt;li&gt;&lt;b&gt;ChannelPilot Multi-Platform:&lt;/b&gt; Access ChannelPilot on any device (e.g. computer, tablet or smartphone) and keep a firm hold on your online marketing- wherever you are!&lt;/li&gt;&#xD;
27
&lt;/ul&gt;&#xD;
28
Just get more information about ChannelPilot: &lt;a href="http://www.channelpilot.com"&gt;www.channelpilot.com&lt;/a&gt;</description>
29
- <notes>- general bugfixes</notes>
30
<authors><author><name>ChannelPilot Solutions GmbH</name><user>auto-converted</user><email>info@channelpilot.com</email></author></authors>
31
- <date>2015-09-28</date>
32
- <time>09:11:33</time>
33
- <contents><target name="magecommunity"><dir name="Channelpilotsolutions"><dir name="Channelpilot"><dir name="Adminhtml"><dir name="Model"><dir name="Articlenumber"><file name="Values.php" hash="f2744ef8301e25e096318f34eb97c2bf"/></dir><dir name="Cookiemode"><file name="Values.php" hash="1ec39f85bb7562c1b6a4614f759d9124"/></dir><dir name="Grossnet"><file name="Values.php" hash="11eaf553b0ec34299524ec6d5a9f1e13"/></dir><dir name="Imagenumber"><file name="Values.php" hash="010dbb2ec946627f338bc500d3d8d747"/></dir><dir name="Orderstatus"><file name="Values.php" hash="39823f1757a41c848ad4505d09aca9d2"/></dir><dir name="Pricefield"><file name="Values.php" hash="6b02dfa3fa93daafa8325d66a986b4ac"/></dir><dir name="Truefalse"><file name="Values.php" hash="e07f105d7d8dc9881690f162cd23472d"/></dir><dir name="Truefalsesecurity"><file name="Values.php" hash="509b5e1cc7cabbe179373bc0ed490499"/></dir></dir></dir><dir name="Block"><dir name="Adminhtml"><dir name="Field"><file name="Abstract.php" hash="fc0aae8ea2b0bc8aab16ecba459b8988"/><file name="Exportfields.php" hash="1db2b1b5e56f9e2ea8a0d688b9faa801"/><file name="Replacefields.php" hash="db29c6ffaf9f4abe394b8981d031969f"/><file name="Specialfields.php" hash="4723404c20af3390d6d820318b21c1f6"/><file name="Trackingkeys.php" hash="6164e184bf6ac2b1e81169251752a551"/></dir><file name="Hintlogo.php" hash="1daa84afa8820f71a0d1630ee2311da6"/></dir><dir name="Tracking"><file name="Tracking.php" hash="3be4cdf75739c3dc1078f90be82380c6"/></dir></dir><dir name="Helper"><dir name="api"><dir name="1_0"><dir name="responses"><file name="GetManagedArticlePricesResponse.php" hash="9ad5adee1952b9408b442449791a1f34"/><file name="GetNewMarketplaceOrdersResponse.php" hash="cd5db953a84759b93a35a360956c4624"/><file name="GetServerTimeResponse.php" hash="07d157639b5bf715aa3f93b0d9e4b736"/><file name="Response.php" hash="c76ce62707a862e1c59346c668055b5d"/><file name="UpdateArticleResult.php" hash="a014c60be447fbb9cf48c947c8e9822f"/><file name="UpdateArticlesResponse.php" hash="338619d50391d91defb5c9d41370022f"/><file name="UpdateOrderResult.php" hash="0fbd88371624270a8cb2c4209a89cfac"/><file name="UpdateOrdersResponse.php" hash="b0ad5828da633b05e654da393b15526a"/></dir><dir name="thin"><file name="CPAddress.php" hash="885fb4517335421fbd8cbc882ae336b1"/><file name="CPArticle.php" hash="1adce1ce33acdd0185dee06010040b18"/><file name="CPArticleUpdate.php" hash="45f514823895c754010f8f11a1ff683a"/><file name="CPAuth.php" hash="cf5fe570dbd98e3e6339b20cec826b7b"/><file name="CPCancellation.php" hash="9bf808e265e09d166466313405a167fc"/><file name="CPCustomer.php" hash="62babdf11e9b4d80ae0afbbf96ba329d"/><file name="CPDelivery.php" hash="a270104ae1c253adee0ad1ffb5e01c65"/><file name="CPDiscount.php" hash="5d6f2766869134a86761c12230dc32d1"/><file name="CPManagedArticlePrice.php" hash="65c4c0df04b7c8d20294874de11640d6"/><file name="CPMoney.php" hash="952131eccc8470e107c78e15c94b6495"/><file name="CPOrder.php" hash="32623885f664e9b5871fc48b6ba0c801"/><file name="CPOrderHeader.php" hash="828377182e8197c304f230a783606993"/><file name="CPOrderItem.php" hash="dfe2440a08e3d0f13e638fc4090e6c52"/><file name="CPOrderStatus.php" hash="e0e767388dd9a1ab8be5a990f1ab1259"/><file name="CPOrderSummary.php" hash="fceaa6a79b5fc892062681f518fd0243"/><file name="CPPayment.php" hash="698b42f377910ef04d50a545e599fbca"/><file name="CPResponseHeader.php" hash="53930210d68046183e3be306996ea9b9"/><file name="CPShipping.php" hash="eaddceace28cdc6ba72434a6321d8c47"/></dir><file name="CPResultCodes.php" hash="955180ee33f14b4afa93f6eb1b5df53f"/><file name="ChannelPilotSellerAPI_v1_0.php" hash="76f458bece7e3344d0ffa788370e2026"/></dir></dir><dir name="handler"><file name="CPAbstractHandler.php" hash="78518d108e7ed273ec33056504869763"/><file name="CPCancellationHandler.php" hash="e7470edc465be2a3608102549efc436f"/><file name="CPDebugHandler.php" hash="51845f353b8e3d94ec324c3a750d9cc7"/><file name="CPDeliveryHandler.php" hash="11eee388729b17b21938a067edd66e54"/><file name="CPErrorHandler.php" hash="5d728c064c068fdf8354fa87882e4dba"/><file name="CPExportHandler.php" hash="4c550f49e4f9e94cb0528e3d27431d6f"/><file name="CPNewPriceHandler.php" hash="e0c1be684439c2336dd240aff9d8647e"/><file name="CPNewsHandler.php" hash="10757d4bbb3d10a3090dab9587c86132"/><file name="CPOrderHandler.php" hash="30f24f19045b0a96f73eb60de413493e"/><file name="CPPaymentHandler.php" hash="8ebbfdd04b92a0f7d72a8cbe8ba183d4"/><file name="CPRegisterHandler.php" hash="8ea51b6fc2e7820a4bac3f5e52377112"/><file name="CPStatusHandler.php" hash="573384fb4856d085f036edbc9388c2cd"/></dir><dir name="responses"><file name="CPGetStatusHookResponse.php" hash="672609ebcaa23aa0de85aed04c7662d8"/><file name="CPHookResponse.php" hash="3cda426724f3b3b97df344b4e76fc805"/><file name="CPRegisterHookResponse.php" hash="206de6433d0795ebdabff98129cc2fb7"/></dir><dir name="special"><file name="CustomerFunctions.php" hash="0d343d3c9c3cb87232c833e0772f730e"/></dir><file name="CPErrors.php" hash="3659c38a1ed3be4aa4ec03d93e68a84e"/><file name="Data.php" hash="ab518fc37c2d152fc03b23ffbb317022"/></dir><dir name="Model"><dir name="Adminhtml"><dir name="Source"><file name="Trackingmethod.php" hash="e32ab184b05377af38e4d912022cb889"/></dir></dir><dir name="Carrier"><file name="Cpshipping.php" hash="689b093872e690a9b1b1b5173365e7f8"/></dir><dir name="Order"><file name="Item.php" hash="7e64ca596a4a66e7c5052d0981745cf8"/><file name="Shipment.php" hash="71651ad5489eca654f47e41fd12e79a6"/></dir><dir name="Resource"><dir name="Logs"><file name="Collection.php" hash="d02494433e6369ddd552e04db867e9d5"/></dir><dir name="Order"><dir name="Item"><file name="Collection.php" hash="954e3889a8b8f93510a36be1a13c2fb8"/></dir><dir name="Shipment"><file name="Collection.php" hash="6aa1fd002807916effa760169a2e769d"/></dir><file name="Collection.php" hash="00423726d837a71042527c588cfc4b11"/><file name="Item.php" hash="485669b3f6dd7646ae9299547dc3a88f"/><file name="Shipment.php" hash="5d1514d5721b501fda7e71e6a15f931d"/></dir><dir name="Prices"><file name="Collection.php" hash="6d49bf71e50a0d2b0e087d52036a08ef"/></dir><dir name="Registration"><file name="Collection.php" hash="81423be65cf2ee706203ac03b5e83236"/></dir><file name="Logs.php" hash="b406da96412148256028b8c73444b0d9"/><file name="Order.php" hash="be971d53867fafbbf7c582dbe860e107"/><file name="Prices.php" hash="30275edca721b6986ff6bd39648bf4eb"/><file name="Registration.php" hash="a9f4190c21762c3f39c9647291e8e194"/></dir><file name="Abstract.php" hash="26580a64f5ae3d005b68e4563dbb1aea"/><file name="Logs.php" hash="85c27d3b47cbd97fc197a1ba8ae60dc6"/><file name="Order.php" hash="431bda96fe598fbb5a64928b940d8c13"/><file name="Payment.php" hash="223ab9dec3315f3dada4298f0418151a"/><file name="Paymenttypes.php" hash="ca90419f6e4603be3f70a214d95177c3"/><file name="Prices.php" hash="c1c966c0a3001fee90d14c050f00b66a"/><file name="Registration.php" hash="0719bdd075942a8706ccae12a35e91af"/></dir><dir name="controllers"><file name="IndexController.php" hash="ca07da3c0b2c689e9c0a8e552b6c7004"/></dir><dir name="etc"><file name="adminhtml.xml" hash="8ad60dd724140db26bdf69b4baeabbc5"/><file name="config.xml" hash="ef8a6e40b2556f2deb4cb2d36490a6a8"/><file name="system.xml" hash="98c3360f19c9eaf1bf3ff0c61e63fbb8"/></dir><dir name="sql"><dir name="channelpilot_setup"><file name="mysql4-install-2.0.0.php" hash="f89d8be8b1ed7a6793ba6a2516de3528"/><file name="mysql4-upgrade-1.0.0-2.0.0.php" hash="12264e29678f7a56b002cd693dafd56f"/><file name="mysql4-upgrade-2.1.6-2.2.0.php" hash="4327290be3ce3226544515a72e6a74cf"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Channelpilotsolutions_Channelpilot.xml" hash="d14c5346561667941ef4f6e9e55666cd"/></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="Channelpilotsolutions"><file name="channelpilot.xml" hash="2952fa387aadf60f36b6fea9b5c69fb8"/></dir></dir><dir name="template"><dir name="Channelpilotsolutions"><file name="clicktracking_js.phtml" hash="20d1883b633d814587e5dd1661364fc1"/><file name="salestracking_js.phtml" hash="61c77c6fdab88cfac5989e7d47a8c5a4"/><file name="tracking_image.phtml" hash="f2477e9bf58ed34950b049db5af8a712"/></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="base"><dir name="default"><dir name="template"><dir name="channelpilotsolutions"><file name="array_dropdown.phtml" hash="5717b5f3ca67bb4da734572fdca1a907"/><file name="config_hint.phtml" hash="c92f883df809f89278492d1e22a352d7"/></dir></dir></dir></dir></dir></target><target name="magelocale"><dir name="de_DE"><file name="Channelpilotsolutions_Channelpilot.csv" hash="14e19cf146fdc5fd2d0f0e9b8d66ae0c"/></dir><dir name="de_CH"><file name="Channelpilotsolutions_Channelpilot.csv" hash="14e19cf146fdc5fd2d0f0e9b8d66ae0c"/></dir><dir name="de_AT"><file name="Channelpilotsolutions_Channelpilot.csv" hash="14e19cf146fdc5fd2d0f0e9b8d66ae0c"/></dir><dir name="fr_FR"><file name="Channelpilotsolutions_Channelpilot.csv" hash="23217faa0b1c623750bb91d1e324e082"/></dir><dir name="fr_CA"><file name="Channelpilotsolutions_Channelpilot.csv" hash="23217faa0b1c623750bb91d1e324e082"/></dir><dir name="en_AU"><file name="Channelpilotsolutions_Channelpilot.csv" hash="d0c9795eb2cc5c9c8fd9387bee78126c"/></dir><dir name="en_CA"><file name="Channelpilotsolutions_Channelpilot.csv" hash="d0c9795eb2cc5c9c8fd9387bee78126c"/></dir><dir name="en_GB"><file name="Channelpilotsolutions_Channelpilot.csv" hash="d0c9795eb2cc5c9c8fd9387bee78126c"/></dir><dir name="en_IE"><file name="Channelpilotsolutions_Channelpilot.csv" hash="d0c9795eb2cc5c9c8fd9387bee78126c"/></dir><dir name="en_NZ"><file name="Channelpilotsolutions_Channelpilot.csv" hash="d0c9795eb2cc5c9c8fd9387bee78126c"/></dir><dir name="en_US"><file name="Channelpilotsolutions_Channelpilot.csv" hash="d0c9795eb2cc5c9c8fd9387bee78126c"/></dir><dir name="es_AR"><file name="Channelpilotsolutions_Channelpilot.csv" hash="e457ab4f2c03c46e8ce69bc6eb1dcc25"/></dir><dir name="es_CL"><file name="Channelpilotsolutions_Channelpilot.csv" hash="e457ab4f2c03c46e8ce69bc6eb1dcc25"/></dir><dir name="es_CO"><file name="Channelpilotsolutions_Channelpilot.csv" hash="e457ab4f2c03c46e8ce69bc6eb1dcc25"/></dir><dir name="es_CR"><file name="Channelpilotsolutions_Channelpilot.csv" hash="e457ab4f2c03c46e8ce69bc6eb1dcc25"/></dir><dir name="es_ES"><file name="Channelpilotsolutions_Channelpilot.csv" hash="e457ab4f2c03c46e8ce69bc6eb1dcc25"/></dir><dir name="es_MX"><file name="Channelpilotsolutions_Channelpilot.csv" hash="e457ab4f2c03c46e8ce69bc6eb1dcc25"/></dir><dir name="es_PA"><file name="Channelpilotsolutions_Channelpilot.csv" hash="e457ab4f2c03c46e8ce69bc6eb1dcc25"/></dir><dir name="es_PE"><file name="Channelpilotsolutions_Channelpilot.csv" hash="e457ab4f2c03c46e8ce69bc6eb1dcc25"/></dir><dir name="es_VE"><file name="Channelpilotsolutions_Channelpilot.csv" hash="e457ab4f2c03c46e8ce69bc6eb1dcc25"/></dir></target></contents>
34
<compatible/>
35
<dependencies/>
36
</package>
1
<?xml version="1.0"?>
2
<package>
3
<name>Channelpilotsolutions_Channelpilot</name>
4
+ <version>2.2.5</version>
5
<stability>stable</stability>
6
<license uri="http://www.opensource.org/licenses/gpl-license.php">GPL</license>
7
<channel>community</channel>
26
&lt;li&gt;&lt;b&gt;ChannelPilot Multi-Platform:&lt;/b&gt; Access ChannelPilot on any device (e.g. computer, tablet or smartphone) and keep a firm hold on your online marketing- wherever you are!&lt;/li&gt;&#xD;
27
&lt;/ul&gt;&#xD;
28
Just get more information about ChannelPilot: &lt;a href="http://www.channelpilot.com"&gt;www.channelpilot.com&lt;/a&gt;</description>
29
+ <notes>- general bugfixes&#xD;
30
+ - improved performance for feed export&#xD;
31
+ - added support to use the admin area for order import</notes>
32
<authors><author><name>ChannelPilot Solutions GmbH</name><user>auto-converted</user><email>info@channelpilot.com</email></author></authors>
33
+ <date>2015-10-29</date>
34
+ <time>12:17:22</time>
35
+ <contents><target name="magecommunity"><dir name="Channelpilotsolutions"><dir name="Channelpilot"><dir name="Adminhtml"><dir name="Model"><dir name="Articlenumber"><file name="Values.php" hash="f2744ef8301e25e096318f34eb97c2bf"/></dir><dir name="Cookiemode"><file name="Values.php" hash="1ec39f85bb7562c1b6a4614f759d9124"/></dir><dir name="Grossnet"><file name="Values.php" hash="11eaf553b0ec34299524ec6d5a9f1e13"/></dir><dir name="Imagenumber"><file name="Values.php" hash="010dbb2ec946627f338bc500d3d8d747"/></dir><dir name="Orderstatus"><file name="Values.php" hash="39823f1757a41c848ad4505d09aca9d2"/></dir><dir name="Pricefield"><file name="Values.php" hash="6b02dfa3fa93daafa8325d66a986b4ac"/></dir><dir name="Truefalse"><file name="Values.php" hash="e07f105d7d8dc9881690f162cd23472d"/></dir><dir name="Truefalsesecurity"><file name="Values.php" hash="509b5e1cc7cabbe179373bc0ed490499"/></dir></dir></dir><dir name="Block"><dir name="Adminhtml"><dir name="Field"><file name="Abstract.php" hash="fc0aae8ea2b0bc8aab16ecba459b8988"/><file name="Exportfields.php" hash="8017ae4a421013309b731aff45bf997a"/><file name="Replacefields.php" hash="55266f9270660519a6ce1843048467e3"/><file name="Specialfields.php" hash="4723404c20af3390d6d820318b21c1f6"/><file name="Trackingkeys.php" hash="6164e184bf6ac2b1e81169251752a551"/></dir><file name="Hintlogo.php" hash="1daa84afa8820f71a0d1630ee2311da6"/></dir><dir name="Tracking"><file name="Tracking.php" hash="3be4cdf75739c3dc1078f90be82380c6"/></dir></dir><dir name="Helper"><dir name="api"><dir name="1_0"><dir name="responses"><file name="GetManagedArticlePricesResponse.php" hash="9ad5adee1952b9408b442449791a1f34"/><file name="GetNewMarketplaceOrdersResponse.php" hash="cd5db953a84759b93a35a360956c4624"/><file name="GetServerTimeResponse.php" hash="07d157639b5bf715aa3f93b0d9e4b736"/><file name="Response.php" hash="c76ce62707a862e1c59346c668055b5d"/><file name="UpdateArticleResult.php" hash="a014c60be447fbb9cf48c947c8e9822f"/><file name="UpdateArticlesResponse.php" hash="338619d50391d91defb5c9d41370022f"/><file name="UpdateOrderResult.php" hash="0fbd88371624270a8cb2c4209a89cfac"/><file name="UpdateOrdersResponse.php" hash="b0ad5828da633b05e654da393b15526a"/></dir><dir name="thin"><file name="CPAddress.php" hash="885fb4517335421fbd8cbc882ae336b1"/><file name="CPArticle.php" hash="1adce1ce33acdd0185dee06010040b18"/><file name="CPArticleUpdate.php" hash="45f514823895c754010f8f11a1ff683a"/><file name="CPAuth.php" hash="cf5fe570dbd98e3e6339b20cec826b7b"/><file name="CPCancellation.php" hash="9bf808e265e09d166466313405a167fc"/><file name="CPCustomer.php" hash="62babdf11e9b4d80ae0afbbf96ba329d"/><file name="CPDelivery.php" hash="a270104ae1c253adee0ad1ffb5e01c65"/><file name="CPDiscount.php" hash="5d6f2766869134a86761c12230dc32d1"/><file name="CPManagedArticlePrice.php" hash="65c4c0df04b7c8d20294874de11640d6"/><file name="CPMoney.php" hash="952131eccc8470e107c78e15c94b6495"/><file name="CPOrder.php" hash="32623885f664e9b5871fc48b6ba0c801"/><file name="CPOrderHeader.php" hash="828377182e8197c304f230a783606993"/><file name="CPOrderItem.php" hash="dfe2440a08e3d0f13e638fc4090e6c52"/><file name="CPOrderStatus.php" hash="e0e767388dd9a1ab8be5a990f1ab1259"/><file name="CPOrderSummary.php" hash="fceaa6a79b5fc892062681f518fd0243"/><file name="CPPayment.php" hash="698b42f377910ef04d50a545e599fbca"/><file name="CPResponseHeader.php" hash="53930210d68046183e3be306996ea9b9"/><file name="CPShipping.php" hash="eaddceace28cdc6ba72434a6321d8c47"/></dir><file name="CPResultCodes.php" hash="955180ee33f14b4afa93f6eb1b5df53f"/><file name="ChannelPilotSellerAPI_v1_0.php" hash="76f458bece7e3344d0ffa788370e2026"/></dir></dir><dir name="handler"><file name="CPAbstractHandler.php" hash="78518d108e7ed273ec33056504869763"/><file name="CPCancellationHandler.php" hash="e7470edc465be2a3608102549efc436f"/><file name="CPDebugHandler.php" hash="51845f353b8e3d94ec324c3a750d9cc7"/><file name="CPDeliveryHandler.php" hash="11eee388729b17b21938a067edd66e54"/><file name="CPErrorHandler.php" hash="5d728c064c068fdf8354fa87882e4dba"/><file name="CPExportHandler.php" hash="34952b631cb90ad0b556642537b07794"/><file name="CPNewPriceHandler.php" hash="e0c1be684439c2336dd240aff9d8647e"/><file name="CPNewsHandler.php" hash="10757d4bbb3d10a3090dab9587c86132"/><file name="CPOrderHandler.php" hash="cdf76d6674c506508610347d247c0b2f"/><file name="CPPaymentHandler.php" hash="8ebbfdd04b92a0f7d72a8cbe8ba183d4"/><file name="CPRegisterHandler.php" hash="8ea51b6fc2e7820a4bac3f5e52377112"/><file name="CPStatusHandler.php" hash="573384fb4856d085f036edbc9388c2cd"/></dir><dir name="responses"><file name="CPGetStatusHookResponse.php" hash="672609ebcaa23aa0de85aed04c7662d8"/><file name="CPHookResponse.php" hash="3cda426724f3b3b97df344b4e76fc805"/><file name="CPRegisterHookResponse.php" hash="206de6433d0795ebdabff98129cc2fb7"/></dir><dir name="special"><file name="CustomerFunctions.php" hash="0d343d3c9c3cb87232c833e0772f730e"/></dir><file name="CPErrors.php" hash="3659c38a1ed3be4aa4ec03d93e68a84e"/><file name="Data.php" hash="9222c52259fda441689e134102ca4c55"/></dir><dir name="Model"><dir name="Adminhtml"><dir name="Source"><file name="Trackingmethod.php" hash="e32ab184b05377af38e4d912022cb889"/></dir></dir><dir name="Carrier"><file name="Cpshipping.php" hash="689b093872e690a9b1b1b5173365e7f8"/></dir><dir name="Order"><file name="Item.php" hash="7e64ca596a4a66e7c5052d0981745cf8"/><file name="Shipment.php" hash="71651ad5489eca654f47e41fd12e79a6"/></dir><dir name="Resource"><dir name="Logs"><file name="Collection.php" hash="d02494433e6369ddd552e04db867e9d5"/></dir><dir name="Order"><dir name="Item"><file name="Collection.php" hash="954e3889a8b8f93510a36be1a13c2fb8"/></dir><dir name="Shipment"><file name="Collection.php" hash="6aa1fd002807916effa760169a2e769d"/></dir><file name="Collection.php" hash="00423726d837a71042527c588cfc4b11"/><file name="Item.php" hash="485669b3f6dd7646ae9299547dc3a88f"/><file name="Shipment.php" hash="5d1514d5721b501fda7e71e6a15f931d"/></dir><dir name="Prices"><file name="Collection.php" hash="6d49bf71e50a0d2b0e087d52036a08ef"/></dir><dir name="Registration"><file name="Collection.php" hash="81423be65cf2ee706203ac03b5e83236"/></dir><file name="Logs.php" hash="b406da96412148256028b8c73444b0d9"/><file name="Order.php" hash="be971d53867fafbbf7c582dbe860e107"/><file name="Prices.php" hash="30275edca721b6986ff6bd39648bf4eb"/><file name="Registration.php" hash="a9f4190c21762c3f39c9647291e8e194"/></dir><file name="Abstract.php" hash="26580a64f5ae3d005b68e4563dbb1aea"/><file name="Logs.php" hash="85c27d3b47cbd97fc197a1ba8ae60dc6"/><file name="Order.php" hash="431bda96fe598fbb5a64928b940d8c13"/><file name="Payment.php" hash="223ab9dec3315f3dada4298f0418151a"/><file name="Paymenttypes.php" hash="ca90419f6e4603be3f70a214d95177c3"/><file name="Prices.php" hash="c1c966c0a3001fee90d14c050f00b66a"/><file name="Registration.php" hash="0719bdd075942a8706ccae12a35e91af"/></dir><dir name="controllers"><file name="IndexController.php" hash="ca07da3c0b2c689e9c0a8e552b6c7004"/></dir><dir name="etc"><file name="adminhtml.xml" hash="8ad60dd724140db26bdf69b4baeabbc5"/><file name="config.xml" hash="f4f44ba0f796f938e79cd7eff1f4bc7b"/><file name="system.xml" hash="1555b7a34ad9fb281f5014acdd35cda6"/></dir><dir name="sql"><dir name="channelpilot_setup"><file name="mysql4-install-2.0.0.php" hash="f89d8be8b1ed7a6793ba6a2516de3528"/><file name="mysql4-upgrade-1.0.0-2.0.0.php" hash="12264e29678f7a56b002cd693dafd56f"/><file name="mysql4-upgrade-2.1.6-2.2.0.php" hash="4327290be3ce3226544515a72e6a74cf"/><file name="mysql4-upgrade-2.2.5-2.2.6.php" hash="b780b4273e42c73e1459935a003974b4"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Channelpilotsolutions_Channelpilot.xml" hash="d14c5346561667941ef4f6e9e55666cd"/></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="Channelpilotsolutions"><file name="channelpilot.xml" hash="2952fa387aadf60f36b6fea9b5c69fb8"/></dir></dir><dir name="template"><dir name="Channelpilotsolutions"><file name="clicktracking_js.phtml" hash="20d1883b633d814587e5dd1661364fc1"/><file name="salestracking_js.phtml" hash="61c77c6fdab88cfac5989e7d47a8c5a4"/><file name="tracking_image.phtml" hash="f2477e9bf58ed34950b049db5af8a712"/></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="base"><dir name="default"><dir name="template"><dir name="channelpilotsolutions"><file name="array_dropdown.phtml" hash="5717b5f3ca67bb4da734572fdca1a907"/><file name="config_hint.phtml" hash="c92f883df809f89278492d1e22a352d7"/></dir></dir></dir></dir></dir></target><target name="magelocale"><dir name="de_DE"><file name="Channelpilotsolutions_Channelpilot.csv" hash="1cba569e9ec981939eb4a9c3da7ea979"/></dir><dir name="de_CH"><file name="Channelpilotsolutions_Channelpilot.csv" hash="1cba569e9ec981939eb4a9c3da7ea979"/></dir><dir name="de_AT"><file name="Channelpilotsolutions_Channelpilot.csv" hash="1cba569e9ec981939eb4a9c3da7ea979"/></dir><dir name="fr_FR"><file name="Channelpilotsolutions_Channelpilot.csv" hash="23217faa0b1c623750bb91d1e324e082"/></dir><dir name="fr_CA"><file name="Channelpilotsolutions_Channelpilot.csv" hash="23217faa0b1c623750bb91d1e324e082"/></dir><dir name="en_AU"><file name="Channelpilotsolutions_Channelpilot.csv" hash="6ca86d9f43bbc1917c572d5d1d935677"/></dir><dir name="en_CA"><file name="Channelpilotsolutions_Channelpilot.csv" hash="6ca86d9f43bbc1917c572d5d1d935677"/></dir><dir name="en_GB"><file name="Channelpilotsolutions_Channelpilot.csv" hash="6ca86d9f43bbc1917c572d5d1d935677"/></dir><dir name="en_IE"><file name="Channelpilotsolutions_Channelpilot.csv" hash="6ca86d9f43bbc1917c572d5d1d935677"/></dir><dir name="en_NZ"><file name="Channelpilotsolutions_Channelpilot.csv" hash="6ca86d9f43bbc1917c572d5d1d935677"/></dir><dir name="en_US"><file name="Channelpilotsolutions_Channelpilot.csv" hash="6ca86d9f43bbc1917c572d5d1d935677"/></dir><dir name="es_AR"><file name="Channelpilotsolutions_Channelpilot.csv" hash="e457ab4f2c03c46e8ce69bc6eb1dcc25"/></dir><dir name="es_CL"><file name="Channelpilotsolutions_Channelpilot.csv" hash="e457ab4f2c03c46e8ce69bc6eb1dcc25"/></dir><dir name="es_CO"><file name="Channelpilotsolutions_Channelpilot.csv" hash="e457ab4f2c03c46e8ce69bc6eb1dcc25"/></dir><dir name="es_CR"><file name="Channelpilotsolutions_Channelpilot.csv" hash="e457ab4f2c03c46e8ce69bc6eb1dcc25"/></dir><dir name="es_ES"><file name="Channelpilotsolutions_Channelpilot.csv" hash="e457ab4f2c03c46e8ce69bc6eb1dcc25"/></dir><dir name="es_MX"><file name="Channelpilotsolutions_Channelpilot.csv" hash="e457ab4f2c03c46e8ce69bc6eb1dcc25"/></dir><dir name="es_PA"><file name="Channelpilotsolutions_Channelpilot.csv" hash="e457ab4f2c03c46e8ce69bc6eb1dcc25"/></dir><dir name="es_PE"><file name="Channelpilotsolutions_Channelpilot.csv" hash="e457ab4f2c03c46e8ce69bc6eb1dcc25"/></dir><dir name="es_VE"><file name="Channelpilotsolutions_Channelpilot.csv" hash="e457ab4f2c03c46e8ce69bc6eb1dcc25"/></dir></target></contents>
36
<compatible/>
37
<dependencies/>
38
</package>