IcecatLive - Version 1.2.0

Version Notes

- Added mapping by EAN/UPC codes
- Added support of Multilanguage stores
- Added new setting Description
- Fixed problems with Icecat names
- Fixed problems with images on product listing/shopping cart.
- Fixed problems with correct displaying attributes on product detail page
- Fixed problems with description on product detail page

Download this release

Release Info

Developer IceShop
Extension IcecatLive
Version 1.2.0
Comparing to
See all releases


Code changes from version 1.1.0 to 1.2.0

app/code/local/Bintime/Icecatimport/Block/Upsell.php CHANGED
@@ -38,7 +38,7 @@ class Bintime_Icecatimport_Block_Upsell extends Mage_Catalog_Block_Product_List_
38
  'collection' => $this->_itemCollection,
39
  'limit' => $this->getItemLimit()
40
  ));
41
- //TODO what this code do?
42
  foreach ($this->_itemCollection as $product) {
43
  $product->setDoNotUseCategoryId(true);
44
  }
38
  'collection' => $this->_itemCollection,
39
  'limit' => $this->getItemLimit()
40
  ));
41
+
42
  foreach ($this->_itemCollection as $product) {
43
  $product->setDoNotUseCategoryId(true);
44
  }
app/code/local/Bintime/Icecatimport/Helper/Catalog/Image.php CHANGED
@@ -21,7 +21,6 @@ class Bintime_Icecatimport_Helper_Catalog_Image extends Mage_Catalog_Helper_Imag
21
  $imageFile = mage::getsingleton('icecatimport/import')->getLowPicUrl();
22
  }
23
  if ($attributeName == 'thumbnail' && $imageFile == null ) {
24
- // $imageFile = $product->getData($attributeName);
25
  $imageFile = Mage::helper('icecatimport/image')->getImage($product);
26
  }
27
 
21
  $imageFile = mage::getsingleton('icecatimport/import')->getLowPicUrl();
22
  }
23
  if ($attributeName == 'thumbnail' && $imageFile == null ) {
 
24
  $imageFile = Mage::helper('icecatimport/image')->getImage($product);
25
  }
26
 
app/code/local/Bintime/Icecatimport/Helper/Getdata.php CHANGED
@@ -17,208 +17,171 @@ class Bintime_Icecatimport_Helper_Getdata extends Mage_Core_Helper_Abstract
17
  * @return Bintime_Icecatimport_Helper_Getdata
18
  */
19
 
20
- public function getEntityTypeId() {
21
- $connection = Mage::getSingleton('core/resource')->getConnection('core_read');
22
- $query = $connection->select()->from(Mage::getSingleton('core/resource')->getTableName('eav_entity_type'),'entity_type_id')->where('entity_type_code = ?', 'catalog_product')->limit(1);
23
- $this->entityTypeId = $connection->fetchOne($query);
24
- return $this->entityTypeId;
25
- }
26
-
27
- public function getProductDescription($_product) {
28
- try {
29
- $entityId = $_product->getEntityId();
30
-
31
- $entity_type_id = $this->getEntityTypeId();
32
- $connection = Mage::getSingleton('core/resource')->getConnection('core_read');
33
-
34
-
35
- /* $mpnCode = Mage::getStoreConfig('icecat_root/icecat/sku_field');
36
- $attributeInfo = Mage::getResourceModel('eav/entity_attribute_collection')
37
- ->setCodeFilter($mpnCode)
38
- ->setEntityTypeFilter($entity_type_id)
39
- ->getFirstItem();
40
-
41
- switch ($attributeInfo->getData('backend_type')) {
42
- case 'static':
43
- $query = $connection->select()->from('catalog_product_entity', $mpnCode)->where('entity_id = ?', $entityId);
44
- break;
45
-
46
- case 'int':
47
- //echo "int";
48
- break;
49
-
50
- case 'varchar':
51
- $query = $connection->select()->from('catalog_product_entity_varchar','value')->where('entity_id = ?', $entityId)->where('attribute_id = ?', $attributeInfo['attribute_id']);
52
- break;
53
-
54
- }
55
- $mpn = $connection->fetchOne($query);
56
- */
57
-
58
- $mpn = $_product->getData(Mage::getStoreConfig('icecat_root/icecat/sku_field'));
59
 
60
- $manufacturerId = $_product->getData(Mage::getStoreConfig('icecat_root/icecat/manufacturer'));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
 
62
- $attributeInfo = Mage::getResourceModel('eav/entity_attribute_collection')
63
- ->setCodeFilter(Mage::getStoreConfig('icecat_root/icecat/manufacturer'))
64
- ->setEntityTypeFilter($entity_type_id)
65
- ->getFirstItem();
66
-
67
- if ($attributeInfo->getData('backend_type') == 'int' ||
68
- ($attributeInfo->getData('frontend_input') == 'select' && $attributeInfo->getData('backend_type') == 'static' )) {
69
- $attribute = $attributeInfo->setEntity($_product->getResource());
70
- $manufacturer = $attribute->getSource()->getOptionText($manufacturerId);
71
- } else {
72
- $manufacturer = $manufacturerId;
73
- }
74
-
75
- $locale = Mage::getStoreConfig('icecat_root/icecat/language');
76
-
77
- if ($locale == '0'){
78
- $systemLocale = explode("_", Mage::app()->getLocale()->getLocaleCode());
79
- $locale = $systemLocale[0];
80
- }
81
- $userLogin = Mage::getStoreConfig('icecat_root/icecat/login');
82
- $userPass = Mage::getStoreConfig('icecat_root/icecat/password');
83
-
84
- $this->iceCatModel = Mage::getSingleton('icecatimport/import');
85
-
86
- if (!$this->iceCatModel->getProductDescription($mpn, $manufacturer, $locale, $userLogin, $userPass, $entityId)){
87
-
88
- $this->error = $this->iceCatModel->getErrorMessage();
89
- $this->systemError = $this->iceCatModel->getSystemError();
90
- //echo $this->systemError;
91
- return $this;
92
- }
93
- } catch (Exception $e) {
94
- Mage::log('Icecat getProductDescription error'.$e);
95
- }
96
  return $this;
 
 
 
97
  }
98
- /**
99
- * returns true if error during data fetch occured else false
100
- */
101
- public function hasError(){
102
- if ($this->error || $this->systemError){
103
- return true;
104
- }
105
- return false;
 
106
  }
 
 
107
 
108
- /**
109
- * return error message
110
- */
111
- public function getError(){
112
- //show icecat error on product page return $this->error;
113
- }
114
 
115
- /**
116
- * return system error
117
- */
118
- public function hasSystemError(){
119
- if ($this->systemError){
120
- return $this->systemError;
121
- }
122
- return false;
123
  }
 
 
124
 
125
- public function getProductDescriptionList(){
126
- return $this->iceCatModel->getProductDescriptionList();
127
- }
128
 
129
- public function getShortProductDescription(){
130
- return $this->iceCatModel->getShortProductDescription();
131
- }
132
 
133
- public function getLowPicUrl(){
134
- return $this->iceCatModel->getLowPicUrl();
135
- }
136
- public function getThumbPicture(){
137
- return $this->iceCatModel->getThumbPicture();
138
- }
139
 
140
- public function getGalleryPhotos(){
141
- return $this->iceCatModel->getGalleryPhotos();
142
- }
143
 
144
- public function getProductName(){
145
- return $this->iceCatModel->getProductName();
146
- }
147
- public function getVendor(){
148
- return $this->iceCatModel->getVendor();
149
- }
150
 
151
- public function getFullProductDescription(){
152
- return $this->iceCatModel->getFullProductDescription();
153
- }
154
 
155
- public function getMPN(){
156
- return $this->iceCatModel->getMPN();
 
 
 
 
 
 
 
 
 
 
 
 
157
  }
158
- public function getEAN(){
159
- return $this->iceCatModel->getEAN();
 
 
 
160
  }
161
-
162
- /**
163
- * Form related products list according to store products
164
- */
165
- public function getRelatedProducts(){
166
- $relatedProducts =$this->iceCatModel->getRelatedProducts();
167
- if (empty($relatedProducts)){
168
- return array();
169
- }
170
- $sku = Mage::getStoreConfig('icecat_root/icecat/sku_field');
171
- $collection = Mage::getModel('catalog/product')->getCollection();
172
- $filterArray = array();
173
- foreach($relatedProducts as $mpn => $valueArray){
174
- array_push($filterArray, array('attribute'=>$sku,'eq'=>$mpn));
175
- }
176
- $collection->addFieldToFilter($filterArray);
177
-
178
- $collection->addAttributeToSelect($sku);
179
- $collection->addAttributeToSelect('category_ids');
180
- $relatedProductsList = array();
181
- foreach ($collection as $product) {
182
- $categoryIds = $product->getCategoryIds();
183
-
184
- if(!empty($categoryIds)){
185
- if (is_array($categoryIds)){
186
- $catogoriesArray = $categoryIds;
187
- }
188
- if (is_string($categoryIds)){
189
- $catogoriesArray = explode(",",$product->getCategoryIds());
190
- }
191
- foreach($catogoriesArray as $categoryId){
192
- if (!array_key_exists($product->getData($sku), $relatedProducts)){
193
- continue;
194
- }
195
- $relatedProductInfo = $relatedProducts[$product->getData($sku)];
196
- $relatedProductInfo['mpn'] = $product->getData($sku);
197
- $relatedProductInfo['url'] = preg_replace( '/\/\d+\/$/',"/".$categoryId."/",$product->getProductUrl());;
198
- if (!array_key_exists($categoryId, $relatedProductsList)){
199
- $relatedProductsList[$categoryId]= array();
200
- }
201
-
202
- array_push($relatedProductsList[$categoryId], $relatedProductInfo);
203
- }
204
- }
205
- else {
206
- if (!array_key_exists($product->getData($sku), $relatedProducts)){
207
- continue;
208
- }
209
- $relatedProductInfo = $relatedProducts[$product->getData($sku)];
210
- $relatedProductInfo['mpn'] = $product->getData($sku);
211
- $relatedProductInfo['url'] = preg_replace( '/category\/\d+\/$/','',$product->getProductUrl());;
212
- if (!array_key_exists('a', $relatedProductsList)){
213
- $relatedProductsList['a']= array();
214
- }
215
-
216
- array_push($relatedProductsList['a'], $relatedProductInfo);
217
- }
218
  }
219
  return $relatedProductsList;
220
- }
221
-
222
-
223
- }
224
  ?>
17
  * @return Bintime_Icecatimport_Helper_Getdata
18
  */
19
 
20
+ public function getEntityTypeId() {
21
+ $connection = Mage::getSingleton('core/resource')->getConnection('core_read');
22
+ $query = $connection->select()
23
+ ->from(Mage::getSingleton('core/resource')
24
+ ->getTableName('eav_entity_type'),'entity_type_id')
25
+ ->where('entity_type_code = ?', 'catalog_product')
26
+ ->limit(1);
27
+ $this->entityTypeId = $connection->fetchOne($query);
28
+ return $this->entityTypeId;
29
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
 
31
+ public function getProductDescription($_product) {
32
+ try {
33
+ $entityId = $_product->getEntityId();
34
+ $entity_type_id = $this->getEntityTypeId();
35
+ $connection = Mage::getSingleton('core/resource')->getConnection('core_read');
36
+ $mpn = $_product->getData(Mage::getStoreConfig('icecat_root/icecat/sku_field'));
37
+ $ean_code = $_product->getData(Mage::getStoreConfig('icecat_root/icecat/ean_code'));
38
+ $manufacturerId = $_product->getData(Mage::getStoreConfig('icecat_root/icecat/manufacturer'));
39
+ $attributeInfo = Mage::getResourceModel('eav/entity_attribute_collection')
40
+ ->setCodeFilter(Mage::getStoreConfig('icecat_root/icecat/manufacturer'))
41
+ ->setEntityTypeFilter($entity_type_id)
42
+ ->getFirstItem();
43
+ if ($attributeInfo->getData('backend_type') == 'int' ||
44
+ ($attributeInfo->getData('frontend_input') == 'select' && $attributeInfo->getData('backend_type') == 'static' )) {
45
+ $attribute = $attributeInfo->setEntity($_product->getResource());
46
+ $manufacturer = $attribute->getSource()->getOptionText($manufacturerId);
47
+ } else {
48
+ $manufacturer = $manufacturerId;
49
+ }
50
 
51
+ $locale = Mage::getStoreConfig('icecat_root/icecat/language');
52
+ if ($locale == '0'){
53
+ $systemLocale = explode("_", Mage::app()->getLocale()->getLocaleCode());
54
+ $locale = $systemLocale[0];
55
+ }
56
+ $userLogin = Mage::getStoreConfig('icecat_root/icecat/login');
57
+ $userPass = Mage::getStoreConfig('icecat_root/icecat/password');
58
+ $this->iceCatModel = Mage::getSingleton('icecatimport/import');
59
+ if (!$this->iceCatModel->getProductDescription($mpn, $manufacturer, $locale, $userLogin, $userPass, $entityId, $ean_code)){
60
+ $this->error = $this->iceCatModel->getErrorMessage();
61
+ $this->systemError = $this->iceCatModel->getSystemError();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
  return $this;
63
+ }
64
+ } catch (Exception $e) {
65
+ Mage::log('Icecat getProductDescription error'.$e);
66
  }
67
+ return $this;
68
+ }
69
+
70
+ /**
71
+ * returns true if error during data fetch occured else false
72
+ */
73
+ public function hasError(){
74
+ if ($this->error || $this->systemError){
75
+ return true;
76
  }
77
+ return false;
78
+ }
79
 
80
+ /**
81
+ * return error message
82
+ */
83
+ public function getError(){}
 
 
84
 
85
+ /**
86
+ * return system error
87
+ */
88
+ public function hasSystemError(){
89
+ if ($this->systemError){
90
+ return $this->systemError;
 
 
91
  }
92
+ return false;
93
+ }
94
 
95
+ public function getProductDescriptionList(){
96
+ return $this->iceCatModel->getProductDescriptionList();
97
+ }
98
 
99
+ public function getShortProductDescription(){
100
+ return $this->iceCatModel->getShortProductDescription();
101
+ }
102
 
103
+ public function getLowPicUrl(){
104
+ return $this->iceCatModel->getLowPicUrl();
105
+ }
106
+ public function getThumbPicture(){
107
+ return $this->iceCatModel->getThumbPicture();
108
+ }
109
 
110
+ public function getGalleryPhotos(){
111
+ return $this->iceCatModel->getGalleryPhotos();
112
+ }
113
 
114
+ public function getProductName(){
115
+ return $this->iceCatModel->getProductName();
116
+ }
117
+ public function getVendor(){
118
+ return $this->iceCatModel->getVendor();
119
+ }
120
 
121
+ public function getFullProductDescription(){
122
+ return $this->iceCatModel->getFullProductDescription();
123
+ }
124
 
125
+ public function getMPN(){
126
+ return $this->iceCatModel->getMPN();
127
+ }
128
+ public function getEAN(){
129
+ return $this->iceCatModel->getEAN();
130
+ }
131
+
132
+ /**
133
+ * Form related products list according to store products
134
+ */
135
+ public function getRelatedProducts(){
136
+ $relatedProducts =$this->iceCatModel->getRelatedProducts();
137
+ if (empty($relatedProducts)){
138
+ return array();
139
  }
140
+ $sku = Mage::getStoreConfig('icecat_root/icecat/sku_field');
141
+ $collection = Mage::getModel('catalog/product')->getCollection();
142
+ $filterArray = array();
143
+ foreach($relatedProducts as $mpn => $valueArray){
144
+ array_push($filterArray, array('attribute'=>$sku,'eq'=>$mpn));
145
  }
146
+ $collection->addFieldToFilter($filterArray);
147
+ $collection->addAttributeToSelect($sku);
148
+ $collection->addAttributeToSelect('category_ids');
149
+ $relatedProductsList = array();
150
+ foreach ($collection as $product) {
151
+ $categoryIds = $product->getCategoryIds();
152
+ if (!empty($categoryIds)){
153
+ if (is_array($categoryIds)){
154
+ $catogoriesArray = $categoryIds;
155
+ }
156
+ if (is_string($categoryIds)){
157
+ $catogoriesArray = explode(",",$product->getCategoryIds());
158
+ }
159
+ foreach($catogoriesArray as $categoryId){
160
+ if (!array_key_exists($product->getData($sku), $relatedProducts)){
161
+ continue;
162
+ }
163
+ $relatedProductInfo = $relatedProducts[$product->getData($sku)];
164
+ $relatedProductInfo['mpn'] = $product->getData($sku);
165
+ $relatedProductInfo['url'] = preg_replace( '/\/\d+\/$/',"/".$categoryId."/",$product->getProductUrl());;
166
+ if (!array_key_exists($categoryId, $relatedProductsList)){
167
+ $relatedProductsList[$categoryId]= array();
168
+ }
169
+ array_push($relatedProductsList[$categoryId], $relatedProductInfo);
170
+ }
171
+ } else {
172
+ if (!array_key_exists($product->getData($sku), $relatedProducts)){
173
+ continue;
174
+ }
175
+ $relatedProductInfo = $relatedProducts[$product->getData($sku)];
176
+ $relatedProductInfo['mpn'] = $product->getData($sku);
177
+ $relatedProductInfo['url'] = preg_replace( '/category\/\d+\/$/','',$product->getProductUrl());;
178
+ if (!array_key_exists('a', $relatedProductsList)){
179
+ $relatedProductsList['a']= array();
180
+ }
181
+ array_push($relatedProductsList['a'], $relatedProductInfo);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
182
  }
183
  return $relatedProductsList;
184
+ }
185
+ }
186
+ }
 
187
  ?>
app/code/local/Bintime/Icecatimport/Helper/Image.php CHANGED
@@ -6,48 +6,40 @@
6
  */
7
  class Bintime_Icecatimport_Helper_Image extends Mage_Core_Helper_Abstract
8
  {
9
- /**
10
- * Fetch Image URL from DB
11
- * @param Mage_Catalog_Model_Product $_product
12
- * @return string image URL
13
- */
14
-
15
- public function getImage($_product) {
16
-
17
- $_product = $_product->load($_product->getId());
18
-
19
- $sku = $_product->getData(Mage::getStoreConfig('icecat_root/icecat/sku_field'));
20
-
21
- $manufacturerId = $_product->getData(Mage::getStoreConfig('icecat_root/icecat/manufacturer'));
22
-
23
- $connection = Mage::getSingleton('core/resource')->getConnection('core_read');
24
- $query = $connection->select()->from(Mage::getSingleton('core/resource')->getTableName('eav_entity_type'),'entity_type_id')->where('entity_type_code = ?', 'catalog_product')->limit(1);
25
- $entityTypeId = $connection->fetchOne($query);
26
-
27
- $attributeInfo = Mage::getResourceModel('eav/entity_attribute_collection')
28
- ->setCodeFilter(Mage::getStoreConfig('icecat_root/icecat/manufacturer'))
29
- ->setEntityTypeFilter($_product->getResource()->getTypeId())
30
- ->getFirstItem();
31
-
32
- switch ($attributeInfo->getData('backend_type')) {
33
- case 'int':
34
- $attribute = $attributeInfo->setEntity($_product->getResource());
35
- $manufacturer = $attribute->getSource()->getOptionText($manufacturerId);
36
- break;
37
-
38
- default:
39
- $manufacturer = $manufacturerId;
40
- break;
41
- }
42
-
43
- $this->observer = Mage::getSingleton('icecatimport/observer');
44
- $url = $this->observer->getImageURL($sku, $manufacturer);
45
- return $url;
46
  }
47
-
48
- public function getGallery() {
49
- return Mage::getSingleton('icecatimport/import')->getGalleryPhotos();
50
-
51
- }
52
-
 
 
53
  }
6
  */
7
  class Bintime_Icecatimport_Helper_Image extends Mage_Core_Helper_Abstract
8
  {
9
+ /**
10
+ * Fetch Image URL from DB
11
+ * @param Mage_Catalog_Model_Product $_product
12
+ * @return string image URL
13
+ */
14
+ public function getImage($_product) {
15
+ $_product = $_product->load($_product->getId());
16
+ $sku = $_product->getData(Mage::getStoreConfig('icecat_root/icecat/sku_field'));
17
+ $manufacturerId = $_product->getData(Mage::getStoreConfig('icecat_root/icecat/manufacturer'));
18
+ $connection = Mage::getSingleton('core/resource')->getConnection('core_read');
19
+ $query = $connection->select()
20
+ ->from(Mage::getSingleton('core/resource')->getTableName('eav_entity_type'),'entity_type_id')
21
+ ->where('entity_type_code = ?', 'catalog_product')
22
+ ->limit(1);
23
+ $entityTypeId = $connection->fetchOne($query);
24
+ $attributeInfo = Mage::getResourceModel('eav/entity_attribute_collection')
25
+ ->setCodeFilter(Mage::getStoreConfig('icecat_root/icecat/manufacturer'))
26
+ ->setEntityTypeFilter($_product->getResource()->getTypeId())
27
+ ->getFirstItem();
28
+ switch ($attributeInfo->getData('backend_type')) {
29
+ case 'int':
30
+ $attribute = $attributeInfo->setEntity($_product->getResource());
31
+ $manufacturer = $attribute->getSource()->getOptionText($manufacturerId);
32
+ break;
33
+ default:
34
+ $manufacturer = $manufacturerId;
35
+ break;
 
 
 
 
 
 
 
 
 
 
36
  }
37
+ $this->observer = Mage::getSingleton('icecatimport/observer');
38
+ $url = $this->observer->getImageURL($sku, $manufacturer);
39
+ return $url;
40
+ }
41
+
42
+ public function getGallery() {
43
+ return Mage::getSingleton('icecatimport/import')->getGalleryPhotos();
44
+ }
45
  }
app/code/local/Bintime/Icecatimport/Helper/Output.php CHANGED
@@ -1,101 +1,109 @@
1
  <?php
2
  class Bintime_Icecatimport_Helper_Output extends Mage_Catalog_Helper_Output
3
  {
4
-
5
- private $iceCatModel;
6
- private $error = false;
7
- private $systemError;
8
- /**
9
- * @var isFirstTime spike for getProductDescription that is called many times from template
10
- */
11
- private $isFirstTime = true;
12
-
13
- /**
14
- * Prepare product attribute html output
15
- *
16
- * @param Mage_Catalog_Model_Product $product
17
- * @param string $attributeHtml
18
- * @param string $attributeName
19
- * @return string
20
- */
21
-
22
- public function productAttribute($product, $attributeHtml, $attributeName)
23
- {
24
- if (!mage::registry('product')) {
25
- return parent::productAttribute($product, $attributeHtml, $attributeName);
26
- }
27
-
28
- $this->iceCatModel = Mage::getSingleton('icecatimport/import');
29
- if($this->isFirstTime){
30
- $helper = Mage::helper('icecatimport/getdata');
31
- $helper->getProductDescription($product);
32
-
33
- if($helper->hasError())
34
- {
35
- $this->error = true;
36
- }
37
- $this->isFirstTime = false;
38
-
39
- }
40
-
41
- if($this->error)
42
- {
 
 
 
 
 
 
 
 
 
43
  return parent::productAttribute($product, $attributeHtml, $attributeName);
 
 
 
 
44
  }
45
- $id = $product->getData('entity_id');
46
-
47
-
48
- if($attributeName == 'name')
49
- {
50
-
51
- //if we on product page then mage::registry('product' exist
52
- if ($product->getId() == $this->iceCatModel->entityId && $name = $product->getData('brand_name') . ' ' . $this->iceCatModel->getProductName()) {
53
- return $name;
54
- }
55
-
56
- $manufacturerId = Mage::getStoreConfig('icecat_root/icecat/manufacturer');
57
- $mpn = Mage::getStoreConfig('icecat_root/icecat/sku_field');
58
- $collection = Mage::getResourceModel('catalog/product_collection');
59
- $collection->addAttributeToSelect($manufacturerId)->addAttributeToSelect($mpn)
60
- ->addAttributeToSelect('name')
61
- ->addAttributeToFilter('entity_id', array('eq' => $id));
62
- $product = $collection->getFirstItem() ;
63
- return $product->getName();
64
-
65
- }
66
-
67
- if($attributeName == 'short_description')
68
- {
69
- return $this->iceCatModel->getShortProductDescription();
70
- }
71
- if($attributeName == 'description')
72
- {
73
- return str_replace("\\n", "<br>",$this->iceCatModel->getFullProductDescription());
74
- }
75
- else return parent::productAttribute($product, $attributeHtml, $attributeName);
76
- }
77
-
78
- public function getWarrantyInfo(){
79
- return $this->iceCatModel->getWarrantyInfo();
80
- }
81
- public function getShortSummaryDescription(){
82
- return $this->iceCatModel->getShortSummaryDescription();
83
- }
84
- public function getLongSummaryDescription(){
85
- return $this->iceCatModel->getLongSummaryDescription();
86
- }
87
-
88
- public function getManualPDF(){
89
- return $this->iceCatModel->getManualPDF();
90
- }
91
-
92
- public function getPDF(){
93
- return $this->iceCatModel->getPDF();
94
- }
95
-
96
- public function getIceCatMedia(){
97
- $media = (array)$this->iceCatModel->getIceCatMedia();
98
- return (array_key_exists('@attributes', $media)) ? $media['@attributes'] : array();
99
- }
100
  }
101
  ?>
1
  <?php
2
  class Bintime_Icecatimport_Helper_Output extends Mage_Catalog_Helper_Output
3
  {
4
+
5
+ private $iceCatModel;
6
+ private $error = false;
7
+ private $systemError;
8
+
9
+ /**
10
+ * @var isFirstTime spike for getProductDescription that is called many times from template
11
+ */
12
+ private $isFirstTime = true;
13
+
14
+ /**
15
+ * Prepare product attribute html output
16
+ *
17
+ * @param Mage_Catalog_Model_Product $product
18
+ * @param string $attributeHtml
19
+ * @param string $attributeName
20
+ * @return string
21
+ */
22
+ public function productAttribute($product, $attributeHtml, $attributeName){
23
+
24
+ if (!mage::registry('product')) {
25
+ return parent::productAttribute($product, $attributeHtml, $attributeName);
26
+ }
27
+
28
+ $productDescriptionPriority = Mage::getStoreConfig('icecat_root/icecat/descript_priority');
29
+ $dbDescriptionPriority = false;
30
+ if ($productDescriptionPriority == 'Db' &&
31
+ ( $attributeName == 'description' || $attributeName == 'short_description')) {
32
+ $dbDescriptionPriority = true;
33
+ }
34
+
35
+ if ($dbDescriptionPriority) {
36
+ return parent::productAttribute($product, $attributeHtml, $attributeName);
37
+ }
38
+
39
+ $this->iceCatModel = Mage::getSingleton('icecatimport/import');
40
+ if ($this->isFirstTime){
41
+ $helper = Mage::helper('icecatimport/getdata');
42
+ $helper->getProductDescription($product);
43
+
44
+ if ($helper->hasError() && !$dbDescriptionPriority) {
45
+ $this->error = true;
46
+ }
47
+ $this->isFirstTime = false;
48
+ }
49
+
50
+ if ($this->error){
51
+ if ($attributeName != 'description' && $attributeName != 'short_description') {
52
  return parent::productAttribute($product, $attributeHtml, $attributeName);
53
+ } else {
54
+ return '';
55
+ }
56
+
57
  }
58
+ $id = $product->getData('entity_id');
59
+ if ($attributeName == 'name'){
60
+ //if we on product page then mage::registry('product') exist
61
+ if ($product->getId() == $this->iceCatModel->entityId && $name = $product->getData('brand_name') . ' ' . $this->iceCatModel->getProductName()) {
62
+ return $name;
63
+ }
64
+ $manufacturerId = Mage::getStoreConfig('icecat_root/icecat/manufacturer');
65
+ $mpn = Mage::getStoreConfig('icecat_root/icecat/sku_field');
66
+ $collection = Mage::getResourceModel('catalog/product_collection');
67
+ $collection->addAttributeToSelect($manufacturerId)->addAttributeToSelect($mpn)
68
+ ->addAttributeToSelect('name')
69
+ ->addAttributeToFilter('entity_id', array('eq' => $id));
70
+ $product = $collection->getFirstItem() ;
71
+ return $product->getName();
72
+ }
73
+
74
+ if ($attributeName == 'short_description') {
75
+ return $this->iceCatModel->getShortProductDescription();
76
+ }
77
+ if ($attributeName == 'description') {
78
+ return str_replace("\\n", "<br>",$this->iceCatModel->getFullProductDescription());
79
+ }
80
+ return parent::productAttribute($product, $attributeHtml, $attributeName);
81
+ }
82
+
83
+
84
+ public function getWarrantyInfo(){
85
+ return $this->iceCatModel->getWarrantyInfo();
86
+ }
87
+
88
+ public function getShortSummaryDescription(){
89
+ return $this->iceCatModel->getShortSummaryDescription();
90
+ }
91
+
92
+ public function getLongSummaryDescription(){
93
+ return $this->iceCatModel->getLongSummaryDescription();
94
+ }
95
+
96
+ public function getManualPDF(){
97
+ return $this->iceCatModel->getManualPDF();
98
+ }
99
+
100
+ public function getPDF(){
101
+ return $this->iceCatModel->getPDF();
102
+ }
103
+
104
+ public function getIceCatMedia(){
105
+ $media = (array)$this->iceCatModel->getIceCatMedia();
106
+ return (array_key_exists('@attributes', $media)) ? $media['@attributes'] : array();
107
+ }
 
 
 
 
 
108
  }
109
  ?>
app/code/local/Bintime/Icecatimport/Model/Catalog/Product.php CHANGED
@@ -7,158 +7,128 @@
7
  class Bintime_Icecatimport_Model_Catalog_Product extends Mage_Catalog_Model_Product
8
  {
9
 
10
- public function getName()
11
- {
12
- try {
13
- $connection = Mage::getSingleton('core/resource')->getConnection('core_read');
14
- $manufacturerId = $this->getData(Mage::getStoreConfig('icecat_root/icecat/manufacturer'));
15
- $mpn = $this->getData(Mage::getStoreConfig('icecat_root/icecat/sku_field'));
16
- $attributeInfo = Mage::getResourceModel('eav/entity_attribute_collection')
17
- ->setCodeFilter(Mage::getStoreConfig('icecat_root/icecat/manufacturer'))
18
- ->setEntityTypeFilter($this->getResource()->getTypeId())
19
- ->getFirstItem();
20
- switch ($attributeInfo->getData('backend_type')) {
21
- case 'int':
22
-
23
- $attribute = $attributeInfo->setEntity($this->getResource());
24
- $manufacturer = $attribute->getSource()->getOptionText($manufacturerId);
25
- break;
26
-
27
- default:
28
- $manufacturer = $manufacturerId;
29
- break;
30
- }
31
-
32
- /*
33
- $attributes = Mage::getResourceModel('eav/entity_attribute_collection')
34
- ->setEntityTypeFilter($this->getResource()->getTypeId())
35
- ->addFieldToFilter('attribute_code', 'manufacturer');
36
-
37
- $attribute = $attributes->getFirstItem()->setEntity($this->getResource());
38
- $manufacturer = $attribute->getSource()->getOptionText($manufacturerId);
39
- */
40
-
41
- $tableName = Mage::getSingleton('core/resource')->getTableName('icecatimport/data');
42
- $mappingTable = Mage::getSingleton('core/resource')->getTableName('icecatimport/supplier_mapping');
43
- $selectCondition = $connection->select()->
44
- from(array('connector' => $tableName), new Zend_Db_Expr('connector.prod_name'))
45
- ->joinInner(array('supplier' => $mappingTable), "connector.supplier_id = supplier.supplier_id AND supplier.supplier_symbol = {$connection->quote($manufacturer)}")
46
- ->where('connector.prod_id = ? ', $mpn);
47
-
48
- $icecatName = $connection->fetchOne($selectCondition);
49
- } catch (Exception $e) {
50
- Mage::log('Icecat getName error'.$e);
51
- }
52
-
53
- return $icecatName ? $icecatName : $this->getData('name');
54
  }
55
-
56
-
57
- public function getImage()
58
- {
59
- if(!parent::getImage()||parent::getImage() == 'no_selection')
60
- {
61
- return "true";
62
- }
63
- else
64
- return parent::getImage();
 
 
 
 
 
 
 
 
 
65
  }
66
-
67
-
68
-
69
-
70
- /**
71
- * Entity code.
72
- * Can be used as part of method name for entity processing
73
- */
74
- const ENTITY = 'catalog_product';
75
-
76
- const CACHE_TAG = 'catalog_product';
77
- protected $_cacheTag = 'catalog_product';
78
- protected $_eventPrefix = 'catalog_product';
79
- protected $_eventObject = 'product';
80
- protected $_canAffectOptions = false;
81
-
82
- /**
83
- * Product type instance
84
- *
85
- * @var Mage_Catalog_Model_Product_Type_Abstract
86
- */
87
- protected $_typeInstance = null;
88
-
89
- /**
90
- * Product type instance as singleton
91
- */
92
- protected $_typeInstanceSingleton = null;
93
-
94
- /**
95
- * Product link instance
96
- *
97
- * @var Mage_Catalog_Model_Product_Link
98
- */
99
- protected $_linkInstance;
100
-
101
- /**
102
- * Product object customization (not stored in DB)
103
- *
104
- * @var array
105
- */
106
- protected $_customOptions = array();
107
-
108
- /**
109
- * Product Url Instance
110
- *
111
- * @var Mage_Catalog_Model_Product_Url
112
- */
113
- protected $_urlModel = null;
114
-
115
- protected static $_url;
116
- protected static $_urlRewrite;
117
-
118
- protected $_errors = array();
119
-
120
- protected $_optionInstance;
121
-
122
- protected $_options = array();
123
-
124
- /**
125
- * Product reserved attribute codes
126
- */
127
- protected $_reservedAttributes;
128
-
129
- /**
130
- * Flag for available duplicate function
131
- *
132
- * @var boolean
133
- */
134
- protected $_isDuplicable = true;
135
-
136
-
137
-
138
- /**
139
- * Initialize resources
140
- */
141
-
142
- /**
143
- * Get product name
144
- *
145
- * @return string
146
- */
147
- /*
148
- public function getName()
149
- {
150
- return $this->_getData('name');
151
- //return parent::getName();
152
- //return 'overriden name!!!';
153
  }
154
- */
155
- /**
156
- * Get collection instance
157
- *
158
- * @return object
159
- */
160
-
161
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
162
 
163
  }
164
  ?>
7
  class Bintime_Icecatimport_Model_Catalog_Product extends Mage_Catalog_Model_Product
8
  {
9
 
10
+ public function getName(){
11
+
12
+ try {
13
+ $connection = Mage::getSingleton('core/resource')->getConnection('core_read');
14
+ $manufacturerId = $this->getData(Mage::getStoreConfig('icecat_root/icecat/manufacturer'));
15
+ $mpn = $this->getData(Mage::getStoreConfig('icecat_root/icecat/sku_field'));
16
+ $attributeInfo = Mage::getResourceModel('eav/entity_attribute_collection')
17
+ ->setCodeFilter(Mage::getStoreConfig('icecat_root/icecat/manufacturer'))
18
+ ->setEntityTypeFilter($this->getResource()->getTypeId())
19
+ ->getFirstItem();
20
+ switch ($attributeInfo->getData('backend_type')) {
21
+ case 'int':
22
+ $attribute = $attributeInfo->setEntity($this->getResource());
23
+ $manufacturer = $attribute->getSource()->getOptionText($manufacturerId);
24
+ break;
25
+ default:
26
+ $manufacturer = $manufacturerId;
27
+ break;
28
+ }
29
+
30
+ $tableName = Mage::getSingleton('core/resource')->getTableName('icecatimport/data');
31
+ $mappingTable = Mage::getSingleton('core/resource')->getTableName('icecatimport/supplier_mapping');
32
+ $selectCondition = $connection->select()
33
+ ->from(array('connector' => $tableName), new Zend_Db_Expr('connector.prod_name'))
34
+ ->joinInner(array('supplier' => $mappingTable), "connector.supplier_id = supplier.supplier_id AND supplier.supplier_symbol = {$connection->quote($manufacturer)}")
35
+ ->where('connector.prod_id = ? ', $mpn);
36
+ $icecatName = $connection->fetchOne($selectCondition);
37
+ } catch (Exception $e) {
38
+ Mage::log('Icecat getName error'.$e);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  }
40
+
41
+ $product_name = $icecatName ? $icecatName : $this->getData('name');
42
+ return $this->getData('brand_name') . ' ' . $product_name;
43
+ }
44
+
45
+
46
+ public function getImage(){
47
+ if(!parent::getImage()||parent::getImage() == 'no_selection'){
48
+ return "true";
49
+ }else {
50
+ return parent::getImage();
51
+ }
52
+ }
53
+
54
+ public function getShortDescription() {
55
+ if ('Icecat' == Mage::getStoreConfig('icecat_root/icecat/descript_priority')) {
56
+ return true;
57
+ } else {
58
+ return parent::getShortDescription();
59
  }
60
+ }
61
+
62
+ public function getDescription() {
63
+ if ('Icecat' == Mage::getStoreConfig('icecat_root/icecat/descript_priority')) {
64
+ return true;
65
+ } else {
66
+ return parent::getDescription();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
  }
68
+ }
69
+
70
+
71
+ /**
72
+ * Entity code.
73
+ * Can be used as part of method name for entity processing
74
+ */
75
+ const ENTITY = 'catalog_product';
76
+
77
+ const CACHE_TAG = 'catalog_product';
78
+ protected $_cacheTag = 'catalog_product';
79
+ protected $_eventPrefix = 'catalog_product';
80
+ protected $_eventObject = 'product';
81
+ protected $_canAffectOptions = false;
82
+
83
+ /**
84
+ * Product type instance
85
+ *
86
+ * @var Mage_Catalog_Model_Product_Type_Abstract
87
+ */
88
+ protected $_typeInstance = null;
89
+
90
+ /**
91
+ * Product type instance as singleton
92
+ */
93
+ protected $_typeInstanceSingleton = null;
94
+
95
+ /**
96
+ * Product link instance
97
+ *
98
+ * @var Mage_Catalog_Model_Product_Link
99
+ */
100
+ protected $_linkInstance;
101
+
102
+ /**
103
+ * Product object customization (not stored in DB)
104
+ *
105
+ * @var array
106
+ */
107
+ protected $_customOptions = array();
108
+
109
+ /**
110
+ * Product Url Instance
111
+ *
112
+ * @var Mage_Catalog_Model_Product_Url
113
+ */
114
+ protected $_urlModel = null;
115
+ protected static $_url;
116
+ protected static $_urlRewrite;
117
+ protected $_errors = array();
118
+ protected $_optionInstance;
119
+ protected $_options = array();
120
+
121
+ /**
122
+ * Product reserved attribute codes
123
+ */
124
+ protected $_reservedAttributes;
125
+
126
+ /**
127
+ * Flag for available duplicate function
128
+ *
129
+ * @var boolean
130
+ */
131
+ protected $_isDuplicable = true;
132
 
133
  }
134
  ?>
app/code/local/Bintime/Icecatimport/Model/Import.php CHANGED
@@ -5,346 +5,370 @@
5
  *
6
  */
7
  class Bintime_Icecatimport_Model_Import extends Mage_Core_Model_Abstract {
8
-
9
- public $entityId;
10
- private $productDescriptionList = array();
11
- private $productDescription;
12
- private $fullProductDescription;
13
- private $lowPicUrl;
14
- private $highPicUrl;
15
- private $errorMessage;
16
- private $galleryPhotos = array();
17
- private $productName;
18
- private $relatedProducts = array();
19
- private $thumb;
20
- private $errorSystemMessage; //depricated
21
- private $_cacheKey = 'bintime_icecatimport_';
22
-
23
- private $_warrantyInfo = '';
24
- private $_shortSummaryDesc = '';
25
- private $_longSummaryDesc = '';
26
-
27
- private $_manualPdfUrl = '';
28
- private $_pdfUrl = '';
29
- private $_multimedia = '';
30
-
31
- protected function _construct()
32
- {
33
- $this->_init('icecatimport/import');
34
- }
35
-
36
- /**
37
- * Perform Curl request with corresponding param check and error processing
38
- * @param int $productId
39
- * @param string $vendorName
40
- * @param string $locale
41
- * @param string $userName
42
- * @param string $userPass
43
- */
44
- public function getProductDescription($productId, $vendorName, $locale, $userName, $userPass, $entityId){
45
-
46
- $this->entityId = $entityId;
47
- if (null === $this->simpleDoc) {
48
- if (!$cacheDataXml = Mage::app()->getCache()->load($this->_cacheKey . $entityId)) {
49
- $dataUrl = 'http://data.icecat.biz/xml_s3/xml_server3.cgi';
50
- if (empty($productId)) {
51
- $this->errorMessage = 'Given product has no MPN (SKU)';
52
- return false;
53
- }
54
- if (empty($vendorName)){
55
- $this->errorMessage = "Given product has no manufacturer specified.";
56
- return false;
57
- }
58
- if (empty($locale)) {
59
- $this->errorMessage = "Please specify product description locale";
60
- return false;
61
- }
62
- if ( empty($userName)) {
63
- $this->errorMessage = "No ICEcat login provided";
64
- return false;
65
- }
66
- if (empty($userPass)){
67
- $this->errorMessage = "No ICEcat password provided";
68
- return false;
69
- }
70
-
71
- $getParamsArray = array("prod_id" => $productId,
72
- "lang" =>$locale,
73
- "vendor" => $vendorName,
74
- "output" =>'productxml'
75
- );
76
- Varien_Profiler::start('Bintime FILE DOWNLOAD:');
77
- try{
78
- $webClient = new Zend_Http_Client();
79
- $webClient->setUri($dataUrl);
80
- $webClient->setMethod(Zend_Http_Client::GET);
81
- $webClient->setHeaders('Content-Type: text/xml; charset=UTF-8');
82
- $webClient->setParameterGet($getParamsArray);
83
- $webClient->setAuth($userName, $userPass, Zend_Http_CLient::AUTH_BASIC);
84
- $response = $webClient->request();
85
- if ($response->isError()){
86
- $this->errorMessage = 'Response Status: '.$response->getStatus()." Response Message: ".$response->getMessage();
87
- return false;
88
- }
89
- }
90
- catch (Exception $e) {
91
- $this->errorMessage = "Warning: cannot connect to ICEcat. {$e->getMessage()}";
92
- return false;
93
- }
94
- Varien_Profiler::stop('Bintime FILE DOWNLOAD:');
95
- $resultString = $response->getBody();
96
- Mage::app()->getCache()->save($resultString, $this->_cacheKey . $entityId);
97
- } else {
98
- $resultString = $cacheDataXml;
99
- }
100
- if(!$this->parseXml($resultString)){
101
- return false;
102
- }
103
-
104
- if ($this->checkIcecatResponse($productId, $vendorName)){
105
- return false;
106
- }
107
-
108
- $this->loadProductDescriptionList();
109
- $this->loadOtherProductParams($productId);
110
- $this->loadGalleryPhotos();
111
- Varien_Profiler::start('Bintime FILE RELATED');
112
- $this->loadRelatedProducts();
113
- Varien_Profiler::stop('Bintime FILE RELATED');
114
  }
115
- return true;
116
- }
117
-
118
- public function getSystemError(){
119
- return $this->errorSystemMessage;
120
- }
121
-
122
- public function getProductName(){
123
- return $this->productName;
124
- }
125
-
126
- public function getGalleryPhotos(){
127
- return $this->galleryPhotos;
128
- }
129
-
130
- public function getThumbPicture(){
131
- return $this->thumb;
132
- }
133
-
134
- /**
135
- * load Gallery array from XML
136
- */
137
- private function loadGalleryPhotos(){
138
- $galleryPhotos = $this->simpleDoc->Product->ProductGallery->ProductPicture;
139
- if (!count($galleryPhotos)){
140
  return false;
141
  }
142
- foreach($galleryPhotos as $photo){
143
- if($photo["Size"] > 0){//if
144
- $picHeight = (int)$photo["PicHeight"];
145
- $picWidth = (int)$photo["PicWidth"];
146
- $thumbUrl = (string)$photo["ThumbPic"];
147
- $picUrl = (string)$photo["Pic"];
148
-
149
- array_push($this->galleryPhotos, array(
150
- 'height' => $picHeight,
151
- 'width' => $picWidth,
152
- 'thumb' => $thumbUrl,
153
- 'pic' => $picUrl
154
- ));
155
- }//endif
156
  }
157
- }
158
-
159
- public function getErrorMessage(){
160
- return $this->errorMessage;
161
- }
162
-
163
- /**
164
- * Checks response XML for error messages
165
- * @param int $productId
166
- * @param string $vendorName
167
- */
168
- private function checkIcecatResponse(){
169
- $errorMessage = $this->simpleDoc->Product['ErrorMessage'];
170
- if ($errorMessage != ''){
171
- if (preg_match('/^No xml data/', $errorMessage)){
172
- $this->errorSystemMessage = $errorMessage;
173
- return true;
174
  }
175
- if (preg_match('/^The specified vendor does not exist$/', $errorMessage)) {
176
- $this->errorSystemMessage = $errorMessage;
177
- return true;
178
  }
179
- $this->errorMessage = "Ice Cat Error: ".$errorMessage;
180
- return true;
 
 
 
 
 
181
  }
182
- return false;
183
- }
184
-
185
- public function getProductDescriptionList(){
186
- return $this->productDescriptionList;
187
- }
188
-
189
-
190
- public function getShortProductDescription(){
191
- return $this->productDescription;
192
- }
193
-
194
- public function getFullProductDescription(){
195
- return $this->fullProductDescription;
196
- }
197
-
198
- public function getLowPicUrl(){
199
- return $this->highPicUrl;
200
- }
201
-
202
- public function getRelatedProducts(){
203
- return $this->relatedProducts;
204
- }
205
-
206
- public function getVendor(){
207
- return $this->vendor;
208
- }
209
-
210
- public function getMPN(){
211
- return $this->productId;
212
- }
213
-
214
- public function getEAN(){
215
- return $this->EAN;
216
  }
 
 
217
 
218
- public function getWarrantyInfo(){
219
- return $this->_warrantyInfo;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
220
  }
 
 
221
 
222
- public function getShortSummaryDescription(){
223
- return $this->_shortSummaryDesc;
224
- }
225
 
226
- public function getLongSummaryDescription(){
227
- return $this->_longSummaryDesc;
228
- }
229
 
230
- public function getManualPDF(){
231
- return $this->_manualPdfUrl;
232
- }
233
 
234
- public function getPDF(){
235
- return $this->_pdfUrl;
236
- }
237
 
238
- public function getIceCatMedia(){
239
- return $this->_multimedia;
 
 
 
 
 
240
  }
 
 
 
 
 
 
241
 
242
- /**
243
- * Form related products Array
244
- */
245
- private function loadRelatedProducts(){
246
- $relatedProductsArray = $this->simpleDoc->Product->ProductRelated;
247
- if(count($relatedProductsArray)){
248
- foreach($relatedProductsArray as $product){
249
- $productArray = array();
250
- $productNS = $product->Product;
251
- $productArray['name'] = (string)$productNS['Name'];
252
- $productArray['thumb'] = (string)$productNS['ThumbPic'];
253
- $mpn = (string)$productNS['Prod_id'];
254
- $productSupplier = $productNS->Supplier;
255
- $productSupplierId = (int)$productSupplier['ID'];
256
- $productArray['supplier_thumb'] = 'http://images2.icecat.biz/thumbs/SUP'.$productSupplierId.'.jpg';
257
- $productArray['supplier_name'] = (string)$productSupplier['Name'];
258
- $this->relatedProducts[$mpn] = $productArray;
259
- }
260
- }
261
- }
262
-
263
- /**
264
- * Form product feature Arrray
265
- */
266
- private function loadProductDescriptionList(){
267
- $descriptionArray = array();
268
-
269
- $specGroups = $this->simpleDoc->Product->CategoryFeatureGroup;
270
- $specFeatures = $this->simpleDoc->Product->ProductFeature;
271
- foreach($specFeatures as $feature){
272
- $id = (int)$feature['CategoryFeatureGroup_ID'];
273
- $featureText = (string)$feature["Presentation_Value"];
274
- $featureName = (string)$feature->Feature->Name["Value"];
275
- foreach($specGroups as $group){
276
- $groupId = (int)$group["ID"];
277
- if ($groupId == $id){
278
- $groupName = (string) $group->FeatureGroup->Name["Value"];
279
- $rating = (int)$group['No'];
280
- $descriptionArray[$rating][$groupName][$featureName] = $featureText;
281
- break;
282
- }
283
- }
284
- }
285
- krsort($descriptionArray);
286
- $this->productDescriptionList = $descriptionArray;
287
  }
288
-
289
- /**
290
- * Form Array of non feature-value product params
291
- */
292
- private function loadOtherProductParams($productId){
293
-
294
- $productTag = $this->simpleDoc->Product;
295
-
296
- $this->productDescription = (string)$productTag->ProductDescription['ShortDesc'];
297
- $this->fullProductDescription = (string)$productTag->ProductDescription['LongDesc'];
298
- $this->_warrantyInfo = (string)$productTag->ProductDescription['WarrantyInfo'];
299
- $this->_shortSummaryDesc = (string)$productTag->SummaryDescription->ShortSummaryDescription;
300
- $this->_longSummaryDesc = (string)$productTag->SummaryDescription->LongSummaryDescription;
301
-
302
- $this->_manualPdfUrl = (string)$productTag->ProductDescription['ManualPDFURL'];
303
- $this->_pdfUrl = (string)$productTag->ProductDescription['PDFURL'];
304
-
305
- $this->_multimedia = $productTag->ProductMultimediaObject->MultimediaObject;
306
-
307
- $this->lowPicUrl = (string)$productTag["LowPic"];
308
- $this->highPicUrl = (string)$productTag["HighPic"];
309
- $this->productName = (string)$productTag["Name"];
310
- $this->productId = (string)$productTag['Prod_id'];
311
- $this->thumb = (string)$productTag['ThumbPic'];
312
- $this->vendor = (string)$productTag->Supplier['Name'];
313
-
314
- $prodEAN = $productTag->EANCode;
315
- $EANstr='';
316
- $EANarr=null;
317
- $j = 0;//counter
318
- foreach($prodEAN as $ellEAN){
319
- $EANarr[]=$ellEAN['EAN'];$j++;
320
  }
321
- $i = 0;
322
- $str = '';
323
- for($i=0;$i<$j;$i++){
324
- $g = $i%2;
325
- if($g == '0'){if($j == 1){$str .= $EANarr[$i].'<br>';} else {$str .= $EANarr[$i].', ';}
326
  }
327
- else {if($i != $j-1){$str .= $EANarr[$i].', <br>';}else {$str .= $EANarr[$i].' <br>';}}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
328
  }
329
- $this->EAN = $str;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
330
 
 
 
 
331
  }
332
-
333
- /**
334
- * parse response XML: to SimpleXml
335
- * @param string $stringXml
336
- */
337
- private function parseXml($stringXml){
338
- libxml_use_internal_errors(true);
339
- $this->simpleDoc = simplexml_load_string($stringXml);
340
- if ($this->simpleDoc){
341
- return true;
342
- }
343
- $this->simpleDoc = simplexml_load_string(utf8_encode($stringXml));
344
- if ($this->simpleDoc){
345
- return true;
346
- }
347
- return false;
 
 
 
 
 
 
 
348
  }
 
 
 
 
 
 
349
  }
350
  ?>
5
  *
6
  */
7
  class Bintime_Icecatimport_Model_Import extends Mage_Core_Model_Abstract {
8
+
9
+ public $entityId;
10
+ private $productDescriptionList = array();
11
+ private $productDescription;
12
+ private $fullProductDescription;
13
+ private $lowPicUrl;
14
+ private $highPicUrl;
15
+ private $errorMessage;
16
+ private $galleryPhotos = array();
17
+ private $productName;
18
+ private $relatedProducts = array();
19
+ private $thumb;
20
+ private $errorSystemMessage; //depricated
21
+ private $_cacheKey = 'bintime_icecatimport_';
22
+
23
+ private $_warrantyInfo = '';
24
+ private $_shortSummaryDesc = '';
25
+ private $_longSummaryDesc = '';
26
+
27
+ private $_manualPdfUrl = '';
28
+ private $_pdfUrl = '';
29
+ private $_multimedia = '';
30
+
31
+ protected function _construct() {
32
+ $this->_init('icecatimport/import');
33
+ }
34
+
35
+ /**
36
+ * Perform Curl request with corresponding param check and error processing
37
+ * @param int $productId
38
+ * @param string $vendorName
39
+ * @param string $locale
40
+ * @param string $userName
41
+ * @param string $userPass
42
+ */
43
+ public function getProductDescription($productId, $vendorName, $locale, $userName, $userPass, $entityId, $ean_code){
44
+ $this->entityId = $entityId;
45
+ if (null === $this->simpleDoc) {
46
+ if (!$cacheDataXml = Mage::app()->getCache()->load($this->_cacheKey . $entityId . '_' . $locale)) {
47
+ $dataUrl = 'http://data.icecat.biz/xml_s3/xml_server3.cgi';
48
+ $successRespondByMPNVendorFlag = false;
49
+ if ( empty($userName)) {
50
+ $this->errorMessage = "No ICEcat login provided";
51
+ return false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
  }
53
+ if (empty($userPass)){
54
+ $this->errorMessage = "No ICEcat password provided";
55
+ return false;
56
+ }
57
+ if (empty($locale)) {
58
+ $this->errorMessage = "Please specify product description locale";
59
+ return false;
60
+ }
61
+ if ((empty($productId) && empty($ean_code))
62
+ || (empty($vendorName) && empty($ean_code))) {
63
+ $this->errorMessage = 'Given product has invalid IceCat data';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  return false;
65
  }
66
+
67
+ if (!empty($productId) && !empty($vendorName)) {
68
+ $resultString = $this->_getIceCatData($userName, $userPass, $dataUrl, array(
69
+ "prod_id" => $productId,
70
+ "lang" => $locale,
71
+ "vendor" => $vendorName,
72
+ "output" => 'productxml'
73
+ ));
74
+ if ($this->parseXml($resultString)) {
75
+ if (!$this->checkIcecatResponse()) {
76
+ $successRespondByMPNVendorFlag = true;
77
+ }
78
+ }
 
79
  }
80
+ // if get data by MPN & brand name wrong => trying by Ean code
81
+ if (!$successRespondByMPNVendorFlag) {
82
+ $error = false;
83
+ if (!empty($ean_code)) {
84
+ $resultString = $this->_getIceCatData($userName, $userPass, $dataUrl, array(
85
+ 'ean_upc' => $ean_code,
86
+ 'lang' => $locale,
87
+ 'output' => 'productxml'
88
+ ));
89
+ if (!$this->parseXml($resultString)) {
90
+ $error = true;
91
+ $this->simpleDoc = null;
 
 
 
 
 
92
  }
93
+ if ($this->checkIcecatResponse()) {
94
+ $error = true;
95
+ $this->simpleDoc = null;
96
  }
97
+ } else {
98
+ $error = true;
99
+ }
100
+ if ($error) {
101
+ $this->errorMessage = 'Given product has invalid IceCat data';
102
+ return false;
103
+ }
104
  }
105
+ Mage::app()->getCache()->save($resultString, $this->_cacheKey . $entityId . '_' . $locale);
106
+ } else {
107
+ $resultString = $cacheDataXml;
108
+ if (!$this->parseXml($resultString)){
109
+ return false;
110
+ }
111
+ if ($this->checkIcecatResponse()){
112
+ return false;
113
+ }
114
+ }
115
+ $this->loadProductDescriptionList();
116
+ $this->loadOtherProductParams($productId);
117
+ $this->loadGalleryPhotos();
118
+ Varien_Profiler::start('Bintime FILE RELATED');
119
+ $this->loadRelatedProducts();
120
+ Varien_Profiler::stop('Bintime FILE RELATED');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
121
  }
122
+ return true;
123
+ }
124
 
125
+ private function _getIceCatData($userName, $userPass, $dataUrl, $productAttributes){
126
+ try{
127
+ $webClient = new Zend_Http_Client();
128
+ $webClient->setUri($dataUrl);
129
+ $webClient->setMethod(Zend_Http_Client::GET);
130
+ $webClient->setHeaders('Content-Type: text/xml; charset=UTF-8');
131
+ $webClient->setParameterGet($productAttributes);
132
+ $webClient->setAuth($userName, $userPass, Zend_Http_CLient::AUTH_BASIC);
133
+ $response = $webClient->request();
134
+ if ($response->isError()){
135
+ $this->errorMessage = 'Response Status: '.$response->getStatus()." Response Message: ".$response->getMessage();
136
+ return false;
137
+ }
138
+ } catch (Exception $e) {
139
+ $this->errorMessage = "Warning: cannot connect to ICEcat. {$e->getMessage()}";
140
+ return false;
141
  }
142
+ return $response->getBody();
143
+ }
144
 
145
+ public function getSystemError(){
146
+ return $this->errorSystemMessage;
147
+ }
148
 
149
+ public function getProductName(){
150
+ return $this->productName;
151
+ }
152
 
153
+ public function getGalleryPhotos(){
154
+ return $this->galleryPhotos;
155
+ }
156
 
157
+ public function getThumbPicture(){
158
+ return $this->thumb;
159
+ }
160
 
161
+ /**
162
+ * load Gallery array from XML
163
+ */
164
+ private function loadGalleryPhotos(){
165
+ $galleryPhotos = $this->simpleDoc->Product->ProductGallery->ProductPicture;
166
+ if (!count($galleryPhotos)){
167
+ return false;
168
  }
169
+ foreach($galleryPhotos as $photo){
170
+ if ($photo["Size"] > 0){
171
+ $picHeight = (int)$photo["PicHeight"];
172
+ $picWidth = (int)$photo["PicWidth"];
173
+ $thumbUrl = (string)$photo["ThumbPic"];
174
+ $picUrl = (string)$photo["Pic"];
175
 
176
+ array_push($this->galleryPhotos, array(
177
+ 'height' => $picHeight,
178
+ 'width' => $picWidth,
179
+ 'thumb' => $thumbUrl,
180
+ 'pic' => $picUrl
181
+ ));
182
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
183
  }
184
+ }
185
+
186
+ public function getErrorMessage(){
187
+ return $this->errorMessage;
188
+ }
189
+
190
+ /**
191
+ * Checks response XML for error messages
192
+ */
193
+ private function checkIcecatResponse(){
194
+ $errorMessage = $this->simpleDoc->Product['ErrorMessage'];
195
+ if ($errorMessage != ''){
196
+ if (preg_match('/^No xml data/', $errorMessage)){
197
+ $this->errorSystemMessage = $errorMessage;
198
+ return true;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
199
  }
200
+ if (preg_match('/^The specified vendor does not exist$/', $errorMessage)) {
201
+ $this->errorSystemMessage = $errorMessage;
202
+ return true;
 
 
203
  }
204
+ $this->errorMessage = "Ice Cat Error: ".$errorMessage;
205
+ return true;
206
+ }
207
+ return false;
208
+ }
209
+
210
+ public function getProductDescriptionList(){
211
+ return $this->productDescriptionList;
212
+ }
213
+
214
+ public function getShortProductDescription(){
215
+ return $this->productDescription;
216
+ }
217
+
218
+ public function getFullProductDescription(){
219
+ return $this->fullProductDescription;
220
+ }
221
+
222
+ public function getLowPicUrl(){
223
+ return $this->highPicUrl;
224
+ }
225
+
226
+ public function getRelatedProducts(){
227
+ return $this->relatedProducts;
228
+ }
229
+
230
+ public function getVendor(){
231
+ return $this->vendor;
232
+ }
233
+
234
+ public function getMPN(){
235
+ return $this->productId;
236
+ }
237
+
238
+ public function getEAN(){
239
+ return $this->EAN;
240
+ }
241
+
242
+ public function getWarrantyInfo(){
243
+ return $this->_warrantyInfo;
244
+ }
245
+
246
+ public function getShortSummaryDescription(){
247
+ return $this->_shortSummaryDesc;
248
+ }
249
+
250
+ public function getLongSummaryDescription(){
251
+ return $this->_longSummaryDesc;
252
+ }
253
+
254
+ public function getManualPDF(){
255
+ return $this->_manualPdfUrl;
256
+ }
257
+
258
+ public function getPDF(){
259
+ return $this->_pdfUrl;
260
+ }
261
+
262
+ public function getIceCatMedia(){
263
+ return $this->_multimedia;
264
+ }
265
+
266
+ /**
267
+ * Form related products Array
268
+ */
269
+ private function loadRelatedProducts(){
270
+ $relatedProductsArray = $this->simpleDoc->Product->ProductRelated;
271
+ if (count($relatedProductsArray)){
272
+ foreach($relatedProductsArray as $product){
273
+ $productArray = array();
274
+ $productNS = $product->Product;
275
+ $productArray['name'] = (string)$productNS['Name'];
276
+ $productArray['thumb'] = (string)$productNS['ThumbPic'];
277
+ $mpn = (string)$productNS['Prod_id'];
278
+ $productSupplier = $productNS->Supplier;
279
+ $productSupplierId = (int)$productSupplier['ID'];
280
+ $productArray['supplier_thumb'] = 'http://images2.icecat.biz/thumbs/SUP'.$productSupplierId.'.jpg';
281
+ $productArray['supplier_name'] = (string)$productSupplier['Name'];
282
+ $this->relatedProducts[$mpn] = $productArray;
283
  }
284
+ }
285
+ }
286
+
287
+ /**
288
+ * Form product feature Arrray
289
+ */
290
+ private function loadProductDescriptionList(){
291
+ $descriptionArray = array();
292
+ $specGroups = $this->simpleDoc->Product->CategoryFeatureGroup;
293
+ $specFeatures = $this->simpleDoc->Product->ProductFeature;
294
+ foreach($specFeatures as $feature){
295
+ $id = (int)$feature['CategoryFeatureGroup_ID'];
296
+ $featureText = (string)$feature["Presentation_Value"];
297
+ $featureValue = (string)$feature["Value"];
298
+ $featureName = (string)$feature->Feature->Name["Value"];
299
+ if ($featureValue == 'Y' || $featureValue == 'N') {
300
+ $featureText = $featureValue;
301
+ }
302
+ foreach($specGroups as $group){
303
+ $groupId = (int)$group["ID"];
304
+ if ($groupId == $id){
305
+ $groupName = (string) $group->FeatureGroup->Name["Value"];
306
+ $rating = (int)$group['No'];
307
+ $descriptionArray[$rating][$groupName][$featureName] = $featureText;
308
+ break;
309
+ }
310
+ }
311
+ }
312
+ krsort($descriptionArray);
313
+ $this->productDescriptionList = $descriptionArray;
314
+ }
315
+
316
+ /**
317
+ * Form Array of non feature-value product params
318
+ */
319
+ private function loadOtherProductParams($productId){
320
+ $productTag = $this->simpleDoc->Product;
321
+ $this->productDescription = (string)$productTag->ProductDescription['ShortDesc'];
322
+ $this->fullProductDescription = (string)$productTag->ProductDescription['LongDesc'];
323
+ $this->_warrantyInfo = (string)$productTag->ProductDescription['WarrantyInfo'];
324
+ $this->_shortSummaryDesc = (string)$productTag->SummaryDescription->ShortSummaryDescription;
325
+ $this->_longSummaryDesc = (string)$productTag->SummaryDescription->LongSummaryDescription;
326
+ $this->_manualPdfUrl = (string)$productTag->ProductDescription['ManualPDFURL'];
327
+ $this->_pdfUrl = (string)$productTag->ProductDescription['PDFURL'];
328
+ $this->_multimedia = $productTag->ProductMultimediaObject->MultimediaObject;
329
+ $this->lowPicUrl = (string)$productTag["LowPic"];
330
+ $this->highPicUrl = (string)$productTag["HighPic"];
331
+ $this->productName = (string)$productTag["Name"];
332
+ $this->productId = (string)$productTag['Prod_id'];
333
+ $this->thumb = (string)$productTag['ThumbPic'];
334
+ $this->vendor = (string)$productTag->Supplier['Name'];
335
+ $prodEAN = $productTag->EANCode;
336
+ $EANstr = '';
337
+ $EANarr = null;
338
 
339
+ $j = 0;//counter
340
+ foreach($prodEAN as $ellEAN){
341
+ $EANarr[]=$ellEAN['EAN'];$j++;
342
  }
343
+ $i = 0;
344
+ $str = '';
345
+ for ($i=0;$i<$j;$i++) {
346
+ $g = $i%2;
347
+ if ($g == '0') {
348
+ if($j == 1){
349
+ $str .= $EANarr[$i].'<br>';
350
+ } else {$str .= $EANarr[$i].', ';}
351
+ } else {if($i != $j-1){$str .= $EANarr[$i].', <br>';}else {$str .= $EANarr[$i].' <br>';}}
352
+ }
353
+ $this->EAN = $str;
354
+
355
+ }
356
+
357
+ /**
358
+ * parse response XML: to SimpleXml
359
+ * @param string $stringXml
360
+ */
361
+ private function parseXml($stringXml){
362
+ libxml_use_internal_errors(true);
363
+ $this->simpleDoc = simplexml_load_string($stringXml);
364
+ if ($this->simpleDoc){
365
+ return true;
366
  }
367
+ $this->simpleDoc = simplexml_load_string(utf8_encode($stringXml));
368
+ if ($this->simpleDoc){
369
+ return true;
370
+ }
371
+ return false;
372
+ }
373
  }
374
  ?>
app/code/local/Bintime/Icecatimport/Model/Observer.php CHANGED
@@ -5,316 +5,294 @@
5
  * @author Sergey Gozhedrianov <info@bintime.com>
6
  *
7
  */
8
- class Bintime_Icecatimport_Model_Observer
9
  {
10
- private $errorMessage;
11
- private $connection;
12
-
13
- private $freeExportURLs = 'http://data.icecat.biz/export/freeurls/export_urls_rich.txt.gz';
14
- private $fullExportURLs = 'http://data.icecat.biz/export/export_urls_rich.txt.gz';
15
- protected $_supplierMappingUrl = 'http://data.icecat.biz/export/freeurls/supplier_mapping.xml';
16
- protected $_connectorDir = '/bintime/icecatimport/';
17
- protected $_productFile;
18
- protected $_supplierFile;
19
-
20
- protected function _construct()
21
- {
22
- $this->_init('icecatimport/observer');
23
- }
24
-
25
- /**
26
- * root method for uploading images to DB
27
- */
28
- public function load(){
29
-
30
- $loadUrl = $this->getLoadURL();
31
- ini_set('max_execution_time', 0);
32
-
33
- try {
34
- $this->_productFile = $this->_prepareFile(basename($loadUrl));
35
- $this->_supplierFile = $this->_prepareFile(basename($this->_supplierMappingUrl));
36
- echo "Data file downloading started <br>";
37
- $this->downloadFile($this->_productFile, $loadUrl);
38
 
39
- echo "Start of supplier mapping file download<br>";
40
- $this->downloadFile($this->_supplierFile, $this->_supplierMappingUrl);
41
- $this->XMLfile = Mage::getBaseDir('var') . $this->_connectorDir . basename($loadUrl, ".gz");
42
-
43
- echo "Start Unzipping Data File<br>";
44
- $this->unzipFile();
45
- echo "Start File Processing<br>";
46
-
47
- $this->_loadSupplierListToDb();
48
- $this->loadFileToDb();
49
-
50
- echo "File Processed Succesfully<br>";
51
- } catch( Exception $e) {
52
- echo $e->getMessage();
53
- Mage::log($e->getMessage());
54
- }
55
- }
56
-
57
- /**
58
- * parse given XML to SIMPLE XML
59
- * @param string $stringXml
60
- */
61
- protected function _parseXml($stringXml){
62
- libxml_use_internal_errors(true);
63
- $simpleDoc = simplexml_load_string($stringXml);
64
- if ($simpleDoc){
65
- return $simpleDoc;
66
- }
67
- $simpleDoc = simplexml_load_string(utf8_encode($stringXml));
68
- if ($simpleDoc){
69
- return $simpleDoc;
70
- }
71
- return false;
72
- }
73
-
74
- /**
75
- * Upload supplier mapping list to Database
76
- */
77
- protected function _loadSupplierListToDb()
78
- {
79
- $connection = $this->getDbConnection();
80
- $mappingTable = Mage::getSingleton('core/resource')->getTableName('icecatimport/supplier_mapping');
81
- try {
82
- $connection->beginTransaction();
83
- $xmlString = file_get_contents($this->_supplierFile);
84
- $xmlDoc = $this->_parseXml($xmlString);
85
- if ($xmlDoc) {
86
- $connection->query("DROP TABLE IF EXISTS `".$mappingTable."_temp`");
87
- $connection->query("
88
- CREATE TABLE `".$mappingTable."_temp` (
89
- `supplier_id` int(11) NOT NULL,
90
- `supplier_symbol` varchar(255) DEFAULT NULL,
91
- KEY `supplier_id` (`supplier_id`)
92
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8
93
- ");
94
 
95
- $supplierList = $xmlDoc->SupplierMappings->SupplierMapping;
96
- foreach ($supplierList as $supplier) {
97
- $supplierSymbolList = $supplier->Symbol;
98
- $supplierId = $supplier['supplier_id'];
99
- $connection->insert($mappingTable."_temp", array('supplier_id' => $supplierId, 'supplier_symbol' => (string)$supplier['name']));
100
- foreach($supplierSymbolList as $symbol) {
101
- $symbolName = (string)$symbol;
102
- $connection->insert($mappingTable."_temp", array('supplier_id' => $supplierId, 'supplier_symbol' => $symbolName));
103
- }
104
- }
105
 
106
- $connection->query("DROP TABLE IF EXISTS `".$mappingTable."_old`");
107
- $connection->query("rename table `".$mappingTable."` to `".$mappingTable."_old`, `".$mappingTable."_temp` to ".$mappingTable);
 
 
 
 
 
 
 
 
 
108
 
109
- $connection->commit();
110
- } else {
111
- throw new Exception('Unable to process supplier file');
112
- }
113
- } catch (Exception $e) {
114
- $connection->rollBack();
115
- throw new Exception("Icecat Import Terminated: {$e->getMessage()}");
116
- }
117
- }
118
- /**
119
- * retrieve URL of data file that corresponds ICEcat account
120
- */
121
- private function getLoadURL(){
122
- $subscripionLevel = Mage::getStoreConfig('icecat_root/icecat/icecat_type');
123
-
124
- if ($subscripionLevel === 'full'){
125
- return $this->fullExportURLs;
126
- }
127
- else {
128
- return $this->freeExportURLs;
129
- }
130
- }
131
-
132
- /**
133
- * return error messages
134
- */
135
- public function getErrorMessage(){
136
- return $this->errorMessage;
137
- }
138
-
139
- /**
140
- * getImage URL from DB
141
- * @param string $productSku
142
- * @param string $productManufacturer
143
- */
144
- public function getImageURL($productSku, $productManufacturer){
145
 
146
- $connection = $this->getDbConnection();
147
- try {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
148
 
149
- $tableName = Mage::getSingleton('core/resource')->getTableName('icecatimport/data');
150
- $mappingTable = Mage::getSingleton('core/resource')->getTableName('icecatimport/supplier_mapping');
151
-
152
- $selectCondition = $connection->select()
153
- ->from(array('connector' => $tableName), new Zend_Db_Expr('connector.prod_img'))
154
- ->joinInner(array('supplier' => $mappingTable), "connector.supplier_id = supplier.supplier_id AND supplier.supplier_symbol = {$this->connection->quote($productManufacturer)}")
155
- ->where('connector.prod_id = ? ', $productSku);
 
 
 
 
 
 
 
 
 
 
 
 
156
 
157
- $imageURL = $connection->fetchOne($selectCondition);
158
- if (empty($imageURL)){
159
- $this->errorMessage = "Given product id is not present in database";
160
- return false;
161
- }
162
- return $imageURL;
163
- } catch (Exception $e) {
164
- $this->errorMessage = "DB ERROR: {$e->getMessage()}";
165
- return false;
166
- }
167
- }
168
-
169
- /**
170
- * Singletong for DB connection
171
- */
172
- private function getDbConnection(){
173
- if ($this->connection){
174
- return $this->connection;
175
- }
176
- $this->connection = Mage::getSingleton('core/resource')->getConnection('core_read');
177
- return $this->connection;
178
- }
179
-
180
- /**
181
- * Upload Data file to DP
182
- */
183
- private function loadFileToDb(){
184
- $connection = $this->getDbConnection();
185
 
186
- $tableName = Mage::getSingleton('core/resource')->getTableName('icecatimport/data');
187
- try {
188
- $connection->beginTransaction();
189
- $fileHandler = fopen($this->XMLfile, "r");
190
- if ($fileHandler) {
191
- $connection->query("DROP TABLE IF EXISTS `".$tableName."_temp`");
192
- $connection->query("
193
- CREATE TABLE `".$tableName."_temp` (
194
- `prod_id` varchar(255) NOT NULL,
195
- `supplier_id` int(11) DEFAULT NULL,
196
- `prod_name` varchar(255) DEFAULT NULL,
197
- `prod_img` varchar(255) DEFAULT NULL,
198
- KEY `PRODUCT_MPN` (`prod_id`),
199
- KEY `supplier_id` (`supplier_id`)
200
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8
201
- ");
202
- $csvFile = Mage::getBaseDir('var') . $this->_connectorDir . 'ice_cat_temp.csv';
203
- $csvFileRes = fopen($csvFile, "w+");
204
 
205
- while (!feof($fileHandler)) {
206
- $row = fgets($fileHandler);
207
- $oneLine = explode("\t", $row);
208
- if ($oneLine[0]!= 'product_id' && $oneLine[0]!= ''){
209
- try{
210
- // $connection->insert($tableName."_temp", array('prod_id' => $oneLine[1], 'prod_img' => $oneLine[6], 'prod_name' => $oneLine[12], 'supplier_id' => $oneLine[13]));
211
-
212
- $prod_id = (!empty($oneLine[1])) ? $oneLine[1] : '';
213
- $prod_img = (!empty($oneLine[6])) ? $oneLine[6] : '';
214
- $prod_name = (!empty($oneLine[12])) ? $oneLine[12] : '';
215
- $supplier_id = (!empty($oneLine[4])) ? $oneLine[4] : '';
216
 
217
- $line = "$prod_id\t$supplier_id\t$prod_name\t$prod_img\n";
218
-
219
- fwrite($csvFileRes, $line);
 
 
 
 
220
 
221
- }catch(Exception $e){
222
- Mage::log("connector issue: {$e->getMessage()}");
223
- }
224
- }
225
- }
 
226
 
227
- // write csv file into temp table
228
- $connection->query('LOAD DATA LOCAL INFILE "'.$csvFile.'" INTO TABLE '.$tableName.'_temp ( prod_id, supplier_id, prod_name, prod_img )');
229
- $connection->query("DROP TABLE IF EXISTS `".$tableName."_old`");
230
- $connection->query("rename table `".$tableName."` to `".$tableName."_old`, `".$tableName."_temp` to ".$tableName);
231
-
232
- $connection->commit();
233
-
234
- fclose($fileHandler);
235
- unlink($csvFile);
236
- }
237
- } catch (Exception $e) {
238
- $connection->rollBack();
239
- throw new Exception("Icecat Import Terminated: {$e->getMessage()}");
240
- }
241
- }
242
-
243
- /**
244
- * unzip Uploaded file
245
- */
246
- private function unzipFile(){
247
- $gz = gzopen ( $this->_productFile, 'rb' );
248
-
249
- if (file_exists($this->XMLfile)){
250
- unlink($this->XMLfile);
251
- }
252
-
253
- $fileToWrite = @fopen($this->XMLfile, 'w+');
254
-
255
- if (!$fileToWrite){
256
- $this->errorMessage = 'Unable to open output txt file. Please remove all *.txt files from '.
257
- Mage::getBaseDir('var'). $this->_connectorDir .'folder';
258
- return false;
259
- }
260
- while (!gzeof($gz)) {
261
- $buffer = gzgets($gz, 100000);
262
- fputs($fileToWrite, $buffer) ;
263
- }
264
- gzclose ($gz);
265
- fclose($fileToWrite);
266
- }
267
-
268
- /**
269
- * Process downloading files
270
- * @param string $destinationFile
271
- * @param string $loadUrl
272
- */
273
- private function downloadFile($destinationFile, $loadUrl){
274
- $userName = Mage::getStoreConfig('icecat_root/icecat/login');
275
- $userPass = Mage::getStoreConfig('icecat_root/icecat/password');
276
- $fileToWrite = @fopen($destinationFile, 'w+');
277
-
278
- try{
279
 
280
- $webClient = new Zend_Http_Client();
281
- $webClient->setUri($loadUrl);
282
- $webClient->setConfig(array('maxredirects' => 0, 'timeout' => 60));
283
- $webClient->setMethod(Zend_Http_Client::GET);
284
- $webClient->setHeaders('Content-Type: text/xml; charset=UTF-8');
285
- $webClient->setAuth($userName, $userPass, Zend_Http_CLient::AUTH_BASIC);
286
- $response = $webClient->request('GET');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
287
 
288
- if ($response->isError()){
289
- throw new Exception('<br>ERROR Occured.<br>Response Status: '.$response->getStatus()."<br>Response Message: ".$response->getMessage());
290
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
291
 
292
- }
293
- catch (Exception $e) {
294
- throw new Exception("Warning: cannot connect to ICEcat. {$e->getMessage()}");
295
- }
296
-
297
- $resultString = $response->getBody();
298
- fwrite($fileToWrite, $resultString);
299
- fclose($fileToWrite);
300
- }
301
-
302
- /**
303
- * Prepares file and folder for futur download
304
- * @param string $fileName
305
- */
306
- protected function _prepareFile($fileName){
307
- $varDir = Mage::getBaseDir('var') . $this->_connectorDir;
308
- $filePath = $varDir . $fileName;
309
- if (!is_dir($varDir)){
310
- mkdir($varDir, 0777, true);
311
- }
312
-
313
- if (file_exists($filePath)){
314
- unlink($filePath);
315
- }
316
-
317
- return $filePath;
318
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
319
  }
320
  ?>
5
  * @author Sergey Gozhedrianov <info@bintime.com>
6
  *
7
  */
8
+ class Bintime_Icecatimport_Model_Observer
9
  {
10
+ private $errorMessage;
11
+ private $connection;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
 
13
+ private $freeExportURLs = 'http://data.icecat.biz/export/freeurls/export_urls_rich.txt.gz';
14
+ private $fullExportURLs = 'http://data.icecat.biz/export/export_urls_rich.txt.gz';
15
+ protected $_supplierMappingUrl = 'http://data.icecat.biz/export/freeurls/supplier_mapping.xml';
16
+ protected $_connectorDir = '/bintime/icecatimport/';
17
+ protected $_productFile;
18
+ protected $_supplierFile;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
 
20
+ protected function _construct(){
21
+ $this->_init('icecatimport/observer');
22
+ }
 
 
 
 
 
 
 
23
 
24
+ /**
25
+ * root method for uploading images to DB
26
+ */
27
+ public function load(){
28
+ $loadUrl = $this->getLoadURL();
29
+ ini_set('max_execution_time', 0);
30
+ try {
31
+ $this->_productFile = $this->_prepareFile(basename($loadUrl));
32
+ $this->_supplierFile = $this->_prepareFile(basename($this->_supplierMappingUrl));
33
+ echo "Data file downloading started <br>";
34
+ $this->downloadFile($this->_productFile, $loadUrl);
35
 
36
+ echo "Start of supplier mapping file download<br>";
37
+ $this->downloadFile($this->_supplierFile, $this->_supplierMappingUrl);
38
+ $this->XMLfile = Mage::getBaseDir('var') . $this->_connectorDir . basename($loadUrl, ".gz");
39
+
40
+ echo "Start Unzipping Data File<br>";
41
+ $this->unzipFile();
42
+ echo "Start File Processing<br>";
43
+
44
+ $this->_loadSupplierListToDb();
45
+ $this->loadFileToDb();
46
+
47
+ echo "File Processed Succesfully<br>";
48
+ } catch( Exception $e) {
49
+ echo $e->getMessage();
50
+ Mage::log($e->getMessage());
51
+ }
52
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
 
54
+ /**
55
+ * parse given XML to SIMPLE XML
56
+ * @param string $stringXml
57
+ */
58
+ protected function _parseXml($stringXml){
59
+ libxml_use_internal_errors(true);
60
+ $simpleDoc = simplexml_load_string($stringXml);
61
+ if ($simpleDoc){
62
+ return $simpleDoc;
63
+ }
64
+ $simpleDoc = simplexml_load_string(utf8_encode($stringXml));
65
+ if ($simpleDoc){
66
+ return $simpleDoc;
67
+ }
68
+ return false;
69
+ }
70
 
71
+ /**
72
+ * Upload supplier mapping list to Database
73
+ */
74
+ protected function _loadSupplierListToDb(){
75
+ $connection = $this->getDbConnection();
76
+ $mappingTable = Mage::getSingleton('core/resource')->getTableName('icecatimport/supplier_mapping');
77
+ try {
78
+ $connection->beginTransaction();
79
+ $xmlString = file_get_contents($this->_supplierFile);
80
+ $xmlDoc = $this->_parseXml($xmlString);
81
+ if ($xmlDoc) {
82
+ $connection->query("DROP TABLE IF EXISTS `".$mappingTable."_temp`");
83
+ $connection->query("
84
+ CREATE TABLE `".$mappingTable."_temp` (
85
+ `supplier_id` int(11) NOT NULL,
86
+ `supplier_symbol` varchar(255) DEFAULT NULL,
87
+ KEY `supplier_id` (`supplier_id`)
88
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8
89
+ ");
90
 
91
+ $supplierList = $xmlDoc->SupplierMappings->SupplierMapping;
92
+ foreach ($supplierList as $supplier) {
93
+ $supplierSymbolList = $supplier->Symbol;
94
+ $supplierId = $supplier['supplier_id'];
95
+ $connection->insert($mappingTable."_temp", array('supplier_id' => $supplierId, 'supplier_symbol' => (string)$supplier['name']));
96
+ foreach($supplierSymbolList as $symbol) {
97
+ $symbolName = (string)$symbol;
98
+ $connection->insert($mappingTable."_temp", array('supplier_id' => $supplierId, 'supplier_symbol' => $symbolName));
99
+ }
100
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
101
 
102
+ $connection->query("DROP TABLE IF EXISTS `".$mappingTable."_old`");
103
+ $connection->query("rename table `".$mappingTable."` to `".$mappingTable."_old`, `".$mappingTable."_temp` to ".$mappingTable);
104
+ $connection->commit();
105
+ } else {
106
+ throw new Exception('Unable to process supplier file');
107
+ }
108
+ } catch (Exception $e) {
109
+ $connection->rollBack();
110
+ throw new Exception("Icecat Import Terminated: {$e->getMessage()}");
111
+ }
112
+ }
 
 
 
 
 
 
 
113
 
114
+ /**
115
+ * retrieve URL of data file that corresponds ICEcat account
116
+ */
117
+ private function getLoadURL(){
118
+ $subscripionLevel = Mage::getStoreConfig('icecat_root/icecat/icecat_type');
 
 
 
 
 
 
119
 
120
+ if ($subscripionLevel === 'full'){
121
+ return $this->fullExportURLs;
122
+ }
123
+ else {
124
+ return $this->freeExportURLs;
125
+ }
126
+ }
127
 
128
+ /**
129
+ * return error messages
130
+ */
131
+ public function getErrorMessage(){
132
+ return $this->errorMessage;
133
+ }
134
 
135
+ /**
136
+ * getImage URL from DB
137
+ * @param string $productSku
138
+ * @param string $productManufacturer
139
+ */
140
+ public function getImageURL($productSku, $productManufacturer){
141
+ $connection = $this->getDbConnection();
142
+ try {
143
+ $tableName = Mage::getSingleton('core/resource')->getTableName('icecatimport/data');
144
+ $mappingTable = Mage::getSingleton('core/resource')->getTableName('icecatimport/supplier_mapping');
145
+
146
+ $selectCondition = $connection->select()
147
+ ->from(array('connector' => $tableName), new Zend_Db_Expr('connector.prod_img'))
148
+ ->joinInner(array('supplier' => $mappingTable), "connector.supplier_id = supplier.supplier_id AND supplier.supplier_symbol = {$this->connection->quote($productManufacturer)}")
149
+ ->where('connector.prod_id = ? ', $productSku);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
150
 
151
+ $imageURL = $connection->fetchOne($selectCondition);
152
+ if (empty($imageURL)){
153
+ $this->errorMessage = "Given product id is not present in database";
154
+ return false;
155
+ }
156
+ return $imageURL;
157
+ } catch (Exception $e) {
158
+ $this->errorMessage = "DB ERROR: {$e->getMessage()}";
159
+ return false;
160
+ }
161
+ }
162
+
163
+ /**
164
+ * Singletong for DB connection
165
+ */
166
+ private function getDbConnection(){
167
+ if ($this->connection){
168
+ return $this->connection;
169
+ }
170
+ $this->connection = Mage::getSingleton('core/resource')->getConnection('core_read');
171
+ return $this->connection;
172
+ }
173
+
174
+ /**
175
+ * Upload Data file to DP
176
+ */
177
+ private function loadFileToDb(){
178
+ $connection = $this->getDbConnection();
179
 
180
+ $tableName = Mage::getSingleton('core/resource')->getTableName('icecatimport/data');
181
+ try {
182
+ $connection->beginTransaction();
183
+ $fileHandler = fopen($this->XMLfile, "r");
184
+ if ($fileHandler) {
185
+ $connection->query("DROP TABLE IF EXISTS `".$tableName."_temp`");
186
+ $connection->query("
187
+ CREATE TABLE `".$tableName."_temp` (
188
+ `prod_id` varchar(255) NOT NULL,
189
+ `supplier_id` int(11) DEFAULT NULL,
190
+ `prod_name` varchar(255) DEFAULT NULL,
191
+ `prod_img` varchar(255) DEFAULT NULL,
192
+ KEY `PRODUCT_MPN` (`prod_id`),
193
+ KEY `supplier_id` (`supplier_id`)
194
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8
195
+ ");
196
+ $csvFile = Mage::getBaseDir('var') . $this->_connectorDir . 'ice_cat_temp.csv';
197
+ $csvFileRes = fopen($csvFile, "w+");
198
 
199
+ while (!feof($fileHandler)) {
200
+ $row = fgets($fileHandler);
201
+ $oneLine = explode("\t", $row);
202
+ if ($oneLine[0]!= 'product_id' && $oneLine[0]!= ''){
203
+ try{
204
+ $prod_id = (!empty($oneLine[1])) ? $oneLine[1] : '';
205
+ $prod_img = (!empty($oneLine[6])) ? $oneLine[6] : $oneLine[5];
206
+ $prod_name = (!empty($oneLine[12])) ? $oneLine[12] : '';
207
+ $supplier_id = (!empty($oneLine[4])) ? $oneLine[4] : '';
208
+ $line = "$prod_id\t$supplier_id\t$prod_name\t$prod_img\n";
209
+ fwrite($csvFileRes, $line);
210
+ }catch(Exception $e){
211
+ Mage::log("connector issue: {$e->getMessage()}");
212
+ }
213
+ }
214
+ }
215
+
216
+ // write csv file into temp table
217
+ $connection->query('LOAD DATA LOCAL INFILE "'.$csvFile.'" INTO TABLE '.$tableName.'_temp ( prod_id, supplier_id, prod_name, prod_img )');
218
+ $connection->query("DROP TABLE IF EXISTS `".$tableName."_old`");
219
+ $connection->query("rename table `".$tableName."` to `".$tableName."_old`, `".$tableName."_temp` to ".$tableName);
220
+ $connection->commit();
221
+ fclose($fileHandler);
222
+ unlink($csvFile);
223
+ }
224
+ } catch (Exception $e) {
225
+ $connection->rollBack();
226
+ throw new Exception("Icecat Import Terminated: {$e->getMessage()}");
227
+ }
228
+ }
229
+
230
+ /**
231
+ * unzip Uploaded file
232
+ */
233
+ private function unzipFile(){
234
+ $gz = gzopen ( $this->_productFile, 'rb' );
235
+ if (file_exists($this->XMLfile)){
236
+ unlink($this->XMLfile);
237
+ }
238
+ $fileToWrite = @fopen($this->XMLfile, 'w+');
239
+ if (!$fileToWrite){
240
+ $this->errorMessage = 'Unable to open output txt file. Please remove all *.txt files from '.
241
+ Mage::getBaseDir('var'). $this->_connectorDir .'folder';
242
+ return false;
243
+ }
244
+ while (!gzeof($gz)) {
245
+ $buffer = gzgets($gz, 100000);
246
+ fputs($fileToWrite, $buffer) ;
247
+ }
248
+ gzclose ($gz);
249
+ fclose($fileToWrite);
250
+ }
251
+
252
+ /**
253
+ * Process downloading files
254
+ * @param string $destinationFile
255
+ * @param string $loadUrl
256
+ */
257
+ private function downloadFile($destinationFile, $loadUrl){
258
+ $userName = Mage::getStoreConfig('icecat_root/icecat/login');
259
+ $userPass = Mage::getStoreConfig('icecat_root/icecat/password');
260
+ $fileToWrite = @fopen($destinationFile, 'w+');
261
+
262
+ try{
263
+ $webClient = new Zend_Http_Client();
264
+ $webClient->setUri($loadUrl);
265
+ $webClient->setConfig(array('maxredirects' => 0, 'timeout' => 60));
266
+ $webClient->setMethod(Zend_Http_Client::GET);
267
+ $webClient->setHeaders('Content-Type: text/xml; charset=UTF-8');
268
+ $webClient->setAuth($userName, $userPass, Zend_Http_CLient::AUTH_BASIC);
269
+ $response = $webClient->request('GET');
270
+ if ($response->isError()){
271
+ throw new Exception('<br>ERROR Occured.<br>Response Status: '.$response->getStatus()."<br>Response Message: ".$response->getMessage());
272
+ }
273
+ }
274
+ catch (Exception $e) {
275
+ throw new Exception("Warning: cannot connect to ICEcat. {$e->getMessage()}");
276
+ }
277
+ $resultString = $response->getBody();
278
+ fwrite($fileToWrite, $resultString);
279
+ fclose($fileToWrite);
280
+ }
281
+
282
+ /**
283
+ * Prepares file and folder for futur download
284
+ * @param string $fileName
285
+ */
286
+ protected function _prepareFile($fileName){
287
+ $varDir = Mage::getBaseDir('var') . $this->_connectorDir;
288
+ $filePath = $varDir . $fileName;
289
+ if (!is_dir($varDir)){
290
+ mkdir($varDir, 0777, true);
291
+ }
292
+ if (file_exists($filePath)){
293
+ unlink($filePath);
294
+ }
295
+ return $filePath;
296
+ }
297
  }
298
  ?>
app/code/local/Bintime/Icecatimport/Model/System/Config/Descriptionpriority.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Bintime_Icecatimport_Model_System_Config_Descriptionpriority
3
+ {
4
+ public function toOptionArray()
5
+ {
6
+ return array(
7
+ 'Icecat' => 'From Icecat',
8
+ 'Db' => 'From Database'
9
+ );
10
+
11
+ }
12
+ }
13
+ ?>
app/code/local/Bintime/Icecatimport/etc/system.xml CHANGED
@@ -1,79 +1,97 @@
1
  <?xml version="1.0" encoding="UTF-8"?>
2
  <config>
3
- <sections>
4
- <icecat_root translate="label" module="catalog">
5
- <class>separator-top</class>
6
- <label>Icecat Live!</label>
7
- <tab>catalog</tab>
8
- <frontend_type>text</frontend_type>
9
- <sort_order>200</sort_order>
10
- <show_in_default>1</show_in_default>
11
- <show_in_website>1</show_in_website>
12
- <show_in_store>1</show_in_store>
13
- <groups>
14
- <icecat translate="label">
15
- <label>Icecat Live! Settings</label>
16
- <frontend_type>text</frontend_type>
17
- <sort_order>50</sort_order>
18
- <show_in_default>1</show_in_default>
19
- <show_in_website>1</show_in_website>
20
- <show_in_store>1</show_in_store>
21
- <fields>
22
- <login translate="label">
23
- <label>Icecat User name</label>
24
- <frontend_type>text</frontend_type>
25
- <sort_order>10</sort_order>
26
- <show_in_default>1</show_in_default>
27
- <show_in_website>1</show_in_website>
28
- <show_in_store>1</show_in_store>
29
- </login>
30
- <password translate="label">
31
- <label>Icecat Password</label>
32
- <frontend_type>text</frontend_type>
33
- <sort_order>20</sort_order>
34
- <show_in_default>1</show_in_default>
35
- <show_in_website>1</show_in_website>
36
- <show_in_store>1</show_in_store>
37
- </password>
38
- <icecat_type translate="label">
39
- <label>Subscription level</label>
40
- <frontend_type>select</frontend_type>
41
- <source_model>icecatimport/system_config_subscription</source_model>
42
- <sort_order>25</sort_order>
43
- <show_in_default>1</show_in_default>
44
- <show_in_website>1</show_in_website>
45
- <show_in_store>1</show_in_store>
46
- </icecat_type>
47
- <language translate="label">
48
- <label>Language</label>
49
- <frontend_type>select</frontend_type>
50
- <source_model>icecatimport/system_config_locales</source_model>
51
- <sort_order>30</sort_order>
52
- <show_in_default>1</show_in_default>
53
- <show_in_website>1</show_in_website>
54
- <show_in_store>1</show_in_store>
55
- </language>
56
- <sku_field translate="label">
57
- <label>MPN</label>
58
- <frontend_type>select</frontend_type>
59
- <source_model>icecatimport/system_config_attributes</source_model>
60
- <sort_order>40</sort_order>
61
- <show_in_default>1</show_in_default>
62
- <show_in_website>1</show_in_website>
63
- <show_in_store>1</show_in_store>
64
- </sku_field>
65
- <manufacturer translate="label">
66
- <label>Manufacturer Name</label>
67
- <frontend_type>select</frontend_type>
68
- <source_model>icecatimport/system_config_attributes</source_model>
69
- <sort_order>50</sort_order>
70
- <show_in_default>1</show_in_default>
71
- <show_in_website>1</show_in_website>
72
- <show_in_store>1</show_in_store>
73
- </manufacturer>
74
- </fields>
75
- </icecat>
76
- </groups>
77
- </icecat_root>
78
- </sections>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
  </config>
1
  <?xml version="1.0" encoding="UTF-8"?>
2
  <config>
3
+ <sections>
4
+ <icecat_root translate="label" module="catalog">
5
+ <class>separator-top</class>
6
+ <label>Icecat Live!</label>
7
+ <tab>catalog</tab>
8
+ <frontend_type>text</frontend_type>
9
+ <sort_order>200</sort_order>
10
+ <show_in_default>1</show_in_default>
11
+ <show_in_website>1</show_in_website>
12
+ <show_in_store>1</show_in_store>
13
+ <groups>
14
+ <icecat translate="label">
15
+ <label>Icecat Live! Settings</label>
16
+ <frontend_type>text</frontend_type>
17
+ <sort_order>50</sort_order>
18
+ <show_in_default>1</show_in_default>
19
+ <show_in_website>1</show_in_website>
20
+ <show_in_store>1</show_in_store>
21
+ <fields>
22
+ <login translate="label">
23
+ <label>Icecat User name</label>
24
+ <frontend_type>text</frontend_type>
25
+ <sort_order>10</sort_order>
26
+ <show_in_default>1</show_in_default>
27
+ <show_in_website>1</show_in_website>
28
+ <show_in_store>1</show_in_store>
29
+ </login>
30
+ <password translate="label">
31
+ <label>Icecat Password</label>
32
+ <frontend_type>text</frontend_type>
33
+ <sort_order>20</sort_order>
34
+ <show_in_default>1</show_in_default>
35
+ <show_in_website>1</show_in_website>
36
+ <show_in_store>1</show_in_store>
37
+ </password>
38
+ <icecat_type translate="label">
39
+ <label>Subscription level</label>
40
+ <frontend_type>select</frontend_type>
41
+ <source_model>icecatimport/system_config_subscription</source_model>
42
+ <sort_order>25</sort_order>
43
+ <show_in_default>1</show_in_default>
44
+ <show_in_website>1</show_in_website>
45
+ <show_in_store>1</show_in_store>
46
+ </icecat_type>
47
+ <language translate="label">
48
+ <label>Language</label>
49
+ <frontend_type>select</frontend_type>
50
+ <source_model>icecatimport/system_config_locales</source_model>
51
+ <sort_order>30</sort_order>
52
+ <show_in_default>1</show_in_default>
53
+ <show_in_website>1</show_in_website>
54
+ <show_in_store>1</show_in_store>
55
+ </language>
56
+ <sku_field translate="label">
57
+ <label>MPN</label>
58
+ <frontend_type>select</frontend_type>
59
+ <source_model>icecatimport/system_config_attributes</source_model>
60
+ <sort_order>40</sort_order>
61
+ <show_in_default>1</show_in_default>
62
+ <show_in_website>1</show_in_website>
63
+ <show_in_store>1</show_in_store>
64
+ </sku_field>
65
+ <manufacturer translate="label">
66
+ <label>Manufacturer Name</label>
67
+ <frontend_type>select</frontend_type>
68
+ <source_model>icecatimport/system_config_attributes</source_model>
69
+ <sort_order>50</sort_order>
70
+ <show_in_default>1</show_in_default>
71
+ <show_in_website>1</show_in_website>
72
+ <show_in_store>1</show_in_store>
73
+ </manufacturer>
74
+ <ean_code translate="label">
75
+ <label>Ean Code</label>
76
+ <frontend_type>select</frontend_type>
77
+ <source_model>icecatimport/system_config_attributes</source_model>
78
+ <sort_order>60</sort_order>
79
+ <show_in_default>1</show_in_default>
80
+ <show_in_website>1</show_in_website>
81
+ <show_in_store>1</show_in_store>
82
+ </ean_code>
83
+ <descript_priority translate="label">
84
+ <label>Use Description from </label>
85
+ <frontend_type>select</frontend_type>
86
+ <source_model>icecatimport/system_config_descriptionpriority</source_model>
87
+ <sort_order>70</sort_order>
88
+ <show_in_default>1</show_in_default>
89
+ <show_in_website>1</show_in_website>
90
+ <show_in_store>1</show_in_store>
91
+ </descript_priority>
92
+ </fields>
93
+ </icecat>
94
+ </groups>
95
+ </icecat_root>
96
+ </sections>
97
  </config>
app/code/local/Bintime/Icecatimport/sql/icecatimport_setup/mysql4-install-0.1.0.php CHANGED
@@ -20,4 +20,5 @@ $installer->run("
20
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Bintime Connector supplier mapping table';
21
 
22
  ");
 
23
  $installer->endSetup();
20
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Bintime Connector supplier mapping table';
21
 
22
  ");
23
+
24
  $installer->endSetup();
package.xml CHANGED
@@ -1,23 +1,24 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>IcecatLive</name>
4
- <version>1.1.0</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v.3</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>ICEcat to Magento Open Source Connector</summary>
10
  <description>ICEcat to Magento Open Source Connector - rich content in your magento shop</description>
11
- <notes>- Improvement of product mapping&#xD;
12
- - Improvement of product description&#xD;
13
- - Added displaying icecat names on product listing/shopping cart&#xD;
14
- - Added all ICEcat data available as variables on product detail page&#xD;
15
- - Fixed issue with Yes/No indication&#xD;
16
- - Fixed image displaying on product listing/shopping cart</notes>
 
17
  <authors><author><name>IceShop</name><user>IceShop</user><email>support@iceshop.nl</email></author></authors>
18
- <date>2012-08-21</date>
19
- <time>16:02:42</time>
20
- <contents><target name="magelocal"><dir name="Bintime"><dir name="Icecatimport"><dir name="Block"><file name="Attributes.php" hash="ae93e0a964e8880e5b65fb5d08f1edf9"/><file name="Media.php" hash="a71e447a139b851da50937bccaf8bd37"/><file name="Related.php" hash="7ca2ad6520f2644ad1302c02d1cd6853"/><file name="Upsell.php" hash="624bd7b9c8708a67079efb2478a5a37d"/></dir><dir name="controllers"><file name="ImageController.php" hash="cdf4984c268346088729831b7abdf026"/></dir><dir name="etc"><file name="config.xml" hash="13d5b3c94451f13119c90a8added2374"/><file name="system.xml" hash="5138720902ed8c530d7c91b82d0f4935"/></dir><dir name="Helper"><dir name="Catalog"><file name="Image.php" hash="d300efd5dc51ad649023aab95d6b5fd7"/></dir><file name="Getdata.php" hash="b36ed387b06e2d2aa9860f693dda3f03"/><file name="Image.php" hash="000f0665c72b96ac03ca07dc3046a202"/><file name="Output.php" hash="21f46a7252ddfab8ae7d44384d205da2"/></dir><dir name="Model"><dir name="Catalog"><file name="Category.php" hash="21abeb7a7c2c85db8ce4d2f4ed203f50"/><file name="Product.php" hash="232f34dade19ddcf09d2da92e15cb682"/><file name="Search.php" hash="99c7eb706e67e01ea8167ebe88fe72d9"/></dir><dir name="System"><dir name="Config"><file name="Attributes.php" hash="23284e0d38677b4544fc87642a6bc8b5"/><file name="LanguageList.xml" hash="391ef56fab212879709780df5a7710e7"/><file name="Locales.php" hash="b8c699fa2a6f657b6d52d86e656872cc"/><file name="Subscription.php" hash="62168986f7a4eb3f10d38ac627aa6510"/></dir></dir><file name="Imagescollection.php" hash="718b575ef9472f85c323fa40f80bbd05"/><file name="Import.php" hash="2e243371496d5ddff593591a619aa348"/><file name="Observer.php" hash="b97aaab8b60091bb481ad25b28126896"/><file name="Relatedcollection.php" hash="2ddf62c43a66c3fd70bf651d0078dbc1"/></dir><dir name="sql"><dir name="icecatimport_setup"><file name="mysql4-install-0.1.0.php" hash="a8f750e7667f8ef0dd077100c9fddf48"/><file name="mysql4-upgrade-0.1.0-0.1.1.php" hash="c0581c5b00420492714bd7e3cc66cb6d"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Bintime_Icecatimport.xml" hash="daf681aae3e710568d210313816a9d5f"/></dir></target></contents>
21
  <compatible/>
22
  <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
23
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>IcecatLive</name>
4
+ <version>1.2.0</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v.3</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>ICEcat to Magento Open Source Connector</summary>
10
  <description>ICEcat to Magento Open Source Connector - rich content in your magento shop</description>
11
+ <notes> - Added mapping by EAN/UPC codes&#xD;
12
+ - Added support of Multilanguage stores&#xD;
13
+ - Added new setting Description&#xD;
14
+ - Fixed problems with Icecat names&#xD;
15
+ - Fixed problems with images on product listing/shopping cart.&#xD;
16
+ - Fixed problems with correct displaying attributes on product detail page&#xD;
17
+ - Fixed problems with description on product detail page</notes>
18
  <authors><author><name>IceShop</name><user>IceShop</user><email>support@iceshop.nl</email></author></authors>
19
+ <date>2012-10-03</date>
20
+ <time>14:19:01</time>
21
+ <contents><target name="magelocal"><dir name="Bintime"><dir name="Icecatimport"><dir name="Block"><file name="Attributes.php" hash="ae93e0a964e8880e5b65fb5d08f1edf9"/><file name="Media.php" hash="a71e447a139b851da50937bccaf8bd37"/><file name="Related.php" hash="7ca2ad6520f2644ad1302c02d1cd6853"/><file name="Upsell.php" hash="f7a79cee4cb7ecb679f65e7ec7a487c4"/></dir><dir name="controllers"><file name="ImageController.php" hash="cdf4984c268346088729831b7abdf026"/></dir><dir name="etc"><file name="config.xml" hash="13d5b3c94451f13119c90a8added2374"/><file name="system.xml" hash="42faa23748e785e3b99c17f15d32f67e"/></dir><dir name="Helper"><dir name="Catalog"><file name="Image.php" hash="4952fd82b7fb4cb68498ec7655a990ee"/></dir><file name="Getdata.php" hash="6e582c84a4f65071fbc6daf6b4e03de5"/><file name="Image.php" hash="62a1ab4c2b773f6aafc877a0f43689bd"/><file name="Output.php" hash="66a35fb37504ff30a2188b34941d991e"/></dir><dir name="Model"><dir name="Catalog"><file name="Category.php" hash="21abeb7a7c2c85db8ce4d2f4ed203f50"/><file name="Product.php" hash="e94919ad720fccd16c061e31ac26d05d"/><file name="Search.php" hash="99c7eb706e67e01ea8167ebe88fe72d9"/></dir><dir name="System"><dir name="Config"><file name="Attributes.php" hash="23284e0d38677b4544fc87642a6bc8b5"/><file name="LanguageList.xml" hash="391ef56fab212879709780df5a7710e7"/><file name="Locales.php" hash="b8c699fa2a6f657b6d52d86e656872cc"/><file name="Subscription.php" hash="62168986f7a4eb3f10d38ac627aa6510"/><file name="Descriptionpriority.php" hash="e32f7b5893ded762a45c742d4e6944fd"/></dir></dir><file name="Imagescollection.php" hash="718b575ef9472f85c323fa40f80bbd05"/><file name="Import.php" hash="8043d30eebe86ea03c917ef8f38e2a65"/><file name="Observer.php" hash="99795f94b4dd8c1f9dd1bb5df8ad0337"/><file name="Relatedcollection.php" hash="2ddf62c43a66c3fd70bf651d0078dbc1"/></dir><dir name="sql"><dir name="icecatimport_setup"><file name="mysql4-install-0.1.0.php" hash="08f5875b240c2f229b95194b6335f9a6"/><file name="mysql4-upgrade-0.1.0-0.1.1.php" hash="c0581c5b00420492714bd7e3cc66cb6d"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Bintime_Icecatimport.xml" hash="daf681aae3e710568d210313816a9d5f"/></dir></target></contents>
22
  <compatible/>
23
  <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
24
  </package>