File: //home/temp/yarusvl.ru/exchanger/class.importSupplier.php
<?php
/**
* Created by el.
* @autor: el
* @pakage: el
* @version: 0.1 14.08.18 13:16
* Date: 14.08.18
*/
class importSupplier extends Mgc {
protected $supplier_id = 0;
protected $link ='';
protected $key = '';
protected $login = '';
protected $password = '';
protected $type = '';
protected $core;
public $counter = 0;
// Соответствие полей в базе и имён колонок в файле
private $columns_names = array(
'name'=> array('product', 'name', 'товар', 'название', 'наименование'),
'supplier_id'=> array("supplier","supplier_id","поставщик"),
'url'=> array('url', 'адрес'),
'visible'=> array('visible', 'published', 'видим'),
'featured'=> array('featured', 'hit', 'хит', 'рекомендуемый'),
'category'=> array('category', 'категория'),
'brand'=> array('brand', 'бренд'),
'variant'=> array('variant', 'вариант'),
'price'=> array('price', 'цена'),
'currency'=> array('currency_id', 'currency', 'ID валюты'),
'compare_price'=> array('compare price', 'старая цена'),
'sku'=> array('sku', 'артикул'),
'stock'=> array('stock', 'склад', 'на складе'),
'meta_title'=> array('meta title', 'заголовок страницы'),
'meta_keywords'=> array('meta keywords', 'ключевые слова'),
'meta_description'=> array('meta description', 'описание страницы'),
'annotation'=> array('annotation', 'аннотация', 'краткое описание'),
'description'=> array('description', 'описание'),
'images'=> array('images', 'изображения'),
'weight'=> array("weight","Вес")
);
public $colors = array(
"белый"=>"#ffffff",
"серебряный"=>"#c0c0c0",
"серый"=>"#808080",
"чёрный"=> "#000000",
"черный"=> "#000000",
"красный"=> "#ff0000",
"тёмно-бордовый"=> "#800000",
"темно-бордовый"=> "#800000",
"жёлтый"=> "#ffff00",
"желтый"=> "#ffff00",
"оливковый"=> "#808000",
"лайм"=> "#00ff00",
"зелёный"=> "#008000",
"зеленый"=> "#008000",
"морская волна"=> "#00ffff",
"сине-зелёный"=> "#008080",
"сине-зеленый"=> "#008080",
"синий"=> "#0000ff",
"тёмно-синий"=> "#000080",
"темно-синий"=> "#000080",
"фуксия"=> "#ff00ff",
"пурпурный"=> "#800080",
"оранжевый"=>"#ffa500"
);
private $import_features = array(
'material'=> ('Материал'),
'size'=> ('Размер'),
// 'color'=> ('Цвет'),
'nanesenie'=> ('Нанесение'),
'volume'=>"Объем"
);
// Соответствие имени колонки и поля в базе
private $internal_columns_names = array();
private $import_files_dir = 'cml/files/import/'; // Временная папка
private $import_file = 'import.csv'; // Временный файл
private $category_delimiter = ',,'; // Разделитель каегорий в файле
private $subcategory_delimiter = '##'; // Разделитель подкаегорий в файле
private $column_delimiter = ';';
private $products_count = 10;
private $columns = array();
private $gstores = array();
public $update_marker = 0;
public function __construct($supplier_id)
{
parent::__construct();
$this->supplier_id = (int)$supplier_id;
if(!$this->supplier_id )die("Error Supplier!");
$this->update_marker = time();
/* if(is_int($this->supplier_id)){
$this->supplier_id = intval($this->supplier_id);
}elseif(
is_string($this->supplier_id)
){
$this->supplier_id = trim($this->supplier_id);
// Найдем его по имени
if ($this->languages->lang_id()) {
$this->db->query("SELECT supplier_id as id FROM __lang_suppliers WHERE name=? AND lang_id=?",$this->supplier_id, $this->languages->lang_id());
} else {
$this->db->query("SELECT id FROM __suppliers WHERE name=?", $this->supplier_id);
}
if(!$this->supplier_id = $this->db->result('id')) {
// Создадим, если не найден
$this->supplier_id = $this->suppliers->add_supplier(array('name'=>$this->supplier_id, 'meta_title'=>$this->supplier_id, 'meta_keywords'=>$this->supplier_id, 'meta_description'=>$this->supplier_id));
}
}
*/
}
public function import() {
session_write_close();
unset($_SESSION['lang_id']);
unset($_SESSION['admin_lang_id']);
// Для корректной работы установим локаль UTF-8
setlocale(LC_ALL, 'ru_RU.UTF-8');
$result = new stdClass;
// Определяем колонки из первой строки файла
$f = fopen($this->import_files_dir.$this->import_file, 'r');
$this->columns = fgetcsv($f, null, $this->column_delimiter);
// Заменяем имена колонок из файла на внутренние имена колонок
foreach($this->columns as &$column) {
if($internal_name = $this->internal_column_name($column)) {
$this->internal_columns_names[$column] = $internal_name;
$column = $internal_name;
}
}
$required_fields = array_keys($this->columns_names);
$import_fields = array_values($this->internal_columns_names);
$diff = array_diff($required_fields, $import_fields);
if (count($diff)) {
fclose($f);
$result = new stdClass();
$result->error = 1;
$result->missing_fields = array();
foreach ($diff as $field) {
$result->missing_fields[] = $this->columns_names[$field][count($this->columns_names[$field])-1];
}
return $result;
}
// Если нет названия товара - не будем импортировать
if(!in_array('name', $this->columns) && !in_array('sku', $this->columns)) {
return false;
}
// Переходим на заданную позицию, если импортируем не сначала
if($from = $this->request->get('from')) {
fseek($f, $from);
}
// Массив импортированных товаров
$imported_items = array();
// Проходимся по строкам, пока не конец файла
// или пока не импортировано достаточно строк для одного запроса
for($k=0; !feof($f) && $k<$this->products_count; $k++) {
// Читаем строку
$line = fgetcsv($f, 0, $this->column_delimiter);
$product = null;
if(is_array($line)) {
// Проходимся по колонкам строки
foreach($this->columns as $i=>$col) {
// Создаем массив item[название_колонки]=значение
if(isset($line[$i]) && !empty($line) && !empty($col)) {
$product[$col] = $line[$i];
}
}
}
// Импортируем этот товар
if($imported_item = $this->import_item($product)) {
$imported_items[] = $imported_item;
}
}
// Запоминаем на каком месте закончили импорт
$from = ftell($f);
// И закончили ли полностью весь файл
$result->end = feof($f);
fclose($f);
$size = filesize($this->import_files_dir.$this->import_file);
// Создаем объект результата
$result->from = $from; // На каком месте остановились
$result->totalsize = $size; // Размер всего файла
$result->items = $imported_items; // Импортированные товары
return $result;
}
function setInactive(){
$this->db->query("UPDATE __products SET visible=0 WHERE supplier_id=? AND update_marker<>?", $this->supplier_id,$this->update_marker);
}
public function import_balances($item=array(),$is_sku = true){
/* $item = (array)$item;
if(!isset($item['sku']) || !strlen($item['sku'])){
return;
}*/
if(!sizeof($this->gstores)){
$this->gstores = $this->stores->get_stores();
}
foreach($item as $sku=>$stock){
// echo "-";
if($is_sku)
$this->db->query('SELECT v.id as variant_id, v.product_id FROM __variants v, __products p WHERE v.sku=? AND p.supplier_id=? AND v.product_id = p.id LIMIT 1', $sku,(int)$this->supplier_id);
else $this->db->query('SELECT v.id as variant_id, v.product_id FROM __variants v, __products p WHERE v.variant_vendor_ID LIKE ? AND p.supplier_id=? AND v.product_id = p.id LIMIT 1', $sku,(int)$this->supplier_id);
$result = $this->db->result();
$global_stock = 0;
foreach($stock as $key=>$val){
if($result) {
$global_stock += $val;
//echo "*";
$stores_variant = $this->stores->get_stores_variant($result->variant_id);
$stores_variants = array();
if($stores_variant){
foreach($stores_variant as $sv){
$stores_variants[$sv->store_id] = $sv;
}
}
/*
var_dump($stores_variants);
var_dump($this->gstores);*/
/* var_dump($key);
exit;*/
foreach ($this->gstores as $k=>$v){
if(isset($stores_variants[$v->id])){
if($v->code==$key){
// echo "update ".$key . "=". $val."<br>";
$this->stores->update_stores_variant_id($stores_variants[$v->id]->id,$val);
}
// if($v->[])
}else{
if($v->code==$key) {
// echo "INSERT ".$key . "=". $val."<br>";
$iitem = new stdClass;
$iitem->variant_id = $result->variant_id;
$iitem->store_id = $v->id;
$iitem->stock = $val;
$this->stores->insert_stores_variant($iitem);
}
}
}
}
}
if($result) {
$this->variants->update_variant($result->variant_id, array("stock" => $global_stock));
}
//exit;
}
}
// Импорт одного товара $item[column_name] = value;
public function import_item($item) {
$imported_item = new stdClass;
$item = (array)$item;
// Проверим не пустое ли название и артинкул (должно быть хоть что-то из них)
if(empty($item['name']) && empty($item['sku'])) {
return false;
}
$this->internal_columns_names = array_keys($this->columns_names);
// Подготовим товар для добавления в базу
$product = array();
$product['update_marker'] = $this->update_marker;
if(isset($item['name'])) {
$product['name'] = trim($item['name']);
}
if(isset($item['meta_title'])) {
$product['meta_title'] = trim($item['meta_title']);
} else {
$product['meta_title'] = $product['name'];
}
if(isset($item['meta_keywords'])) {
$product['meta_keywords'] = trim($item['meta_keywords']);
} else {
$product['meta_keywords'] = $product['name'];
}
if(isset($item['meta_description'])) {
$product['meta_description'] = trim($item['meta_description']);
} else {
$product['meta_description'] = $product['name'];
}
if(isset($item['annotation'])) {
$product['annotation'] = trim($item['annotation']);
}
if(isset($item['link'])) {
$product['link'] = trim($item['link']);
}
if(isset($item['description'])) {
$product['description'] = trim($item['description']);
}
if(isset($item['visible'])) {
$product['visible'] = intval($item['visible']);
}
if(isset($item['featured'])) {
$product['featured'] = intval($item['featured']);
}
if(!empty($item['url'])) {
$product['url'] = trim($item['url']);
} elseif(!empty($item['name'])) {
$product['url'] = $this->translit($item['name']);
}
if(isset($item['weight'])){
$product['weight'] = trim($item['weight']);
}
if(isset($item['vendor_ID'])){
$product['vendor_ID'] = trim($item['vendor_ID']);
}
if(!isset($item['supplier_id'])){
$item['supplier_id'] = (int)$this->supplier_id;
}
if(isset($item['supplier_id'])){
$product['supplier_id'] = intval($item['supplier_id']);
}elseif(
isset($item['supplier'])
){
$item['supplier'] = trim($item['supplier']);
// Найдем его по имени
if ($this->languages->lang_id()) {
$this->db->query("SELECT supplier_id as id FROM __lang_suppliers WHERE name=? AND lang_id=?", $item['supplier'], $this->languages->lang_id());
} else {
$this->db->query("SELECT id FROM __suppliers WHERE name=?", $item['supplier']);
}
if(!$product['supplier_id'] = $this->db->result('id')) {
// Создадим, если не найден
$product['supplier_id'] = $this->suppliers->add_supplier(array('name'=>$item['supplier'], 'meta_title'=>$item['supplier'], 'meta_keywords'=>$item['supplier'], 'meta_description'=>$item['supplier']));
}
}
// Если задан бренд
if(!empty($item['brand'])) {
$item['brand'] = trim($item['brand']);
// Найдем его по имени
if ($this->languages->lang_id()) {
$this->db->query("SELECT brand_id as id FROM __lang_brands WHERE name=? AND lang_id=?", $item['brand'], $this->languages->lang_id());
} else {
$this->db->query("SELECT id FROM __brands WHERE name=?", $item['brand']);
}
if(!$product['brand_id'] = $this->db->result('id')) {
// Создадим, если не найден
$product['brand_id'] = $this->brands->add_brand(array('name'=>$item['brand'], 'meta_title'=>$item['brand'], 'meta_keywords'=>$item['brand'], 'meta_description'=>$item['brand']));
}
}
// Если задана категория
$category_id = null;
$categories_ids = array();
$supplier_cat_id = null;
if(!empty($item['supplier_cat_id'])){
$product['supplier_cat_id'] = intval($item['supplier_cat_id']);
}
/* если по айдишнику добавляем категорию */
if(!empty($item['category_id'])) {
$category_id = (int)$item['category_id'];
$categories_ids[] =(int)$item['category_id'];
}
elseif(!empty($item['category'])) {
/* определяем категорию по названию*/
foreach(explode($this->category_delimiter, $item['category']) as $c) {
$categories_ids[] = $this->import_category($c);
}
$category_id = reset($categories_ids);
}
// несколько категорий
if(!empty($item['category_ids']) ){
$categories_ids[] =(int)$item['category_ids'];
$category_id = reset($categories_ids);
$categories_ids = array_unique($categories_ids);
}
// Подготовим вариант товара
$variant = array();
$variant['update_marker'] = $this->update_marker;
if(isset($item['variant'])) {
$variant['name'] = trim($item['variant']);
}
if(isset($item['color_code'])) {
$variant['color_code'] = trim($item['color_code']);
}
if(isset($item['color'])) {
$variant['color_name'] = mb_strtolower(trim($item['color']));
$vars_colors = explode(";",$variant['color_name']);
$vars_colors = array_map("trim",$vars_colors);
if(!isset( $variant['color_code'] ) && isset($vars_colors)){
$variant['color_code'] ='';
foreach ($vars_colors as $color){
if(isset($this->colors[$color])){
$variant['color_code'].= $this->colors[$color].";";
}
}
$variant['color_code'] = trim($variant['color_code'],";");
}
}
if(isset($item['weight'])){
$variant['weight'] = trim($item['weight']);
}
if(isset($item['size'])){
$variant['size'] = trim($item['size']);
}
if(isset($item['price'])) {
$variant['price'] = preg_replace('|(\D)|','',$item['price']);
// $variant['price'] = str_replace(',', '.', str_replace(' ', '', trim($item['price'])));
}
if(isset($item['compare_price'])) {
$variant['compare_price'] = trim($item['compare_price']);
}
if(isset($item['stock'])) {
if($item['stock'] == '') {
$variant['stock'] = null;
} else {
$variant['stock'] = trim($item['stock']);
}
}
if(isset($item['variant_vendor_ID'])) {
$variant['variant_vendor_ID'] = trim($item['variant_vendor_ID']);
}
if(isset($item['sku'])) {
$variant['sku'] = trim($item['sku']);
}
if (isset($item['currency'])) {
$variant['currency_id'] = intval($item['currency']);
}
/* Какую ф-ию обновления значений св-тв вызывать:
* если это новый товар то нужно значения добавить во все языки
* иначе - только для текущего - вызываем старую добрую update_option()
*/
$update_option_function = "update_option";
/* if(isset($item['product_id']) && intval($item['product_id'])){
}*/
// Если задан артикул варианта, найдем этот вариант и соответствующий товар
if(!empty($variant['sku'])) {
$this->db->query('SELECT v.id as variant_id, v.product_id FROM __variants v, __products p WHERE v.sku=? AND p.supplier_id=? AND v.product_id = p.id LIMIT 1', $variant['sku'],$this->supplier_id);
$result = $this->db->result();
if($result) {
// и обновим товар
if(!empty($product)) {
$this->products->update_product($result->product_id, $product);
}
// и вариант
if(!empty($variant)) {
$this->variants->update_variant($result->variant_id, $variant);
}
$product_id = $result->product_id;
$variant_id = $result->variant_id;
// Обновлен
$imported_item->status = 'updated';
}
}
// Если на прошлом шаге товар не нашелся, и задано хотя бы название товара
if((empty($product_id) || empty($variant_id)) && isset($item['name'])) {
if(isset($item["vendor_ID"])){
if(!empty($variant['sku']) && empty($variant['name'])) {
$this->db->query('SELECT v.id as variant_id, p.id as product_id FROM __products p LEFT JOIN __variants v ON v.product_id=p.id WHERE v.sku=? AND p.supplier_id=? LIMIT 1', $variant['sku'],$this->supplier_id);
} elseif(isset($item['variant'])) {
$this->db->query('SELECT v.id as variant_id, p.id as product_id FROM __products p LEFT JOIN __variants v ON v.product_id=p.id AND v.name=? WHERE p.vendor_ID=? AND p.supplier_id=? LIMIT 1', $item['variant'], $item['vendor_ID'],$this->supplier_id);
} else {
$this->db->query('SELECT v.id as variant_id, p.id as product_id FROM __products p LEFT JOIN __variants v ON v.product_id=p.id WHERE p.vendor_ID=? AND p.supplier_id=? LIMIT 1', $item['vendor_ID'],$this->supplier_id);
}
}
$r = $this->db->result();
if(!$r){
if(!empty($variant['sku']) && empty($variant['name'])) {
$this->db->query('SELECT v.id as variant_id, p.id as product_id FROM __products p LEFT JOIN __variants v ON v.product_id=p.id WHERE v.sku=? AND p.supplier_id=? LIMIT 1', $variant['sku'],$this->supplier_id);
} elseif(isset($item['variant'])) {
$this->db->query('SELECT v.id as variant_id, p.id as product_id FROM __products p LEFT JOIN __variants v ON v.product_id=p.id AND v.name=? WHERE p.name=? AND p.supplier_id=? LIMIT 1', $item['variant'], $item['name'],$this->supplier_id);
} else {
$this->db->query('SELECT v.id as variant_id, p.id as product_id FROM __products p LEFT JOIN __variants v ON v.product_id=p.id WHERE p.name=? AND p.supplier_id=? LIMIT 1', $item['name'],$this->supplier_id);
}
$r = $this->db->result();
}
if($r) {
$product_id = $r->product_id;
$variant_id = $r->variant_id;
}
/**
*
* @TODO сделать дозакачку изображений
*
*/
if(isset($product['images']))
foreach($product['images'] as $key=> $image){
$image_filename = $this->getImageName($image,$item["supplier_id"]);
// usleep(550);
if(!file_exists(RP.$this->config->original_images_dir.DIRECTORY_SEPARATOR.$image_filename))
file_put_contents(RP.$this->config->original_images_dir.DIRECTORY_SEPARATOR.$image_filename,file_get_contents($image));
$image_filename = pathinfo($image, PATHINFO_BASENAME);
$product['images'][$key] = $image_filename;
}
// Если вариант найден - обновляем,
if(!empty($variant_id)) {
$this->variants->update_variant($variant_id, $variant);
$this->products->update_product($product_id, $product);
$imported_item->status = 'updated';
}
// Иначе - добавляем
elseif(empty($variant_id)) {
if(empty($product_id)) {
/*echo "add_product_id";*/
$product_id = $this->products->add_product($product);
$update_option_function = "update_option_all_languages";
}
$this->db->query('SELECT max(v.position) as pos FROM __variants v WHERE v.product_id=? LIMIT 1', $product_id);
$pos = $this->db->result('pos');
$variant['position'] = $pos+1;
$variant['product_id'] = $product_id;
$variant_id = $this->variants->add_variant($variant);
$imported_item->status = 'added';
}
}
/*
if(strpos($item['name'],"Birmingham")!==false){
var_dump($product);
var_dump($product_id);
exit;
}*/
/** ************************** **/
if(!empty($variant_id) && !empty($product_id)) {
if(!empty($item['supplier_cat_ids']) && is_array($item['supplier_cat_ids'])) {
foreach($item['supplier_cat_ids'] as $sup_ids){
$sql = "INSERT INTO __products_sup_id SET product_id=?, sup_id=? ON DUPLICATE KEY UPDATE product_id=?, sup_id=? ";
$this->db->query($sql, $product_id, $sup_ids, $product_id, $sup_ids);
}
}
// Нужно вернуть обновленный товар
$imported_item->variant = $this->variants->get_variant(intval($variant_id));
$imported_item->product = $this->products->get_product(intval($product_id));
// echo ".".PHP_EOL;
if( $imported_item->status === 'added'){
// Добавляем категории к товару
if(!empty($categories_ids)) {
foreach($categories_ids as $c_id) {
$this->categories->add_product_category($product_id, $c_id);
}
}
}
// Изображения товаров
if(isset($item['images'])) {
if(is_array($item['images'])){
foreach($item['images'] as $image) {
$image = trim($image);
if(!empty($image)) {
// Имя файла
$image_filename = $this->getImageName($image,$item["supplier_id"]);
/*$image_filename = pathinfo($image, PATHINFO_BASENAME);
$image_ext= pathinfo($image, PATHINFO_EXTENSION);
$image_filename = $this->translit_alpha($image_filename);
$image_filename = $item["supplier_id"]."_".md5($image_filename).".".$image_ext;*/
if(!file_exists(RP.$this->config->original_images_dir.DIRECTORY_SEPARATOR.$image_filename) ){
//usleep(200000);
$fc = file_get_contents($image);
if($fc!==false)
file_put_contents(RP.$this->config->original_images_dir.DIRECTORY_SEPARATOR.$image_filename,$fc);
else {
// usleep(500000); continue;
};
}
// Добавляем изображение только если такого еще нет в этом товаре
if(isset($variant_id) && $variant_id)
$this->db->query('SELECT filename FROM __images WHERE variant_id=? AND (filename=?) LIMIT 1', $variant_id, $image_filename);
else
$this->db->query('SELECT filename FROM __images WHERE product_id=? AND (filename=?) LIMIT 1', $product_id, $image_filename);
if(!$this->db->result('filename')) {
$this->products->add_image($product_id, $image_filename,$item['name'],$variant_id);
}
}
}
/* var_dump($item['images']);
exit;*/
// echo "---";
}/*else{
// Изображений может быть несколько, через запятую
$images = explode(',', $item['images']);
foreach($images as $image) {
$image = trim($image);
if(!empty($image)) {
// Имя файла
$image_filename = pathinfo($image, PATHINFO_BASENAME);
file_put_contents($this->config->original_images_dir.DIRECTORY_SEPARATOR.$image,file_get_contents($image));
// Добавляем изображение только если такого еще нет в этом товаре
$this->db->query('SELECT filename FROM __images WHERE product_id=? AND (filename=? OR filename=?) LIMIT 1', $product_id, $image_filename, $image);
if(!$this->db->result('filename')) {
$this->products->add_image($product_id, $image);
}
}
}
}*/
}
// Характеристики товаров
foreach($item as $feature_name=>$feature_value) {
// Если нет такого названия колонки, значит это название свойства
if(!in_array($feature_name, $this->internal_columns_names) && isset($this->import_features[$feature_name]) /*|| strpos()*/) {
// Свойство добавляем только если для товара указана категория и непустое значение свойства
if($category_id && $feature_value!=='') {
$this->db->query('SELECT f.id FROM __features f WHERE f.url=? LIMIT 1', $feature_name);
if(!$feature_id = $this->db->result('id')) {
$feature_id = $this->features->add_feature(array('name'=>$this->import_features[$feature_name],'url'=>$feature_name));
}
$this->features->add_feature_category($feature_id, $category_id);
// die($update_option_function);
$this->features->{$update_option_function}($product_id, $feature_id, $feature_value);
}
}
}
if(!empty($item->attributes)){
foreach($item->attributes as $feature_name=>$feature_value) {
// Если нет такого названия колонки, значит это название свойства
// Свойство добавляем только если для товара указана категория и непустое значение свойства
if($category_id && $feature_value!=='') {
$this->db->query('SELECT f.id FROM __features f WHERE f.url=? LIMIT 1', $feature_name);
if(!$feature_id = $this->db->result('id')) {
$feature_id = $this->features->add_feature(array('name'=>$feature_name));
}
$this->features->add_feature_category($feature_id, $category_id);
// die($update_option_function);
$this->features->{$update_option_function}($product_id, $feature_id, $feature_value);
}
}
}
return $imported_item;
}
}
private function getImageName($image,$prefix="0"){
$image_filename = pathinfo($image, PATHINFO_BASENAME);
$image_ext= pathinfo($image, PATHINFO_EXTENSION);
$image_filename = $this->translit_alpha($image_filename);
$image_filename = $prefix."_".md5($image_filename).".".$image_ext;
return $image_filename;
}
function setInactiveCategory(){
$this->db->query(' UPDATE __categories_suppliers SET `is_active`='.'0'." WHERE `update`<>".$this->update_marker);
}
function import_inner_category($data=array()){
// $this->counter++;
$data = (array)$data;
$data['updated'] = $this->update_marker;
$data['ordering'] = $this->counter;
// id supplier_id title sup_id parent_id cat_id
$this->db->query('SELECT id,cat_id FROM __categories_suppliers WHERE supplier_id=? AND sup_id=?', $data['supplier_id'], $data['sup_id']);
$res = $this->db->result();;
/*var_dump($res);
exit;*/
$id = isset($res->id)?$res->id:0;
$cat_id = empty($res->cat_id)?0:$res->cat_id;
/* var_dump($id);
die();*/
if(!$id){
$this->db->query(' INSERT INTO __categories_suppliers SET ?%',$data);
// $cat_id = $this->db->insert_id();
$this->db->query('SELECT id,cat_id FROM __categories_suppliers WHERE supplier_id=? AND sup_id=?', $data['supplier_id'], $data['sup_id']);
$res = $this->db->result();;
/*var_dump($res);
exit;*/
$id = isset($res->id)?$res->id:0;
$cat_id = empty($res->cat_id)?0:$res->cat_id;
// echo "category imported ".$data['title'].PHP_EOL;
}else{
$this->db->query(' UPDATE __categories_suppliers SET `updated`='.$this->update_marker.', `ordering`='.$this->counter.' '." WHERE id=".$id);
//echo "category returned ".$data['title'].PHP_EOL;
// $cat_id = $id;
}
return $cat_id;
}
function get_inner_category($supplier_id,$sup_id){
// $data = (array)$data;
// id supplier_id title sup_id parent_id cat_id
$this->db->query('SELECT id,cat_id FROM __categories_suppliers WHERE supplier_id=? AND sup_id=?', $supplier_id, $sup_id);
$res = $this->db->result();;
/*var_dump($res);
exit;*/
// $id = isset($res->id)?$res->id:0;
$cat_id = empty($res->cat_id)?0:$res->cat_id;
return $cat_id;
}
// Отдельная функция для импорта категории
public function import_category($category) {
// Поле "категория" может состоять из нескольких имен, разделенных subcategory_delimiter-ом
// Только неэкранированный subcategory_delimiter может разделять категории
$delimiter = $this->subcategory_delimiter;
$regex = "/\\DELIMITER((?:[^\\\\\DELIMITER]|\\\\.)*)/";
$regex = str_replace('DELIMITER', $delimiter, $regex);
$names = preg_split($regex, $category, 0, PREG_SPLIT_DELIM_CAPTURE);
$id = null;
$parent = 0;
// Для каждой категории
foreach($names as $name) {
// Заменяем \/ на /
$name = trim(str_replace("\\$delimiter", $delimiter, $name));
if(!empty($name)) {
// Найдем категорию по имени
$this->db->query('SELECT id FROM __categories WHERE name=? AND parent_id=?', $name, $parent);
$id = $this->db->result('id');
// Если не найдена - добавим ее
if(empty($id)) {
$id = $this->categories->add_category(array('name'=>$name, 'parent_id'=>$parent, 'meta_title'=>$name, 'meta_keywords'=>$name, 'meta_description'=>$name, 'url'=>$this->translit($name)));
}
$parent = $id;
}
}
return $id;
}
// Отдельная функция для импорта категории
public function import_category_manual($category) {
// Поле "категория" может состоять из нескольких имен, разделенных subcategory_delimiter-ом
// Только неэкранированный subcategory_delimiter может разделять категории
/* $delimiter = $this->subcategory_delimiter;
$regex = "/\\DELIMITER((?:[^\\\\\DELIMITER]|\\\\.)*)/";
$regex = str_replace('DELIMITER', $delimiter, $regex);*/
$names = preg_split("|##|", $category, 0, PREG_SPLIT_DELIM_CAPTURE);
$id = null;
$parent = 0;
//var_dump($names); exit;
// Для каждой категории
foreach($names as $name) {
// Заменяем \/ на /
// $name = trim(str_replace("\\$delimiter", $delimiter, $name));
$name = ucfirst($name);
if(!empty($name)) {
// Найдем категорию по имени
$this->db->query('SELECT id FROM __categories WHERE name=? AND parent_id=?', $name, $parent);
$id = $this->db->result('id');
// Если не найдена - добавим ее
if(empty($id)) {
$id = $this->categories->add_category(array('name'=>$name, 'parent_id'=>$parent, 'meta_title'=>$name, 'meta_keywords'=>$name, 'meta_description'=>$name, 'url'=>$this->translit($name)));
}
$parent = $id;
}
}
return $id;
}
public function translit($text) {
$ru = explode('-', "А-а-Б-б-В-в-Ґ-ґ-Г-г-Д-д-Е-е-Ё-ё-Є-є-Ж-ж-З-з-И-и-І-і-Ї-ї-Й-й-К-к-Л-л-М-м-Н-н-О-о-П-п-Р-р-С-с-Т-т-У-у-Ф-ф-Х-х-Ц-ц-Ч-ч-Ш-ш-Щ-щ-Ъ-ъ-Ы-ы-Ь-ь-Э-э-Ю-ю-Я-я");
$en = explode('-', "A-a-B-b-V-v-G-g-G-g-D-d-E-e-E-e-E-e-ZH-zh-Z-z-I-i-I-i-I-i-J-j-K-k-L-l-M-m-N-n-O-o-P-p-R-r-S-s-T-t-U-u-F-f-H-h-TS-ts-CH-ch-SH-sh-SCH-sch---Y-y---E-e-YU-yu-YA-ya");
$res = str_replace($ru, $en, $text);
$res = preg_replace("/[\s]+/ui", '-', $res);
$res = preg_replace('/[^\p{L}\p{Nd}\d-]/ui', '', $res);
$res = strtolower($res);
return $res;
}
// Фозвращает внутреннее название колонки по названию колонки в файле
private function internal_column_name($name) {
$name = trim($name);
$name = str_replace('/', '', $name);
$name = str_replace('\/', '', $name);
foreach($this->columns_names as $i=>$names) {
foreach($names as $n) {
if(!empty($name) && preg_match("/^".preg_quote($name)."$/ui", $n)) {
return $i;
}
}
}
return false;
}
public function toPrice($str){
return str_replace(',', '.', str_replace(' ', '', trim($str)));
}
}