HEX
Server: Apache/2.4.6 (CentOS) mpm-itk/2.4.7-04 mod_fcgid/2.3.9 PHP/5.4.16
System: Linux dvm.vladweb.ru 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
User: region-gk.ru (1016)
PHP: 8.2.27
Disabled: NONE
Upload Files
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)));
    }

}