private function _syncProducts($productsList) { $fees = 0; $count = 0; $count_success = 0; $count_error = 0; $tab_error = array(); $date = date('Y-m-d H:i:s'); $ebay = new eBayRequest(); $categoryDefaultCache = array(); // Get errors back if (file_exists(dirname(__FILE__) . '/log/syncError.php')) { global $tab_error; include dirname(__FILE__) . '/log/syncError.php'; } // Up the time limit @set_time_limit(3600); // Run the products list foreach ($productsList as $p) { // Product instanciation $product = new Product((int) $p['id_product'], true, $this->id_lang); if (!$this->isVersionOneDotFive()) { $productQuantity = new Product((int) $p['id_product']); $quantityProduct = $productQuantity->quantity; } else { $quantityProduct = $product->quantity; } if (Validate::isLoadedObject($product) && $product->id_category_default > 0) { // Load default category matched in cache if (!isset($categoryDefaultCache[$product->id_category_default])) { $categoryDefaultCache[$product->id_category_default] = Db::getInstance()->getRow('SELECT ec.`id_category_ref`, ec.`is_multi_sku`, ecc.`percent` FROM `' . _DB_PREFIX_ . 'ebay_category` ec LEFT JOIN `' . _DB_PREFIX_ . 'ebay_category_configuration` ecc ON (ecc.`id_ebay_category` = ec.`id_ebay_category`) WHERE ecc.`id_category` = ' . (int) $product->id_category_default); } if ($categoryDefaultCache[$product->id_category_default]['is_multi_sku'] != 1) { $categoryDefaultCache[$product->id_category_default]['is_multi_sku'] = $this->findIfCategoryParentIsMultiSku($categoryDefaultCache[$product->id_category_default]['id_category_ref']); } // Load Pictures $pictures = array(); $picturesMedium = array(); $picturesLarge = array(); $prefix = substr(_PS_VERSION_, 0, 3) == '1.3' ? 'http://' . Configuration::get('PS_SHOP_DOMAIN') . '/' : ''; $images = $product->getImages($this->id_lang); foreach ($images as $image) { $pictures[] = str_replace('https://', 'http://', $prefix . $this->context->link->getImageLink('ebay', $product->id . '-' . $image['id_image'], 'large' . ($this->isVersionOneDotFive() ? '_default' : ''))); $picturesMedium[] = str_replace('https://', 'http://', $prefix . $this->context->link->getImageLink('ebay', $product->id . '-' . $image['id_image'], 'medium' . ($this->isVersionOneDotFive() ? '_default' : ''))); $picturesLarge[] = str_replace('https://', 'http://', $prefix . $this->context->link->getImageLink('ebay', $product->id . '-' . $image['id_image'], 'large' . ($this->isVersionOneDotFive() ? '_default' : ''))); } // Load Variations $variations = array(); $variationsList = array(); $combinations = $product->getAttributeCombinaisons($this->id_lang); if (isset($combinations)) { foreach ($combinations as $c) { $variationsList[$c['group_name']][$c['attribute_name']] = 1; $variations[$c['id_product'] . '-' . $c['id_product_attribute']]['id_attribute'] = $c['id_product_attribute']; $variations[$c['id_product'] . '-' . $c['id_product_attribute']]['reference'] = $c['reference']; $variations[$c['id_product'] . '-' . $c['id_product_attribute']]['quantity'] = $c['quantity']; $variations[$c['id_product'] . '-' . $c['id_product_attribute']]['variations'][] = array('name' => $c['group_name'], 'value' => $c['attribute_name']); $variations[$c['id_product'] . '-' . $c['id_product_attribute']]['price_static'] = Product::getPriceStatic((int) $c['id_product'], true, (int) $c['id_product_attribute']); $price = $variations[$c['id_product'] . '-' . $c['id_product_attribute']]['price_static']; $price_original = $price; if ($categoryDefaultCache[$product->id_category_default]['percent'] > 0) { $price *= 1 + $categoryDefaultCache[$product->id_category_default]['percent'] / 100; } else { if ($categoryDefaultCache[$product->id_category_default]['percent'] < 0) { $price *= 1 - $categoryDefaultCache[$product->id_category_default]['percent'] / -100; } } $variations[$c['id_product'] . '-' . $c['id_product_attribute']]['price'] = round($price, 2); if ($categoryDefaultCache[$product->id_category_default]['percent'] < 0) { $variations[$c['id_product'] . '-' . $c['id_product_attribute']]['price_original'] = round($price_original, 2); $variations[$c['id_product'] . '-' . $c['id_product_attribute']]['price_percent'] = round($categoryDefaultCache[$product->id_category_default]['percent']); } } } // Load Variations Pictures $combinationsImages = $product->getCombinationImages(2); if (isset($combinationsImages) && !empty($combinationsImages) && count($combinationsImages) > 0) { foreach ($combinationsImages as $ci) { foreach ($ci as $i) { $variations[$product->id . '-' . $i['id_product_attribute']]['pictures'][] = $prefix . $this->context->link->getImageLink('ebay', $product->id . '-' . $i['id_image'], 'large' . ($this->isVersionOneDotFive() ? '_default' : '')); } } } // Load basic price $price = Product::getPriceStatic((int) $product->id, true); $price_original = $price; if ($categoryDefaultCache[$product->id_category_default]['percent'] > 0) { $price *= 1 + $categoryDefaultCache[$product->id_category_default]['percent'] / 100; } else { if ($categoryDefaultCache[$product->id_category_default]['percent'] < 0) { $price *= 1 - $categoryDefaultCache[$product->id_category_default]['percent'] / -100; } } $price = round($price, 2); // Loading Shipping Method if (!isset($this->_shippingMethod[Configuration::get('EBAY_SHIPPING_CARRIER_ID')]['shippingService'])) { $this->loadShippingMethod(); } // Generate array and try insert in database $datas = array('id_product' => $product->id, 'reference' => $product->reference, 'name' => str_replace('&', '&', $product->name), 'brand' => $product->manufacturer_name, 'description' => $product->description, 'description_short' => $product->description_short, 'price' => $price, 'quantity' => $quantityProduct, 'categoryId' => $categoryDefaultCache[$product->id_category_default]['id_category_ref'], 'shippingService' => $this->_shippingMethod[Configuration::get('EBAY_SHIPPING_CARRIER_ID')]['shippingService'], 'shippingCost' => Configuration::get('EBAY_SHIPPING_COST'), 'variationsList' => $variationsList, 'variations' => $variations, 'pictures' => $pictures, 'picturesMedium' => $picturesMedium, 'picturesLarge' => $picturesLarge); // Fix hook update product if (isset($this->context->employee) && $this->context->employee->id > 0 && isset($_POST['submitProductAttribute']) && isset($_POST['id_product_attribute']) && isset($_POST['attribute_mvt_quantity']) && isset($_POST['id_mvt_reason'])) { if (substr(_PS_VERSION_, 0, 3) == '1.3') { $id_product_attribute_fix = (int) $_POST['id_product_attribute']; $quantity_fix = (int) $_POST['attribute_quantity']; if ($id_product_attribute_fix > 0 && $quantity_fix > 0 && isset($datas['variations'][$product->id . '-' . $id_product_attribute_fix]['quantity'])) { $datas['variations'][$product->id . '-' . $id_product_attribute_fix]['quantity'] = (int) $quantity_fix; } } else { $action = Db::getInstance()->getValue('SELECT `sign` FROM `' . _DB_PREFIX_ . 'stock_mvt_reason` WHERE `id_stock_mvt_reason` = ' . (int) $_POST['id_mvt_reason']); $id_product_attribute_fix = (int) $_POST['id_product_attribute']; $quantity_fix = (int) $_POST['attribute_mvt_quantity']; if ($id_product_attribute_fix > 0 && $quantity_fix > 0 && isset($datas['variations'][$product->id . '-' . $id_product_attribute_fix]['quantity'])) { if ($action > 0) { $datas['variations'][$product->id . '-' . $id_product_attribute_fix]['quantity'] += (int) $quantity_fix; } if ($action < 0) { $datas['variations'][$product->id . '-' . $id_product_attribute_fix]['quantity'] -= (int) $quantity_fix; } } } } // Price Update if (isset($p['noPriceUpdate'])) { $datas['noPriceUpdate'] = $p['noPriceUpdate']; } // Save percent and price discount if ($categoryDefaultCache[$product->id_category_default]['percent'] < 0) { $datas['price_original'] = round($price_original, 2); $datas['price_percent'] = round($categoryDefaultCache[$product->id_category_default]['percent']); } // Load eBay Description $features = $product->getFrontFeatures((int) $this->id_lang); $featuresHtml = ''; if (isset($features)) { foreach ($features as $f) { $featuresHtml .= '<b>' . $f['name'] . '</b> : ' . $f['value'] . '<br/>'; } } $datas['description'] = str_replace(array('{DESCRIPTION_SHORT}', '{DESCRIPTION}', '{FEATURES}', '{EBAY_IDENTIFIER}', '{EBAY_SHOP}', '{SLOGAN}', '{PRODUCT_NAME}'), array($datas['description_short'], $datas['description'], $featuresHtml, Configuration::get('EBAY_IDENTIFIER'), Configuration::get('EBAY_SHOP'), '', $product->name), Configuration::get('EBAY_PRODUCT_TEMPLATE')); // Export on eBay if (count($datas['variations']) > 0) { // Variations Case if ($categoryDefaultCache[$product->id_category_default]['is_multi_sku'] == 1) { // Load eBay Description $datas['description'] = str_replace(array('{MAIN_IMAGE}', '{MEDIUM_IMAGE_1}', '{MEDIUM_IMAGE_2}', '{MEDIUM_IMAGE_3}', '{PRODUCT_PRICE}', '{PRODUCT_PRICE_DISCOUNT}'), array(isset($datas['picturesLarge'][0]) ? '<img src="' . $datas['picturesLarge'][0] . '" class="bodyMainImageProductPrestashop" />' : '', isset($datas['picturesMedium'][1]) ? '<img src="' . $datas['picturesMedium'][1] . '" class="bodyFirstMediumImageProductPrestashop" />' : '', isset($datas['picturesMedium'][2]) ? '<img src="' . $datas['picturesMedium'][2] . '" class="bodyMediumImageProductPrestashop" />' : '', isset($datas['picturesMedium'][3]) ? '<img src="' . $datas['picturesMedium'][3] . '" class="bodyMediumImageProductPrestashop" />' : '', '', ''), $datas['description']); // Multi Sku case // Check if product exists on eBay $itemID = Db::getInstance()->getValue('SELECT `id_product_ref` FROM `' . _DB_PREFIX_ . 'ebay_product` WHERE `id_product` = ' . (int) $product->id); if ($itemID) { // Update $datas['itemID'] = $itemID; if ($ebay->reviseFixedPriceItemMultiSku($datas)) { Db::getInstance()->autoExecute(_DB_PREFIX_ . 'ebay_product', array('date_upd' => pSQL($date)), 'UPDATE', '`id_product_ref` = ' . (int) $itemID); } // if product not on eBay we add it if ($ebay->errorCode == 291) { // We delete from DB and Add it on eBay Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'ebay_product` WHERE `id_product_ref` = \'' . pSQL($datas['itemID']) . '\''); $ebay->addFixedPriceItemMultiSku($datas); if ($ebay->itemID > 0) { Db::getInstance()->autoExecute(_DB_PREFIX_ . 'ebay_product', array('id_country' => 8, 'id_product' => (int) $product->id, 'id_attribute' => 0, 'id_product_ref' => pSQL($ebay->itemID), 'date_add' => pSQL($date), 'date_upd' => pSQL($date)), 'INSERT'); } } } else { // Add $ebay->addFixedPriceItemMultiSku($datas); if ($ebay->itemID > 0) { Db::getInstance()->autoExecute(_DB_PREFIX_ . 'ebay_product', array('id_country' => 8, 'id_product' => (int) $product->id, 'id_attribute' => 0, 'id_product_ref' => pSQL($ebay->itemID), 'date_add' => pSQL($date), 'date_upd' => pSQL($date)), 'INSERT'); } } } else { // No Multi Sku case foreach ($datas['variations'] as $v) { $datasTmp = $datas; if (isset($v['pictures']) && count($v['pictures']) > 0) { $datasTmp['pictures'] = $v['pictures']; } if (isset($v['picturesMedium']) && count($v['picturesMedium']) > 0) { $datasTmp['picturesMedium'] = $v['picturesMedium']; } if (isset($v['picturesLarge']) && count($v['picturesLarge']) > 0) { $datasTmp['picturesLarge'] = $v['picturesLarge']; } foreach ($v['variations'] as $vLabel) { $datasTmp['name'] .= ' ' . $vLabel['value']; $datasTmp['attributes'][$vLabel['name']] = $vLabel['value']; } $datasTmp['price'] = $v['price']; if (isset($v['price_original'])) { $datasTmp['price_original'] = $v['price_original']; $datasTmp['price_percent'] = $v['price_percent']; } $datasTmp['quantity'] = $v['quantity']; $datasTmp['id_attribute'] = $v['id_attribute']; unset($datasTmp['variations']); unset($datasTmp['variationsList']); // Load eBay Description $datasTmp['description'] = str_replace(array('{MAIN_IMAGE}', '{MEDIUM_IMAGE_1}', '{MEDIUM_IMAGE_2}', '{MEDIUM_IMAGE_3}', '{PRODUCT_PRICE}', '{PRODUCT_PRICE_DISCOUNT}'), array(isset($datasTmp['picturesLarge'][0]) ? '<img src="' . $datasTmp['picturesLarge'][0] . '" class="bodyMainImageProductPrestashop" />' : '', isset($datasTmp['picturesMedium'][1]) ? '<img src="' . $datasTmp['picturesMedium'][1] . '" class="bodyFirstMediumImageProductPrestashop" />' : '', isset($datasTmp['picturesMedium'][2]) ? '<img src="' . $datasTmp['picturesMedium'][2] . '" class="bodyMediumImageProductPrestashop" />' : '', isset($datasTmp['picturesMedium'][3]) ? '<img src="' . $datasTmp['picturesMedium'][3] . '" class="bodyMediumImageProductPrestashop" />' : '', Tools::displayPrice($datasTmp['price']), isset($datasTmp['price_original']) ? 'au lieu de <del>' . Tools::displayPrice($datasTmp['price_original']) . '</del> (remise de ' . round($datasTmp['price_percent']) . '%)' : ''), $datas['description']); $datasTmp['id_product'] = (int) $product->id . '-' . (int) $datasTmp['id_attribute']; // Check if product exists on eBay $itemID = Db::getInstance()->getValue('SELECT `id_product_ref` FROM `' . _DB_PREFIX_ . 'ebay_product` WHERE `id_product` = ' . (int) $product->id . ' AND `id_attribute` = ' . (int) $datasTmp['id_attribute']); if ($itemID) { // Get Item ID $datasTmp['itemID'] = $itemID; // Delete or Update if ($datasTmp['quantity'] < 1) { // Delete if ($ebay->endFixedPriceItem($datasTmp)) { Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'ebay_product` WHERE `id_product_ref` = \'' . pSQL($datasTmp['itemID']) . '\''); } } else { // Update if ($ebay->reviseFixedPriceItem($datasTmp)) { Db::getInstance()->autoExecute(_DB_PREFIX_ . 'ebay_product', array('date_upd' => pSQL($date)), 'UPDATE', '`id_product_ref` = ' . (int) $itemID); } // if product not on eBay we add it if ($ebay->errorCode == 291) { // We delete from DB and Add it on eBay Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'ebay_product` WHERE `id_product_ref` = \'' . pSQL($datasTmp['itemID']) . '\''); $ebay->addFixedPriceItem($datasTmp); if ($ebay->itemID > 0) { Db::getInstance()->autoExecute(_DB_PREFIX_ . 'ebay_product', array('id_country' => 8, 'id_product' => (int) $product->id, 'id_attribute' => (int) $datasTmp['id_attribute'], 'id_product_ref' => pSQL($ebay->itemID), 'date_add' => pSQL($date), 'date_upd' => pSQL($date)), 'INSERT'); } } } } else { // Add $ebay->addFixedPriceItem($datasTmp); if ($ebay->itemID > 0) { Db::getInstance()->autoExecute(_DB_PREFIX_ . 'ebay_product', array('id_country' => 8, 'id_product' => (int) $product->id, 'id_attribute' => (int) $datasTmp['id_attribute'], 'id_product_ref' => pSQL($ebay->itemID), 'date_add' => pSQL($date), 'date_upd' => pSQL($date)), 'INSERT'); } } } } } else { // No variations case // Load eBay Description $datas['description'] = str_replace(array('{MAIN_IMAGE}', '{MEDIUM_IMAGE_1}', '{MEDIUM_IMAGE_2}', '{MEDIUM_IMAGE_3}', '{PRODUCT_PRICE}', '{PRODUCT_PRICE_DISCOUNT}'), array(isset($datas['picturesLarge'][0]) ? '<img src="' . $datas['picturesLarge'][0] . '" class="bodyMainImageProductPrestashop" />' : '', isset($datas['picturesMedium'][1]) ? '<img src="' . $datas['picturesMedium'][1] . '" class="bodyFirstMediumImageProductPrestashop" />' : '', isset($datas['picturesMedium'][2]) ? '<img src="' . $datas['picturesMedium'][2] . '" class="bodyMediumImageProductPrestashop" />' : '', isset($datas['picturesMedium'][3]) ? '<img src="' . $datas['picturesMedium'][3] . '" class="bodyMediumImageProductPrestashop" />' : '', Tools::displayPrice($datas['price']), isset($datas['price_original']) ? 'au lieu de <del>' . Tools::displayPrice($datas['price_original']) . '</del> (remise de ' . round($datas['price_percent']) . '%)' : ''), $datas['description']); // Check if product exists on eBay $itemID = Db::getInstance()->getValue('SELECT `id_product_ref` FROM `' . _DB_PREFIX_ . 'ebay_product` WHERE `id_product` = ' . (int) $product->id); if ($itemID) { // Get Item ID $datas['itemID'] = $itemID; // Delete or Update if ($datas['quantity'] < 1) { // Delete if ($ebay->endFixedPriceItem($datas)) { Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'ebay_product` WHERE `id_product_ref` = \'' . pSQL($datas['itemID']) . '\''); } } else { // Update if ($ebay->reviseFixedPriceItem($datas)) { Db::getInstance()->autoExecute(_DB_PREFIX_ . 'ebay_product', array('date_upd' => pSQL($date)), 'UPDATE', '`id_product_ref` = ' . (int) $itemID); } // if product not on eBay we add it if ($ebay->errorCode == 291) { // We delete from DB and Add it on eBay Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'ebay_product` WHERE `id_product_ref` = \'' . pSQL($datas['itemID']) . '\''); $ebay->addFixedPriceItem($datas); if ($ebay->itemID > 0) { Db::getInstance()->autoExecute(_DB_PREFIX_ . 'ebay_product', array('id_country' => 8, 'id_product' => (int) $product->id, 'id_attribute' => 0, 'id_product_ref' => pSQL($ebay->itemID), 'date_add' => pSQL($date), 'date_upd' => pSQL($date)), 'INSERT'); } } } } else { // Add $ebay->addFixedPriceItem($datas); if ($ebay->itemID > 0) { Db::getInstance()->autoExecute(_DB_PREFIX_ . 'ebay_product', array('id_country' => 8, 'id_product' => (int) $product->id, 'id_attribute' => 0, 'id_product_ref' => pSQL($ebay->itemID), 'date_add' => pSQL($date), 'date_upd' => pSQL($date)), 'INSERT'); } } } // Check error if (!empty($ebay->error)) { $tab_error[md5($ebay->error)]['msg'] = $ebay->error; if (!isset($tab_error[md5($ebay->error)]['products'])) { $tab_error[md5($ebay->error)]['products'] = array(); } if (count($tab_error[md5($ebay->error)]['products']) < 10) { $tab_error[md5($ebay->error)]['products'][] = $datas['name']; } if (count($tab_error[md5($ebay->error)]['products']) == 10) { $tab_error[md5($ebay->error)]['products'][] = '...'; } $count_error++; } else { $count_success++; } $count++; } } if ($count_error > 0) { file_put_contents(dirname(__FILE__) . '/log/syncError.php', '<?php $tab_error = ' . var_export($tab_error, true) . '; ?>'); } }
private function _syncProducts($productsList) { global $link; $fees = 0; $count = 0; $count_success = 0; $count_error = 0; $tab_error = array(); $date = date('Y-m-d H:i:s'); $ebay = new eBayRequest(); $categoryDefaultCache = array(); // Up the time limit set_time_limit(3600); // Run the products list foreach ($productsList as $product) { // Product instanciation $product = new Product((int) $product['id_product'], true, $this->id_lang); if (Validate::isLoadedObject($product) && $product->id_category_default > 0) { // Load default category matched in cache if (!isset($categoryDefaultCache[$product->id_category_default])) { $categoryDefaultCache[$product->id_category_default] = Db::getInstance()->getRow('SELECT ec.`id_category_ref`, ec.`is_multi_sku`, ecc.`percent` FROM `' . _DB_PREFIX_ . 'ebay_category` ec LEFT JOIN `' . _DB_PREFIX_ . 'ebay_category_configuration` ecc ON (ecc.`id_ebay_category` = ec.`id_ebay_category`) WHERE ecc.`id_category` = ' . (int) $product->id_category_default); } // Load Pictures $pictures = array(); $picturesMedium = array(); $picturesLarge = array(); $prefix = substr(_PS_VERSION_, 0, 3) == '1.3' ? 'http://' . Configuration::get('PS_SHOP_DOMAIN') . '/' : ''; $images = $product->getImages($this->id_lang); foreach ($images as $image) { $pictures[] = $prefix . $link->getImageLink('', $product->id . '-' . $image['id_image'], NULL); $picturesMedium[] = $prefix . $link->getImageLink('', $product->id . '-' . $image['id_image'], 'medium'); $picturesLarge[] = $prefix . $link->getImageLink('', $product->id . '-' . $image['id_image'], 'large'); } // Load Variations $variations = array(); $variationsList = array(); $combinations = $product->getAttributeCombinaisons($this->id_lang); if (isset($combinations)) { foreach ($combinations as $c) { $variationsList[$c['group_name']][$c['attribute_name']] = 1; $variations[$c['id_product'] . '-' . $c['id_product_attribute']]['id_attribute'] = $c['id_product_attribute']; $variations[$c['id_product'] . '-' . $c['id_product_attribute']]['quantity'] = $c['quantity']; $variations[$c['id_product'] . '-' . $c['id_product_attribute']]['variations'][] = array('name' => $c['group_name'], 'value' => $c['attribute_name']); $variations[$c['id_product'] . '-' . $c['id_product_attribute']]['price_static'] = Product::getPriceStatic((int) $c['id_product'], true, (int) $c['id_product_attribute']); $price = $variations[$c['id_product'] . '-' . $c['id_product_attribute']]['price_static']; $price_original = $price; if ($categoryDefaultCache[$product->id_category_default]['percent'] > 0) { $price *= 1 + $categoryDefaultCache[$product->id_category_default]['percent'] / 100; } else { if ($categoryDefaultCache[$product->id_category_default]['percent'] < 0) { $price *= 1 - $categoryDefaultCache[$product->id_category_default]['percent'] / -100; } } $variations[$c['id_product'] . '-' . $c['id_product_attribute']]['price'] = round($price, 2); if ($categoryDefaultCache[$product->id_category_default]['percent'] < 0) { $variations[$c['id_product'] . '-' . $c['id_product_attribute']]['price_original'] = round($price_original, 2); $variations[$c['id_product'] . '-' . $c['id_product_attribute']]['price_percent'] = round($categoryDefaultCache[$product->id_category_default]['percent']); } } } // Load Variations Pictures $combinationsImages = $product->getCombinationImages(2); if (isset($combinationsImages) && !empty($combinationsImages) && count($combinationsImages) > 0) { foreach ($combinationsImages as $ci) { foreach ($ci as $i) { $variations[$product->id . '-' . $i['id_product_attribute']]['pictures'][] = $prefix . $link->getImageLink('', $product->id . '-' . $i['id_image'], NULL); } } } // Load basic price $price = Product::getPriceStatic((int) $product->id, true); $price_original = $price; if ($categoryDefaultCache[$product->id_category_default]['percent'] > 0) { $price *= 1 + $categoryDefaultCache[$product->id_category_default]['percent'] / 100; } else { if ($categoryDefaultCache[$product->id_category_default]['percent'] < 0) { $price *= 1 - $categoryDefaultCache[$product->id_category_default]['percent'] / -100; } } $price = round($price, 2); // Generate array and try insert in database $datas = array('id_product' => $product->id, 'name' => str_replace('&', '&', $product->name), 'brand' => $product->manufacturer_name, 'description' => $product->description, 'price' => $price, 'quantity' => $product->quantity, 'categoryId' => $categoryDefaultCache[$product->id_category_default]['id_category_ref'], 'shippingService' => $this->_shippingMethod[Configuration::get('EBAY_SHIPPING_CARRIER_ID')]['shippingService'], 'shippingCost' => Configuration::get('EBAY_SHIPPING_COST'), 'variationsList' => $variationsList, 'variations' => $variations, 'pictures' => $pictures, 'picturesMedium' => $picturesMedium, 'picturesLarge' => $picturesLarge); // Save percent and price discount if ($categoryDefaultCache[$product->id_category_default]['percent'] < 0) { $datas['price_original'] = round($price_original, 2); $datas['price_percent'] = round($categoryDefaultCache[$product->id_category_default]['percent']); } // Load eBay Description $datas['description'] = str_replace(array('{DESCRIPTION}', '{EBAY_IDENTIFIER}', '{EBAY_SHOP}', '{SLOGAN}', '{PRODUCT_NAME}'), array($datas['description'], Configuration::get('EBAY_IDENTIFIER'), Configuration::get('EBAY_SHOP'), '', $product->name), Configuration::get('EBAY_PRODUCT_TEMPLATE')); // Export on eBay if (count($datas['variations']) > 0) { // Variations Case if ($categoryDefaultCache[$product->id_category_default]['is_multi_sku'] == 1) { // Load eBay Description $datas['description'] = str_replace(array('{MAIN_IMAGE}', '{MEDIUM_IMAGE_1}', '{MEDIUM_IMAGE_2}', '{MEDIUM_IMAGE_3}', '{PRODUCT_PRICE}', '{PRODUCT_PRICE_DISCOUNT}'), array(isset($datas['picturesLarge'][0]) ? '<img src="' . $datas['picturesLarge'][0] . '" class="bodyMainImageProductPrestashop" />' : '', isset($datas['picturesMedium'][1]) ? '<img src="' . $datas['picturesMedium'][1] . '" class="bodyFirstMediumImageProductPrestashop" />' : '', isset($datas['picturesMedium'][2]) ? '<img src="' . $datas['picturesMedium'][2] . '" class="bodyMediumImageProductPrestashop" />' : '', isset($datas['picturesMedium'][3]) ? '<img src="' . $datas['picturesMedium'][3] . '" class="bodyMediumImageProductPrestashop" />' : '', '', ''), $datas['description']); // Multi Sku case // Check if product exists on eBay $itemID = Db::getInstance()->getValue('SELECT `id_product_ref` FROM `' . _DB_PREFIX_ . 'ebay_product` WHERE `id_product` = ' . (int) $product->id); if ($itemID) { // Update $datas['itemID'] = $itemID; if ($ebay->reviseFixedPriceItemMultiSku($datas)) { Db::getInstance()->autoExecute(_DB_PREFIX_ . 'ebay_product', array('date_upd' => pSQL($date)), 'UPDATE', '`id_product_ref` = ' . (int) $itemID); } // if product not on eBay we add it if ($ebay->errorCode == 291) { // We delete from DB and Add it on eBay Db::getInstance()->Execute('DELETE FROM `' . _DB_PREFIX_ . 'ebay_product` WHERE `id_product_ref` = \'' . pSQL($datas['itemID']) . '\''); $ebay->addFixedPriceItemMultiSku($datas); if ($ebay->itemID > 0) { Db::getInstance()->autoExecute(_DB_PREFIX_ . 'ebay_product', array('id_country' => 8, 'id_product' => (int) $product->id, 'id_attribute' => 0, 'id_product_ref' => pSQL($ebay->itemID), 'date_add' => pSQL($date), 'date_upd' => pSQL($date)), 'INSERT'); } } } else { // Add $ebay->addFixedPriceItemMultiSku($datas); if ($ebay->itemID > 0) { Db::getInstance()->autoExecute(_DB_PREFIX_ . 'ebay_product', array('id_country' => 8, 'id_product' => (int) $product->id, 'id_attribute' => 0, 'id_product_ref' => pSQL($ebay->itemID), 'date_add' => pSQL($date), 'date_upd' => pSQL($date)), 'INSERT'); } } } else { // No Multi Sku case foreach ($datas['variations'] as $v) { $datasTmp = $datas; if (isset($v['pictures']) && count($v['pictures']) > 0) { $datasTmp['pictures'] = $v['pictures']; } if (isset($v['picturesMedium']) && count($v['picturesMedium']) > 0) { $datasTmp['picturesMedium'] = $v['picturesMedium']; } if (isset($v['picturesLarge']) && count($v['picturesLarge']) > 0) { $datasTmp['picturesLarge'] = $v['picturesLarge']; } foreach ($v['variations'] as $vLabel) { $datasTmp['name'] .= ' ' . $vLabel['value']; $datasTmp['attributes'][$vLabel['name']] = $vLabel['value']; } $datasTmp['price'] = $v['price']; if (isset($v['price_original'])) { $datasTmp['price_original'] = $v['price_original']; $datasTmp['price_percent'] = $v['price_percent']; } $datasTmp['quantity'] = $v['quantity']; $datasTmp['id_attribute'] = $v['id_attribute']; unset($datasTmp['variations']); unset($datasTmp['variationsList']); // Load eBay Description $datasTmp['description'] = str_replace(array('{MAIN_IMAGE}', '{MEDIUM_IMAGE_1}', '{MEDIUM_IMAGE_2}', '{MEDIUM_IMAGE_3}', '{PRODUCT_PRICE}', '{PRODUCT_PRICE_DISCOUNT}'), array(isset($datasTmp['picturesLarge'][0]) ? '<img src="' . $datasTmp['picturesLarge'][0] . '" class="bodyMainImageProductPrestashop" />' : '', isset($datasTmp['picturesMedium'][1]) ? '<img src="' . $datasTmp['picturesMedium'][1] . '" class="bodyFirstMediumImageProductPrestashop" />' : '', isset($datasTmp['picturesMedium'][2]) ? '<img src="' . $datasTmp['picturesMedium'][2] . '" class="bodyMediumImageProductPrestashop" />' : '', isset($datasTmp['picturesMedium'][3]) ? '<img src="' . $datasTmp['picturesMedium'][3] . '" class="bodyMediumImageProductPrestashop" />' : '', Tools::displayPrice($datasTmp['price']), isset($datasTmp['price_original']) ? 'au lieu de <del>' . Tools::displayPrice($datasTmp['price_original']) . '</del> (remise de ' . round($datasTmp['price_percent']) . '%)' : ''), $datas['description']); $datasTmp['id_product'] = (int) $product->id . '-' . (int) $datasTmp['id_attribute']; // Check if product exists on eBay $itemID = Db::getInstance()->getValue('SELECT `id_product_ref` FROM `' . _DB_PREFIX_ . 'ebay_product` WHERE `id_product` = ' . (int) $product->id . ' AND `id_attribute` = ' . (int) $datasTmp['id_attribute']); if ($itemID) { // Update $datasTmp['itemID'] = $itemID; if ($ebay->reviseFixedPriceItem($datasTmp)) { Db::getInstance()->autoExecute(_DB_PREFIX_ . 'ebay_product', array('date_upd' => pSQL($date)), 'UPDATE', '`id_product_ref` = ' . (int) $itemID); } // if product not on eBay we add it if ($ebay->errorCode == 291) { // We delete from DB and Add it on eBay Db::getInstance()->Execute('DELETE FROM `' . _DB_PREFIX_ . 'ebay_product` WHERE `id_product_ref` = \'' . pSQL($datasTmp['itemID']) . '\''); $ebay->addFixedPriceItem($datasTmp); if ($ebay->itemID > 0) { Db::getInstance()->autoExecute(_DB_PREFIX_ . 'ebay_product', array('id_country' => 8, 'id_product' => (int) $product->id, 'id_attribute' => (int) $datasTmp['id_attribute'], 'id_product_ref' => pSQL($ebay->itemID), 'date_add' => pSQL($date), 'date_upd' => pSQL($date)), 'INSERT'); } } } else { // Add $ebay->addFixedPriceItem($datasTmp); if ($ebay->itemID > 0) { Db::getInstance()->autoExecute(_DB_PREFIX_ . 'ebay_product', array('id_country' => 8, 'id_product' => (int) $product->id, 'id_attribute' => (int) $datasTmp['id_attribute'], 'id_product_ref' => pSQL($ebay->itemID), 'date_add' => pSQL($date), 'date_upd' => pSQL($date)), 'INSERT'); } } } } } else { // No variations case // Load eBay Description $datas['description'] = str_replace(array('{MAIN_IMAGE}', '{MEDIUM_IMAGE_1}', '{MEDIUM_IMAGE_2}', '{MEDIUM_IMAGE_3}', '{PRODUCT_PRICE}', '{PRODUCT_PRICE_DISCOUNT}'), array(isset($datas['picturesLarge'][0]) ? '<img src="' . $datas['picturesLarge'][0] . '" class="bodyMainImageProductPrestashop" />' : '', isset($datas['picturesMedium'][1]) ? '<img src="' . $datas['picturesMedium'][1] . '" class="bodyFirstMediumImageProductPrestashop" />' : '', isset($datas['picturesMedium'][2]) ? '<img src="' . $datas['picturesMedium'][2] . '" class="bodyMediumImageProductPrestashop" />' : '', isset($datas['picturesMedium'][3]) ? '<img src="' . $datas['picturesMedium'][3] . '" class="bodyMediumImageProductPrestashop" />' : '', Tools::displayPrice($datas['price']), isset($datas['price_original']) ? 'au lieu de <del>' . Tools::displayPrice($datas['price_original']) . '</del> (remise de ' . round($datas['price_percent']) . '%)' : ''), $datas['description']); // Check if product exists on eBay $itemID = Db::getInstance()->getValue('SELECT `id_product_ref` FROM `' . _DB_PREFIX_ . 'ebay_product` WHERE `id_product` = ' . (int) $product->id); if ($itemID) { // Update $datas['itemID'] = $itemID; if ($ebay->reviseFixedPriceItem($datas)) { Db::getInstance()->autoExecute(_DB_PREFIX_ . 'ebay_product', array('date_upd' => pSQL($date)), 'UPDATE', '`id_product_ref` = ' . (int) $itemID); } // if product not on eBay we add it if ($ebay->errorCode == 291) { // We delete from DB and Add it on eBay Db::getInstance()->Execute('DELETE FROM `' . _DB_PREFIX_ . 'ebay_product` WHERE `id_product_ref` = \'' . pSQL($datas['itemID']) . '\''); $ebay->addFixedPriceItem($datas); if ($ebay->itemID > 0) { Db::getInstance()->autoExecute(_DB_PREFIX_ . 'ebay_product', array('id_country' => 8, 'id_product' => (int) $product->id, 'id_attribute' => 0, 'id_product_ref' => pSQL($ebay->itemID), 'date_add' => pSQL($date), 'date_upd' => pSQL($date)), 'INSERT'); } } } else { // Add $ebay->addFixedPriceItem($datas); if ($ebay->itemID > 0) { Db::getInstance()->autoExecute(_DB_PREFIX_ . 'ebay_product', array('id_country' => 8, 'id_product' => (int) $product->id, 'id_attribute' => 0, 'id_product_ref' => pSQL($ebay->itemID), 'date_add' => pSQL($date), 'date_upd' => pSQL($date)), 'INSERT'); } } } // Check error if (!empty($ebay->error)) { $tab_error[md5($ebay->error)]['msg'] = $ebay->error; if (!isset($tab_error[md5($ebay->error)]['products'])) { $tab_error[md5($ebay->error)]['products'] = array(); } if (count($tab_error[md5($ebay->error)]['products']) < 10) { $tab_error[md5($ebay->error)]['products'][] = $datas['name']; } if (count($tab_error[md5($ebay->error)]['products']) == 10) { $tab_error[md5($ebay->error)]['products'][] = '...'; } $count_error++; } else { $count_success++; } $count++; } } if ($count_success > 0) { $this->_html .= $this->displayConfirmation($this->l('Settings updated') . ' (' . $this->l('Option') . ' ' . Configuration::get('EBAY_SYNC_MODE') . ' : ' . $count_success . '/' . $count . ' ' . $this->l('product(s) sync with eBay') . ')'); } if ($count_error > 0) { foreach ($tab_error as $error) { $productsDetails = '<br /><u>' . $this->l('Product(s) concerned') . ' :</u>'; foreach ($error['products'] as $product) { $productsDetails .= '<br />- ' . $product; } $this->_html .= $this->displayError($error['msg'] . '<br />' . $productsDetails); } } }