'.$this->l('Invalid EAN13 on line').' '.$i.'
'; return $output.$this->displayForm(); } $f = fopen($_FILES['csvfile']['tmp_name'], 'r'); fgetcsv($f, 0, ';'); $i = 1; while($line = fgetcsv($f, 0, ';')) { $i++; $product = new Product((int) $line[0]); if(Validate::isLoadedObject($product)) { if((int) $line[1] != 0) { if(!Db::getInstance()->getRow(' SELECT `id_product_attribute` FROM `'._DB_PREFIX_.'product_attribute` WHERE `id_product` = '.(int) $line[0].' AND `id_product_attribute` = '.(int) $line[1].' ')) { $output .= ''.$this->l('Invalid attribute ID for this product ID on line').' '.$i.'
'; continue; } } if($line[2] != '') { $qty = (int) $line[2]; $old_qty = Product::getQuantity((int) $line[0], (int) $line[1] == 0? NULL: (int) $line[1]); if($process == 0) { $product->addStockMvt($qty, 5, (int) $line[1]); } else { if($qty > $old_qty) { $product->addStockMvt($qty - $old_qty, 5, (int) $line[1]); } else { $product->addStockMvt(-($old_qty - $qty), 5, (int) $line[1]); } } } if(isset($line[4]) && $line[4] != '' && Validate::isEan13($line[4])) { if((int) $line[1] != 0) { Db::getInstance()->ExecuteS(' UPDATE `'._DB_PREFIX_.'product_attribute` SET `ean13` = "'.pSQL($line[4]).'" WHERE `id_product` = '.(int) $line[0].' AND `id_product_attribute` = '.(int) $line[1].' LIMIT 1 '); } else { Db::getInstance()->ExecuteS(' UPDATE `'._DB_PREFIX_.'product` SET `ean13` = "'.pSQL($line[4]).'" WHERE `id_product` = '.(int) $line[0].' LIMIT 1 '); } Db::getInstance()->ExecuteS(' UPDATE `'._DB_PREFIX_.'order_detail` SET `product_ean13` = "'.pSQL($line[4]).'" WHERE `product_id` = '.(int) $line[0].' AND `product_attribute_id` = '.(int) $line[1].' '); } if(isset($line[5]) && $line[5] != '' && Validate::isReference($line[5])) { if((int) $line[1] != 0) { Db::getInstance()->ExecuteS(' UPDATE `'._DB_PREFIX_.'product_attribute` SET `location` = "'.pSQL($line[5]).'" WHERE `id_product` = '.(int) $line[0].' AND `id_product_attribute` = '.(int) $line[1].' LIMIT 1 '); } else { Db::getInstance()->ExecuteS(' UPDATE `'._DB_PREFIX_.'product` SET `location` = "'.pSQL($line[5]).'" WHERE `id_product` = '.(int) $line[0].' LIMIT 1 '); } } } else { $output .= ''.$this->l('Product #').(int) $line[0].' '.$this->l('not found').'
'; } } fclose($f); $output .= ''.$this->l('Products updated').'
'; } } elseif(Tools::isSubmit('submitUploadCategories')) { $f = fopen($_FILES['csvfile']['tmp_name'], 'r'); fgetcsv($f, 0, ';'); $products = array(); $defaults = array(); $positions = array(); while($line = fgetcsv($f, 0, ';')) { if(empty($line[0])) { continue; } if(!isset($line[1])) { continue; } if(isset($line[2]) && !empty($line[2]) && (int) $line[2] != 0) { $defaults[(int) $line[0]] = (int) $line[2]; } $categories = array_map('intval', explode(',', $line[1])); $products[(int) $line[0]] = $categories; foreach($categories as $id_category) { $positions[(int) $id_category] = 1; } } fclose($f); if(Tools::getValue('category_process') == 1) { Db::getInstance()->ExecuteS(' DELETE FROM `'._DB_PREFIX_.'category_product` WHERE `id_product` IN ('.implode(', ', array_keys($products)).') '); } foreach(Db::getInstance()->ExecuteS(' SELECT `id_category`, MAX(`position`) AS `position` FROM `'._DB_PREFIX_.'category_product` WHERE `id_category` IN ('.implode(', ', array_keys($positions)).') GROUP BY `id_category` ') as $row) { $positions[(int) $row['id_category']] = (int) $row['position']; } foreach($products as $id_product => $id_categories) { foreach($id_categories as $id_category) { Db::getInstance()->ExecuteS(' INSERT INTO `'._DB_PREFIX_.'category_product` VALUES ( '.(int) $id_category.', '.(int) $id_product.', '.(int) ++$positions[(int) $id_category].' ) '); } } foreach($defaults as $id_product => $id_category_default) { Db::getInstance()->ExecuteS(' UPDATE `'._DB_PREFIX_.'product` SET `id_category_default` = '.(int) $id_category_default.' WHERE `id_product` = '.(int) $id_product.' LIMIT 1 '); if(!$row = Db::getInstance()->getRow(' SELECT `id_product` FROM `'._DB_PREFIX_.'category_product` WHERE `id_product` = '.(int) $id_product.' AND `id_category` = '.(int) $id_category_default.' ')) { $pos = (int) Db::getInstance()->getValue(' SELECT MAX(`position`) FROM `'._DB_PREFIX_.'category_product` WHERE `id_category` = '.(int) $id_category_default.' ') + 1; Db::getInstance()->ExecuteS(' INSERT INTO `'._DB_PREFIX_.'category_product` VALUES ( '.(int) $id_category_default.', '.(int) $id_product.', '.(int) $pos.' ) '); } } $output .= ''.$this->l('Products updated').'
'; } elseif(Tools::isSubmit('submitUploadAccessories')) { $f = fopen($_FILES['csvfile']['tmp_name'], 'r'); fgetcsv($f, 0, ';'); $products = array(); while($line = fgetcsv($f, 0, ';')) { if(empty($line[0]) || empty($line[1])) { continue; } if(!isset($products[(int) $line[0]])) { $products[(int) $line[0]] = array(); } $products[(int) $line[0]][] = (int) $line[1]; } fclose($f); if(Tools::getValue('access_process') == 1) { Db::getInstance()->ExecuteS(' DELETE FROM `'._DB_PREFIX_.'accessory` WHERE `id_product_1` IN ('.implode(', ', array_keys($products)).') '); } foreach($products as $id_product_1 => $id_products_2) { foreach($id_products_2 as $id_product_2) { Db::getInstance()->ExecuteS(' INSERT INTO `'._DB_PREFIX_.'accessory` VALUES ( '.(int) $id_product_1.', '.(int) $id_product_2.' ) '); } } $output .= ''.$this->l('Products updated').'
'; }elseif(Tools::isSubmit('submitUploadImages')) { $f = fopen($_FILES['csvfile']['tmp_name'], 'r'); fgetcsv($f, 0, ';'); $products = array(); $products_a = array(); $products_a_ids = array(); while($line = fgetcsv($f, 0, ';')) { if(empty($line[0])) { continue; } if(!isset($line[1]) || empty($line[1])) { continue; } if(isset($line[2]) && !empty($line[2])) { if(!isset($products_a[(int) $line[0]])) { $products_a[(int) $line[0]] = array(array(), array()); } $products_a[(int) $line[0]][0] = array_merge($products_a[(int) $line[0]][0], array_map('trim', explode(',', $line[1]))); $products_a[(int) $line[0]][1][(int) $line[2]] = array_map('trim', explode(',', $line[1])); $products_a_ids[] = (int) $line[2]; } else { $products[(int) $line[0]] = array_map('trim', explode(',', $line[1])); } } fclose($f); if(Tools::getValue('image_process') == 1) { if(count($products) > 0) { foreach(Db::getInstance()->ExecuteS(' SELECT `id_image` FROM `'._DB_PREFIX_.'image` WHERE `id_product` IN ('.implode(', ', array_keys($products)).') ') as $row) { $i = new Image((int) $row['id_image']); $i->delete(); } } if(count($products_a_ids) > 0) { foreach(Db::getInstance()->ExecuteS(' SELECT DISTINCT i.`id_image` FROM `'._DB_PREFIX_.'image` i LEFT JOIN `'._DB_PREFIX_.'product_attribute` a ON i.`id_product` = a.`id_product` WHERE a.`id_product_attribute` IN ('.implode(', ', $products_a_ids).') ') as $row) { $i = new Image((int) $row['id_image']); $i->delete(); } } } foreach($products as $id_product => $urls) { foreach($urls as $url) { $image = new Image(); $image->id_product = $id_product; $image->position = Image::getHighestPosition($id_product) + 1; $image->cover = FALSE; $image->legend = self::createMultiLangField(Db::getInstance()->getValue(' SELECT `name` FROM `'._DB_PREFIX_.'product_lang` WHERE `id_product` = '.(int) $id_product.' AND `id_lang` = 2 ')); $image->add(); self::copyImg($id_product, $image->id, $url, 'products'); } } $_id_products = array(); foreach($products_a as $id_product => $data) { $_id_products[] = $id_product; foreach(array_unique($data[0]) as $url) { $image = new Image(); $image->id_product = $id_product; $image->position = Image::getHighestPosition($id_product) + 1; $image->cover = FALSE; $image->legend = self::createMultiLangField(Db::getInstance()->getValue(' SELECT `name` FROM `'._DB_PREFIX_.'product_lang` WHERE `id_product` = '.(int) $id_product.' AND `id_lang` = 2 ')); $image->add(); self::copyImg($id_product, $image->id, $url, 'products'); foreach($data[1] as $id_product_attribute => $urls) { if(in_array($url, $urls)) { Db::getInstance()->ExecuteS(' INSERT INTO `'._DB_PREFIX_.'product_attribute_image` VALUES ( '.(int) $id_product_attribute.', '.(int) $image->id.' ) '); } } } } $covers = array(); foreach(Db::getInstance()->ExecuteS(' SELECT `id_product` FROM `'._DB_PREFIX_.'image` WHERE `id_product` IN ('.implode(', ', array_merge($_id_products, array_keys($products))).') AND `cover` = 1 ') as $row) { $covers[] = (int) $row['id_product']; } $to_cover = array_diff(array_merge($_id_products, array_keys($products)), $covers); foreach($to_cover as $id_product) { Db::getInstance()->ExecuteS(' UPDATE `'._DB_PREFIX_.'image` SET `cover` = 1 WHERE `id_product` = '.(int) $id_product.' LIMIT 1 '); } $output .= ''.$this->l('Products updated').'
'; } elseif(Tools::isSubmit('submitUploadStatus')) { $f = fopen($_FILES['csvfile']['tmp_name'], 'r'); fgetcsv($f, 0, ';'); $products_0 = array(); $products_1 = array(); while($line = fgetcsv($f, 0, ';')) { if(empty($line[0]) || !isset($line[1])) { continue; } if((int) $line[1] == 0) { $products_0[] = (int) $line[0]; } else { $products_1[] = (int) $line[0]; } } fclose($f); if(count($products_0) > 0) { Db::getInstance()->ExecuteS(' UPDATE `'._DB_PREFIX_.'product` SET `active` = 0 WHERE `id_product` IN ('.implode(', ', $products_0).') '); } if(count($products_1) > 0) { Db::getInstance()->ExecuteS(' UPDATE `'._DB_PREFIX_.'product` SET `active` = 1 WHERE `id_product` IN ('.implode(', ', $products_1).') '); } $output .= ''.$this->l('Products updated').'
'; } elseif(Tools::isSubmit('submitUploadPrices')) { $f = fopen($_FILES['csvfile']['tmp_name'], 'r'); fgetcsv($f, 0, ';'); $products = array(); $prices = array(); if(Tools::getValue('price_process') == 2) { while($line = fgetcsv($f, 0, ';')) { if(empty($line[0])) { continue; } $products[] = (int) $line[0]; } } elseif(Tools::getValue('price_process') == 3 || Tools::getValue('price_process') == 4){ while($line = fgetcsv($f, 0, ';')) { if(empty($line[0])) { continue; } $prices[] = array( (int) $line[0], $line[1] ); } }else { while($line = fgetcsv($f, 0, ';')) { if(empty($line[0])) { continue; } if(!isset($line[1])) { continue; } $products[] = (int) $line[0]; $prices[] = array( (int) $line[0], (float) $line[1] > 1? (float) $line[1] / 100: (float) $line[1] ); } } fclose($f); if(Tools::getValue('price_process') == 1 || Tools::getValue('price_process') == 2) { Db::getInstance()->ExecuteS(' DELETE FROM `'._DB_PREFIX_.'specific_price` WHERE `id_product` IN ('.implode(', ', $products).') '); } if(Tools::getValue('price_process') == 1) { foreach($prices as $price) { if((int) $price[0] != 0) { Db::getInstance()->ExecuteS(' INSERT INTO `'._DB_PREFIX_.'specific_price` VALUES ( DEFAULT, '.(int) $price[0].', 1, 0, 0, 0, 0.0, 1, '.(float) $price[1].', "percentage", "0000-00-00 00:00:00", "0000-00-00 00:00:00" ) '); } else { $output .= 'ID produit à 0, ligne non traitée : '.serialize($price).'
'; } } } if(Tools::getValue('price_process') == 3) { foreach($prices as $price) { if((int) $price[0] != 0){ $price[1] = str_replace(',', '.', $price[1]); $price_ht = floatval($price[1]); Db::getInstance()->ExecuteS(' UPDATE `'._DB_PREFIX_.'product` SET wholesale_price = '. (float)$price_ht .' WHERE id_product ='. (int)$price[0]); }else{ $output .= 'ID produit à 0, ligne non traitée : '.serialize($price).'
'; } } } if(Tools::getValue('price_process') == 4) { foreach($prices as $price) { if((int) $price[0] != 0){ $price[1] = str_replace(',', '.', $price[1]); $price_ht = floatval($price[1] / 1.20); Db::getInstance()->ExecuteS(' UPDATE `'._DB_PREFIX_.'product` SET price = '. (float)$price_ht .' WHERE id_product ='. (int)$price[0]); }else{ $output .= 'ID produit à 0, ligne non traitée : '.serialize($price).'
'; } } } $output .= ''.$this->l('Products updated').'
'; } elseif(Tools::isSubmit('submitUploadCombinations')) { $f = fopen($_FILES['csvfile']['tmp_name'], 'r'); fgetcsv($f, 0, ';'); $products = array(); while($line = fgetcsv($f, 0, ';')) { if(empty($line[0])) { continue; } $products[] = (int) $line[0]; } Db::getInstance()->ExecuteS(' DELETE FROM `'._DB_PREFIX_.'product_attribute_combination` WHERE `id_product_attribute` IN ( SELECT `id_product_attribute` FROM `'._DB_PREFIX_.'product_attribute` WHERE `id_product` IN ('.implode(', ', $products).') ) '); Db::getInstance()->ExecuteS(' DELETE FROM `'._DB_PREFIX_.'product_attribute` WHERE `id_product` IN ('.implode(', ', $products).') '); Db::getInstance()->ExecuteS(' UPDATE `'._DB_PREFIX_.'product` SET `quantity` = 0 WHERE `id_product` IN ('.implode(', ', $products).') '); fclose($f); $output .= ''.$this->l('Products updated').'
'; } elseif(Tools::isSubmit('submitExport')) { set_time_limit(300); $id_lang = Tools::getValue('id_lang', $cookie->id_lang); if($id_category = (int) Tools::getValue('category')) { $c = new Category($id_category, $cookie->id_lang); $children = $c->recurseLiteCategTree(5, 0, $id_lang); $ids = $this->_recurse_array(array($children)); $products = array(); foreach($c->getProductsWs() as $p) { $products[] = $p['id']; } foreach($ids as $id) { $sc = new Category($id, $id_lang); foreach($sc->getProductsWs() as $p) { $products[] = $p['id']; } } $products = array_unique($products); foreach(glob(dirname(__FILE__).'/*.csv') as $filename) { unlink($filename); } $fname = Tools::passwdGen(10).'.csv'; $f = fopen(dirname(__FILE__).'/'.$fname, 'w'); // uft8 sans bom pour accent $BOM = "\xEF\xBB\xBF"; // UTF-8 BOM fwrite($f, $BOM); // NEW LINE fputcsv($f, array( 'supplier_reference', 'id_product', 'id_product_attribute', 'position', 'poids', 'quantity', 'product_name', 'combination', 'ean13', 'location', 'brand', 'quantity_sold', 'public_price_wt', 'price_wt', 'wholesale_price', 'id_TVA', 'active', 'description_short', 'description', 'images', 'nb_images', 'categories', 'categories_title', ), ';', '"'); foreach($products as $product) { $p = new Product((int) $product, $id_lang); if(!Validate::isLoadedObject($p)) { $output .= 'Erreur produit: '.serialize($product).' ce produit ne figure pas dans l\'export
'; } else { $position = Db::getInstance()->getValue(' SELECT `position` FROM `'._DB_PREFIX_.'category_product` WHERE `id_category` = '.(int) $id_category.' AND id_product = '. (int) $p->id . ' '); $p->position = $position; $categories = array(); foreach(Db::getInstance()->ExecuteS(' SELECT `id_category` FROM `'._DB_PREFIX_.'category_product` WHERE `id_product` = '.(int) $p->id.' ') as $cat) { $categories[] = (int) $cat['id_category']; } $categories_title = array(); foreach ($categories as $category) { $title = Db::getInstance()->getValue(' SELECT `name` FROM `'._DB_PREFIX_.'category_lang` WHERE `id_category` = '.(int) $category.' AND id_lang = '. $id_lang . ' '); $categories_title[] = $title; } $combinations = array(); foreach($p->getAttributeCombinaisons($id_lang) as $combi) { if(!isset($combinations[$combi['id_product_attribute']])) { $combinations[$combi['id_product_attribute']] = array( 'qty' => $combi['quantity'], 'name' => array($combi['attribute_name']), 'ean13' => $combi['ean13'], 'location' => empty($combi['location'])? $p->location: $combi['location'], 'brand' => $p->manufacturer_name, 'supplier_reference' => empty($combi['supplier_reference'])? $p->supplier_reference: $combi['supplier_reference'], ); } else { $combinations[$combi['id_product_attribute']]['name'][] = $combi['attribute_name']; } } $images = array(); foreach(Db::getInstance()->ExecuteS(' SELECT i.`id_image`, l.`legend` FROM `'._DB_PREFIX_.'image` i LEFT JOIN `'._DB_PREFIX_.'image_lang` l ON l.`id_image` = i.`id_image` WHERE l.`id_lang` = '.(int) $id_lang.' AND i.`id_product` = '.(int) $p->id.' ') as $img) { $link_image = str_split($img['id_image']); $images[] = 'http://static.bebeboutik.com/img/p/'.implode('/', $link_image) .'/'. $img['id_image'].'.jpg'; } if(count($combinations) > 0) { foreach($combinations as $k => $v) { $c_images = array(); foreach(Db::getInstance()->ExecuteS(' SELECT i.`id_image`, l.`legend` FROM `'._DB_PREFIX_.'image` i LEFT JOIN `'._DB_PREFIX_.'image_lang` l ON l.`id_image` = i.`id_image` LEFT JOIN `'._DB_PREFIX_.'product_attribute_image` a ON a.`id_image` = i.`id_image` WHERE l.`id_lang` = '.(int) $id_lang.' AND a.`id_product_attribute` = '.(int) $k.' ') as $img) { $link_image = str_split($img['id_image']); $c_images[] = 'http://static.bebeboutik.com/img/p/'.implode('/', $link_image) .'/'. $img['id_image'].'.jpg'; // $c_images[] = 'http://static.bebeboutik.com/'.(int) $p->id.'-'.$img['id_image'].'.jpg'; } $names = array_unique($v['name']); sort($names, SORT_STRING); fputcsv($f, array( $v['supplier_reference'], $p->id, $k, $p->position, $p->weight, $v['qty'], $p->name[$id_lang], implode(' - ', $names), $v['ean13'], $v['location'], $v['brand'], (int) Db::getInstance()->getValue(' SELECT SUM(d.`product_quantity`) FROM `'._DB_PREFIX_.'order_detail` d LEFT JOIN `'._DB_PREFIX_.'orders` o ON o.`id_order` = d.`id_order` LEFT JOIN `'._DB_PREFIX_.'order_history` h ON h.`id_order` = d.`id_order` WHERE d.`product_id` = '.(int) $p->id.' AND d.`product_attribute_id` = '.(int) $k.' AND h.`id_order_state` = 2 '), $p->getPrice(TRUE, (int) $k, 2, NULL, FALSE, FALSE), $p->getPrice(TRUE, (int) $k, 2), Tools::ps_round($p->wholesale_price, 2), $p->id_tax_rules_group, $p->active, $p->description_short[$id_lang], $p->description[$id_lang], count($c_images) > 0? implode(', ', $c_images): implode(', ', $images), count($c_images) > 0? count($c_images): count($images), implode(', ', $categories), implode(', ', $categories_title), ), ';', '"'); } } else { fputcsv($f, array( $p->supplier_reference, $p->id, 0, $p->position, $p->weight, $p->quantity, $p->name[$id_lang], '', $p->ean13, $p->location, $p->manufacturer_name, (int) Db::getInstance()->getValue(' SELECT SUM(d.`product_quantity`) FROM `'._DB_PREFIX_.'order_detail` d LEFT JOIN `'._DB_PREFIX_.'orders` o ON o.`id_order` = d.`id_order` LEFT JOIN `'._DB_PREFIX_.'order_history` h ON h.`id_order` = d.`id_order` WHERE d.`product_id` = '.(int) $p->id.' AND h.`id_order_state` = 2 '), $p->getPrice(TRUE, NULL, 2, NULL, FALSE, FALSE), $p->getPrice(TRUE, NULL, 2), Tools::ps_round($p->wholesale_price, 2), $p->id_tax_rules_group, $p->active, $p->description_short[$id_lang], $p->description[$id_lang], implode(', ', $images), count($images), implode(', ', $categories), implode(', ', $categories_title), ), ';', '"'); } } } fclose($f); $output .= ''.$this->l('Export complete.').' '.$this->l('Click here to download the file').'
'; } elseif (Tools::getValue('date_start') && Tools::getValue('date_end')) { $date_start = Tools::getValue('date_start'); $date_end = Tools::getValue('date_end'); $ids = Db::getInstance()->ExecuteS(' SELECT c.id_category FROM `'._DB_PREFIX_.'privatesale` p LEFT JOIN `'._DB_PREFIX_.'privatesale_category` c ON c.id_sale = p.id_sale WHERE date_start BETWEEN "'. $date_start .' 00:00:00" AND "'. $date_end .' 00:00:00" ORDER BY c.id_sale DESC '); $products = array(); foreach($ids as $id) { $id_category = $id['id_category']; $sc = new Category($id_category, $id_lang); foreach($sc->getProductsWs() as $p) { $products[] = $p['id']; } } $products = array_unique($products); if(count($products) > 20000){ echo $output .= 'Choisir une plage moins grande.
Export > 20000 produits
Erreur produit: '.serialize($product).' ce produit ne figure pas dans l\'export
'; } else { $position = Db::getInstance()->getValue(' SELECT `position` FROM `'._DB_PREFIX_.'category_product` WHERE `id_category` = '.(int) $p->id_category_default.' AND id_product = '. (int) $p->id . ' '); $p->position = $position; $categories = array(); foreach(Db::getInstance()->ExecuteS(' SELECT `id_category` FROM `'._DB_PREFIX_.'category_product` WHERE `id_product` = '.(int) $p->id.' ') as $cat) { $categories[] = (int) $cat['id_category']; } $categories_title = array(); foreach ($categories as $category) { $title = Db::getInstance()->getValue(' SELECT `name` FROM `'._DB_PREFIX_.'category_lang` WHERE `id_category` = '.(int) $category.' AND id_lang = '. $id_lang . ' '); $categories_title[] = $title; } $combinations = array(); foreach($p->getAttributeCombinaisons($id_lang) as $combi) { if(!isset($combinations[$combi['id_product_attribute']])) { $combinations[$combi['id_product_attribute']] = array( 'qty' => $combi['quantity'], 'name' => array($combi['attribute_name']), 'ean13' => $combi['ean13'], 'location' => empty($combi['location'])? $p->location: $combi['location'], 'brand' => $p->manufacturer_name, 'supplier_reference' => empty($combi['supplier_reference'])? $p->supplier_reference: $combi['supplier_reference'], ); } else { $combinations[$combi['id_product_attribute']]['name'][] = $combi['attribute_name']; } } $images = array(); foreach(Db::getInstance()->ExecuteS(' SELECT i.`id_image`, l.`legend` FROM `'._DB_PREFIX_.'image` i LEFT JOIN `'._DB_PREFIX_.'image_lang` l ON l.`id_image` = i.`id_image` WHERE l.`id_lang` = '.(int) $id_lang.' AND i.`id_product` = '.(int) $p->id.' ') as $img) { $link_image = str_split($img['id_image']); $images[] = 'http://static.bebeboutik.com/img/p/'.implode('/', $link_image) .'/'. $img['id_image'].'.jpg'; } if(count($combinations) > 0) { foreach($combinations as $k => $v) { $c_images = array(); foreach(Db::getInstance()->ExecuteS(' SELECT i.`id_image`, l.`legend` FROM `'._DB_PREFIX_.'image` i LEFT JOIN `'._DB_PREFIX_.'image_lang` l ON l.`id_image` = i.`id_image` LEFT JOIN `'._DB_PREFIX_.'product_attribute_image` a ON a.`id_image` = i.`id_image` WHERE l.`id_lang` = '.(int) $id_lang.' AND a.`id_product_attribute` = '.(int) $k.' ') as $img) { $link_image = str_split($img['id_image']); $c_images[] = 'http://static.bebeboutik.com/img/p/'.implode('/', $link_image) .'/'. $img['id_image'].'.jpg'; // $c_images[] = 'http://static.bebeboutik.com/'.(int) $p->id.'-'.$img['id_image'].'.jpg'; } $names = array_unique($v['name']); sort($names, SORT_STRING); fputcsv($f, array( $v['supplier_reference'], $p->id, $k, $p->position, $p->weight, $v['qty'], $p->name[$id_lang], implode(' - ', $names), $v['ean13'], $v['location'], $v['brand'], (int) Db::getInstance()->getValue(' SELECT SUM(d.`product_quantity`) FROM `'._DB_PREFIX_.'order_detail` d LEFT JOIN `'._DB_PREFIX_.'orders` o ON o.`id_order` = d.`id_order` LEFT JOIN `'._DB_PREFIX_.'order_history` h ON h.`id_order` = d.`id_order` WHERE d.`product_id` = '.(int) $p->id.' AND d.`product_attribute_id` = '.(int) $k.' AND h.`id_order_state` = 2 '), $p->getPrice(TRUE, (int) $k, 2, NULL, FALSE, FALSE), $p->getPrice(TRUE, (int) $k, 2), Tools::ps_round($p->wholesale_price, 2), $p->active, $p->description_short[$id_lang], $p->description[$id_lang], count($c_images) > 0? implode(', ', $c_images): implode(', ', $images), implode(', ', $categories), implode(', ', $categories_title), ), ';', '"'); } } else { fputcsv($f, array( $p->supplier_reference, $p->id, 0, $p->position, $p->weight, $p->quantity, $p->name[$id_lang], '', $p->ean13, $p->location, $p->manufacturer_name, (int) Db::getInstance()->getValue(' SELECT SUM(d.`product_quantity`) FROM `'._DB_PREFIX_.'order_detail` d LEFT JOIN `'._DB_PREFIX_.'orders` o ON o.`id_order` = d.`id_order` LEFT JOIN `'._DB_PREFIX_.'order_history` h ON h.`id_order` = d.`id_order` WHERE d.`product_id` = '.(int) $p->id.' AND h.`id_order_state` = 2 '), $p->getPrice(TRUE, NULL, 2, NULL, FALSE, FALSE), $p->getPrice(TRUE, NULL, 2), Tools::ps_round($p->wholesale_price, 2), $p->active, $p->description_short[$id_lang], $p->description[$id_lang], implode(', ', $images), implode(', ', $categories), implode(', ', $categories_title), ), ';', '"'); } } } fclose($f); $output .= ''.$this->l('Export complete.').' '.$this->l('Click here to download the file').'
'; } } elseif(Tools::isSubmit('submitExportPositions')) { set_time_limit(300); if($id_category = (int) Tools::getValue('category')) { foreach(glob(dirname(__FILE__).'/*.csv') as $filename) { unlink($filename); } $fname = Tools::passwdGen(10).'.csv'; $f = fopen(dirname(__FILE__).'/'.$fname, 'w'); fputcsv($f, array( 'id_category', 'id_product', 'position', 'name', ), ';', '"'); foreach(Db::getInstance()->ExecuteS(' SELECT * FROM `'._DB_PREFIX_.'category_product` cp LEFT JOIN `'._DB_PREFIX_.'product_lang` l ON cp.`id_product` = l.`id_product` WHERE cp.`id_category` = '.(int) $id_category.' AND l.`id_lang` = 2 ') as $row) { fputcsv($f, array( (int) $row['id_category'], (int) $row['id_product'], (int) $row['position'], $row['name'], ), ';', '"'); } fclose($f); $output .= ''.$this->l('Export complete.').' '.$this->l('Click here to download the file').'
'; } } elseif(Tools::isSubmit('submitUploadPositions')) { set_time_limit(300); $f = fopen($_FILES['csvfile']['tmp_name'], 'r'); fgetcsv($f, 0, ';'); $products = array(); while($line = fgetcsv($f, 0, ';')) { if($line[0] == '' || $line[1] == '' || $line[2] == '') { continue; } $products[] = $line; } foreach($products as $line) { Db::getInstance()->ExecuteS(' UPDATE `'._DB_PREFIX_.'category_product` SET `position` = '.(int) $line[2].' WHERE `id_product` = '.(int) $line[1].' AND `id_category` = '.(int) $line[0].' '); } fclose($f); $output .= ''.$this->l('Products updated').'
'; } echo $output; } public function display(){ global $cookie; $output = '