Beispiel #1
0
 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('&', '&amp;', $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) . '; ?>');
     }
 }
Beispiel #2
0
 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('&', '&amp;', $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);
         }
     }
 }