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/cvetdv.ru/bitrix/modules/acrit.import/lib/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

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

namespace Acrit\Import;


class ImportCsv extends Import
{
    private $source_addr;
    private $delimiter;
    private $field_delimiter;

    private function setDefaults() {
        if (!$this->delimiter) {
            $this->delimiter = ';';
        }
        if (!$this->field_delimiter) {
            $this->field_delimiter = '';
        }
    }

    public function setSource() {
        parent::setSource();
        $this->source_addr = $this->arProfile['SOURCE'];
    }

    public function setDelimiter($value) {
        if ($value) {
            $this->delimiter = $value;
        }
    }

    public function setFieldDelimiter($value) {
        if ($value) {
            $this->field_delimiter = $value;
        }
    }

    // Additional settings of profile
    public function fieldsPreParams() {
        $arFieldsParams = array(
            'title' => GetMessage('ACRIT_IMPORT_STEP2_SUBTIT0_CSV'),
        );
        $arFieldsParams['fields']['section'] = array(
            'DB_FIELD' => 'DELIMITER',
            'TYPE' => 'string',
            'DEFAULT' => ';',
            'LABEL' => GetMessage('ACRIT_IMPORT_SOURCE_DELIMITER_LABEL'),
            'PLACEHOLDER' => '',
            'HINT' => '',
        );
        $arFieldsParams['fields']['first_titles'] = array(
            'DB_FIELD' => 'PARAM_3',
            'TYPE' => 'boolean',
            'DEFAULT' => 'Y',
            'LABEL' => GetMessage("ACRIT_IMPORT_SOURCE_FIRST_TITLES_LABEL"),
            'PLACEHOLDER' => '',
            'HINT' => '',
        );
        $arFieldsParams['fields']['delimiter'] = array(
            'DB_FIELD' => 'PARAM_1',
            'TYPE' => 'string',
            'DEFAULT' => '',
            'LABEL' => GetMessage('ACRIT_IMPORT_SOURCE_MULTIPLE_DELIMITER_LABEL'),
            'PLACEHOLDER' => '',
            'HINT' => '',
        );
        return $arFieldsParams;
    }

    public function fields() {
        $param_has_titles = $this->arProfile['SOURCE_PARAM_3'] != 'N' ? true : false;
        $arSourceFields = array();
        $arRows = $this->get(self::STEP_BY_COUNT, 2);
        $arRow = $arRows[0];
        if (!empty($arRow)) {
            foreach ($arRow as $i => $value) {
                if ($value) {
					$example_row = $param_has_titles ? 1 : 0;
                    $arSourceFields[$i] = array(
                        'ID' => $i,
                        'NAME' => $this->convStrEncoding($value),
                        'EXAMPLE' => $this->convStrEncoding($arRows[$example_row][$i]),
                    );
                }
            }
        }
        return $arSourceFields;
    }

    public function count() {
        $count = 0;
        $param_has_titles = $this->arProfile['SOURCE_PARAM_3'] != 'N' ? true : false;
        $this->setDefaults();
        if ($this->source_addr) {
            $file = new \SplFileObject($this->source_addr);
            $file->setFlags(\SplFileObject::READ_CSV);
            $i = 0;
            while ($arRow = $file->fgetcsv($this->delimiter)) {
                if ($param_has_titles && $i == 0) {
                    $i++;
                    continue;
                }
                $arRow = array_filter($arRow);
                if (empty($arRow)) {
                    $i++;
                    continue;
                }
                $count++;
                $i++;
            }
        }
        return $count;
    }

    public function get($type=self::STEP_NO, $limit=0, $last_item=0) {
        $arRows = array();
        $this->setDefaults();
        $this->setDelimiter($this->arProfile['SOURCE_DELIMITER']);
        if ($type == self::STEP_BY_COUNT) {
            $item_start = $last_item;
            $item_end = $last_item + $limit - 1;
        }
        if ($this->source_addr) {
            $file = new \SplFileObject($this->source_addr);
            $file->setFlags(\SplFileObject::READ_CSV);
            $i = 0;
            while ($arRow = $file->fgetcsv($this->delimiter)) {
                if ($type == self::STEP_BY_COUNT && ($i < $item_start || $i > $item_end)) {
                    break;
                }
                $arRow = array_filter($arRow);
                if (empty($arRow)) {
                    $i++;
                    continue;
                }
                // Fill result array
                $arRows[] = $arRow;
                $i++;
            }
        }
        return $arRows;
    }

    public function import($type=self::STEP_NO, $limit=0, $next_item=0) {
        \CModule::IncludeModule('iblock');
        $item_start = 0;
        $item_end = 0;
        $this->setDefaults();
        $this->setFieldDelimiter($this->arProfile['SOURCE_PARAM_1']);
        $param_has_titles = $this->arProfile['SOURCE_PARAM_3'] != 'N' ? true : false;
        if ($type == self::STEP_BY_COUNT) {
            $item_start = $next_item;
            $item_end = $next_item + $limit - 1;
        }
        elseif ($type == self::STEP_BY_TYME) {
	        $item_start = $next_item;
	        $step_time = $limit;
	        $start_time = time();
        }
        if ($this->source_addr) {
            // Get data from source
            $file = new \SplFileObject($this->source_addr);
            $file->setFlags(\SplFileObject::READ_CSV);
            $i = 0;
            while ($arRow = $file->fgetcsv($this->delimiter)) {
                if (($type == self::STEP_BY_COUNT || $type == self::STEP_BY_TYME) && $i < $item_start) {
                    $i++;
                    continue;
                }
                if ($type == self::STEP_BY_COUNT) {
	                if ($i > $item_end) {
	                    break;
	                }
                }
                elseif ($type == self::STEP_BY_TYME) {
	                $exec_time = time() - $start_time;
	                if ($step_time && $exec_time > $step_time) {
		                $item_end = $i;
		                break;
	                }
                }
                if ($param_has_titles && $item_start == 0 && $i == 0) {
                    $i++;
                    continue;
                }
                foreach($arRow as $key => $value) {
                	$value = $this->convStrEncoding($value);
                    if ($this->field_delimiter && strpos($value, $this->field_delimiter) !== false) {
	                    $value = explode($this->field_delimiter, $value);
                    }
	                $arRow[$key] = $value;
                }
                // Import data into IBlock
                $this->saveIBData($arRow, $i + 1);
                $i++;
            }
            $this->checkOtherItems();
        }
        return ($item_end + 1);
    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit