11namespace Bitrix\Sale\Location\Util;
15include_once(
$_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/modules/main/classes/general/csv_data.php");
21 private $header =
array();
22 private $useHeader =
false;
23 private $legacy =
false;
25 private $convertCharset =
true;
26 private $callbacks =
array();
28 public function __construct($fields_type =
"R", $convertCharset =
true)
30 parent::__construct($fields_type =
"R",
false);
31 $this->convertCharset = $convertCharset;
46 $this->useHeader =
true;
52 if(!$this->useHeader || !$this->__file)
55 if($this->cFieldsType ==
'F')
58 $fPos = ftell($this->__file);
59 fseek($this->__file, $this->__hasBOM ? 3 : 0);
61 $h = fgets($this->__file);
63 fseek($this->__file, $fPos);
65 return explode($this->cDelimiter, $h);
70 if(!($line = $this->
Fetch()))
73 if(!$this->useHeader || $this->legacy)
76 $header = $this->header;
79 $colCount =
count($line);
80 $langFields =
array();
81 for(
$k = 0;
$k < $colCount;
$k++)
83 $fld = trim(array_shift($header));
90 $subFields = explode(
'.', $fld);
92 foreach($subFields as $subfld)
94 $subfld = trim($subfld);
96 $prev[$subfld] =
array();
97 $prev =& $prev[$subfld];
100 $prev = trim($line[
$k]);
103 if(mb_strpos($fld,
'NAME') !==
false)
104 $langFields[] = &$prev;
109 if (is_callable($this->callbacks[
'AFTER_ASSOC_LINE_READ'] ??
''))
111 call_user_func_array(
112 $this->callbacks[
'AFTER_ASSOC_LINE_READ'],
118 if($this->convertCharset && self::FILE_ENCODING !=
SITE_CHARSET)
120 foreach($langFields as &$value)
132 return $this->legacy;
137 if(trim($this->header[0]) ==
'en' && !isset($this->header[1]))
139 $this->legacy =
true;
143 if($bytesRead !==
false)
144 $this->
SetPos($bytesRead);
152 if($lineLimit !==
false && $lineLimit + 1 ==
$i)
155 if(!
$i && !$bytesRead)
162 if($bytesRead !==
false)
163 $bytesRead = $this->
GetPos();
169 public function ReadBlock($file, &$bytesRead =
false, $lineLimit =
false)
171 if(mb_strpos($file,
$_SERVER[
'DOCUMENT_ROOT']) != 0)
172 $file =
$_SERVER[
'DOCUMENT_ROOT'].$file;
174 if(!file_exists($file) || !is_readable($file))
189 return $this->GetAssocLineByHeader($this->header, $this->header);
194 $this->convertCharset = !!$switch;
199 if((
string)
$event !=
'' && is_callable($callback))
200 $this->callbacks[
$event] = $callback;
203 private function GetAssocLineByHeader($line, $header)
206 $lineLen =
count($line);
207 for(
$k = 0;
$k < $lineLen;
$k++)
209 $fld = array_shift($header);
216 $subFields = explode(
'.', $fld);
218 foreach($subFields as $subfld)
220 $subfld = trim($subfld);
222 $prev[$subfld] =
array();
223 $prev =& $prev[$subfld];
226 $prev = trim($line[
$k]);
static convertEncoding($data, $charsetFrom, $charsetTo)
__construct($fields_type="R", $convertCharset=true)
ReadBlockLowLevel(&$bytesRead=false, $lineLimit=false)
ReadBlock($file, &$bytesRead=false, $lineLimit=false)
AddEventCallback($event, $callback)
LoadFile($filename, $firstHeader=true)
SetCharsetConvert($switch)
SetFirstHeader($first_header=false)
SetFieldsType($fields_type="R")
SetDelimiter($delimiter=";")
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
$_SERVER["DOCUMENT_ROOT"]
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"