Version Notes
- Add default tax attribute.
- Add support multisites stores category mapping.
- Removed skipped field warnings
- Fix some bugs...etc.
- Delete old not relevant products
- Set is anchor category property to yes
- Sort imported categories by name
- Added method to set categories, subcategories without products to inactive
Download this release
Release Info
| Developer | IceShop |
| Extension | ice_import |
| Version | 1.3.0 |
| Comparing to | |
| See all releases | |
Code changes from version 1.2.0 to 1.3.0
- app/code/community/Capacitywebsolutions/Importproduct/Model/Convert/Adapter/Product.php +194 -71
- app/code/community/Capacitywebsolutions/Importproduct/Model/Observer.php +81 -15
- app/code/community/Capacitywebsolutions/Importproduct/Model/System/Config/Categoryactivity.php +0 -0
- app/code/community/Capacitywebsolutions/Importproduct/Model/System/Config/Defaulttax.php +19 -0
- app/code/community/Capacitywebsolutions/Importproduct/Model/System/Config/Imageimport.php +0 -0
- app/code/community/Capacitywebsolutions/Importproduct/Model/System/Config/Lockproddetails.php +0 -0
- app/code/community/Capacitywebsolutions/Importproduct/etc/config.xml +20 -1
- app/code/community/Capacitywebsolutions/Importproduct/etc/system.xml +9 -0
- app/code/community/Capacitywebsolutions/Importproduct/sql/importproduct_setup/mysql4-install-0.1.0.php +15 -5
- package.xml +11 -5
app/code/community/Capacitywebsolutions/Importproduct/Model/Convert/Adapter/Product.php
CHANGED
|
@@ -23,18 +23,40 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
| 23 |
}
|
| 24 |
|
| 25 |
public function saveRow(array $importData) {
|
| 26 |
-
|
| 27 |
// separate import data to eav & static
|
| 28 |
$sortedProductData = $this->_mapAttributes($importData);
|
| 29 |
$productData = $sortedProductData['productData'];
|
| 30 |
$iceimportAttributes = $sortedProductData['iceimportAttributes'];
|
| 31 |
$failedAttributes = $sortedProductData['failedAttributes'];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 32 |
|
| 33 |
-
if (
|
| 34 |
-
|
|
|
|
| 35 |
}
|
| 36 |
-
|
| 37 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 38 |
if (empty($iceimportAttributes['websites'])) {
|
| 39 |
$message = Mage::helper('catalog')->__('Skip import row, required field "%s" not defined', 'website');
|
| 40 |
Mage::throwException($message);
|
|
@@ -95,7 +117,7 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
| 95 |
Mage::throwException($message);
|
| 96 |
}
|
| 97 |
$unspscPath = $iceimportAttributes['unspsc_path'];
|
| 98 |
-
|
| 99 |
// set in / out of stock
|
| 100 |
$isInStock = 0;
|
| 101 |
if (!empty($iceimportAttributes['is_in_stock'])) {
|
|
@@ -139,10 +161,9 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
| 139 |
$productData['int']['visibility'] = $visibilityValue;
|
| 140 |
|
| 141 |
// set product image
|
| 142 |
-
// TODO change 'icecat_url' to 'image' before production
|
| 143 |
$productImage = '';
|
| 144 |
-
if (!empty($iceimportAttributes['
|
| 145 |
-
$productImage = $iceimportAttributes['
|
| 146 |
}
|
| 147 |
|
| 148 |
// init general attributes query
|
|
@@ -157,7 +178,7 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
| 157 |
stock_name = 'Default';
|
| 158 |
SELECT @attribute_set_id := `attribute_set_id` FROM `" . $this->_tablePrefix . "eav_attribute_set`
|
| 159 |
WHERE attribute_set_name = :attribute_set AND entity_type_id =
|
| 160 |
-
|
| 161 |
|
| 162 |
SELECT @price_id := `attribute_id` FROM `" . $this->_tablePrefix . "eav_attribute` WHERE
|
| 163 |
`attribute_code` = 'price' AND entity_type_id = @product_entity_type_id;
|
|
@@ -170,7 +191,11 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
| 170 |
`attribute_code` = 'is_active' AND entity_type_id = @category_entity_type_id;
|
| 171 |
SELECT @include_nav_bar_id := `attribute_id` FROM `" . $this->_tablePrefix . "eav_attribute` WHERE
|
| 172 |
`attribute_code` = 'include_in_menu' AND entity_type_id = @category_entity_type_id;
|
|
|
|
|
|
|
| 173 |
";
|
|
|
|
|
|
|
| 174 |
$this->_connRes->query($initAttributes, array(':attribute_set' => $iceimportAttributes['attribute_set']));
|
| 175 |
|
| 176 |
$prodIdFetch = $this->_connRes->fetchRow("SELECT entity_id FROM `" . $this->_tablePrefix . "catalog_product_entity` WHERE sku = :sku limit 1" , array(
|
|
@@ -183,12 +208,17 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
| 183 |
if('import_price_stock' == Mage::getStoreConfig('importprod_root/importprod/import_only_prices_stock',
|
| 184 |
$storeId)) {
|
| 185 |
$this->_corePriceStock($websiteId, $productId, $price, $qty, $sku, $isInStock);
|
|
|
|
| 186 |
return true;
|
| 187 |
}
|
| 188 |
} else {
|
| 189 |
$productId = null;
|
| 190 |
}
|
| 191 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 192 |
// get category id
|
| 193 |
$categoriesToActiveConf = Mage::getStoreConfig('importprod_root/importprod/category_active',
|
| 194 |
$storeId);
|
|
@@ -204,6 +234,7 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
| 204 |
|
| 205 |
// if new product then ovewrride product id from null to id
|
| 206 |
$productId = $this->_coreSave($productData, $productId, $storeId, $sku, $categoryId);
|
|
|
|
| 207 |
// add product image to queue
|
| 208 |
if (Mage::getStoreConfig('importprod_root/importprod/import_images')) {
|
| 209 |
$this->_addImageToQueue($productId, $productImage);
|
|
@@ -211,17 +242,60 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
| 211 |
|
| 212 |
// add price & stock
|
| 213 |
$this->_corePriceStock($websiteId, $productId, $price, $qty, $sku, $isInStock);
|
| 214 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 215 |
return true;
|
| 216 |
-
|
| 217 |
}
|
| 218 |
|
| 219 |
protected function _coreSave(array $entityData, $productId = null, $storeId = 0, $sku, $categoryId) {
|
| 220 |
-
|
| 221 |
if ($productId === null) {
|
| 222 |
// add product to store
|
| 223 |
-
$coreSaveProduct = "INSERT INTO `" . $this->_tablePrefix . "catalog_product_entity` (`entity_type_id`, `attribute_set_id`, `type_id`, `sku`) VALUES
|
| 224 |
-
(@product_entity_type_id, @attribute_set_id, 'simple', :sku);
|
| 225 |
SELECT @product_id := LAST_INSERT_ID();
|
| 226 |
";
|
| 227 |
$this->_connRes->query($coreSaveProduct, array(':sku' => $sku));
|
|
@@ -280,12 +354,11 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
| 280 |
";
|
| 281 |
|
| 282 |
try{
|
| 283 |
-
$this->_connRes->query($coreSaveSQL, $bindArray);
|
| 284 |
} catch(Exception $e) {
|
| 285 |
echo $e->getMessage();
|
| 286 |
}
|
| 287 |
return $productId;
|
| 288 |
-
|
| 289 |
}
|
| 290 |
|
| 291 |
protected function _corePriceStock($website =0, $productId =false, $price =0.00, $qty =0.00, $sku =false, $isInStock =0) {
|
|
@@ -368,65 +441,70 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
| 368 |
// check if product exists
|
| 369 |
$categoryId = $this->_getCategoryIdByUnspsc($unspsc);
|
| 370 |
if (!empty($categoryId)) {
|
| 371 |
-
//
|
| 372 |
-
$
|
| 373 |
-
|
| 374 |
-
'
|
| 375 |
-
|
| 376 |
-
|
| 377 |
-
|
| 378 |
-
|
| 379 |
-
|
| 380 |
-
|
| 381 |
-
|
| 382 |
-
|
| 383 |
-
|
| 384 |
-
|
| 385 |
-
|
| 386 |
-
|
| 387 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 388 |
}
|
| 389 |
-
|
| 390 |
-
|
| 391 |
-
$
|
| 392 |
-
|
|
|
|
|
|
|
| 393 |
$activeSetter = "INSERT INTO `" . $this->_tablePrefix . "catalog_category_entity_int` (`entity_type_id`, `attribute_id`, `store_id`, `entity_id`, `value`) VALUES ";
|
| 394 |
}
|
| 395 |
-
|
| 396 |
-
|
| 397 |
-
|
| 398 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 399 |
}
|
| 400 |
$activeSetter = substr($activeSetter, 0, -2);
|
| 401 |
$activeSetter .= "
|
| 402 |
ON DUPLICATE KEY UPDATE
|
| 403 |
`value` = 1
|
| 404 |
";
|
| 405 |
-
|
|
|
|
|
|
|
| 406 |
}
|
| 407 |
return $categoryId;
|
| 408 |
} else {
|
| 409 |
-
// merge unspcs to current name in unspcs & name path's
|
| 410 |
-
$nameArray = explode('/', $categories);
|
| 411 |
-
$unspscArray = explode('/', $unspscPath);
|
| 412 |
-
|
| 413 |
-
if (count($nameArray) != count($unspscArray)) {
|
| 414 |
-
$message = Mage::helper('catalog')->__('Skip import row, @categories data is invaled');
|
| 415 |
-
Mage::throwException($message);
|
| 416 |
-
}
|
| 417 |
-
|
| 418 |
-
$categoryMergedArray = array(
|
| 419 |
-
array(
|
| 420 |
-
'unspsc' => 'default_root',
|
| 421 |
-
'name' => 'Default category'
|
| 422 |
-
)
|
| 423 |
-
);
|
| 424 |
-
|
| 425 |
-
for($i = 0; $i < count($unspscArray); $i++) {
|
| 426 |
-
$categoryMergedArray[] = array('name' =>$nameArray[$i],
|
| 427 |
-
'unspsc' =>$unspscArray[$i]);
|
| 428 |
-
}
|
| 429 |
|
|
|
|
|
|
|
| 430 |
// get max created parrent category
|
| 431 |
$categoryCreateArray = array();
|
| 432 |
for ($i = count($categoryMergedArray) -1; $i >= 0; $i--) {
|
|
@@ -443,6 +521,30 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
| 443 |
}
|
| 444 |
}
|
| 445 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 446 |
protected function _getCategoryIdByUnspsc($unspcs) {
|
| 447 |
if ($unspcs == 'default_root') {
|
| 448 |
return Mage::app()->getStore(1)->getRootCategoryId();
|
|
@@ -486,6 +588,8 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
| 486 |
VALUES
|
| 487 |
(@category_entity_type_id, @category_active_id, 0, @catId, :category_active),
|
| 488 |
(@category_entity_type_id, @category_active_id, :store, @catId, :category_active),
|
|
|
|
|
|
|
| 489 |
(@category_entity_type_id, @include_nav_bar_id, 0, @catId, 1),
|
| 490 |
(@category_entity_type_id, @include_nav_bar_id, :store, @catId, 1);
|
| 491 |
|
|
@@ -507,6 +611,7 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
| 507 |
));
|
| 508 |
|
| 509 |
$categoryIdFetch = $this->_connRes->fetchRow('SELECT @catId AS category_id');
|
|
|
|
| 510 |
return $categoryIdFetch['category_id'];
|
| 511 |
}
|
| 512 |
|
|
@@ -516,7 +621,6 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
| 516 |
$iceAttributes = array();
|
| 517 |
foreach ($importData as $attribute => $value) {
|
| 518 |
// map iceimport attributes
|
| 519 |
-
// TODO change 'icecat_url' to 'image' before production
|
| 520 |
if ($attribute == 'type' ||
|
| 521 |
$attribute == 'sku' ||
|
| 522 |
$attribute == 'attribute_set' ||
|
|
@@ -529,14 +633,13 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
| 529 |
$attribute == 'store' ||
|
| 530 |
$attribute == 'websites' ||
|
| 531 |
$attribute == 'is_in_stock' ||
|
| 532 |
-
$attribute == '
|
| 533 |
$attribute == 'unspsc_path') {
|
| 534 |
|
| 535 |
$iceAttributes[$attribute] = $value;
|
| 536 |
unset($importData[$attribute]);
|
| 537 |
|
| 538 |
}
|
| 539 |
-
// TODO change 'image' to 'icecat_url' to skip liste before production
|
| 540 |
// skip some attributes
|
| 541 |
if ($attribute == 'supplier_product_code' ||
|
| 542 |
$attribute == 'supplier' ||
|
|
@@ -548,7 +651,7 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
| 548 |
$attribute == 'icecat_category_id' ||
|
| 549 |
$attribute == 'icecat_vendor_id' ||
|
| 550 |
$attribute == 'icecat_quality' ||
|
| 551 |
-
$attribute == '
|
| 552 |
$attribute == 'icecat_thumbnail_img' ||
|
| 553 |
$attribute == 'icecat_low_res_img' ||
|
| 554 |
$attribute == 'icecat_high_res_img' ||
|
|
@@ -558,7 +661,6 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
| 558 |
$attribute == 'tax4' ||
|
| 559 |
$attribute == 'min_quantity' ||
|
| 560 |
$attribute == 'loms' ||
|
| 561 |
-
$attribute == 'tax_rate' ||
|
| 562 |
$attribute == 'image_label' ||
|
| 563 |
$attribute == 'links_title' ||
|
| 564 |
$attribute == 'small_image_label' ||
|
|
@@ -756,9 +858,30 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
| 756 |
)
|
| 757 |
);
|
| 758 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 759 |
|
| 760 |
-
|
| 761 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 762 |
}
|
|
|
|
| 763 |
}
|
| 764 |
|
| 23 |
}
|
| 24 |
|
| 25 |
public function saveRow(array $importData) {
|
| 26 |
+
|
| 27 |
// separate import data to eav & static
|
| 28 |
$sortedProductData = $this->_mapAttributes($importData);
|
| 29 |
$productData = $sortedProductData['productData'];
|
| 30 |
$iceimportAttributes = $sortedProductData['iceimportAttributes'];
|
| 31 |
$failedAttributes = $sortedProductData['failedAttributes'];
|
| 32 |
+
|
| 33 |
+
//Init session values to count total products and determine the last call of saveRow method
|
| 34 |
+
$session = Mage::getSingleton("core/session");
|
| 35 |
+
$import_total = $session->getData("import_total");
|
| 36 |
+
$counter = $session->getData("counter");
|
| 37 |
|
| 38 |
+
if (!isset($counter)) {
|
| 39 |
+
$session->setData("counter",1);
|
| 40 |
+
$counter = $session->getData("counter");
|
| 41 |
}
|
| 42 |
+
|
| 43 |
+
if (!isset($import_total)) {
|
| 44 |
+
$batchId = Mage::getSingleton('core/app')->getRequest()->getPost('batch_id', 0);
|
| 45 |
+
$batchModel = Mage::getModel('dataflow/batch')->load($batchId);
|
| 46 |
+
$batchImportModel = $batchModel->getBatchImportModel();
|
| 47 |
+
$importIds = $batchImportModel->getIdCollection();
|
| 48 |
+
$import_total = count($importIds);
|
| 49 |
+
$session->setData("import_total",(int)$import_total);
|
| 50 |
+
} else if(isset($counter) && isset($import_total)) {
|
| 51 |
+
if($counter < $import_total) {
|
| 52 |
+
$session->setData("counter",(int)++$counter);
|
| 53 |
+
}
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
// mark product ice_import generic
|
| 57 |
+
$productData['varchar']['is_iceimport'] =1;
|
| 58 |
+
|
| 59 |
+
// set website id
|
| 60 |
if (empty($iceimportAttributes['websites'])) {
|
| 61 |
$message = Mage::helper('catalog')->__('Skip import row, required field "%s" not defined', 'website');
|
| 62 |
Mage::throwException($message);
|
| 117 |
Mage::throwException($message);
|
| 118 |
}
|
| 119 |
$unspscPath = $iceimportAttributes['unspsc_path'];
|
| 120 |
+
|
| 121 |
// set in / out of stock
|
| 122 |
$isInStock = 0;
|
| 123 |
if (!empty($iceimportAttributes['is_in_stock'])) {
|
| 161 |
$productData['int']['visibility'] = $visibilityValue;
|
| 162 |
|
| 163 |
// set product image
|
|
|
|
| 164 |
$productImage = '';
|
| 165 |
+
if (!empty($iceimportAttributes['image'])) {
|
| 166 |
+
$productImage = $iceimportAttributes['image'];
|
| 167 |
}
|
| 168 |
|
| 169 |
// init general attributes query
|
| 178 |
stock_name = 'Default';
|
| 179 |
SELECT @attribute_set_id := `attribute_set_id` FROM `" . $this->_tablePrefix . "eav_attribute_set`
|
| 180 |
WHERE attribute_set_name = :attribute_set AND entity_type_id =
|
| 181 |
+
@product_entity_type_id;
|
| 182 |
|
| 183 |
SELECT @price_id := `attribute_id` FROM `" . $this->_tablePrefix . "eav_attribute` WHERE
|
| 184 |
`attribute_code` = 'price' AND entity_type_id = @product_entity_type_id;
|
| 191 |
`attribute_code` = 'is_active' AND entity_type_id = @category_entity_type_id;
|
| 192 |
SELECT @include_nav_bar_id := `attribute_id` FROM `" . $this->_tablePrefix . "eav_attribute` WHERE
|
| 193 |
`attribute_code` = 'include_in_menu' AND entity_type_id = @category_entity_type_id;
|
| 194 |
+
SELECT @category_is_anchor_id := `attribute_id` FROM `" . $this->_tablePrefix . "eav_attribute` WHERE
|
| 195 |
+
`attribute_code` = 'is_anchor' AND entity_type_id = @category_entity_type_id;
|
| 196 |
";
|
| 197 |
+
|
| 198 |
+
|
| 199 |
$this->_connRes->query($initAttributes, array(':attribute_set' => $iceimportAttributes['attribute_set']));
|
| 200 |
|
| 201 |
$prodIdFetch = $this->_connRes->fetchRow("SELECT entity_id FROM `" . $this->_tablePrefix . "catalog_product_entity` WHERE sku = :sku limit 1" , array(
|
| 208 |
if('import_price_stock' == Mage::getStoreConfig('importprod_root/importprod/import_only_prices_stock',
|
| 209 |
$storeId)) {
|
| 210 |
$this->_corePriceStock($websiteId, $productId, $price, $qty, $sku, $isInStock);
|
| 211 |
+
$query = $this->_connRes->query('INSERT INTO iceimport_imported_product_ids (product_id, product_sku) VALUES (:prod_id, :sku)',array(':prod_id' => $productId,':sku' => $sku));
|
| 212 |
return true;
|
| 213 |
}
|
| 214 |
} else {
|
| 215 |
$productId = null;
|
| 216 |
}
|
| 217 |
+
$defaulttaxConf = (int)Mage::getStoreConfig('importprod_root/importprod/default_tax',$storeId);
|
| 218 |
+
|
| 219 |
+
if( !empty($defaulttaxConf) ) {
|
| 220 |
+
$productData['int']['tax_class_id'] = $defaulttaxConf;
|
| 221 |
+
}
|
| 222 |
// get category id
|
| 223 |
$categoriesToActiveConf = Mage::getStoreConfig('importprod_root/importprod/category_active',
|
| 224 |
$storeId);
|
| 234 |
|
| 235 |
// if new product then ovewrride product id from null to id
|
| 236 |
$productId = $this->_coreSave($productData, $productId, $storeId, $sku, $categoryId);
|
| 237 |
+
|
| 238 |
// add product image to queue
|
| 239 |
if (Mage::getStoreConfig('importprod_root/importprod/import_images')) {
|
| 240 |
$this->_addImageToQueue($productId, $productImage);
|
| 242 |
|
| 243 |
// add price & stock
|
| 244 |
$this->_corePriceStock($websiteId, $productId, $price, $qty, $sku, $isInStock);
|
| 245 |
+
|
| 246 |
+
$query = $this->_connRes->query('INSERT INTO iceimport_imported_product_ids (product_id, product_sku) VALUES (:prod_id, :sku)',array(':prod_id' => $productId,':sku' => $sku));
|
| 247 |
+
|
| 248 |
+
// Check if this is last imported product
|
| 249 |
+
// Do category sort and set categories without products to inactive
|
| 250 |
+
if (isset($counter) && isset($import_total) && ($counter==$import_total)) {
|
| 251 |
+
$catCollection = Mage::getModel('catalog/category')
|
| 252 |
+
->getCollection()
|
| 253 |
+
->addAttributeToSort('name', 'ASC');
|
| 254 |
+
$position = 1;
|
| 255 |
+
|
| 256 |
+
foreach ($catCollection as $category) {
|
| 257 |
+
|
| 258 |
+
$query = $this->_connRes->query("UPDATE `". $this->_tablePrefix . "catalog_category_entity` SET position = :position WHERE entity_id = :cat_id ", array(
|
| 259 |
+
':position'=>$position,
|
| 260 |
+
':cat_id'=> $category->getId()
|
| 261 |
+
));
|
| 262 |
+
|
| 263 |
+
$query = "SELECT COUNT(*) FROM `" . $this->_tablePrefix . "catalog_category_product` WHERE category_id = :cat_id ";
|
| 264 |
+
$cat_products = $this->_connRes->fetchRow($query,array(
|
| 265 |
+
':cat_id'=> $category->getId()
|
| 266 |
+
));
|
| 267 |
+
|
| 268 |
+
if ($cat_products['COUNT(*)'] == 0) {
|
| 269 |
+
$query = "SELECT `entity_id` FROM `" . $this->_tablePrefix . "catalog_category_entity` WHERE parent_id = :cat_id";
|
| 270 |
+
$child_cat = $this->_connRes->fetchAll($query,array(
|
| 271 |
+
':cat_id'=> $category->getId()
|
| 272 |
+
));
|
| 273 |
+
|
| 274 |
+
if (isset($child_cat) && count($child_cat) > 0) {
|
| 275 |
+
//Count child categories products and set them to inactive if they have no
|
| 276 |
+
$this->CountChildProd($child_cat);
|
| 277 |
+
} else {
|
| 278 |
+
$this->_connRes->query("UPDATE `" . $this->_tablePrefix . "catalog_category_entity_int`
|
| 279 |
+
SET `value` = 0 WHERE `attribute_id` = @category_active_id AND entity_id = :cat_id",array(
|
| 280 |
+
':cat_id'=> $category->getId()
|
| 281 |
+
));
|
| 282 |
+
}
|
| 283 |
+
}
|
| 284 |
+
$position++;
|
| 285 |
+
}
|
| 286 |
+
|
| 287 |
+
$session->unsetData('import_total');
|
| 288 |
+
$session->unsetData('counter');
|
| 289 |
+
}
|
| 290 |
+
|
| 291 |
return true;
|
|
|
|
| 292 |
}
|
| 293 |
|
| 294 |
protected function _coreSave(array $entityData, $productId = null, $storeId = 0, $sku, $categoryId) {
|
|
|
|
| 295 |
if ($productId === null) {
|
| 296 |
// add product to store
|
| 297 |
+
$coreSaveProduct = "INSERT INTO `" . $this->_tablePrefix . "catalog_product_entity` (`entity_type_id`, `attribute_set_id`, `type_id`, `sku`, `created_at`) VALUES
|
| 298 |
+
(@product_entity_type_id, @attribute_set_id, 'simple', :sku, NOW());
|
| 299 |
SELECT @product_id := LAST_INSERT_ID();
|
| 300 |
";
|
| 301 |
$this->_connRes->query($coreSaveProduct, array(':sku' => $sku));
|
| 354 |
";
|
| 355 |
|
| 356 |
try{
|
| 357 |
+
$query = $this->_connRes->query($coreSaveSQL, $bindArray);
|
| 358 |
} catch(Exception $e) {
|
| 359 |
echo $e->getMessage();
|
| 360 |
}
|
| 361 |
return $productId;
|
|
|
|
| 362 |
}
|
| 363 |
|
| 364 |
protected function _corePriceStock($website =0, $productId =false, $price =0.00, $qty =0.00, $sku =false, $isInStock =0) {
|
| 441 |
// check if product exists
|
| 442 |
$categoryId = $this->_getCategoryIdByUnspsc($unspsc);
|
| 443 |
if (!empty($categoryId)) {
|
| 444 |
+
// merge categories by unspsc
|
| 445 |
+
$categoryMergedArray = $this->_categoryMapper($categories, $unspscPath);
|
| 446 |
+
foreach ($categoryMergedArray as $category) {
|
| 447 |
+
$categoryName = $category['name'];
|
| 448 |
+
$categoryUnspsc = $category['unspsc'];
|
| 449 |
+
$categoryTreeId = $this->_getCategoryIdByUnspsc($categoryUnspsc);
|
| 450 |
+
// check category name to current store
|
| 451 |
+
$categoryBindArray = array(
|
| 452 |
+
':store_id' => $storeId,
|
| 453 |
+
':category_id' => $categoryTreeId
|
| 454 |
+
);
|
| 455 |
+
$nameCheckerFetch = $this->_connRes->fetchRow("SELECT value_id FROM `" . $this->_tablePrefix . "catalog_category_entity_varchar` WHERE
|
| 456 |
+
store_id = :store_id AND entity_id = :category_id AND attribute_id = @category_name_id
|
| 457 |
+
", $categoryBindArray);
|
| 458 |
+
$nameChecker = $nameCheckerFetch['value_id'];
|
| 459 |
+
if (!$nameChecker) {
|
| 460 |
+
// add category name to current store
|
| 461 |
+
$categoryBindArray[':category_name'] = $categoryName;
|
| 462 |
+
if (!empty($categoryBindArray[':category_id'])){
|
| 463 |
+
$this->_connRes->query("
|
| 464 |
+
INSERT INTO `" . $this->_tablePrefix . "catalog_category_entity_varchar` (`entity_type_id`, `attribute_id`, `store_id`, `entity_id`, `value`) VALUES
|
| 465 |
+
(@category_entity_type_id, @category_name_id, :store_id, :category_id, :category_name)
|
| 466 |
+
", $categoryBindArray);
|
| 467 |
+
}
|
| 468 |
+
}
|
| 469 |
}
|
| 470 |
+
if (1 == $categoryActive) {
|
| 471 |
+
// get current path of category
|
| 472 |
+
$categoryPath = $this->_connRes->fetchRow("SELECT path FROM `" . $this->_tablePrefix . "catalog_category_entity` WHERE entity_id = :entity_id",
|
| 473 |
+
array(':entity_id' => $categoryId));
|
| 474 |
+
$categoryPathArray = explode('/', $categoryPath['path']);
|
| 475 |
+
if ($categoryPathArray) {
|
| 476 |
$activeSetter = "INSERT INTO `" . $this->_tablePrefix . "catalog_category_entity_int` (`entity_type_id`, `attribute_id`, `store_id`, `entity_id`, `value`) VALUES ";
|
| 477 |
}
|
| 478 |
+
|
| 479 |
+
$falseCounter = 0;
|
| 480 |
+
foreach($categoryPathArray as $categoryId) {
|
| 481 |
+
$category = Mage::getModel('catalog/category')->load($categoryId);
|
| 482 |
+
$cid = $category->getId();
|
| 483 |
+
if (!empty($cid)) {
|
| 484 |
+
if (!empty($categoryId)) {
|
| 485 |
+
$activeSetter .= "(@category_entity_type_id, @category_active_id, :store_id, " . $categoryId . ", 1),
|
| 486 |
+
(@category_entity_type_id, @category_active_id, 0, " . $categoryId . ", 1), ";
|
| 487 |
+
} else {
|
| 488 |
+
$falseCounter++;
|
| 489 |
+
}
|
| 490 |
+
} else {
|
| 491 |
+
$falseCounter++;
|
| 492 |
+
}
|
| 493 |
}
|
| 494 |
$activeSetter = substr($activeSetter, 0, -2);
|
| 495 |
$activeSetter .= "
|
| 496 |
ON DUPLICATE KEY UPDATE
|
| 497 |
`value` = 1
|
| 498 |
";
|
| 499 |
+
if ($falseCounter < count($categoryPathArray)) {
|
| 500 |
+
$this->_connRes->query($activeSetter, array(':store_id' => $storeId));
|
| 501 |
+
}
|
| 502 |
}
|
| 503 |
return $categoryId;
|
| 504 |
} else {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 505 |
|
| 506 |
+
// merge unspcs to current name in unspcs & name path's
|
| 507 |
+
$categoryMergedArray = $this->_categoryMapper($categories, $unspscPath);
|
| 508 |
// get max created parrent category
|
| 509 |
$categoryCreateArray = array();
|
| 510 |
for ($i = count($categoryMergedArray) -1; $i >= 0; $i--) {
|
| 521 |
}
|
| 522 |
}
|
| 523 |
|
| 524 |
+
protected function _categoryMapper($categoryPath, $unspscPath) {
|
| 525 |
+
$nameArray = explode('/', $categoryPath);
|
| 526 |
+
$unspscArray = explode('/', $unspscPath);
|
| 527 |
+
|
| 528 |
+
if (count($nameArray) != count($unspscArray)) {
|
| 529 |
+
$message = Mage::helper('catalog')->__('Skip import row, @categories data is invaled');
|
| 530 |
+
Mage::throwException($message);
|
| 531 |
+
}
|
| 532 |
+
|
| 533 |
+
$categoryMergedArray = array(
|
| 534 |
+
array(
|
| 535 |
+
'unspsc' => 'default_root',
|
| 536 |
+
'name' => 'Default category'
|
| 537 |
+
)
|
| 538 |
+
);
|
| 539 |
+
|
| 540 |
+
for($i = 0; $i < count($unspscArray); $i++) {
|
| 541 |
+
$categoryMergedArray[] = array('name' =>$nameArray[$i],
|
| 542 |
+
'unspsc' =>$unspscArray[$i]);
|
| 543 |
+
}
|
| 544 |
+
|
| 545 |
+
return $categoryMergedArray;
|
| 546 |
+
}
|
| 547 |
+
|
| 548 |
protected function _getCategoryIdByUnspsc($unspcs) {
|
| 549 |
if ($unspcs == 'default_root') {
|
| 550 |
return Mage::app()->getStore(1)->getRootCategoryId();
|
| 588 |
VALUES
|
| 589 |
(@category_entity_type_id, @category_active_id, 0, @catId, :category_active),
|
| 590 |
(@category_entity_type_id, @category_active_id, :store, @catId, :category_active),
|
| 591 |
+
(@category_entity_type_id, @category_is_anchor_id, 0, @catId, 1),
|
| 592 |
+
(@category_entity_type_id, @category_is_anchor_id, :store, @catId, 1),
|
| 593 |
(@category_entity_type_id, @include_nav_bar_id, 0, @catId, 1),
|
| 594 |
(@category_entity_type_id, @include_nav_bar_id, :store, @catId, 1);
|
| 595 |
|
| 611 |
));
|
| 612 |
|
| 613 |
$categoryIdFetch = $this->_connRes->fetchRow('SELECT @catId AS category_id');
|
| 614 |
+
|
| 615 |
return $categoryIdFetch['category_id'];
|
| 616 |
}
|
| 617 |
|
| 621 |
$iceAttributes = array();
|
| 622 |
foreach ($importData as $attribute => $value) {
|
| 623 |
// map iceimport attributes
|
|
|
|
| 624 |
if ($attribute == 'type' ||
|
| 625 |
$attribute == 'sku' ||
|
| 626 |
$attribute == 'attribute_set' ||
|
| 633 |
$attribute == 'store' ||
|
| 634 |
$attribute == 'websites' ||
|
| 635 |
$attribute == 'is_in_stock' ||
|
| 636 |
+
$attribute == 'image' ||
|
| 637 |
$attribute == 'unspsc_path') {
|
| 638 |
|
| 639 |
$iceAttributes[$attribute] = $value;
|
| 640 |
unset($importData[$attribute]);
|
| 641 |
|
| 642 |
}
|
|
|
|
| 643 |
// skip some attributes
|
| 644 |
if ($attribute == 'supplier_product_code' ||
|
| 645 |
$attribute == 'supplier' ||
|
| 651 |
$attribute == 'icecat_category_id' ||
|
| 652 |
$attribute == 'icecat_vendor_id' ||
|
| 653 |
$attribute == 'icecat_quality' ||
|
| 654 |
+
$attribute == 'icecat_url' ||
|
| 655 |
$attribute == 'icecat_thumbnail_img' ||
|
| 656 |
$attribute == 'icecat_low_res_img' ||
|
| 657 |
$attribute == 'icecat_high_res_img' ||
|
| 661 |
$attribute == 'tax4' ||
|
| 662 |
$attribute == 'min_quantity' ||
|
| 663 |
$attribute == 'loms' ||
|
|
|
|
| 664 |
$attribute == 'image_label' ||
|
| 665 |
$attribute == 'links_title' ||
|
| 666 |
$attribute == 'small_image_label' ||
|
| 858 |
)
|
| 859 |
);
|
| 860 |
}
|
| 861 |
+
|
| 862 |
+
// Count child categories products and set them inactive if they have no
|
| 863 |
+
public function CountChildProd($child_cat) {
|
| 864 |
+
foreach ($child_cat as $cat) {
|
| 865 |
+
$query = "SELECT `entity_id` FROM `" . $this->_tablePrefix . "catalog_category_entity` WHERE parent_id = :cat_id";
|
| 866 |
+
$child_cat = $this->_connRes->fetchAll($query,array(
|
| 867 |
+
':cat_id'=> $cat['entity_id']
|
| 868 |
+
));
|
| 869 |
|
| 870 |
+
$query = "SELECT COUNT(*) FROM `" . $this->_tablePrefix . "catalog_category_product` WHERE category_id = :cat_id ";
|
| 871 |
+
$cat_products = $this->_connRes->fetchRow($query,array(
|
| 872 |
+
':cat_id'=> $cat['entity_id']
|
| 873 |
+
));
|
| 874 |
+
|
| 875 |
+
if ($cat_products['COUNT(*)'] == 0 && empty($child_cat)) {
|
| 876 |
+
$this->_connRes->query("UPDATE `" . $this->_tablePrefix . "catalog_category_entity_int`
|
| 877 |
+
SET `value` = 0 WHERE `attribute_id` = @category_active_id AND entity_id = :cat_id",array(
|
| 878 |
+
':cat_id'=> $cat['entity_id']
|
| 879 |
+
));
|
| 880 |
+
} else if (!empty($child_cat)) {
|
| 881 |
+
$this->CountChildProd($child_cat);
|
| 882 |
+
}
|
| 883 |
+
}
|
| 884 |
}
|
| 885 |
+
|
| 886 |
}
|
| 887 |
|
app/code/community/Capacitywebsolutions/Importproduct/Model/Observer.php
CHANGED
|
@@ -1,5 +1,4 @@
|
|
| 1 |
<?php
|
| 2 |
-
/*m@rk*/
|
| 3 |
class Capacitywebsolutions_Importproduct_Model_Observer
|
| 4 |
{
|
| 5 |
|
|
@@ -13,15 +12,7 @@ class Capacitywebsolutions_Importproduct_Model_Observer
|
|
| 13 |
* @access publc
|
| 14 |
*/
|
| 15 |
public function load() {
|
| 16 |
-
|
| 17 |
-
/*
|
| 18 |
-
// test load
|
| 19 |
-
$con = mysql_connect('localhost', 'test', 'test');
|
| 20 |
-
$db = mysql_select_db('catch');
|
| 21 |
-
$query = mysql_query("INSERT INTO detect (event, time) VALUES ('load called', NOW())");
|
| 22 |
-
*/
|
| 23 |
-
|
| 24 |
-
|
| 25 |
$profileId = 3;
|
| 26 |
$logFileName= 'test.log';
|
| 27 |
$recordCount = 0;
|
|
@@ -44,15 +35,19 @@ class Capacitywebsolutions_Importproduct_Model_Observer
|
|
| 44 |
$profile->run();
|
| 45 |
|
| 46 |
$batchModel = Mage::getSingleton('dataflow/batch');
|
|
|
|
| 47 |
if ($batchModel->getId()) {
|
| 48 |
if ($batchModel->getAdapter()) {
|
| 49 |
-
$batchId = $batchModel->getId();
|
| 50 |
$batchImportModel = $batchModel->getBatchImportModel();
|
| 51 |
$importIds = $batchImportModel->getIdCollection();
|
| 52 |
|
| 53 |
$batchModel = Mage::getModel('dataflow/batch')->load($batchId);
|
|
|
|
| 54 |
$adapter = Mage::getModel($batchModel->getAdapter());
|
|
|
|
| 55 |
foreach ($importIds as $importId) {
|
|
|
|
| 56 |
$recordCount++;
|
| 57 |
try{
|
| 58 |
$batchImportModel->load($importId);
|
|
@@ -76,6 +71,27 @@ class Capacitywebsolutions_Importproduct_Model_Observer
|
|
| 76 |
|
| 77 |
}
|
| 78 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 79 |
// download & set product images
|
| 80 |
$queueList = $adapter->getImageQueue();
|
| 81 |
if (count($queueList) > 0) {
|
|
@@ -84,13 +100,10 @@ class Capacitywebsolutions_Importproduct_Model_Observer
|
|
| 84 |
$queueId = $queue['queue_id'];
|
| 85 |
$productId = $queue['entity_id'];
|
| 86 |
$imageUrl = $queue['image_url'];
|
| 87 |
-
// TODO remove hardcode
|
| 88 |
-
$imageUrl = 'http://magento17.batavi.org/media/download.jpg';
|
| 89 |
|
| 90 |
$preImageName = explode('/', $imageUrl);
|
| 91 |
$imageName = array_pop($preImageName);
|
| 92 |
if (file_exists($mediaDir . DS . $imageName)) {
|
| 93 |
-
// TODO remove rand()
|
| 94 |
$imageName = rand() .'_'. time() . $imageName;
|
| 95 |
}
|
| 96 |
|
|
@@ -110,6 +123,58 @@ class Capacitywebsolutions_Importproduct_Model_Observer
|
|
| 110 |
}
|
| 111 |
}
|
| 112 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 113 |
|
| 114 |
$processes = Mage::getSingleton('index/indexer')->getProcessesCollection();
|
| 115 |
$processes->walk('reindexAll');
|
|
@@ -120,7 +185,8 @@ class Capacitywebsolutions_Importproduct_Model_Observer
|
|
| 120 |
|
| 121 |
}
|
| 122 |
}
|
| 123 |
-
|
|
|
|
| 124 |
echo 'Import Completed';
|
| 125 |
Mage::log("Import Completed",null,$logFileName);
|
| 126 |
|
| 1 |
<?php
|
|
|
|
| 2 |
class Capacitywebsolutions_Importproduct_Model_Observer
|
| 3 |
{
|
| 4 |
|
| 12 |
* @access publc
|
| 13 |
*/
|
| 14 |
public function load() {
|
| 15 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
$profileId = 3;
|
| 17 |
$logFileName= 'test.log';
|
| 18 |
$recordCount = 0;
|
| 35 |
$profile->run();
|
| 36 |
|
| 37 |
$batchModel = Mage::getSingleton('dataflow/batch');
|
| 38 |
+
|
| 39 |
if ($batchModel->getId()) {
|
| 40 |
if ($batchModel->getAdapter()) {
|
| 41 |
+
$batchId = $batchModel->getId();
|
| 42 |
$batchImportModel = $batchModel->getBatchImportModel();
|
| 43 |
$importIds = $batchImportModel->getIdCollection();
|
| 44 |
|
| 45 |
$batchModel = Mage::getModel('dataflow/batch')->load($batchId);
|
| 46 |
+
|
| 47 |
$adapter = Mage::getModel($batchModel->getAdapter());
|
| 48 |
+
|
| 49 |
foreach ($importIds as $importId) {
|
| 50 |
+
|
| 51 |
$recordCount++;
|
| 52 |
try{
|
| 53 |
$batchImportModel->load($importId);
|
| 71 |
|
| 72 |
}
|
| 73 |
|
| 74 |
+
// delete old products
|
| 75 |
+
$db_res = Mage::getSingleton('core/resource')->getConnection('core_write');
|
| 76 |
+
$tablePrefix = '';
|
| 77 |
+
$tPrefix = (array)Mage::getConfig()->getTablePrefix();
|
| 78 |
+
if (!empty($tPrefix)) {
|
| 79 |
+
$tablePrefix = $tPrefix[0];
|
| 80 |
+
}
|
| 81 |
+
|
| 82 |
+
try{
|
| 83 |
+
$db_res->query("SELECT @is_iceimport_id := `attribute_id` FROM " . $tablePrefix . "eav_attribute WHERE attribute_code = 'is_iceimport'");
|
| 84 |
+
$db_res->query("DELETE cpe FROM " . $tablePrefix . "catalog_product_entity AS cpe
|
| 85 |
+
JOIN " . $tablePrefix . "catalog_product_entity_varchar AS cpev ON cpe.entity_id = cpev.entity_id AND cpev.value = 1 AND cpev.attribute_id = @is_iceimport_id
|
| 86 |
+
LEFT JOIN iceimport_imported_product_ids AS iip ON cpe.entity_id = iip.product_id
|
| 87 |
+
WHERE iip.product_id IS NULL");
|
| 88 |
+
$db_res->query('DELETE FROM iceimport_imported_product_ids');
|
| 89 |
+
|
| 90 |
+
} catch (Exception $e) {
|
| 91 |
+
throw new Exception($e->getMessage());
|
| 92 |
+
}
|
| 93 |
+
|
| 94 |
+
|
| 95 |
// download & set product images
|
| 96 |
$queueList = $adapter->getImageQueue();
|
| 97 |
if (count($queueList) > 0) {
|
| 100 |
$queueId = $queue['queue_id'];
|
| 101 |
$productId = $queue['entity_id'];
|
| 102 |
$imageUrl = $queue['image_url'];
|
|
|
|
|
|
|
| 103 |
|
| 104 |
$preImageName = explode('/', $imageUrl);
|
| 105 |
$imageName = array_pop($preImageName);
|
| 106 |
if (file_exists($mediaDir . DS . $imageName)) {
|
|
|
|
| 107 |
$imageName = rand() .'_'. time() . $imageName;
|
| 108 |
}
|
| 109 |
|
| 123 |
}
|
| 124 |
}
|
| 125 |
}
|
| 126 |
+
// sort category in abc
|
| 127 |
+
|
| 128 |
+
$catCollection = Mage::getModel('catalog/category')
|
| 129 |
+
->getCollection()
|
| 130 |
+
->addAttributeToSort('name', 'ASC');
|
| 131 |
+
$position =1;
|
| 132 |
+
foreach($catCollection as $category) {
|
| 133 |
+
$catSource = Mage::getModel('catalog/category')->load($category->getId());
|
| 134 |
+
$catSource->setData('position', $position);
|
| 135 |
+
$catSource->save();
|
| 136 |
+
$query = "SELECT COUNT(*) FROM `" . $this->_tablePrefix . "catalog_category_product` WHERE category_id = :cat_id ";
|
| 137 |
+
$cat_products = $db_res->fetchRow($query,array(
|
| 138 |
+
':cat_id'=> $category->getId()
|
| 139 |
+
));
|
| 140 |
+
|
| 141 |
+
if ($cat_products['COUNT(*)'] == 0) {
|
| 142 |
+
$query = "SELECT `entity_id` FROM `" . $this->_tablePrefix . "catalog_category_entity` WHERE parent_id = :cat_id";
|
| 143 |
+
$child_cat = $db_res->fetchAll($query,array(
|
| 144 |
+
':cat_id'=> $category->getId()
|
| 145 |
+
));
|
| 146 |
+
$cat_prod = 0;
|
| 147 |
+
|
| 148 |
+
if (isset($child_cat) && count($child_cat) > 0) {
|
| 149 |
+
|
| 150 |
+
foreach ($child_cat as $cat) {
|
| 151 |
+
$query = "SELECT COUNT(*) FROM `" . $this->_tablePrefix . "catalog_category_product` WHERE category_id = :cat_id ";
|
| 152 |
+
$cat_products = $db_res->fetchRow($query,array(
|
| 153 |
+
':cat_id'=> $cat['entity_id']
|
| 154 |
+
));
|
| 155 |
+
|
| 156 |
+
if ($cat_products['COUNT(*)'] != 0) {
|
| 157 |
+
$cat_prod = 1;
|
| 158 |
+
}
|
| 159 |
+
|
| 160 |
+
}
|
| 161 |
+
|
| 162 |
+
if ($cat_prod == 0) {
|
| 163 |
+
$db_res->query("UPDATE `" . $this->_tablePrefix . "catalog_category_entity_int`
|
| 164 |
+
SET `value` = 0 WHERE `attribute_id` = @category_active_id AND entity_id = :cat_id",array(
|
| 165 |
+
':cat_id'=> $category->getId()
|
| 166 |
+
));
|
| 167 |
+
}
|
| 168 |
+
} else {
|
| 169 |
+
$db_res->query("UPDATE `" . $this->_tablePrefix . "catalog_category_entity_int`
|
| 170 |
+
SET `value` = 0 WHERE `attribute_id` = @category_active_id AND entity_id = :cat_id",array(
|
| 171 |
+
':cat_id'=> $category->getId()
|
| 172 |
+
));
|
| 173 |
+
}
|
| 174 |
+
}
|
| 175 |
+
$position++;
|
| 176 |
+
}
|
| 177 |
+
|
| 178 |
|
| 179 |
$processes = Mage::getSingleton('index/indexer')->getProcessesCollection();
|
| 180 |
$processes->walk('reindexAll');
|
| 185 |
|
| 186 |
}
|
| 187 |
}
|
| 188 |
+
|
| 189 |
+
unset($db_res);
|
| 190 |
echo 'Import Completed';
|
| 191 |
Mage::log("Import Completed",null,$logFileName);
|
| 192 |
|
app/code/community/Capacitywebsolutions/Importproduct/Model/System/Config/Categoryactivity.php
CHANGED
|
File without changes
|
app/code/community/Capacitywebsolutions/Importproduct/Model/System/Config/Defaulttax.php
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Capacitywebsolutions_Importproduct_Model_System_Config_Defaulttax
|
| 4 |
+
{
|
| 5 |
+
public function toOptionArray()
|
| 6 |
+
{
|
| 7 |
+
$collection = Mage::getModel('tax/class')->getCollection();
|
| 8 |
+
$paramsArray = array();
|
| 9 |
+
$paramsArray['0'] = 'None';
|
| 10 |
+
|
| 11 |
+
foreach ($collection as $product) {
|
| 12 |
+
$tax = $product->getData();
|
| 13 |
+
$paramsArray[$tax['class_id']] = $tax['class_name'];
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
return $paramsArray;
|
| 17 |
+
}
|
| 18 |
+
}
|
| 19 |
+
?>
|
app/code/community/Capacitywebsolutions/Importproduct/Model/System/Config/Imageimport.php
CHANGED
|
File without changes
|
app/code/community/Capacitywebsolutions/Importproduct/Model/System/Config/Lockproddetails.php
CHANGED
|
File without changes
|
app/code/community/Capacitywebsolutions/Importproduct/etc/config.xml
CHANGED
|
@@ -6,6 +6,24 @@
|
|
| 6 |
</Capacitywebsolutions_Importproduct>
|
| 7 |
</modules>
|
| 8 |
<global>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9 |
<models>
|
| 10 |
<catalog>
|
| 11 |
<rewrite>
|
|
@@ -37,8 +55,9 @@
|
|
| 37 |
<use>core_read</use>
|
| 38 |
</connection>
|
| 39 |
</importproduct_setup_read>
|
| 40 |
-
</resources>
|
| 41 |
</global>
|
|
|
|
| 42 |
<adminhtml>
|
| 43 |
<acl>
|
| 44 |
<resources>
|
| 6 |
</Capacitywebsolutions_Importproduct>
|
| 7 |
</modules>
|
| 8 |
<global>
|
| 9 |
+
<events>
|
| 10 |
+
<controller_action_predispatch_adminhtml_profile_batchfinish>
|
| 11 |
+
<observers>
|
| 12 |
+
<Capacitywebsolutions_Importproduct>
|
| 13 |
+
<class>Capacitywebsolutions_Importproduct/Observer</class>
|
| 14 |
+
<method>sortCategory</method>
|
| 15 |
+
</Capacitywebsolutions_Importproduct>
|
| 16 |
+
</observers>
|
| 17 |
+
</controller_action_predispatch_adminhtml_profile_batchfinish>
|
| 18 |
+
<controller_action_postdispatch_adminhtml_profile_batchFinish>
|
| 19 |
+
<observers>
|
| 20 |
+
<Capacitywebsolutions_Importproduct>
|
| 21 |
+
<class>Capacitywebsolutions_Importproduct/Observer</class>
|
| 22 |
+
<method>sortCategory</method>
|
| 23 |
+
</Capacitywebsolutions_Importproduct>
|
| 24 |
+
</observers>
|
| 25 |
+
</controller_action_postdispatch_adminhtml_profile_batchFinish>
|
| 26 |
+
</events>
|
| 27 |
<models>
|
| 28 |
<catalog>
|
| 29 |
<rewrite>
|
| 55 |
<use>core_read</use>
|
| 56 |
</connection>
|
| 57 |
</importproduct_setup_read>
|
| 58 |
+
</resources>
|
| 59 |
</global>
|
| 60 |
+
|
| 61 |
<adminhtml>
|
| 62 |
<acl>
|
| 63 |
<resources>
|
app/code/community/Capacitywebsolutions/Importproduct/etc/system.xml
CHANGED
|
@@ -46,6 +46,15 @@
|
|
| 46 |
<show_in_website>1</show_in_website>
|
| 47 |
<show_in_store>1</show_in_store>
|
| 48 |
</import_images>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 49 |
</fields>
|
| 50 |
</importprod>
|
| 51 |
</groups>
|
| 46 |
<show_in_website>1</show_in_website>
|
| 47 |
<show_in_store>1</show_in_store>
|
| 48 |
</import_images>
|
| 49 |
+
<default_tax translate="label">
|
| 50 |
+
<label>Default tax for product</label>
|
| 51 |
+
<frontend_type>select</frontend_type>
|
| 52 |
+
<source_model>importproduct/system_config_defaulttax</source_model>
|
| 53 |
+
<sort_order>40</sort_order>
|
| 54 |
+
<show_in_default>1</show_in_default>
|
| 55 |
+
<show_in_website>1</show_in_website>
|
| 56 |
+
<show_in_store>1</show_in_store>
|
| 57 |
+
</default_tax>
|
| 58 |
</fields>
|
| 59 |
</importprod>
|
| 60 |
</groups>
|
app/code/community/Capacitywebsolutions/Importproduct/sql/importproduct_setup/mysql4-install-0.1.0.php
CHANGED
|
@@ -8,10 +8,10 @@
|
|
| 8 |
$attributeGroupId = $installer->getDefaultAttributeGroupId($entityTypeId, $attributeSetId);
|
| 9 |
|
| 10 |
$installer->addAttribute('catalog_category', 'unspsc', array(
|
| 11 |
-
'type'
|
| 12 |
-
'label'
|
| 13 |
-
'input'
|
| 14 |
-
'global'
|
| 15 |
'visible' => true,
|
| 16 |
'required' => false,
|
| 17 |
'user_defined' => false,
|
|
@@ -29,7 +29,11 @@
|
|
| 29 |
$attributeId = $installer->getAttributeId($entityTypeId, 'unspsc');
|
| 30 |
|
| 31 |
$installer->run("
|
| 32 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
(`entity_type_id`, `attribute_id`, `entity_id`, `value`)
|
| 34 |
SELECT '{$entityTypeId}', '{$attributeId}', `entity_id`, '1'
|
| 35 |
FROM `{$installer->getTable('catalog_category_entity')}`;
|
|
@@ -44,6 +48,12 @@
|
|
| 44 |
UNIQUE KEY (`entity_id`, `image_url`),
|
| 45 |
CONSTRAINT `FK_CAP_PRD_IMG_QUEUE_ENTT_ID_CAT_PRD_ENTT_ENTT_ID` FOREIGN KEY (`entity_id`) REFERENCES `{$installer->getTable('catalog_product_entity')}` (`entity_id`) ON DELETE CASCADE
|
| 46 |
)ENGINE=InnoDB CHARSET=utf8 COMMENT='Table to manage product image import';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 47 |
");
|
| 48 |
|
| 49 |
$installer->endSetup();
|
| 8 |
$attributeGroupId = $installer->getDefaultAttributeGroupId($entityTypeId, $attributeSetId);
|
| 9 |
|
| 10 |
$installer->addAttribute('catalog_category', 'unspsc', array(
|
| 11 |
+
'type' => 'varchar',
|
| 12 |
+
'label' => 'unspsc',
|
| 13 |
+
'input' => 'text',
|
| 14 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
|
| 15 |
'visible' => true,
|
| 16 |
'required' => false,
|
| 17 |
'user_defined' => false,
|
| 29 |
$attributeId = $installer->getAttributeId($entityTypeId, 'unspsc');
|
| 30 |
|
| 31 |
$installer->run("
|
| 32 |
+
|
| 33 |
+
DROP TABLE IF EXISTS `iceimport_imported_product_ids`;
|
| 34 |
+
DROP TABLE IF EXISTS `{$installer->getTable('capacity_product_image_queue')}`;
|
| 35 |
+
|
| 36 |
+
INSERT IGNORE INTO `{$installer->getTable('catalog_category_entity_varchar')}`
|
| 37 |
(`entity_type_id`, `attribute_id`, `entity_id`, `value`)
|
| 38 |
SELECT '{$entityTypeId}', '{$attributeId}', `entity_id`, '1'
|
| 39 |
FROM `{$installer->getTable('catalog_category_entity')}`;
|
| 48 |
UNIQUE KEY (`entity_id`, `image_url`),
|
| 49 |
CONSTRAINT `FK_CAP_PRD_IMG_QUEUE_ENTT_ID_CAT_PRD_ENTT_ENTT_ID` FOREIGN KEY (`entity_id`) REFERENCES `{$installer->getTable('catalog_product_entity')}` (`entity_id`) ON DELETE CASCADE
|
| 50 |
)ENGINE=InnoDB CHARSET=utf8 COMMENT='Table to manage product image import';
|
| 51 |
+
|
| 52 |
+
CREATE TABLE IF NOT EXISTS `iceimport_imported_product_ids` (
|
| 53 |
+
`product_id` int(11) NOT NULL,
|
| 54 |
+
`product_sku` varchar(255) DEFAULT NULL,
|
| 55 |
+
KEY `pi_idx` (`product_id`)
|
| 56 |
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8
|
| 57 |
");
|
| 58 |
|
| 59 |
$installer->endSetup();
|
package.xml
CHANGED
|
@@ -1,18 +1,24 @@
|
|
| 1 |
<?xml version="1.0"?>
|
| 2 |
<package>
|
| 3 |
<name>ice_import</name>
|
| 4 |
-
<version>1.
|
| 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>Import categories & products</summary>
|
| 10 |
<description>This extension can use to import products with categories, multiple images and custom options from CSV file.</description>
|
| 11 |
-
<notes>-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
<authors><author><name>Iceshop</name><user>Iceshop</user><email>support@iceshop.nl</email></author></authors>
|
| 13 |
-
<date>
|
| 14 |
-
<time>
|
| 15 |
-
<contents><target name="magecommunity"><dir name="Capacitywebsolutions"><dir name="Importproduct"><dir name="etc"><file name="config.xml" hash="c59424e1f6806af1c50f322a84c262a9"/><file name="system.xml" hash="0f76e79143ac01dc948a1c4c5315c072"/></dir><dir name="Model"><dir name="Convert"><dir name="Adapter"><file name="Product.php" hash="
|
| 16 |
<compatible/>
|
| 17 |
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
|
| 18 |
</package>
|
| 1 |
<?xml version="1.0"?>
|
| 2 |
<package>
|
| 3 |
<name>ice_import</name>
|
| 4 |
+
<version>1.3.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>Import categories & products</summary>
|
| 10 |
<description>This extension can use to import products with categories, multiple images and custom options from CSV file.</description>
|
| 11 |
+
<notes>- Add default tax attribute.
 - Add support multisites stores category mapping.
|
| 12 |
+
- Removed skipped field warnings
|
| 13 |
+
- Fix some bugs...etc.
|
| 14 |
+
- Delete old not relevant products
|
| 15 |
+
- Set is anchor category property to yes
|
| 16 |
+
- Sort imported categories by name
|
| 17 |
+
- Added method to set categories, subcategories without products to inactive </notes>
|
| 18 |
<authors><author><name>Iceshop</name><user>Iceshop</user><email>support@iceshop.nl</email></author></authors>
|
| 19 |
+
<date>2013-03-29</date>
|
| 20 |
+
<time>10:55:42</time>
|
| 21 |
+
<contents><target name="magecommunity"><dir name="Capacitywebsolutions"><dir name="Importproduct"><dir name="etc"><file name="config.xml" hash="c59424e1f6806af1c50f322a84c262a9"/><file name="system.xml" hash="0f76e79143ac01dc948a1c4c5315c072"/></dir><dir name="Model"><dir name="Convert"><dir name="Adapter"><file name="Product.php" hash="b14683db8316b3bfa88a663abc42e7df"/></dir></dir><dir name="System"><dir name="Config"><file name="Categoryactivity.php" hash="2ddc7588dd1d038661f0017c8ff397a6"/><file name="Imageimport.php" hash="8b29e7bbf67d82a06f04ad9a63df26a0"/><file name="Lockproddetails.php" hash="32a823c0c914348585702536732fed3e"/><file name="Defaulttax.php" hash="32a823c0c914348585702536732fed3e"/></dir></dir><file name="Observer.php" hash="cf7944e708df4fca8fbb218f8828b305"/></dir><dir name="sql"><dir name="importproduct_setup"><file name="mysql4-install-0.1.0.php" hash="61102e9caee6f92ebba4230d391b922d"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Capacitywebsolutions_Importproduct.xml" hash="02cb79dd6ed129ce3aa5305e1bfb4bbf"/></dir></target></contents>
|
| 22 |
<compatible/>
|
| 23 |
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
|
| 24 |
</package>
|
