Yireo_Vm2Mage - Version 0.10.9

Version Notes

No notes

Download this release

Release Info

Developer Yireo
Extension Yireo_Vm2Mage
Version 0.10.9
Comparing to
See all releases


Code changes from version 0.10.5 to 0.10.9

app/code/community/Yireo/Vm2Mage/Block/Check.php CHANGED
@@ -182,4 +182,58 @@ class Yireo_Vm2Mage_Block_Check extends Mage_Core_Block_Template
182
183
return $this->system_checks;
184
}
185
}
182
183
return $this->system_checks;
184
}
185
+
186
+ /*
187
+ * Helper to return the URL for deleting all categories
188
+ *
189
+ * @access public
190
+ * @param null
191
+ * @return string
192
+ */
193
+ public function getDeleteCategoriesUrl()
194
+ {
195
+ return Mage::getModel('adminhtml/url')->getUrl('vm2mage/index/deleteCategories');
196
+ }
197
+
198
+ /*
199
+ * Helper to return the URL for deleting all products
200
+ *
201
+ * @access public
202
+ * @param null
203
+ * @return string
204
+ */
205
+ public function getDeleteProductsUrl()
206
+ {
207
+ return Mage::getModel('adminhtml/url')->getUrl('vm2mage/index/deleteProducts');
208
+ }
209
+
210
+ /**
211
+ * Render block HTML
212
+ *
213
+ * @access protected
214
+ * @param null
215
+ * @return mixed
216
+ */
217
+ protected function _toHtml()
218
+ {
219
+ $this->setChild('products_delete_button',
220
+ $this->getLayout()->createBlock('adminhtml/widget_button')
221
+ ->setData(array(
222
+ 'label' => Mage::helper('catalog')->__('Delete All Products'),
223
+ 'onclick' => 'window.location = \''.$this->getDeleteProductsUrl().'\'',
224
+ 'class' => 'delete'
225
+ ))
226
+ );
227
+
228
+ $this->setChild('categories_delete_button',
229
+ $this->getLayout()->createBlock('adminhtml/widget_button')
230
+ ->setData(array(
231
+ 'label' => Mage::helper('catalog')->__('Delete All Categories'),
232
+ 'onclick' => 'window.location = \''.$this->getDeleteCategoriesUrl().'\'',
233
+ 'class' => 'delete'
234
+ ))
235
+ );
236
+
237
+ return parent::_toHtml();
238
+ }
239
}
app/code/community/Yireo/Vm2Mage/Helper/Image.php CHANGED
@@ -59,11 +59,11 @@ class Yireo_Vm2Mage_Helper_Image extends Yireo_Vm2Mage_Helper_Data
59
60
// Renew images
61
if($renewImages) {
62
- Mage::helper('vm2mage')->debug('NOTICE: Removing existing images');
63
64
// Check whether the images are already there
65
$galleryImages = $product->getMediaGalleryImages();
66
- if(is_object($galleryImages) && $galleryImages->count() >= count($images)) {
67
$entityTypeId = Mage::getModel('eav/entity')->setType('catalog_product')->getTypeId();
68
$mediaGalleryAttribute = Mage::getModel('catalog/resource_eav_attribute')->loadByCode($entityTypeId, 'media_gallery');
69
foreach ($galleryImages as $galleryImage) {
@@ -73,9 +73,11 @@ class Yireo_Vm2Mage_Helper_Image extends Yireo_Vm2Mage_Helper_Data
73
}
74
75
// Loop through the images and create them
76
if(is_array($images) && !empty($images)) {
77
foreach($images as $image) {
78
79
if(empty($image['label'])) $image['label'] = $product->getName();
80
if(empty($image['file'])) $image['file'] = null;
81
if(empty($image['md5sum'])) $image['md5sum'] = null;
@@ -92,14 +94,19 @@ class Yireo_Vm2Mage_Helper_Image extends Yireo_Vm2Mage_Helper_Data
92
$result = self::addLocalImage($product, $image['file'], $image['label'], $imageTypes);
93
if($result != false) {
94
$product = $result;
95
} else {
96
$result = self::addRemoteImage($product, $image['url'], $image['md5sum'], $image['type'], $image['label'], $imageTypes);
97
if($result != false) {
98
$product = $result;
99
}
100
}
101
}
102
}
103
}
104
105
return $product;
@@ -129,7 +136,8 @@ class Yireo_Vm2Mage_Helper_Image extends Yireo_Vm2Mage_Helper_Data
129
}
130
131
// Create a temporary file
132
- $tmp_file = $base_dir.DS.basename($url);
133
134
// Get the remote image
135
$tmp_content = self::getRemoteContent($url);
@@ -142,6 +150,12 @@ class Yireo_Vm2Mage_Helper_Image extends Yireo_Vm2Mage_Helper_Data
142
// Write it to the temporary file
143
file_put_contents($tmp_file, $tmp_content);
144
145
// Check the MD5 sum of this file
146
if(!empty($md5sum) && md5_file($tmp_file) != $md5sum) {
147
Mage::helper('vm2mage')->debug('ERROR: image-download does not match MD5', $tmp_file);
@@ -149,11 +163,11 @@ class Yireo_Vm2Mage_Helper_Image extends Yireo_Vm2Mage_Helper_Data
149
}
150
151
// Add the image to the gallery
152
- $product = $product->addImageToMediaGallery($tmp_file, $types, true, false);
153
154
// Clean temporary file if needed
155
if(file_exists($tmp_file)) {
156
- unlink($tmp_file);
157
}
158
159
// Return the changed product-object
@@ -195,21 +209,33 @@ class Yireo_Vm2Mage_Helper_Image extends Yireo_Vm2Mage_Helper_Data
195
return false;
196
}
197
198
- // Create a temporary file
199
- $tmp_file = $base_dir.DS.basename($file);
200
201
// Get the remote image and write it to the temporary file
202
if(@copy($file, $tmp_file) == false) {
203
Mage::helper('vm2mage')->debug('ERROR: Copy new image to image-folder failed', $base_dir);
204
return false;
205
}
206
207
// Add the image to the gallery
208
- $product = $product->addImageToMediaGallery($tmp_file, $types, true, false);
209
210
// Clean temporary file if needed
211
if(file_exists($tmp_file)) {
212
- unlink($tmp_file);
213
}
214
215
// Return the changed product-object
59
60
// Renew images
61
if($renewImages) {
62
63
// Check whether the images are already there
64
$galleryImages = $product->getMediaGalleryImages();
65
+ if(is_object($galleryImages) && $galleryImages->count() > 0) {
66
+ Mage::helper('vm2mage')->debug('NOTICE: Removing existing images');
67
$entityTypeId = Mage::getModel('eav/entity')->setType('catalog_product')->getTypeId();
68
$mediaGalleryAttribute = Mage::getModel('catalog/resource_eav_attribute')->loadByCode($entityTypeId, 'media_gallery');
69
foreach ($galleryImages as $galleryImage) {
73
}
74
75
// Loop through the images and create them
76
+ $migratedFiles = array();
77
if(is_array($images) && !empty($images)) {
78
foreach($images as $image) {
79
80
+ if(in_array($image['md5sum'], $migratedFiles)) continue;
81
if(empty($image['label'])) $image['label'] = $product->getName();
82
if(empty($image['file'])) $image['file'] = null;
83
if(empty($image['md5sum'])) $image['md5sum'] = null;
94
$result = self::addLocalImage($product, $image['file'], $image['label'], $imageTypes);
95
if($result != false) {
96
$product = $result;
97
+ $migratedFiles[] = $image['md5sum'];
98
} else {
99
$result = self::addRemoteImage($product, $image['url'], $image['md5sum'], $image['type'], $image['label'], $imageTypes);
100
if($result != false) {
101
$product = $result;
102
+ $migratedFiles[] = $image['md5sum'];
103
}
104
}
105
}
106
}
107
+
108
+ // Save the product
109
+ $product->save();
110
}
111
112
return $product;
136
}
137
138
// Create a temporary file
139
+ $tmp_basename = md5($product->getId().$url).'.'.preg_replace('/(.*)\.(gif|jpg|jpeg|png)/', '\2', strtolower($url));
140
+ $tmp_file = $base_dir.DS.$tmp_basename;
141
142
// Get the remote image
143
$tmp_content = self::getRemoteContent($url);
150
// Write it to the temporary file
151
file_put_contents($tmp_file, $tmp_content);
152
153
+ // Check whether the new file exists
154
+ if(file_exists($tmp_file) == false) {
155
+ Mage::helper('vm2mage')->debug('ERROR: Copy new image to image-folder succeeded, but still not image', $tmp_file);
156
+ return false;
157
+ }
158
+
159
// Check the MD5 sum of this file
160
if(!empty($md5sum) && md5_file($tmp_file) != $md5sum) {
161
Mage::helper('vm2mage')->debug('ERROR: image-download does not match MD5', $tmp_file);
163
}
164
165
// Add the image to the gallery
166
+ $product = $product->addImageToMediaGallery($tmp_file, $types, false, false);
167
168
// Clean temporary file if needed
169
if(file_exists($tmp_file)) {
170
+ @unlink($tmp_file);
171
}
172
173
// Return the changed product-object
209
return false;
210
}
211
212
+ // Check for empty images
213
+ if(filesize($file) == 0) {
214
+ Mage::helper('vm2mage')->debug('ERROR: Source-image has a size of 0', $file);
215
+ return false;
216
+ }
217
218
// Get the remote image and write it to the temporary file
219
+ $tmp_basename = md5($product->getId().$file).'.'.preg_replace('/(.*)\.(gif|jpg|jpeg|png)/', '\2', strtolower($file));
220
+ $tmp_file = $base_dir.DS.$tmp_basename;
221
if(@copy($file, $tmp_file) == false) {
222
Mage::helper('vm2mage')->debug('ERROR: Copy new image to image-folder failed', $base_dir);
223
return false;
224
}
225
226
+ // Check whether the new file exists
227
+ if(file_exists($tmp_file) == false) {
228
+ Mage::helper('vm2mage')->debug('ERROR: Copy new image to image-folder succeeded, but still not image', $tmp_file);
229
+ return false;
230
+ }
231
+
232
// Add the image to the gallery
233
+ Mage::helper('vm2mage')->debug('NOTICE: ['.$product->getSku().'] Adding new image', $tmp_file);
234
+ $product = $product->addImageToMediaGallery($tmp_file, $types, false, false);
235
236
// Clean temporary file if needed
237
if(file_exists($tmp_file)) {
238
+ @unlink($tmp_file);
239
}
240
241
// Return the changed product-object
app/code/community/Yireo/Vm2Mage/Helper/Product.php CHANGED
@@ -26,10 +26,13 @@ class Yireo_Vm2Mage_Helper_Product extends Yireo_Vm2Mage_Helper_Data
26
$childIds = array();
27
foreach($children as $child) {
28
$childId = Mage::getModel('catalog/product')->getIdBySku($child['sku']);
29
- if(empty($childId)) {
30
Mage::getModel('vm2mage/product_api')->migrate($child);
31
$childId = Mage::getModel('catalog/product')->getIdBySku($child['sku']);
32
- }
33
$childIds[] = $childId;
34
}
35
@@ -103,10 +106,13 @@ class Yireo_Vm2Mage_Helper_Product extends Yireo_Vm2Mage_Helper_Data
103
$childIds = array();
104
foreach($children as $child) {
105
$childId = Mage::getModel('catalog/product')->getIdBySku($child['sku']);
106
- if(empty($childId)) {
107
Mage::getModel('vm2mage/product_api')->migrate($child);
108
$childId = Mage::getModel('catalog/product')->getIdBySku($child['sku']);
109
- }
110
$childIds[] = $childId;
111
}
112
@@ -150,4 +156,41 @@ class Yireo_Vm2Mage_Helper_Product extends Yireo_Vm2Mage_Helper_Data
150
151
return $product;
152
}
153
}
26
$childIds = array();
27
foreach($children as $child) {
28
$childId = Mage::getModel('catalog/product')->getIdBySku($child['sku']);
29
+
30
+ // @todo: Should we re-migrate the product or not?
31
+ //if(empty($childId)) {
32
+ if(empty($child['price']['product_price'])) $child['price']['product_price'] = $product->getPrice();
33
Mage::getModel('vm2mage/product_api')->migrate($child);
34
$childId = Mage::getModel('catalog/product')->getIdBySku($child['sku']);
35
+ //}
36
$childIds[] = $childId;
37
}
38
106
$childIds = array();
107
foreach($children as $child) {
108
$childId = Mage::getModel('catalog/product')->getIdBySku($child['sku']);
109
+
110
+ // @todo: Should we re-migrate the product or not?
111
+ //if(empty($childId)) {
112
+ if(empty($child['price']['product_price'])) $child['price']['product_price'] = $product->getPrice();
113
Mage::getModel('vm2mage/product_api')->migrate($child);
114
$childId = Mage::getModel('catalog/product')->getIdBySku($child['sku']);
115
+ //}
116
$childIds[] = $childId;
117
}
118
156
157
return $product;
158
}
159
+
160
+ /*
161
+ * Helper-method to add custom options to a product
162
+ *
163
+ * @param Mage_Catalog_Model_Product $product
164
+ * @param string $name
165
+ * @param array $values
166
+ * @return $product
167
+ */
168
+ public function addCustomOptionsToProduct($product, $name, $values)
169
+ {
170
+ $option = array(
171
+ 'title' => $name,
172
+ 'type' => 'drop_down',
173
+ 'is_require' => 1,
174
+ 'sort_order' => 0,
175
+ 'values' => array(),
176
+ );
177
+
178
+ foreach($values as $value) {
179
+ if(!isset($value['price'])) $value['price'] = null;
180
+ $option['values'][] = array(
181
+ 'title' => $value['label'],
182
+ 'price' => $value['price'],
183
+ 'price_type' => 'fixed',
184
+ 'sku' => '',
185
+ 'sort_order' => '1'
186
+ );
187
+ }
188
+
189
+ if(!$product->getOptionsReadonly()) {
190
+ $product->setProductOptions(array($option));
191
+ $product->setCanSaveCustomOptions(true);
192
+ }
193
+
194
+ return $product;
195
+ }
196
}
app/code/community/Yireo/Vm2Mage/Helper/Product.php.old DELETED
@@ -1,75 +0,0 @@
1
- <?php
2
- /**
3
- * Yireo Vm2Mage for Magento
4
- *
5
- * @author Yireo
6
- * @package Vm2Mage
7
- * @copyright Copyright 2011
8
- * @license Open Source License
9
- * @link http://www.yireo.com
10
- */
11
-
12
- /**
13
- * Vm2Mage helper
14
- */
15
- class Yireo_Vm2Mage_Helper_Product extends Yireo_Vm2Mage_Helper_Data
16
- {
17
- /*
18
- * Helper-method to convert a regular array to the options-structure required by the Attribute-model
19
- *
20
- * @param array $values
21
- * @return array
22
- */
23
- public function addChildrenToConfigurable($children = array(), $attribute_codes = array(), $product = null)
24
- {
25
- // Create the children first as Simple Products and them to usable arrays
26
- $childIds = array();
27
- foreach($children as $child) {
28
- Mage::getModel('vm2mage/product_api')->migrate($child);
29
- $childId = Mage::getModel('catalog/product')->getIdBySku($child['sku']);
30
- $childIds[] = $childId;
31
- }
32
-
33
- // Insert the Simple Products that belong in this Configurable Product
34
- $loader = Mage::getResourceModel('catalog/product_type_configurable')->load($product);
35
- $loader->saveProducts($product, $childIds);
36
-
37
- // Gather the attribute-objects for use in this Configurable Product
38
- $usedAttributeIds = array();
39
- foreach($attribute_codes as $attribute_code) {
40
- $attribute = $product->getResource()->getAttribute($attribute_code);
41
- if($product->getTypeInstance()->canUseAttribute($attribute)) {
42
- $usedAttributeIds[] = $attribute->getAttributeId();
43
- }
44
- }
45
-
46
- // Insert the attributes that belong in this Configurable Product
47
- if(!empty($usedAttributeIds)) {
48
-
49
- // Set the attribute-IDs for this product
50
- $product->getTypeInstance()->setUsedProductAttributeIds($usedAttributeIds, $product);
51
-
52
- // Get the attributes-data and parse it a bit
53
- $attributesData = $product->getTypeInstance()->getConfigurableAttributesAsArray();
54
- foreach($attributesData as $key => $attribute_value) {
55
- $attributesData[$key]['label'] = $attribute_value['frontend_label'];
56
- }
57
- Mage::helper('vm2mage')->debug('Configurable Product Attributes', $attributesData);
58
-
59
- // Insert the attributes-data into the product
60
- $product->setConfigurableAttributesData($attributesData);
61
- $product->setCanSaveConfigurableAttributes(true);
62
-
63
- //$product->setCanSaveCustomOptions(true);
64
- //$product->setProductOptions(); ???
65
- }
66
-
67
- // Try to safe this product to the database
68
- try {
69
- $product->save();
70
- } catch(Exception $e) {
71
- return array(0, $e->getMessage());
72
- }
73
- }
74
- }
75
-
app/code/community/Yireo/Vm2Mage/Model/Attribute/Api.php CHANGED
@@ -25,7 +25,7 @@ class Yireo_Vm2Mage_Model_Attribute_Api extends Mage_Api_Model_Resource_Abstract
25
}
26
27
// Debugging
28
- Mage::helper('vm2mage')->debug('VirtueMart attribute', $data);
29
30
// Flags
31
$isNew = false;
25
}
26
27
// Debugging
28
+ //Mage::helper('vm2mage')->debug('VirtueMart attribute', $data);
29
30
// Flags
31
$isNew = false;
app/code/community/Yireo/Vm2Mage/Model/Product/Api.php CHANGED
@@ -30,10 +30,10 @@ class Yireo_Vm2Mage_Model_Product_Api extends Mage_Catalog_Model_Product_Api
30
//Mage::helper('vm2mage')->debug('VirtueMart product', $data);
31
32
// Determine the product-type
33
- if($data['has_children'] > 0) {
34
- // @todo: Provide a switch
35
$typeId = Mage_Catalog_Model_Product_Type::TYPE_GROUPED;
36
- //$typeId = Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE;
37
} else {
38
$typeId = Mage_Catalog_Model_Product_Type::TYPE_SIMPLE;
39
}
@@ -76,10 +76,9 @@ class Yireo_Vm2Mage_Model_Product_Api extends Mage_Catalog_Model_Product_Api
76
$data['status'] = Mage_Catalog_Model_Product_Status::STATUS_DISABLED;
77
}
78
79
- // Make sure there is a short-description
80
- if(empty($data['short_description'])) {
81
- $data['short_description'] = $data['name'];
82
- }
83
84
// Set common attributes
85
$product->setData($product->getData())
@@ -92,6 +91,11 @@ class Yireo_Vm2Mage_Model_Product_Api extends Mage_Catalog_Model_Product_Api
92
->setTaxClassId($taxId)
93
;
94
95
// Set weight
96
if(isset($data['weight'])) {
97
$product->setWeight($data['weight']);
@@ -121,6 +125,24 @@ class Yireo_Vm2Mage_Model_Product_Api extends Mage_Catalog_Model_Product_Api
121
$product->setMetaTitle($product->getTitle());
122
}
123
124
// Set the custom attributes
125
if(isset($data['attributes'])) {
126
foreach($data['attributes'] as $name => $value) {
@@ -149,6 +171,32 @@ class Yireo_Vm2Mage_Model_Product_Api extends Mage_Catalog_Model_Product_Api
149
$product->setSpecialToDate($data['special_price']['end_date']);
150
}
151
152
// Handle the stock
153
if($typeId == Mage_Catalog_Model_Product_Type::TYPE_GROUPED) $data['in_stock'] = null;
154
if(!empty($data['in_stock']) && $data['in_stock'] > 0) {
@@ -188,15 +236,6 @@ class Yireo_Vm2Mage_Model_Product_Api extends Mage_Catalog_Model_Product_Api
188
$product->setIsMassupdate(true);
189
$product->setExcludeUrlRewrite(true);
190
191
- // Get the remote images
192
- if(isset($data['images'])) {
193
- try {
194
- $product = Mage::helper('vm2mage/image')->addImages($product, $data['images']);
195
- } catch(Exception $e) {
196
- return array(0, $e->getMessage());
197
- }
198
- }
199
-
200
// Add the related products
201
if(!empty($data['related_products'])) {
202
try {
@@ -219,12 +258,8 @@ class Yireo_Vm2Mage_Model_Product_Api extends Mage_Catalog_Model_Product_Api
219
if($data['has_children'] > 0) {
220
if($typeId == Mage_Catalog_Model_Product_Type::TYPE_GROUPED) {
221
$rs = Mage::helper('vm2mage/product')->addChildrenToGrouped($data['children'], $product);
222
- } else {
223
- if(isset($data['attributes_sku']) && is_array($data['attributes_sku'])) {
224
- $rs = Mage::helper('vm2mage/product')->addChildrenToConfigurable($data['children'], $data['attributes_sku'], $product);
225
- } else {
226
- $rs = Mage::helper('vm2mage/product')->addChildrenToConfigurable($data['children'], array(), $product);
227
- }
228
}
229
230
if(!empty($rs)) {
@@ -232,6 +267,18 @@ class Yireo_Vm2Mage_Model_Product_Api extends Mage_Catalog_Model_Product_Api
232
}
233
}
234
235
// Return true by default
236
if($isNew) {
237
return array(1, "Created new product ".$product->getName()." [".$product->getId()."]", $data['id']);
30
//Mage::helper('vm2mage')->debug('VirtueMart product', $data);
31
32
// Determine the product-type
33
+ if($data['has_children'] > 0 && !empty($data['attributes_sku'])) {
34
+ $typeId = Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE;
35
+ } elseif($data['has_children'] > 0) {
36
$typeId = Mage_Catalog_Model_Product_Type::TYPE_GROUPED;
37
} else {
38
$typeId = Mage_Catalog_Model_Product_Type::TYPE_SIMPLE;
39
}
76
$data['status'] = Mage_Catalog_Model_Product_Status::STATUS_DISABLED;
77
}
78
79
+ // Make sure descriptions match
80
+ if(empty($data['short_description'])) $data['short_description'] = $data['name'];
81
+ if(empty($data['description'])) $data['description'] = $data['short_description'];
82
83
// Set common attributes
84
$product->setData($product->getData())
91
->setTaxClassId($taxId)
92
;
93
94
+ // Set for single store mode
95
+ if (Mage::app()->isSingleStoreMode()) {
96
+ $product->setWebsiteIds(array(Mage::app()->getStore(true)->getWebsite()->getId()));
97
+ }
98
+
99
// Set weight
100
if(isset($data['weight'])) {
101
$product->setWeight($data['weight']);
125
$product->setMetaTitle($product->getTitle());
126
}
127
128
+ // Set the Custom Options
129
+ if(isset($data['attribute'])) {
130
+
131
+ // Remove all current options
132
+ $options = $product->getOptions();
133
+ if(!empty($options)) {
134
+ foreach($options as $option) {
135
+ $option->delete();
136
+ }
137
+ }
138
+
139
+ // Add the custom options again
140
+ foreach($data['attribute'] as $attribute) {
141
+ $product = Mage::helper('vm2mage/product')->addCustomOptionsToProduct($product, $attribute['name'], $attribute['values']);
142
+ }
143
+ }
144
+
145
+
146
// Set the custom attributes
147
if(isset($data['attributes'])) {
148
foreach($data['attributes'] as $name => $value) {
171
$product->setSpecialToDate($data['special_price']['end_date']);
172
}
173
174
+ // Set the tier pricing
175
+ if(!empty($data['all_prices']) && count($data['all_prices']) > 1) {
176
+ $tierPrices = array();
177
+ foreach($data['all_prices'] as $price) {
178
+
179
+ if($price['price_quantity_start'] < 1) continue;
180
+ if($price['price_quantity_end'] < 1) continue;
181
+
182
+ $customerGroup = Mage_Customer_Model_Group::CUST_GROUP_ALL;
183
+ $customerAllGroups = 1;
184
+ // @todo: Use a mapping for customer_groups
185
+ //if($price['shopper_group_default'] == 0) {
186
+ // $customerAllGroups = 1;
187
+ //}
188
+
189
+ $tierPrices[] = array(
190
+ 'website_id' => 0,
191
+ 'all_groups' => $customerAllGroups,
192
+ 'cust_group' => $customerGroup,
193
+ 'price_qty' => $price['price_quantity_start'],
194
+ 'price' => $price['product_price'],
195
+ );
196
+ }
197
+ $product->setTierPrice($tierPrices);
198
+ }
199
+
200
// Handle the stock
201
if($typeId == Mage_Catalog_Model_Product_Type::TYPE_GROUPED) $data['in_stock'] = null;
202
if(!empty($data['in_stock']) && $data['in_stock'] > 0) {
236
$product->setIsMassupdate(true);
237
$product->setExcludeUrlRewrite(true);
238
239
// Add the related products
240
if(!empty($data['related_products'])) {
241
try {
258
if($data['has_children'] > 0) {
259
if($typeId == Mage_Catalog_Model_Product_Type::TYPE_GROUPED) {
260
$rs = Mage::helper('vm2mage/product')->addChildrenToGrouped($data['children'], $product);
261
+ } elseif($typeId == Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE) {
262
+ $rs = Mage::helper('vm2mage/product')->addChildrenToConfigurable($data['children'], $data['attributes_sku'], $product);
263
}
264
265
if(!empty($rs)) {
267
}
268
}
269
270
+ // Get the remote images
271
+ if(isset($data['images'])) {
272
+ try {
273
+ $product = Mage::helper('vm2mage/image')->addImages($product, $data['images']);
274
+ } catch(Exception $e) {
275
+ return array(0, $e->getMessage());
276
+ }
277
+ }
278
+
279
+ // Apply rules
280
+ Mage::getModel('catalogrule/rule')->applyAllRulesToProduct($product->getId());
281
+
282
// Return true by default
283
if($isNew) {
284
return array(1, "Created new product ".$product->getName()." [".$product->getId()."]", $data['id']);
app/code/community/Yireo/Vm2Mage/Model/User/Api.php CHANGED
@@ -19,6 +19,9 @@ class Yireo_Vm2Mage_Model_User_Api extends Mage_Customer_Model_Customer_Api
19
*/
20
public function migrate($data = null)
21
{
22
// Check for empty data
23
if(!is_array($data)) {
24
return array(0, "Data is not an array");
@@ -95,24 +98,28 @@ class Yireo_Vm2Mage_Model_User_Api extends Mage_Customer_Model_Customer_Api
95
$customer->setPasswordHash($data['password']);
96
}
97
98
- // Try to safe this customer to the database
99
- try {
100
- $customer->save();
101
- } catch(Exception $e) {
102
- return array(0, $e->getMessage());
103
- }
104
105
- // Save the address
106
- if(isset($data['addresses']) && !empty($data['addresses'])) {
107
- foreach($data['addresses'] as $address) {
108
- $rt = $this->saveAddress($customer, $address, $data);
109
}
110
- } else {
111
- $rt = $this->saveAddress($customer, $data);
112
- }
113
114
- if(!empty($rt)) {
115
- return $rt;
116
}
117
118
// Save the orders
@@ -184,8 +191,11 @@ class Yireo_Vm2Mage_Model_User_Api extends Mage_Customer_Model_Customer_Api
184
185
// Load the region
186
$region = null;
187
- if(empty($data['region']) && !empty($customerData['region'])) $data['region'] = $customerData['region'];
188
- if(!empty($data['region'])) $region = Mage::getModel('directory/region')->loadByCode($data['state'], $country->getId());
189
190
// Set basic values
191
$address
@@ -206,7 +216,6 @@ class Yireo_Vm2Mage_Model_User_Api extends Mage_Customer_Model_Customer_Api
206
'fax' => 'fax',
207
'city' => 'city',
208
'zip' => 'postcode',
209
- 'state' => 'region',
210
'country' => 'country',
211
'taxvat' => 'vat_id',
212
);
@@ -224,6 +233,7 @@ class Yireo_Vm2Mage_Model_User_Api extends Mage_Customer_Model_Customer_Api
224
// Set the region
225
if(!empty($region)) {
226
$address->setRegionId($region->getId());
227
}
228
229
// Set the customer if needed
@@ -351,6 +361,7 @@ class Yireo_Vm2Mage_Model_User_Api extends Mage_Customer_Model_Customer_Api
351
$model->setOrderId($order['order_id']);
352
$model->setOrderNumber($order['order_number']);
353
$model->setOrderTotal($order['order_total']);
354
$model->setOrderCurrency($order_currency);
355
$model->setOrderTax($order['order_tax']);
356
$model->setOrderTaxDetails($order['order_tax_details']);
@@ -360,11 +371,11 @@ class Yireo_Vm2Mage_Model_User_Api extends Mage_Customer_Model_Customer_Api
360
$model->setOrderDiscount($order['order_discount']);
361
$model->setOrderStatusName($order['order_status_name']);
362
$model->setOrderStatus($order['order_status']);
363
- $model->setCreateDate($order['cdate']);
364
- $model->setModifyDate($order['mdate']);
365
- $model->setShipMethodId($order['ship_method_id']);
366
$model->setCustomerNote($order['customer_note']);
367
$model->setPaymentMethod($order['payment_method']);
368
$model->save(); // skipped: order_id, vendor_id, user_info_id, ip-address
369
370
// Loop through the order-items and save them as well
19
*/
20
public function migrate($data = null)
21
{
22
+ // Option to renew customers or not
23
+ $renewCustomers = (bool)Mage::getStoreConfig('vm2mage/settings/renew_customers');
24
+
25
// Check for empty data
26
if(!is_array($data)) {
27
return array(0, "Data is not an array");
98
$customer->setPasswordHash($data['password']);
99
}
100
101
+ // Only save if allowed
102
+ if($customerId < 1 || $renewCustomers == true) {
103
104
+ // Try to safe this customer to the database
105
+ try {
106
+ $customer->save();
107
+ } catch(Exception $e) {
108
+ return array(0, $e->getMessage());
109
}
110
111
+ // Save the address
112
+ if(isset($data['addresses']) && !empty($data['addresses'])) {
113
+ foreach($data['addresses'] as $address) {
114
+ $rt = $this->saveAddress($customer, $address, $data);
115
+ }
116
+ } else {
117
+ $rt = $this->saveAddress($customer, $data);
118
+ }
119
+
120
+ if(!empty($rt)) {
121
+ return $rt;
122
+ }
123
}
124
125
// Save the orders
191
192
// Load the region
193
$region = null;
194
+ if(empty($data['state']) && !empty($customerData['state'])) $data['state'] = $customerData['state'];
195
+ if(empty($data['state']) && !empty($customerData['region'])) $data['state'] = $customerData['region'];
196
+ if(!empty($data['state'])) $region = Mage::getModel('directory/region')->loadByCode($data['state'], $country->getId());
197
+ Mage::log('isse: '.$data['state'].' / '.$country->getId());
198
+ Mage::log('sisse: '.$region->getId());
199
200
// Set basic values
201
$address
216
'fax' => 'fax',
217
'city' => 'city',
218
'zip' => 'postcode',
219
'country' => 'country',
220
'taxvat' => 'vat_id',
221
);
233
// Set the region
234
if(!empty($region)) {
235
$address->setRegionId($region->getId());
236
+ $address->setRegionName($region->getName());
237
}
238
239
// Set the customer if needed
361
$model->setOrderId($order['order_id']);
362
$model->setOrderNumber($order['order_number']);
363
$model->setOrderTotal($order['order_total']);
364
+ $model->setOrderSubtotal($order['order_subtotal']);
365
$model->setOrderCurrency($order_currency);
366
$model->setOrderTax($order['order_tax']);
367
$model->setOrderTaxDetails($order['order_tax_details']);
371
$model->setOrderDiscount($order['order_discount']);
372
$model->setOrderStatusName($order['order_status_name']);
373
$model->setOrderStatus($order['order_status']);
374
+ $model->setCreateDate($order['create_date']);
375
+ $model->setModifyDate($order['modify_date']);
376
$model->setCustomerNote($order['customer_note']);
377
$model->setPaymentMethod($order['payment_method']);
378
+ $model->setShipMethodId($order['shipment_method']);
379
$model->save(); // skipped: order_id, vendor_id, user_info_id, ip-address
380
381
// Loop through the order-items and save them as well
app/code/community/Yireo/Vm2Mage/controllers/IndexController.php CHANGED
@@ -47,4 +47,63 @@ class Yireo_Vm2Mage_IndexController extends Mage_Adminhtml_Controller_Action
47
->_addContent($this->getLayout()->createBlock('vm2mage/check'))
48
->renderLayout();
49
}
50
}
47
->_addContent($this->getLayout()->createBlock('vm2mage/check'))
48
->renderLayout();
49
}
50
+
51
+ /**
52
+ * Delete all categories
53
+ *
54
+ * @access public
55
+ * @param null
56
+ * @return null
57
+ */
58
+ public function deleteCategoriesAction()
59
+ {
60
+ Mage::getSingleton('index/indexer')->lockIndexer();
61
+
62
+ $categories = Mage::getModel('catalog/category')->getCollection();
63
+ foreach($categories as $category) {
64
+ if($category->getParentId() == 0) continue;
65
+ if($category->getLevel() <= 1) continue;
66
+ $category->delete();
67
+ }
68
+
69
+ $resource = Mage::getSingleton('core/resource');
70
+ $writeConnection = $resource->getConnection('core_write');
71
+ $tableName = $resource->getTableName('vm2mage_categories');
72
+ $query = 'TRUNCATE TABLE '.$tableName;
73
+ $writeConnection->query($query);
74
+
75
+ Mage::getSingleton('index/indexer')->unlockIndexer();
76
+
77
+ Mage::getModel('adminhtml/session')->addSuccess('Categories deleted');
78
+ $url = Mage::getModel('adminhtml/url')->getUrl('vm2mage/index/index');
79
+ $this->getResponse()->setRedirect($url);
80
+ }
81
+
82
+ /**
83
+ * Delete all products
84
+ *
85
+ * @access public
86
+ * @param null
87
+ * @return null
88
+ */
89
+ public function deleteProductsAction()
90
+ {
91
+ Mage::getSingleton('index/indexer')->lockIndexer();
92
+
93
+ $products = Mage::getModel('catalog/product')->getCollection();
94
+ foreach($products as $product) {
95
+ $product->setIsMassupdate(true);
96
+ $product->setExcludeUrlRewrite(true);
97
+ $product->delete();
98
+ }
99
+
100
+ Mage::getSingleton('index/indexer')->unlockIndexer();
101
+
102
+ // @todo: Generate notice to reindex all indices
103
+ // @todo: Flush cache
104
+
105
+ Mage::getModel('adminhtml/session')->addSuccess('Products deleted');
106
+ $url = Mage::getModel('adminhtml/url')->getUrl('vm2mage/index/index');
107
+ $this->getResponse()->setRedirect($url);
108
+ }
109
}
app/code/community/Yireo/Vm2Mage/etc/config.old DELETED
@@ -1,132 +0,0 @@
1
- <?xml version="1.0"?>
2
- <!--
3
- /**
4
- * Yireo Vm2Mage for Magento
5
- *
6
- * @author Yireo
7
- * @package Vm2Mage
8
- * @copyright Copyright 2011
9
- * @license Yireo EULA (www.yireo.com)
10
- * @link http://www.yireo.com
11
- */
12
- -->
13
- <config>
14
-
15
- <modules>
16
- <Yireo_Vm2Mage>
17
- <version>0.7.97</version>
18
- </Yireo_Vm2Mage>
19
- </modules>
20
-
21
- <global>
22
- <blocks>
23
- <vm2mage>
24
- <class>Yireo_Vm2Mage_Block</class>
25
- </vm2mage>
26
- </blocks>
27
-
28
- <helpers>
29
- <vm2mage>
30
- <class>Yireo_Vm2Mage_Helper</class>
31
- </vm2mage>
32
- </helpers>
33
-
34
- <models>
35
- <vm2mage>
36
- <class>Yireo_Vm2Mage_Model</class>
37
- </vm2mage>
38
- </models>
39
-
40
- <resources>
41
- <vm2mage_setup>
42
- <setup>
43
- <module>Yireo_Vm2Mage</module>
44
- <class>Mage_Catalog_Model_Resource_Eav_Mysql4_Setup</class>
45
- </setup>
46
- <connection>
47
- <use>core_setup</use>
48
- </connection>
49
- </vm2mage_setup>
50
- <vm2mage_write>
51
- <connection>
52
- <use>core_write</use>
53
- </connection>
54
- </vm2mage_write>
55
- <vm2mage_read>
56
- <connection>
57
- <use>core_read</use>
58
- </connection>
59
- </vm2mage_read>
60
- </resources>
61
-
62
- </global>
63
-
64
- <adminhtml>
65
- <translate>
66
- <modules>
67
- <Yireo_Vm2Mage>
68
- <files>
69
- <default>Yireo_Vm2Mage.csv</default>
70
- </files>
71
- </Yireo_Vm2Mage>
72
- </modules>
73
- </translate>
74
- <menu>
75
- <system>
76
- <children>
77
- <tools>
78
- <children>
79
- <vm2mage translate="title" module="vm2mage">
80
- <title>Vm2Mage System Check</title>
81
- <action>vm2mage/index</action>
82
- </vm2mage>
83
- </children>
84
- </tools>
85
- </children>
86
- </system>
87
- </menu>
88
- <acl>
89
- <resources>
90
- <admin>
91
- <children>
92
- <system>
93
- <children>
94
- <config>
95
- <children>
96
- <vm2mage translate="title" module="vm2mage">
97
- <title>Vm2Mage Section</title>
98
- </vm2mage>
99
- </children>
100
- </config>
101
- </children>
102
- </system>
103
- </children>
104
- </admin>
105
- </resources>
106
- </acl>
107
- <events>
108
- <catalog_category_delete_after>
109
- <observers>
110
- <vm2mage_observer>
111
- <type>singleton</type>
112
- <class>vm2mage/observer</class>
113
- <method>catalogCategoryDeleteAfter</method>
114
- </vm2mage_observer>
115
- </observers>
116
- </catalog_category_delete_after>
117
- </events>
118
- </adminhtml>
119
-
120
- <admin>
121
- <routers>
122
- <vm2mage>
123
- <use>admin</use>
124
- <args>
125
- <module>Yireo_Vm2Mage</module>
126
- <frontName>vm2mage</frontName>
127
- </args>
128
- </vm2mage>
129
- </routers>
130
- </admin>
131
-
132
- </config>
app/code/community/Yireo/Vm2Mage/etc/config.xml CHANGED
@@ -6,7 +6,7 @@
6
* @author Yireo
7
* @package Vm2Mage
8
* @copyright Copyright 2013
9
- * @license Yireo EULA (www.yireo.com)
10
* @link http://www.yireo.com
11
*/
12
-->
@@ -14,7 +14,7 @@
14
15
<modules>
16
<Yireo_Vm2Mage>
17
- <version>0.10.5</version>
18
</Yireo_Vm2Mage>
19
</modules>
20
@@ -140,6 +140,7 @@
140
<debug_log>0</debug_log>
141
<local_images>1</local_images>
142
<renew_images>1</renew_images>
143
<delete_attributes>0</delete_attributes>
144
</settings>
145
</vm2mage>
6
* @author Yireo
7
* @package Vm2Mage
8
* @copyright Copyright 2013
9
+ * @license Open Source License
10
* @link http://www.yireo.com
11
*/
12
-->
14
15
<modules>
16
<Yireo_Vm2Mage>
17
+ <version>0.10.9</version>
18
</Yireo_Vm2Mage>
19
</modules>
20
140
<debug_log>0</debug_log>
141
<local_images>1</local_images>
142
<renew_images>1</renew_images>
143
+ <renew_customers>1</renew_customers>
144
<delete_attributes>0</delete_attributes>
145
</settings>
146
</vm2mage>
app/code/community/Yireo/Vm2Mage/etc/system.xml CHANGED
@@ -6,7 +6,7 @@
6
* @author Yireo
7
* @package Vm2Mage
8
* @copyright Copyright 2013
9
- * @license Yireo EULA (www.yireo.com)
10
* @link http://www.yireo.com
11
*/
12
-->
@@ -59,6 +59,16 @@
59
<show_in_store>1</show_in_store>
60
<comment>Delete old images and re-import new</comment>
61
</renew_images>
62
<delete_attributes translate="label">
63
<label>Delete Existing Attributes</label>
64
<frontend_type>select</frontend_type>
6
* @author Yireo
7
* @package Vm2Mage
8
* @copyright Copyright 2013
9
+ * @license Open Source License
10
* @link http://www.yireo.com
11
*/
12
-->
59
<show_in_store>1</show_in_store>
60
<comment>Delete old images and re-import new</comment>
61
</renew_images>
62
+ <renew_customers translate="label">
63
+ <label>Renew Customers</label>
64
+ <frontend_type>select</frontend_type>
65
+ <source_model>adminhtml/system_config_source_yesno</source_model>
66
+ <sort_order>40</sort_order>
67
+ <show_in_default>1</show_in_default>
68
+ <show_in_website>1</show_in_website>
69
+ <show_in_store>1</show_in_store>
70
+ <comment>If disabled, customer-orders are still migrated</comment>
71
+ </renew_customers>
72
<delete_attributes translate="label">
73
<label>Delete Existing Attributes</label>
74
<frontend_type>select</frontend_type>
app/design/adminhtml/default/default/template/vm2mage/check.phtml CHANGED
@@ -13,7 +13,13 @@
13
<div class="content-header">
14
<table cellspacing="0">
15
<tr>
16
- <td style="width:100%;"><h3 class="icon-head head-tag"><?php echo $this->getHeader('System Check'); ?></h3></td>
17
</tr>
18
</table>
19
</div>
13
<div class="content-header">
14
<table cellspacing="0">
15
<tr>
16
+ <td style="width:50%;">
17
+ <h3 class="icon-head head-tag"><?php echo $this->getHeader('System Check'); ?></h3>
18
+ </td>
19
+ <td class="formbuttons" align="right">
20
+ <?php echo $this->getChildHtml('categories_delete_button'); ?>
21
+ <?php echo $this->getChildHtml('products_delete_button'); ?>
22
+ </td>
23
</tr>
24
</table>
25
</div>
package.xml CHANGED
@@ -1,2 +1,2 @@
1
<?xml version="1.0"?>
2
- <package><name>Yireo_Vm2Mage</name><version>0.10.5</version><stability>stable</stability><license>Open Source License</license><channel>community</channel><extends></extends><summary>No summary</summary><description>No description</description><notes>No notes</notes><authors><author><name>Yireo</name><user>yireo</user><email>info@yireo.com</email></author></authors><date>2013-06-05</date><time>4:33:37</time><compatible></compatible><dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies><contents><target name="mage"><dir name="skin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="images"><dir name="vm2mage"><file name="check-error.png" hash="6a3c4bbf7dff2e4db08183b14329ef9c"/><file name="check-ok.png" hash="9fb629c79fc4a487088ac4aeeb23e40b"/><file name="check-warning.png" hash="39ccef05471d39a99a8fa2ddf4471d20"/></dir></dir></dir></dir></dir></dir><dir name="app"><dir name="etc"><dir name="modules"><file name="Yireo_Vm2Mage.xml" hash="bee76713ff8df9db330a8385b2465041"/></dir></dir><dir name="code"><dir name="community"><dir name="Yireo"><dir name="Vm2Mage"><dir name="controllers"><file name="IndexController.php" hash="ca7164a56e0f2a4fffb598acfd2199af"/></dir><dir name="Block"><file name="Check.php" hash="6b892674344d6d2bdd8f061df34d3905"/></dir><dir name="etc"><file name="api.xml" hash="c4bf74c7a340a02ff1f095b5371472f9"/><file name="config.old" hash="32c8c8682c10d08fa11fc422ee29972d"/><file name="config.xml" hash="fcd6d4279d3e580f5e4d5d5c16c20066"/><file name="system.xml" hash="06eafb17e9fa31cbd63db69505ca7a9f"/></dir><dir name="sql"><dir name="vm2mage_setup"><file name="mysql4-install-0.10.3.php" hash="c8468feeed506515b538ae9f7ed8c0da"/><file name="mysql4-install-0.5.4.php" hash="de6658876bc68103fa099a814ffb46e0"/><file name="mysql4-upgrade-0.10.2-0.10.3.php" hash="1b08a11ed06b626f9edc6b86dc0f8bb9"/></dir></dir><dir name="Helper"><file name="Attribute.php" hash="35e1c22da300cbe5f72e663c6e3b64a0"/><file name="Category.php" hash="a80a6e7b5fe9b48cc8d80ca5d5a588f8"/><file name="Data.php" hash="241cebe4a1b4dbc4dfd1bf94b633a45a"/><file name="Image.php" hash="317d27310c453f63d7b1567ee895e6b9"/><file name="Price.php" hash="df91b573272cab2c1e6f86385a75bbae"/><file name="Product.php" hash="1a4566465b8bd931d96442d4243ca914"/><file name="Product.php.old" hash="be8e09d7fd14e1f054dd540c26da6542"/></dir><dir name="Model"><file name="Observer.php" hash="f0d803b0520bffdd7f14b56316efed0d"/><dir name="User"><file name="Api.php" hash="5f0a3e2398646ee2cefd227f421994ee"/></dir><dir name="Rewrite"><dir name="Category"><dir name="Attribute"><dir name="Backend"><file name="Image.php" hash="9880fd05bb4bdbb8fc551ee7cace2e9d"/></dir></dir></dir></dir><dir name="Category"><file name="Api.php" hash="25b451dde1a7cb690553d2bd91614047"/></dir><dir name="Widget"><file name="Api.php" hash="2fbfde9bcb5528f2148c8e9133b7622d"/></dir><dir name="Product"><file name="Api.php" hash="20d49dee2e9c19627eb373cae5f25cb5"/></dir><dir name="Order"><file name="Api.php" hash="a66d742bc5011749a84da412b1b8ce32"/></dir><dir name="Attribute"><file name="Api.php" hash="2abfe9a179d7e1f8a87d0be9f1b87a17"/></dir></dir></dir></dir></dir></dir><dir name="design"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="vm2mage"><file name="check.phtml" hash="3e8e7562214ddb2d3c52f7f9c3e87ed2"/></dir></dir></dir></dir></dir></dir></dir></target></contents></package>
1
<?xml version="1.0"?>
2
+ <package><name>Yireo_Vm2Mage</name><version>0.10.9</version><stability>stable</stability><license>Open Source License</license><channel>community</channel><extends></extends><summary>No summary</summary><description>No description</description><notes>No notes</notes><authors><author><name>Yireo</name><user>yireo</user><email>info@yireo.com</email></author></authors><date>2013-12-27</date><time>1:32:50</time><compatible></compatible><dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies><contents><target name="mage"><dir name="skin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="images"><dir name="vm2mage"><file name="check-error.png" hash="6a3c4bbf7dff2e4db08183b14329ef9c"/><file name="check-ok.png" hash="9fb629c79fc4a487088ac4aeeb23e40b"/><file name="check-warning.png" hash="39ccef05471d39a99a8fa2ddf4471d20"/></dir></dir></dir></dir></dir></dir><dir name="app"><dir name="etc"><dir name="modules"><file name="Yireo_Vm2Mage.xml" hash="bee76713ff8df9db330a8385b2465041"/></dir></dir><dir name="code"><dir name="community"><dir name="Yireo"><dir name="Vm2Mage"><dir name="controllers"><file name="IndexController.php" hash="323ec99b3f63cad12547d197cc31564d"/></dir><dir name="Block"><file name="Check.php" hash="24322e3ec477c16d99847e378e4f684d"/></dir><dir name="etc"><file name="api.xml" hash="c4bf74c7a340a02ff1f095b5371472f9"/><file name="config.xml" hash="dab54617a1f840f95f405434510edf1d"/><file name="system.xml" hash="093a9396a5915e29df53dcdfb596d7cd"/></dir><dir name="sql"><dir name="vm2mage_setup"><file name="mysql4-install-0.10.3.php" hash="c8468feeed506515b538ae9f7ed8c0da"/><file name="mysql4-install-0.5.4.php" hash="de6658876bc68103fa099a814ffb46e0"/><file name="mysql4-upgrade-0.10.2-0.10.3.php" hash="1b08a11ed06b626f9edc6b86dc0f8bb9"/></dir></dir><dir name="Helper"><file name="Attribute.php" hash="35e1c22da300cbe5f72e663c6e3b64a0"/><file name="Category.php" hash="a80a6e7b5fe9b48cc8d80ca5d5a588f8"/><file name="Data.php" hash="241cebe4a1b4dbc4dfd1bf94b633a45a"/><file name="Image.php" hash="01f753f938a2c3025e4286c1cb1a09af"/><file name="Price.php" hash="df91b573272cab2c1e6f86385a75bbae"/><file name="Product.php" hash="70b2a33d99fca8b3eacef7bd8419fb4e"/></dir><dir name="Model"><file name="Observer.php" hash="f0d803b0520bffdd7f14b56316efed0d"/><dir name="User"><file name="Api.php" hash="58413cb5f2d8002a4ff624927142b13b"/></dir><dir name="Rewrite"><dir name="Category"><dir name="Attribute"><dir name="Backend"><file name="Image.php" hash="9880fd05bb4bdbb8fc551ee7cace2e9d"/></dir></dir></dir></dir><dir name="Category"><file name="Api.php" hash="25b451dde1a7cb690553d2bd91614047"/></dir><dir name="Widget"><file name="Api.php" hash="2fbfde9bcb5528f2148c8e9133b7622d"/></dir><dir name="Product"><file name="Api.php" hash="511c4958ec2371481137085a795a0e3c"/></dir><dir name="Order"><file name="Api.php" hash="a66d742bc5011749a84da412b1b8ce32"/></dir><dir name="Attribute"><file name="Api.php" hash="4ed05d30baa43ed8a086066de22c8437"/></dir></dir></dir></dir></dir></dir><dir name="design"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="vm2mage"><file name="check.phtml" hash="953b257a96841c5efadac97f0cf6614e"/></dir></dir></dir></dir></dir></dir></dir></target></contents></package>