403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/acrit.import/lib/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/acrit.import/lib/importiblock.php
<?php

namespace Acrit\Import;


class ImportIblock extends ImportXml
{
    protected $arKeys;
    protected $arFieldsDefault;

    function __construct($ID=0)
    {
        parent::__construct($ID);

        $this->arKeys = array(
            'ITEMS' => GetMessage("ACRIT_IMPORT_KOMMERCESKAAINFORMAC"),
            'ITEM' => GetMessage("ACRIT_IMPORT_KOMMERCESKAAINFORMAC1"),
            'ITEM_PROPS' => GetMessage("ACRIT_IMPORT_KOMMERCESKAAINFORMAC2"),
            'ITEM_PROP' => GetMessage("ACRIT_IMPORT_KOMMERCESKAAINFORMAC3"),
            'ITEM_PROP_S' => GetMessage("ACRIT_IMPORT_ZNACENIASVOYSTVA"),
            'ITEM_PROP_ID_S' => GetMessage("ACRIT_IMPORT_ID"),
            'ITEM_PROP_VALUE_S' => GetMessage("ACRIT_IMPORT_ZNACENIE"),
            'ITEM_PRICES' => GetMessage("ACRIT_IMPORT_KOMMERCESKAAINFORMAC4"),
            'ITEM_PRICE' => GetMessage("ACRIT_IMPORT_KOMMERCESKAAINFORMAC5"),
            'ITEM_PRICE_S' => GetMessage("ACRIT_IMPORT_CENA"),
            'ITEM_PRICE_ID_S' => GetMessage("ACRIT_IMPORT_IDTIPACENY"),
            'ITEM_PRICE_VALUE_S' => GetMessage("ACRIT_IMPORT_CENAZAEDINICU"),
            'STRUCT_PROPS' => GetMessage("ACRIT_IMPORT_KOMMERCESKAAINFORMAC6"),
            'STRUCT_PROP' => GetMessage("ACRIT_IMPORT_KOMMERCESKAAINFORMAC7"),
            'STRUCT_PROP_ID' => GetMessage("ACRIT_IMPORT_KOMMERCESKAAINFORMAC8"),
            'STRUCT_PROP_NAME' => GetMessage("ACRIT_IMPORT_KOMMERCESKAAINFORMAC9"),
            'STRUCT_PRICES' => GetMessage("ACRIT_IMPORT_KOMMERCESKAAINFORMAC10"),
            'STRUCT_PRICE' => GetMessage("ACRIT_IMPORT_KOMMERCESKAAINFORMAC11"),
            'STRUCT_PRICE_ID' => GetMessage("ACRIT_IMPORT_KOMMERCESKAAINFORMAC12"),
            'STRUCT_PRICE_NAME' => GetMessage("ACRIT_IMPORT_KOMMERCESKAAINFORMAC13"),
        );

        $this->arFieldsDefault = array(
            $this->arKeys['ITEM'].self::KEY_DELIMITER.GetMessage("ACRIT_IMPORT_ID"),
            $this->arKeys['ITEM'].self::KEY_DELIMITER.GetMessage("ACRIT_IMPORT_NAIMENOVANIE"),
            $this->arKeys['ITEM'].self::KEY_DELIMITER.GetMessage("ACRIT_IMPORT_BITRIKSTEGI"),
            $this->arKeys['ITEM'].self::KEY_DELIMITER.GetMessage("ACRIT_IMPORT_GRUPPY_ID"),
            $this->arKeys['ITEM'].self::KEY_DELIMITER.GetMessage("ACRIT_IMPORT_KARTINKA"),
        );
    }



    public function fieldsPreParams()
    {
        return array();
    }

    public function fields()
    {
        $arSourceFields = array();
        // For default fields of properties
        if ($this->arProfile['IBLOCK_ID']) {
            $this->fillIBlockData($this->arProfile['IBLOCK_ID']);
        }
        $arIBProps = array();
        if (!empty($this->arIBlockData['PROPS'])) {
            foreach ($this->arIBlockData['PROPS'] as $arItem) {
                if ($arItem['XML_ID']) {
                    $arIBProps[$arItem['XML_ID']] = $arItem;
                }
            }
        }
        $arIBPrices = array();
        if (!empty($this->arIBlockData['PRICES'])) {
            foreach ($this->arIBlockData['PRICES'] as $arItem) {
                if ($arItem['XML_ID']) {
                    $arIBPrices[$arItem['XML_ID']] = $arItem;
                }
            }
        }
        $arIBStores = array();
        if (!empty($this->arIBlockData['STORES'])) {
            foreach ($this->arIBlockData['STORES'] as $arItem) {
                if ($arItem['ID']) {
                    $arIBStores[$arItem['ID']] = $arItem;
                }
            }
        }
        // Default fields
        if (!empty($this->arFieldsDefault)) {
            foreach ($this->arFieldsDefault as $k) {
                $ar = explode(self::KEY_DELIMITER, $k);
                //$name = $ar[count($ar) - 2];
                $key_base = '';
                for ($i = 0; $i < 3; $i++) {
                    $key_base .= $ar[$i] . self::KEY_DELIMITER;
                }
                $name = str_replace($key_base, '', $k);
                $name = str_replace(self::KEY_DELIMITER, ' / ', $name);
                $example = '';
                $arSourceFields[$k] = array(
                    'ID' => $k,
                    'NAME' => $name,
                    'EXAMPLE' => $example,
                );
            }
        }
        // List of main fields
        $arRows = $this->get(self::STEP_BY_COUNT, 1, 0, 4, GetMessage("ACRIT_IMPORT_PREDLOJENIA"));
        $arRow = $arRows[0];
        if (!empty($arRow)) {
            foreach ($arRow as $k => $value) {
                if (strpos($k, self::KEY_DELIMITER.$this->arKeys['ITEM_PROP_S']) !== false
                        || strpos($k, self::KEY_DELIMITER.$this->arKeys['ITEM_PRICE_S']) !== false
                        || $k == $this->arKeys['ITEM']
                        || $k == $this->arKeys['ITEM_PROPS']
                        || $k == $this->arKeys['ITEM_PRICES']) {
                    continue;
                }
                $ar = explode(self::KEY_DELIMITER, $k);
                //$name = $ar[count($ar) - 2];
                $key_base = '';
                for ($i = 0; $i < 3; $i++) {
                    $key_base .= $ar[$i] . self::KEY_DELIMITER;
                }
                $name = str_replace($key_base, '', $k);
                $name = str_replace(self::KEY_DELIMITER, ' / ', $name);
                $example = '';
                if (trim($value)) {
                    $example = substr($value, 0, 10) . (strlen($value) > 10 ? '...' : '');
                }
                $arSourceFields[$k] = array(
                    'ID' => $k,
                    'NAME' => $name,
                    'EXAMPLE' => $example,
                );
            }
            // Default
            $arFieldsNameLinks = array(
                GetMessage("ACRIT_IMPORT_NAIMENOVANIE") => 'NAME',
                GetMessage("ACRIT_IMPORT_BITRIKSTEGI") => 'TAGS',
            );
            foreach ($arFieldsNameLinks as $sf_name => $ib_name) {
                $k = $this->arKeys['ITEM'].self::KEY_DELIMITER.$sf_name;
                if ($arSourceFields[$k]) {
                    $arSourceFields[$k]['SAVED_FIELD'] = $ib_name;
                }
            }
        }
        // List of properties
        $arRows = $this->get(self::STEP_BY_COUNT, 0, 0, 4, GetMessage("ACRIT_IMPORT_SVOYSTVA"));
        foreach ($arRows as $arRow) {
            $sf_k = '';
            foreach ($arRow as $k => $value) {
                if (strpos($k, $this->arKeys['STRUCT_PROP_ID']) !== false) {
                    $sf_k = $this->arKeys['ITEM_PROP'].self::KEY_DELIMITER.$value;
                    $sf_name = $this->arKeys['ITEM_PROP_S'].' / '.$value;
                    $arSourceFields[$sf_k] = array(
                        'ID' => $sf_k,
                        'NAME' => $sf_name,
                        'EXAMPLE' => '',
                    );
                    // Default
                    if ($arIBProps[$value]) {
                        $arSourceFields[$sf_k]['SAVED_FIELD'] = 'PROP_'.$arIBProps[$value]['ID'];
                    }
                }
                elseif (strpos($k, $this->arKeys['STRUCT_PROP_NAME']) !== false) {
                    $arSourceFields[$sf_k]['NAME'] = $this->arKeys['ITEM_PROP_S'].' / '.$value;
                }
            }
        }
        // List of prices
        $arRows = $this->get(self::STEP_BY_COUNT, 0, 0, 4, GetMessage("ACRIT_IMPORT_TIPYCEN"));
        foreach ($arRows as $arRow) {
            $sf_k = '';
            foreach ($arRow as $k => $value) {
                if (strpos($k, $this->arKeys['STRUCT_PRICE_ID']) !== false) {
                    $sf_k = $this->arKeys['ITEM_PRICE'].self::KEY_DELIMITER.$value;
                    $sf_name = $this->arKeys['ITEM_PRICE_S'].' / '.$value;
                    $arSourceFields[$sf_k] = array(
                        'ID' => $sf_k,
                        'NAME' => $sf_name,
                        'EXAMPLE' => '',
                    );
                    // Default
                    if ($arIBPrices[$value]) {
                        $arSourceFields[$sf_k]['SAVED_FIELD'] = 'PRICE_'.$arIBPrices[$value]['ID'];
                    }
                }
                elseif (strpos($k, $this->arKeys['STRUCT_PRICE_NAME']) !== false) {
                    $arSourceFields[$sf_k]['NAME'] = $this->arKeys['ITEM_PRICE_S'].' / '.$value;
                }
            }
        }
        return $arSourceFields;
    }

    public function count()
    {
        $count = 0;
        $res = $this->find(function($i, $arRow, $arHierarchyCur, &$count) {
            $count++;
        }, $count, self::STEP_NO, 0, 0, 4, GetMessage("ACRIT_IMPORT_PREDLOJENIA"), array(), 1);
        return $count;
    }

    public function get($type=self::STEP_NO, $limit=0, $next_item=0, $root_level=false, $root_node=false, $arRootPath=array(), $level_limit=0)
    {
        $arRows = array();
        $res = $this->find(function($i, $arRow, $arHierarchyCur, &$arRows) {
            $arRowNew = array();
            foreach ($arRow as $k => $value) {
                $k = preg_replace('/_[0-9]+$/i', '', $k);
                $arRowNew[$k] = $value;
            }
            $arRows[] = $arRowNew;
        }, $arRows, $type, $limit, $next_item, $root_level, $root_node, $arRootPath, $level_limit);
        return $arRows;
    }

    public function import($type=self::STEP_NO, $limit=0, $next_item=0)
    {
        \CModule::IncludeModule('iblock');
        if ($this->arProfile['IBLOCK_ID']) {
            $this->fillIBlockData($this->arProfile['IBLOCK_ID']);
        }
        $this->fillFieldsMap();
        $next_item = $this->find(function($i, $arRow, $arHierarchyCur, &$arRows) {
            $arRowNew = array();
            $k_last_compl = '';
            //echo '<pre>'; print_r($this->arIBlockData['PROPS']); echo '</pre>';
            $arPValuesByXmlId = array();
            foreach ($this->arIBlockData['PROPS'] as $arProp) {
                if ($arProp['VALUES']) {
                    foreach ($arProp['VALUES'] as $arValue) {
                        $arPValuesByXmlId['PROP_'.$arProp['ID']][$arValue['XML_ID']] = $arValue['VALUE'];
                    }
                }
            }
            foreach ($arRow as $k => $value) {
                $k = preg_replace('/_[0-9]+$/i', '', $k);
                // Properties
                if (strpos($k, $this->arKeys['ITEM_PROP']) !== false) {
                    if ($k == $this->arKeys['ITEM_PROP'].self::KEY_DELIMITER.$this->arKeys['ITEM_PROP_ID_S']) {
                        $k_last_compl = $this->arKeys['ITEM_PROP'].'_'.$value;
                    }
                    elseif ($k == $this->arKeys['ITEM_PROP'].self::KEY_DELIMITER.$this->arKeys['ITEM_PROP_VALUE_S']) {
                        // If value has in props section of XML
                        if ($arPValuesByXmlId[$this->arFieldsMap[$k_last_compl]]) {
                            if ($arRowNew[$k_last_compl]) {
                                if (!is_array($arRowNew[$k_last_compl])) {
                                    $arRowNew[$k_last_compl] = array($arRowNew[$k_last_compl]);
                                }
                                $arRowNew[$k_last_compl][] = $arPValuesByXmlId[$this->arFieldsMap[$k_last_compl]][$value];
                            }
                            else {
                                $arRowNew[$k_last_compl] = $arPValuesByXmlId[$this->arFieldsMap[$k_last_compl]][$value];
                            }
                        }
                        // If it's a simple value
                        else {
                            if ($arRowNew[$k_last_compl]) {
                                if (!is_array($arRowNew[$k_last_compl])) {
                                    $arRowNew[$k_last_compl] = array($arRowNew[$k_last_compl]);
                                }
                                $arRowNew[$k_last_compl][] = $value;
                            }
                            else {
                                $arRowNew[$k_last_compl] = $value;
                            }
                        }
                    }
                }
                // Prices
                elseif (strpos($k, $this->arKeys['ITEM_PRICE']) !== false) {
                    if (strpos($k, $this->arKeys['ITEM_PRICE_S'].self::KEY_DELIMITER.$this->arKeys['ITEM_PRICE_ID_S']) !== false) {
                        $k_last_compl .= '_'.$value;
                    }
                    elseif (strpos($k, $this->arKeys['ITEM_PRICE_S'].self::KEY_DELIMITER.$this->arKeys['ITEM_PRICE_VALUE_S']) !== false) {
                        $arRowNew[$k_last_compl] = $value;
                    }
                    else {
                        $k_last_compl = preg_replace('/_[0-9]+$/i', '', $k);
                    }
                }
                else {
                    $arRowNew[$k] = $value;
                }
            }
            // Import data
            $this->saveIBData($arRowNew, $i + 1);
        }, $arRows, $type, $limit, $next_item, 4, GetMessage("ACRIT_IMPORT_PREDLOJENIA"));
        return $next_item;
    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit