1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
commerceml_run.php
См. документацию.
1<?php
2//<title>CommerceML</title>
3IncludeModuleLangFile($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/catalog/import_setup_templ.php');
4$startImportExecTime = microtime(true);
5
6global $USER;
9{
10 $bTmpUserCreated = true;
11 if (isset($USER))
12 $USER_TMP = $USER;
13 $USER = new CUser();
14}
15
18
19if (file_exists($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/include/1c_mutator.php"))
20 include($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/include/1c_mutator.php");
21
22ClearVars("f_");
23
25{
28 var $value;
30 var $name;
31 var $r;
32
34 {
35 $this->r=rand();
36 $this->parent=$parent;
37 $this->attributes=$attributes;
38 $this->name=$name;
39 $this->childs=NULL;
40 $this->value=rand();
41 if($parent!=NULL)
42 $this->parent->childs[$name][]=$this;
43 }
44
46 {
47 return (isset($this->attributes[$name]) ? $this->attributes[$name] : null);
48 }
49
50 function XMLSetValue($new_val)
51 {
52 $this->r=rand();
53// echo " SetValue===".$this->name." [".$this->r."] = ".$new_val." \n";
54 $this->value=$new_val;
55 }
56
57 function &select_nodes($str_node)
58 {
59 $tmp = trim($str_node, "/ \r\n\t\0\x0B");
60 if (!($p = mb_strpos($tmp, "/")))
61 $p = mb_strlen($tmp);
62 $str_node = trim(mb_substr($tmp, 0, $p));
63 if('' === $str_node)
64 return $this;
65
66 $tmp = trim(mb_substr($tmp, $p + 1));
67 if('' === $tmp)
68 return $this->childs[$str_node];
69
70 return $this->childs[$str_node][0]->select_nodes($tmp);
71 }
72}
73
75{
77 var $cur;
78 var $xml;
79
80 function Load($file)
81 {
82 if ($fd = fopen($file, "rb"))
83 {
84 $content = fread($fd, filesize($file));
85 fclose ($fd);
86 $this->parse($content);
87 return true;
88 }
89
90 return false;
91 }
92
93 function LoadString(&$text)
94 {
95 if ($text <> '')
96 {
97 $this->parse($text);
98 return true;
99 }
100
101 return false;
102 }
103
104 function unquote($str)
105 {
106 $search = array(
107 "'&(quot|#34);'i",
108 "'&(amp|#38);'i",
109 "'&(lt|#60);'i",
110 "'&(gt|#62);'i",
111 "'&#(\d+);'e"
112 );
113
114 $replace = array(
115 "\"",
116 "&",
117 "<",
118 ">",
119 "chr(\\1)"
120 );
121
122 $str = preg_replace($search, $replace, $str);
123
124 return $str;
125 }
126
127 function parse(&$data) //, $last
128 {
129 $data = preg_replace("#<\!--.*?-->#s", "", $data);
130
131 $pb = mb_strpos($data, "<");
132 while($pb!==false)
133 {
134 $pe = mb_strpos($data, ">", $pb);
135 if($pe === false) break;
136 $tag_cont = mb_substr($data, $pb + 1, $pe - $pb - 1);
137 $pb = mb_strpos($data, "<", $pe);
138
139 $check_str = mb_substr($tag_cont, 0, 1);
140 if($check_str=="?")
141 continue;
142 elseif($check_str=="!")
143 continue;
144 elseif($check_str=="/")
145 $this->endElement(mb_substr($tag_cont, 1));
146 else
147 {
148 $p=0;
149 $ltag_cont = mb_strlen($tag_cont);
150 while(($p < $ltag_cont) && (mb_strpos(" \t\n\r", mb_substr($tag_cont, $p, 1)) === false))
151 $p++;
152 $name = mb_substr($tag_cont, 0, $p);
153 $at = mb_substr($tag_cont, $p);
154 if(mb_strpos($at, "&") !== false)
155 $bAmp = true;
156 else
157 $bAmp = false;
158
159 preg_match_all("/(\\S+)\\s*=\\s*[\"](.*?)[\"]/su", $at, $attrs_tmp);
160 $attrs = array();
161 for($i=0, $intCount = count($attrs_tmp[1]); $i < $intCount; $i++)
162 $attrs[$attrs_tmp[1][$i]] = ($bAmp ? $this->unquote($attrs_tmp[2][$i]) : $attrs_tmp[2][$i]);
163 $this->startElement($name, $attrs);
164 if(mb_substr($tag_cont, -1) === "/")
165 $this->endElement($name);
166 }
167 }
168 }
169
170
171 function startElement($name, $attrs)
172 {
173 $bTemp=false;
174 if($this->cur==NULL)
175 $bTemp=true;
176
177 $this->cur = new XMLNode($this->cur, $attrs, $name);
178
179 if($bTemp)
180 $this->xml = $this->cur;
181 }
182
184 {
185 if($this->cur->parent!=NULL)
186 $this->cur = $this->cur->parent;
187 }
188
189 function cdata($parser,$cdata)
190 {
191 if(trim($cdata)!="")
192 {
193 $this->cur->XMLSetValue(trim($cdata));
194 }
195 }
196
197 function select_nodes_attrib($str_node)
198 {
199 $tmp=$this->select_nodes($str_node);
200 $result=array();
201 for($i=0, $intCount = count($tmp);$i < $intCount;$i++)
202 {
203 $arTemp=$tmp[$i]->attributes;
204 $result[]=$arTemp;
205 }
206
207 return $result;
208 }
209
210 function select_nodes($str_node)
211 {
212 if(!is_object($this->xml)) return array();
213 $result=array(0=>$this->xml);
214 $tmp = explode ("/", $str_node);
215 for($i=2, $intCount = count($tmp);$i<$intCount;$i++)
216 {
217 if($tmp[$i]!="")
218 {
219 if(!is_array($result[0]->childs)) return array();
220 $result = $result[0]->childs[$tmp[$i]];
221 }
222 }
223
224 return $result;
225 }
226}
227
228
229
230function AddSectionsRecursive($parent="", $parent_id=0)
231{
233
234 global $boolTranslitSection, $arTranslitSection;
235
236 global $activateFileData;
237
238 $arChld = $arGrTmp[$tmpid.$parent];
239 if(!is_array($arChld)) return;
240 for($i=0, $intCount = count($arChld); $i<$intCount; $i++)
241 {
242 $GROUP_XML_ID = $arChld[$i]["GROUP_XML_ID"];
243 $GROUP_NAME = $arChld[$i]["GROUP_NAME"];
244
245 $bs = new CIBlockSection();
246 $res = CIBlockSection::GetList(array(), Array("XML_ID"=>$GROUP_XML_ID, "IBLOCK_ID"=>$IBLOCK_ID, 'CHECK_PERMISSIONS' => 'N'));
247 $bNewGroup_tmp = False;
248 if($arr = $res->Fetch())
249 {
250 $GROUP_ID = $arr["ID"];
252 "NAME"=>$GROUP_NAME,
253 "TMP_ID"=>$tmpid,
254 "IBLOCK_SECTION_ID"=>$parent_id
255 );
256 if ($boolTranslitSection)
257 $arFields['CODE'] = CUtil::translit($GROUP_NAME, 'ru', $arTranslitSection);
258 if ('Y' == $activateFileData)
259 $arFields['ACTIVE'] = 'Y';
260 $res = $bs->Update($GROUP_ID, $arFields, false);
261 }
262 else
263 {
264 $bNewGroup_tmp = True;
265 $arFields = Array(
266 "ACTIVE"=>"Y",
267 "IBLOCK_SECTION_ID"=>$parent_id,
268 "IBLOCK_ID"=>$IBLOCK_ID,
269 "NAME"=>$GROUP_NAME,
270 "TMP_ID"=>$tmpid,
271 "XML_ID"=>$GROUP_XML_ID
272 );
273 if ($boolTranslitSection)
274 $arFields['CODE'] = CUtil::translit($GROUP_NAME, 'ru', $arTranslitSection);
275 $GROUP_ID = $bs->Add($arFields, false);
276 $res = ($GROUP_ID>0);
277 }
278
279 if(!$res)
280 {
281 $strImportErrorMessage .= str_replace("#ERROR#", $bs->LAST_ERROR, str_replace("#NAME#", "[".$GROUP_ID."] \"".$GROUP_NAME."\" (".$GROUP_XML_ID.")", GetMessage("CICML_ERROR_ADD_SECTION"))).".<br>";
283 }
284 else
285 {
286 if ($bNewGroup_tmp) $STT_GROUP_ADD++;
287 else $STT_GROUP_UPDATE++;
288
289 $arGroups[$GROUP_XML_ID] = $GROUP_ID;
290 AddSectionsRecursive($GROUP_XML_ID, $GROUP_ID);
291 }
292 }
293}
294
295if (!function_exists("file_get_contents"))
296{
297 function file_get_contents($filename)
298 {
299 $fd = fopen("$filename", "rb");
300 $content = fread($fd, filesize($filename));
301 fclose($fd);
302 return $content;
303 }
304}
305
306
308
313
314if (isset($_FILES["FILE_1C"]) && is_uploaded_file($_FILES["FILE_1C"]["tmp_name"]))
315 $DATA_FILE_NAME = $_FILES["FILE_1C"]["tmp_name"];
316
317if ($DATA_FILE_NAME == '')
318{
319 if ($URL_FILE_1C <> '')
320 {
321 $URL_FILE_1C = Rel2Abs("/", $URL_FILE_1C);
322 if (file_exists($_SERVER["DOCUMENT_ROOT"].$URL_FILE_1C) && is_file($_SERVER["DOCUMENT_ROOT"].$URL_FILE_1C))
323 $DATA_FILE_NAME = $_SERVER["DOCUMENT_ROOT"].$URL_FILE_1C;
324 }
325}
326
327if ($DATA_FILE_NAME == '')
328 $strImportErrorMessage .= GetMessage("CICML_NO_LOAD_FILE")."<br>";
329
331$IBLOCK_TYPE_ID = trim(strval($IBLOCK_TYPE_ID));
332if ($IBLOCK_TYPE_ID <> '')
333{
335 if (!($arIBlockType = $rsIBlockTypes->Fetch()))
336 {
337 $IBLOCK_TYPE_ID = '';
338 }
339}
340if ($IBLOCK_TYPE_ID == '')
341{
342 $IBLOCK_TYPE_ID = COption::GetOptionString("catalog", "default_catalog_1c", "");
343}
344if ($IBLOCK_TYPE_ID == '')
345{
346 $iblocks = CIBlockType::GetList(Array('SORT' => 'ASC'));
347 if ($iblocks->ExtractFields("f_"))
348 $IBLOCK_TYPE_ID = $f_ID;
349}
350
351if ($IBLOCK_TYPE_ID == '')
352 $strImportErrorMessage .= GetMessage("CICML_NO_IBLOCK")."<br>";
353
354if ($outFileAction!="F" && $outFileAction!="H" && $outFileAction!="D")
355 $outFileAction = COption::GetOptionString("catalog", "default_outfile_action", "D");
356
357if ($outFileAction!="F" && $outFileAction!="H")
358 $outFileAction = "D";
359
360if ('' === $strImportErrorMessage)
361{
362 $xml = new CBitrixCommerceCmlXmlParser();
363 $xml_content = file_get_contents($DATA_FILE_NAME);
364
365 if (!$xml_content || $xml_content == '')
366 $strImportErrorMessage .= GetMessage("CICML_NO_LOAD_DATA")."<br>";
367}
368
369if ('' === $strImportErrorMessage)
370{
371 if ($CONVERT_UTF8 != "Y" && $CONVERT_UTF8 != "N")
372 $CONVERT_UTF8 = COption::GetOptionString("catalog", "default_convert_utf8", "N");
373
374 if (true)
375 {
376 $xml_content = \Bitrix\Main\Text\Encoding::convertEncoding($xml_content, $CONVERT_UTF8 == "Y"? "utf-8": "windows-1251", LANG_CHARSET);
377
378 if (!$xml_content || $xml_content == '')
379 {
380 if ($ex = $APPLICATION->GetException())
381 $strImportErrorMessage .= $ex->GetString();
382 else
383 $strImportErrorMessage .= "Error converting from UTF-8"."<br>";
384 }
385 }
386}
387
388$USE_TRANSLIT = (isset($USE_TRANSLIT) && 'Y' == $USE_TRANSLIT ? 'Y' : 'N');
389$ADD_TRANSLIT = (isset($ADD_TRANSLIT) && 'Y' == $ADD_TRANSLIT ? 'Y' : 'N');
390
391if (!isset($keepExistingProperties))
392{
393 $keepExistingProperties = ($outFileAction = "D" ? 'N' : 'Y');
394}
395else
396{
397 $keepExistingProperties = ('N' == $keepExistingProperties ? 'N' : 'Y');
398}
399
401
402global $nameUTF;
403$nameUTF = array();
404include(__DIR__.'/ru/commerceml_run_name.php');
405if (!isset($nameUTF) || !is_array($nameUTF) || empty($nameUTF))
406 $strImportErrorMessage .= GetMessage('CAT_ADM_CML1_IMP_ERR_NAMEUTF').'<br>';
407
408if ('' === $strImportErrorMessage)
409{
410 $xml->LoadString($xml_content);
411
412 $comm = $xml->select_nodes("/BizTalk/Body/".$nameUTF['CommerceInfo']);
413 if (!is_object($comm[0]))
414 {
415 $comm = $xml->select_nodes("/".$nameUTF['CommerceInfo']);
416 if (!is_object($comm[0]))
417 $strImportErrorMessage .= GetMessage("CICML_INVALID_FILE")."<br>";
418 }
419 $strVersion = $comm[0]->GetAttribute($nameUTF['CommerceInfoVersion']);
420 if (null !== $strVersion)
421 {
422 if (version_compare($strVersion, '2.0') >= 0)
423 {
424 $strImportErrorMessage .= GetMessage("CICML_INVALID_VERSION")."<br>";
425 }
426 }
427 if ($comm[0]->name == $nameUTF['Yandex'])
428 {
429 $strImportErrorMessage .= GetMessage('CICML_NO_YANDEX');
430 }
431}
432
433if ('' === $strImportErrorMessage)
434{
435 $arPriceType = array();
436 $offerlists = $comm[0]->select_nodes("/".$nameUTF['OffersList']);
437 if (is_array($offerlists))
438 {
439 for ($i = 0, $intOFCount = count($offerlists); $i < $intOFCount; $i++)
440 {
441 $xOfferListNode = $offerlists[$i];
442
443 $props = $xOfferListNode->select_nodes("/".$nameUTF['PropertyValue']);
444 for ($j = 0, $intPropCount = count($props); $j < $intPropCount; $j++)
445 {
446 $arPriceType[$props[0]->GetAttribute($nameUTF['CatalogID'])] = $props[0]->GetAttribute($nameUTF['PropertyId']);
447 break;
448 }
449 }
450 }
451
452 $SITE_ID = 'ru';
453 $dbSite = CSite::GetByID($SITE_ID);
454 if (!$dbSite->Fetch())
455 {
456 $dbSite = CSite::GetList();
457 $arSite = $dbSite->Fetch();
458 $SITE_ID = $arSite['ID'];
459 }
460
461 $ib = new CIBlock();
462 $el = new CIBlockElement();
463
464 $tmpid = md5(uniqid(""));
465 $arCatalogs = array();
466 $arCatalogsParams = array();
467 $catalogs = $comm[0]->select_nodes("/".$nameUTF['Catalog']);
468 if (is_array($catalogs))
469 {
470 for ($i = 0, $intCatCount = count($catalogs); $i < $intCatCount; $i++)
471 {
472 $xCatNode = $catalogs[$i];
473
474 $IBLOCK_XML_ID = $xCatNode->GetAttribute($nameUTF['ID']);
475 $IBLOCK_NAME = $xCatNode->GetAttribute($nameUTF['Name']);
476 $IBLOCK_DESC = $xCatNode->GetAttribute($nameUTF['Description']);
477
478 $res = CIBlock::GetList(array(), array("=TYPE" => $IBLOCK_TYPE_ID, "=XML_ID" => $IBLOCK_XML_ID, 'CHECK_PERMISSIONS' => 'Y', 'MIN_PERMISSION' => 'W'));
479 $bNewRecord_tmp = false;
480 if ($res_arr = $res->Fetch())
481 {
482 $IBLOCK_ID = $res_arr["ID"];
483 $res = $ib->Update($IBLOCK_ID,
484 array(
485 "NAME" => $IBLOCK_NAME,
486 "TMP_ID" => $tmpid,
487 "DESCRIPTION" => $IBLOCK_DESC
488 )
489 );
491 }
492 elseif ($USER->IsAdmin())
493 {
494 $bNewRecord_tmp = true;
496 "ACTIVE" => "Y",
497 "NAME" => $IBLOCK_NAME,
498 "XML_ID" => $IBLOCK_XML_ID,
499 "TMP_ID" => $tmpid,
500 "IBLOCK_TYPE_ID" => $IBLOCK_TYPE_ID,
501 "LID" => $SITE_ID,
502 "WORKFLOW" => "N",
503 );
504 if ('Y' == $USE_TRANSLIT && 'Y' == $ADD_TRANSLIT)
505 {
506 $arFields['FIELDS'] = array(
507 'CODE' => array(
508 'DEFAULT_VALUE' => array(
509 'TRANSLITERATION' => 'Y',
510 ),
511 ),
512 'SECTION_CODE' => array(
513 'DEFAULT_VALUE' => array(
514 'TRANSLITERATION' => 'Y',
515 ),
516 )
517 );
518 }
519
520 $IBLOCK_ID = $ib->Add($arFields);
521 $res = ($IBLOCK_ID > 0);
522 }
523 else
524 $res = false;
525
526 if (!$res)
527 {
528 $strImportErrorMessage .= str_replace("#ERROR#", $ib->LAST_ERROR, str_replace("#NAME#", "[".$IBLOCK_ID."] \"".$IBLOCK_NAME."\" (".$IBLOCK_XML_ID.")", GetMessage("CICML_ERROR_ADDING_CATALOG"))).".<br>";
530 }
531 else
532 {
533 $boolIBlockTranslit = $USE_TRANSLIT;
534 $boolTranslitElement = false;
535 $boolTranslitSection = false;
536 $arTranslitElement = array();
537 $arTranslitSection = array();
538
539 if ('Y' == $boolIBlockTranslit)
540 {
541 $boolOutTranslit = false;
543 if (isset($arIBlock['FIELDS']['CODE']['DEFAULT_VALUE']))
544 {
545 if ('Y' == $arIBlock['FIELDS']['CODE']['DEFAULT_VALUE']['TRANSLITERATION']
546 && 'Y' == $arIBlock['FIELDS']['CODE']['DEFAULT_VALUE']['USE_GOOGLE'])
547 {
548 $boolOutTranslit = true;
549 }
550 }
551 if (isset($arIBlock['FIELDS']['SECTION_CODE']['DEFAULT_VALUE']))
552 {
553 if ('Y' == $arIBlock['FIELDS']['SECTION_CODE']['DEFAULT_VALUE']['TRANSLITERATION']
554 && 'Y' == $arIBlock['FIELDS']['SECTION_CODE']['DEFAULT_VALUE']['USE_GOOGLE'])
555 {
556 $boolOutTranslit = true;
557 }
558 }
559 if ($boolOutTranslit)
560 {
561 $boolIBlockTranslit = 'N';
562 $strImportErrorMessage .= str_replace("#ERROR#", GetMessage('CATI_USE_CODE_TRANSLIT_OUT'), str_replace("#NAME#", "[".$IBLOCK_ID."] \"".$IBLOCK_NAME."\" (".$IBLOCK_XML_ID.")", GetMessage("CICML_ERROR_ADDING_CATALOG"))).".<br>";
564 continue;
565 }
566
567 if ('Y' == $boolIBlockTranslit)
568 {
569 if (isset($arIBlock['FIELDS']['CODE']['DEFAULT_VALUE']))
570 {
571 $arTransSettings = $arIBlock['FIELDS']['CODE']['DEFAULT_VALUE'];
572 $boolTranslitElement = ('Y' == $arTransSettings['TRANSLITERATION'] ? true : false);
573 $arTranslitElement = array(
574 "max_len" => $arTransSettings['TRANS_LEN'],
575 "change_case" => $arTransSettings['TRANS_CASE'],
576 "replace_space" => $arTransSettings['TRANS_SPACE'],
577 "replace_other" => $arTransSettings['TRANS_OTHER'],
578 "delete_repeat_replace" => ('Y' == $arTransSettings['TRANS_EAT'] ? true : false),
579 "use_google" => ('Y' == $arTransSettings['USE_GOOGLE'] ? true : false),
580 );
581 }
582 if (isset($arIBlock['FIELDS']['SECTION_CODE']['DEFAULT_VALUE']))
583 {
584 $arTransSettings = $arIBlock['FIELDS']['SECTION_CODE']['DEFAULT_VALUE'];
585 $boolTranslitSection = ('Y' == $arTransSettings['TRANSLITERATION'] ? true : false);
586 $arTranslitSection = array(
587 "max_len" => $arTransSettings['TRANS_LEN'],
588 "change_case" => $arTransSettings['TRANS_CASE'],
589 "replace_space" => $arTransSettings['TRANS_SPACE'],
590 "replace_other" => $arTransSettings['TRANS_OTHER'],
591 "delete_repeat_replace" => ('Y' == $arTransSettings['TRANS_EAT'] ? true : false),
592 "use_google" => ('Y' == $arTransSettings['USE_GOOGLE'] ? true : false),
593 );
594 }
595 }
596 }
597
598 if ($bNewRecord_tmp) $STT_CATALOG_ADD++;
599 else $STT_CATALOG_UPDATE++;
600
601 $arCatalogs[$IBLOCK_XML_ID] = $IBLOCK_ID;
602
604 CCatalog::Add(array("IBLOCK_ID" => $IBLOCK_ID));
605
606
608 $ibp = new CIBlockProperty();
609 $props = $xCatNode->select_nodes("/".$nameUTF['Property']);
610
611 for ($j = 0, $intPropCount = count($props); $j < $intPropCount; $j++)
612 {
613 $xPropNode = $props[$j];
614
615 $PROP_XML_ID = $xPropNode->GetAttribute($nameUTF['ID']);
616 $PROP_TYPE = $xPropNode->GetAttribute($nameUTF['DataType']);
617 $PROP_MULTIPLE = ($xPropNode->GetAttribute($nameUTF['Multiple']) == "1" ? "Y" : "N");
618 $PROP_NAME = $xPropNode->GetAttribute($nameUTF['Name']);
619 $PROP_DEF = $xPropNode->GetAttribute($nameUTF['DefaultValue']);
620 if ($PROP_TYPE == "enumeration")
621 $PROP_TYPE = "L";
622 else
623 $PROP_TYPE = "S";
624
625 if ($arPriceType[$IBLOCK_XML_ID] == $PROP_XML_ID)
626 continue;
627
628 $res = CIBlock::GetProperties($IBLOCK_ID, array(), array("IBLOCK_ID" => $IBLOCK_ID, "XML_ID" => $PROP_XML_ID));
629 $bNewRecord_tmp = false;
630 if ($res_arr = $res->Fetch())
631 {
632 $PROP_ID = $res_arr["ID"];
633 $res = $ibp->Update($PROP_ID,
634 array(
635 "NAME" => $PROP_NAME,
636 "TYPE" => $PROP_TYPE,
637 "MULTIPLE" => $PROP_MULTIPLE,
638 "DEFAULT_VALUE" => $PROP_DEF,
639 "TMP_ID" => $tmpid
640 )
641 );
642 }
643 else
644 {
645 $bNewRecord_tmp = true;
647 "NAME" => $PROP_NAME,
648 "ACTIVE" => "Y",
649 "SORT" => "500",
650 "DEFAULT_VALUE" => $PROP_DEF,
651 "XML_ID" => $PROP_XML_ID,
652 "TMP_ID" => $tmpid,
653 "MULTIPLE" => $PROP_MULTIPLE,
654 "PROPERTY_TYPE" => $PROP_TYPE,
655 "IBLOCK_ID" => $IBLOCK_ID
656 );
657 $PROP_ID = $ibp->Add($arFields);
658 $res = (intval($PROP_ID) > 0);
659 }
660
661 if (!$res)
662 {
663 $strImportErrorMessage .= str_replace("#ERROR#", $ibp->LAST_ERROR, str_replace("#NAME#", "[".$PROP_ID."] \"".$PROP_NAME."\" (".$PROP_XML_ID.")", GetMessage("CICML_ERROR_ADD_PROPS"))).".<br>";
665 }
666 else
667 {
668 if ($bNewRecord_tmp) $STT_PROP_ADD++;
669 else $STT_PROP_UPDATE++;
670
671 $arProperties[$PROP_XML_ID] = $PROP_ID;
672 }
673
674 if ($PROP_TYPE == "L")
675 {
676 $pren = new CIBlockPropertyEnum();
677 $arPropertiesEnum[$PROP_XML_ID] = array();
678 $prop_enums = $xPropNode->select_nodes("/".$nameUTF['PropertyVariant']);
679 for ($k = 0, $intEnumPropCount = count($prop_enums); $k < $intEnumPropCount; $k++)
680 {
681 $xPropEnum = $prop_enums[$k];
682 $PROP_ENUM_XML_ID = $xPropEnum->GetAttribute($nameUTF['ID']);
683 $PROP_ENUM_NAME = $xPropEnum->GetAttribute($nameUTF['Name']);
684 $PROP_ENUM_DEF = ($PROP_ENUM_XML_ID == $PROP_DEF ? "Y" : "N");
685
687 "DEF" => $PROP_ENUM_DEF,
688 "TMP_ID" => $tmpid,
689 "VALUE" => $PROP_ENUM_NAME,
690 "PROPERTY_ID" => $PROP_ID,
691 "XML_ID" => $PROP_ENUM_XML_ID
692 );
693 $res = CIBlockPropertyEnum::GetList(array(), array("PROPERTY_ID" => $PROP_ID, "XML_ID" => $PROP_ENUM_XML_ID));
694 if ($arr = $res->Fetch())
695 {
696 $PROP_ENUM_ID = $arr["ID"];
697 $pren->Update($PROP_ENUM_ID, $arFields);
698 }
699 else
700 {
701 $PROP_ENUM_ID = $pren->Add($arFields);
702 }
703 $arPropertiesEnum[$PROP_XML_ID][$PROP_ENUM_XML_ID] = $PROP_ENUM_ID;
704 }
705 }
706 }
707
708 if (function_exists("catalog_property_mutator_1c"))
709 catalog_property_mutator_1c();
710
711 $arGrTmp = array();
712 $groups = $xCatNode->select_nodes("/".$nameUTF['Category']);
713 for ($j = 0, $intGroupCount = count($groups); $j < $intGroupCount; $j++)
714 {
715 $xGroupNode = $groups[$j];
716
717 $GROUP_XML_ID = $xGroupNode->GetAttribute($nameUTF['ID']);
718 $GROUP_PARENT_XML_ID = $xGroupNode->GetAttribute($nameUTF['ParentCategory']);
719 $GROUP_NAME = $xGroupNode->GetAttribute($nameUTF['Name']);
720
721 $arGrTmp[$tmpid.$GROUP_PARENT_XML_ID][] = array(
722 "GROUP_XML_ID" => $GROUP_XML_ID,
723 "GROUP_PARENT_XML_ID" => $GROUP_PARENT_XML_ID,
724 "GROUP_NAME" => $GROUP_NAME
725 );
726 }
727
728 $arGroups = array();
731
732 $arProducts = array();
733 $products = $xCatNode->select_nodes("/".$nameUTF['Product']);
734 for ($j = 0, $intProdCount = count($products); $j < $intProdCount; $j++)
735 {
736 $xProductNode = $products[$j];
737
738 $PRODUCT_XML_ID = $xProductNode->GetAttribute($nameUTF['ID']);
739 $PRODUCT_PARENT_XML_ID = $xProductNode->GetAttribute($nameUTF['ParentCategory']);
740 $PRODUCT_NAME = $xProductNode->GetAttribute($nameUTF['Name']);
741
742 $PROP = array();
743 $GROUPS_ID = array();
744 if ($PRODUCT_PARENT_XML_ID <> '' && $arGroups[$PRODUCT_PARENT_XML_ID] <> '')
745 $GROUPS_ID[] = $arGroups[$PRODUCT_PARENT_XML_ID];
746
747 $prod_groups = $xProductNode->select_nodes("/".$nameUTF['CategoryReference']);
748 for ($k = 0, $intProdGroupCount = count($prod_groups); $k < $intProdGroupCount; $k++)
749 {
750 $xProductGroupsNode = $prod_groups[$k];
751 $PRODUCT_GROUP_XML_ID = $xProductGroupsNode->GetAttribute($nameUTF['IdInCatalog']);
752 if ($arGroups[$PRODUCT_GROUP_XML_ID] <> '')
753 $GROUPS_ID[] = $arGroups[$PRODUCT_GROUP_XML_ID];
754 }
755
756 $prop_vals = $xProductNode->select_nodes("/".$nameUTF['PropertyValue']);
757 for ($k = 0, $intPropValCount = count($prop_vals); $k < $intPropValCount; $k++)
758 {
759 $xPropertyValueNode = $prop_vals[$k];
760
761 $PROP_VAL_PROPERTY_XML_ID = $xPropertyValueNode->GetAttribute($nameUTF['PropertyId']);
762 $PROP_VAL_VALUE = $xPropertyValueNode->GetAttribute($nameUTF['Value']);
763 if ($arProperties[$PROP_VAL_PROPERTY_XML_ID] <> '')
764 {
765 if (is_array($arPropertiesEnum[$PROP_VAL_PROPERTY_XML_ID]))
766 {
767 if ($arPropertiesEnum[$PROP_VAL_PROPERTY_XML_ID][$PROP_VAL_VALUE] <> '')
768 $PROP[$arProperties[$PROP_VAL_PROPERTY_XML_ID]][] = $arPropertiesEnum[$PROP_VAL_PROPERTY_XML_ID][$PROP_VAL_VALUE];
769 }
770 else
771 $PROP[$arProperties[$PROP_VAL_PROPERTY_XML_ID]][] = $PROP_VAL_VALUE;
772 }
773 }
774
775 $arLoadProductArray = array(
776 "MODIFIED_BY" => $USER->GetID(),
777 "IBLOCK_SECTION" => $GROUPS_ID,
778 "IBLOCK_ID" => $IBLOCK_ID,
779 "NAME" => $PRODUCT_NAME,
780 "XML_ID" => $PRODUCT_XML_ID,
781 "TMP_ID" => $tmpid,
782 "PROPERTY_VALUES" => $PROP
783 );
784 if ($boolTranslitElement)
785 $arLoadProductArray['CODE'] = CUtil::translit($PRODUCT_NAME, 'ru', $arTranslitElement);
786
787 $res = CIBlockElement::GetList(array(), array("IBLOCK_ID" => $IBLOCK_ID, "XML_ID" => $PRODUCT_XML_ID));
788 $bNewRecord_tmp = false;
789 if ($arr = $res->Fetch())
790 {
791 $PRODUCT_ID = $arr["ID"];
792 if ('Y' == $activateFileData)
793 $arLoadProductArray['ACTIVE'] = 'Y';
794 if (function_exists("catalog_product_mutator_1c"))
795 {
796 $arLoadProductArray = catalog_product_mutator_1c($arLoadProductArray, $xProductNode, false);
797 }
798 $res = $el->Update($PRODUCT_ID, $arLoadProductArray);
799 }
800 else
801 {
802 $bNewRecord_tmp = true;
803 $arLoadProductArray["ACTIVE"] = "Y";
804 if (function_exists("catalog_product_mutator_1c"))
805 $arLoadProductArray = catalog_product_mutator_1c($arLoadProductArray, $xProductNode, true);
806 $PRODUCT_ID = $el->Add($arLoadProductArray);
807 $res = ($PRODUCT_ID > 0);
808 }
809
810 if (!$res)
811 {
812 $strImportErrorMessage .= str_replace("#ERROR#", $el->LAST_ERROR, str_replace("#NAME#", "[".$PRODUCT_ID."] \"".$PRODUCT_NAME."\" (".$PRODUCT_XML_ID.")", GetMessage("CICML_ERROR_ADDING_PRODUCT"))).".<br>";
814 }
815 else
816 {
817 if ($bNewRecord_tmp) $STT_PRODUCT_ADD++;
818 else $STT_PRODUCT_UPDATE++;
819
820 $arProducts[$PRODUCT_XML_ID] = $PRODUCT_ID;
821 }
822
823
824 $arCatalogsParams[$IBLOCK_XML_ID] = array(
825 "arProperties" => $arProperties,
826 "arPropertiesEnum" => $arPropertiesEnum,
827 "arGroups" => $arGroups,
828 "arProducts" => $arProducts
829 );
830 }
831
832 if ('N' == $keepExistingProperties)
833 {
834 $res = CIBlockProperty::GetList(array(), array("IBLOCK_ID" => $IBLOCK_ID, "!TMP_ID" => $tmpid));
835 while ($arr = $res->Fetch())
836 {
838 }
839
840 $res = CIBlockPropertyEnum::GetList(array(), array("IBLOCK_ID" => $IBLOCK_ID, "!TMP_ID" => $tmpid));
841 while ($arr = $res->Fetch())
842 {
844 }
845 }
846
847 if ($outFileAction != "F")
848 {
849 $bs = new CIBlockSection;
850 $res = CIBlockSection::GetList(array(), array("IBLOCK_ID" => $IBLOCK_ID, "!TMP_ID" => $tmpid, 'CHECK_PERMISSIONS' => 'N'));
851 while ($arr = $res->Fetch())
852 {
853 if ($outFileAction != "H")
854 {
856 }
857 else
858 {
859 $bs->Update($arr["ID"], array("NAME" => $arr["NAME"], "ACTIVE" => "N"));
860 }
861 }
862
863 $res = CIBlockElement::GetList(array(), array("IBLOCK_ID" => $IBLOCK_ID, "!TMP_ID" => $tmpid));
864 while ($arr = $res->Fetch())
865 {
866 if ($outFileAction != "H")
867 {
869 }
870 else
871 {
872 $el->Update($arr["ID"], array("ACTIVE" => "N"));
873 }
874 }
875 }
876
877 }
878 }
879 }
880
881 global $arCurrencies;
883 include(__DIR__.'/ru/commerceml_run_cur.php');
884 if (!isset($arCurrencies) || !is_array($arCurrencies) || empty($arCurrencies))
885 $strImportErrorMessage .= GetMessage('CAT_ADM_CML1_IMP_ERR_CMLCUR').'<br>';
886
887// $arProductsTmp = array();
888// foreach ($arCatalogsParams as $key=>$Val)
889// {
890// $arProductsTmp[$key] = $Val["arProducts"];
891// }
892// $arProductsTmp = $arCatalogsParams[$IBLOCK_XML_ID]["arProducts"];
893 $arProductsTmpA = $arCatalogsParams;
894
895 if (is_array($offerlists))
896 {
897 for ($i = 0, $intOFListCount = count($offerlists); $i < $intOFListCount; $i++)
898 {
899 $xOfferListNode = $offerlists[$i];
900
901 $IBLOCK_XML_ID = $xOfferListNode->GetAttribute($nameUTF['CatalogID']);
902 $OFFER_LIST_DESC = $xOfferListNode->GetAttribute($nameUTF['Description']);
903 $OFFER_LIST_CURRENCY = $arCurrencies[$xOfferListNode->GetAttribute($nameUTF['Currency'])];
904 if ($OFFER_LIST_CURRENCY == '')
905 $OFFER_LIST_CURRENCY = "USD";
906
907 //detect "price type" property
908 $props = $xOfferListNode->select_nodes("/".$nameUTF['PropertyValue']);
909 if (!is_object($props[0]))
910 continue;
911
912 $PRICE_TYPE = $props[0]->GetAttribute($nameUTF['Value']);
913 $res = CCatalogGroup::GetListEx(array(), array("NAME" => $PRICE_TYPE), false, false, array('ID', 'NAME'));
914 if ($arr = $res->Fetch())
915 $PRICE_ID = $arr["ID"];
916 else
917 $PRICE_ID = CCatalogGroup::Add(
918 array(
919 "NAME" => $PRICE_TYPE,
920 "USER_LANG" => array("ru" => $PRICE_TYPE)
921 )
922 );
923
924 $arProducts = $arCatalogsParams[$IBLOCK_XML_ID]["arProducts"];
925
926 $arOffers = array();
927 $offers = $xOfferListNode->select_nodes("/".$nameUTF['Offer']);
928
929 for ($j = 0, $intOtOFCount = count($offers); $j < $intOtOFCount; $j++)
930 {
931 $xOfferNode = $offers[$j];
932
933 $PRODUCT_XML_ID = $xOfferNode->GetAttribute($nameUTF['ProductId']);
934
935 // we shouldn't go to 'continue', but should search product in DB by XML_ID
936 // and in array if absent. Then we'll be able to load only prices without products
937 $PRODUCT_ID = 0;
938 if (!isset($arProducts[$PRODUCT_XML_ID]))
939 {
940 if (!isset($arIBlockCacheTmp[$IBLOCK_XML_ID])
941 || intval($arIBlockCacheTmp[$IBLOCK_XML_ID]) <= 0)
942 {
943 $db_res_tmp = CIBlock::GetList(array(), array("XML_ID" => $IBLOCK_XML_ID));
944 if ($ar_res_tmp = $db_res_tmp->Fetch())
945 {
946 $arIBlockCacheTmp[$IBLOCK_XML_ID] = intval($ar_res_tmp["ID"]);
947 }
948 }
949
950 $db_res_tmp = CIBlockElement::GetList(array(), array("XML_ID" => $PRODUCT_XML_ID, "IBLOCK_ID" => $arIBlockCacheTmp[$IBLOCK_XML_ID]));
951 if ($ar_res_tmp = $db_res_tmp->Fetch())
952 {
953 $PRODUCT_ID = intval($ar_res_tmp["ID"]);
954 $arCatalogsParams[$IBLOCK_XML_ID]["arProducts"][$PRODUCT_XML_ID] = $PRODUCT_ID;
955 }
956 }
957 else
958 {
959 $PRODUCT_ID = intval($arProducts[$PRODUCT_XML_ID]);
960 }
961
962 if ($PRODUCT_ID <= 0)
963 continue;
964
965 unset($arProductsTmpA[$IBLOCK_XML_ID]["arProducts"][$PRODUCT_XML_ID]);
966
967 $OFFER_PRICE = DoubleVal(str_replace(",", ".", $xOfferNode->GetAttribute($nameUTF['Price'])));
968 $OFFER_UPAK = $xOfferNode->GetAttribute($nameUTF['Package']);
969 $OFFER_QUANTITY = intval($xOfferNode->GetAttribute($nameUTF['Amount']));
970 $OFFER_UNIT = $xOfferNode->GetAttribute($nameUTF['Unit']);
971 $OFFER_CURRENCY = $arCurrencies[$xOfferNode->GetAttribute($nameUTF['Currency'])];
972 if ($OFFER_CURRENCY == '')
973 $OFFER_CURRENCY = $OFFER_LIST_CURRENCY;
974
975 $arLoadOfferArray = array(
976 "ID" => $PRODUCT_ID,
977 "QUANTITY" => $OFFER_QUANTITY
978 );
979 if (function_exists("catalog_offer_mutator_1c"))
980 {
981 $arLoadOfferArray = catalog_offer_mutator_1c($arLoadOfferArray, $xOfferNode);
982 }
983
984 $khjk = CCatalogProduct::Add($arLoadOfferArray);
985
987 "PRODUCT_ID" => $PRODUCT_ID,
988 "CATALOG_GROUP_ID" => $PRICE_ID,
989 "PRICE" => $OFFER_PRICE,
990 "CURRENCY" => $OFFER_CURRENCY
991 );
992
994 array(),
995 array(
996 "PRODUCT_ID" => $PRODUCT_ID,
997 "CATALOG_GROUP_ID" => $PRICE_ID
998 )
999 );
1000 if ($arr = $res->Fetch())
1001 $khjk = CPrice::Update($arr["ID"], $arFields);
1002 else
1003 $khjk = CPrice::Add($arFields);
1004 }
1005 }
1006 }
1007
1008 if (COption::GetOptionString("catalog", "deactivate_1c_no_price", "N")=="Y")
1009 {
1010 foreach ($arProductsTmpA as $keyA=>$valA)
1011 {
1012 foreach ($valA["arProducts"] as $keyB=>$valB)
1013 {
1014 $res = $el->Update(intval($valB), Array("ACTIVE" => "N"));
1015 }
1016 }
1017 }
1018
1019 $strImportOKMessage .= str_replace("#TIME#", RoundEx(microtime(true) - $startImportExecTime, 2), GetMessage("CICML_LOAD_TIME"))."<br>";
1020 $strImportOKMessage .= str_replace("#NUM#", ($STT_CATALOG_UPDATE + $STT_CATALOG_ADD), GetMessage("CICML_LOAD_CATALOG"))." ";
1021 $strImportOKMessage .= str_replace("#NUM_UPD#", $STT_CATALOG_UPDATE, str_replace("#NUM_NEW#", $STT_CATALOG_ADD, GetMessage("CICML_LOAD_NEW_UPD")))." ";
1022
1023 if (intval($STT_CATALOG_ERROR) > 0)
1024 $strImportOKMessage .= str_replace("#NUM#", $STT_CATALOG_ERROR, GetMessage("CICML_LOAD_ERROR"));
1025 $strImportOKMessage .= "<br>";
1026
1027 $strImportOKMessage .= str_replace("#NUM#", ($STT_GROUP_UPDATE + $STT_GROUP_ADD), GetMessage("CICML_LOAD_GROUP"))." ";
1028 $strImportOKMessage .= str_replace("#NUM_UPD#", $STT_GROUP_UPDATE, str_replace("#NUM_NEW#", $STT_GROUP_ADD, GetMessage("CICML_LOAD_GROUP_NEW_UPD")))." ";
1029
1030 if (intval($STT_GROUP_ERROR) > 0)
1031 $strImportOKMessage .= str_replace("#NUM#", $STT_GROUP_ERROR, GetMessage("CICML_LOAD_GROUP_ERROR"));
1032 $strImportOKMessage .= "<br>";
1033
1034 $strImportOKMessage .= str_replace("#NUM#", ($STT_PROP_UPDATE + $STT_PROP_ADD), GetMessage("CICML_LOAD_PROPS"))." ";
1035 $strImportOKMessage .= str_replace("#NUM_UPD#", $STT_PROP_UPDATE, str_replace("#NUM_NEW#", $STT_PROP_ADD, GetMessage("CICML_LOAD_PROPS_NEW_UPD")))." ";
1036
1037 if (intval($STT_PROP_ERROR) > 0)
1038 $strImportOKMessage .= str_replace("#NUM#", $STT_PROP_ERROR, GetMessage("CICML_LOAD_PROPS_ERROR"));
1039 $strImportOKMessage .= "<br>";
1040
1041 $strImportOKMessage .= str_replace("#NUM#", ($STT_PRODUCT_UPDATE + $STT_PRODUCT_ADD), GetMessage("CICML_LOAD_PROD"))." ";
1042 $strImportOKMessage .= str_replace("#NUM_UPD#", $STT_PRODUCT_UPDATE, str_replace("#NUM_NEW#", $STT_PRODUCT_ADD, GetMessage("CICML_LOAD_PROD_NEW_UPD")))." ";
1043
1044 if (intval($STT_PRODUCT_ERROR) > 0)
1045 $strImportOKMessage .= str_replace("#NUM#", $STT_PRODUCT_ERROR, GetMessage("CICML_LOAD_PROD_ERROR"));
1046 $strImportOKMessage .= "<br>";
1047}
1048
1050{
1051 if (isset($USER_TMP))
1052 {
1053 $USER = $USER_TMP;
1054 unset($USER_TMP);
1055 }
1056}
global $APPLICATION
Определения include.php:80
$rsIBlockTypes
Определения options.php:1978
static markAsInvalid($iblockId)
Определения manager.php:125
static convertEncoding($data, $charsetFrom, $charsetTo)
Определения encoding.php:17
static Add($arFields)
Определения catalog.php:1209
static GetByID($ID)
Определения catalog.php:281
static IsUserExists()
Определения catalog.php:1812
static Add($fields, $checkExist=true)
Определения product.php:516
static Delete($ID)
Определения iblockelement.php:4684
static GetArrayByID($ID, $FIELD="")
Определения iblock.php:823
static GetProperties($ID, $arOrder=array(), $arFilter=array())
Определения iblock.php:2394
static Delete($ID)
Определения iblockproperty.php:134
static GetList($arOrder=Array(), $arFilter=Array())
Определения iblockproperty.php:14
static ReSort($IBLOCK_ID, $ID=0, $cnt=0, $depth=0, $ACTIVE="Y")
Определения iblocksection.php:1819
static Delete($ID, $bCheckPermissions=true)
Определения iblocksection.php:1276
static GetOptionString($module_id, $name, $def="", $site=false, $bExactSite=false)
Определения option.php:8
static Update($id, $fields, $recount=false)
Определения price.php:225
static Add($fields, $recount=false)
Определения price.php:187
static GetByID($ID)
Определения site.php:749
static GetList($by="sort", $order="asc", $arFilter=[])
Определения site.php:605
endElement($name)
Определения commerceml_run.php:183
startElement($name, $attrs)
Определения commerceml_run.php:171
select_nodes_attrib($str_node)
Определения commerceml_run.php:197
LoadString(&$text)
Определения commerceml_run.php:93
select_nodes($str_node)
Определения commerceml_run.php:210
cdata($parser, $cdata)
Определения commerceml_run.php:189
static Add($arFields)
Определения cataloggroup.php:9
static GetListEx($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
Определения cataloggroup.php:360
static GetList($arOrder=array("SORT"=>"ASC"), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
Определения iblockelement.php:658
static GetList($arOrder=Array("SORT"=>"ASC"), $arFilter=Array(), $bIncCnt=false)
Определения iblock.php:13
static Delete($ID)
Определения iblockpropertyenum.php:201
static GetList($arOrder=array("SORT"=>"ASC", "VALUE"=>"ASC"), $arFilter=array())
Определения iblockpropertyenum.php:18
static GetList($arOrder=array("SORT"=>"ASC"), $arFilter=array(), $bIncCnt=false, $arSelect=array(), $arNavStartParams=false)
Определения iblocksection.php:14
static GetList($arOrder=array("SORT"=> "ASC"), $arFilter=array())
Определения iblocktype.php:53
static GetByID($ID)
Определения iblocktype.php:220
static GetList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
Определения price.php:20
static translit($str, $lang, $params=[])
Определения util.php:629
Определения commerceml_run.php:25
$value
Определения commerceml_run.php:28
XMLSetValue($new_val)
Определения commerceml_run.php:50
& select_nodes($str_node)
Определения commerceml_run.php:57
$parent
Определения commerceml_run.php:27
GetAttribute($name)
Определения commerceml_run.php:45
__construct(&$parent, $attributes, $name)
Определения commerceml_run.php:33
$r
Определения commerceml_run.php:31
$childs
Определения commerceml_run.php:26
$name
Определения commerceml_run.php:30
$attributes
Определения commerceml_run.php:29
$str
Определения commerceml2.php:63
$content
Определения commerceml.php:144
$startImportExecTime
Определения commerceml_g_run.php:20
global $strImportOKMessage
Определения commerceml_g_run.php:35
global $strImportErrorMessage
Определения commerceml_g_run.php:35
if(!function_exists("file_get_contents")) $DATA_FILE_NAME
Определения commerceml_run.php:307
$STT_PROP_ADD
Определения commerceml_run.php:311
$STT_CATALOG_ADD
Определения commerceml_run.php:310
$STT_GROUP_UPDATE
Определения commerceml_run.php:309
global $nameUTF
Определения commerceml_run.php:402
$STT_PRODUCT_ADD
Определения commerceml_run.php:312
$STT_PROP_UPDATE
Определения commerceml_run.php:311
$activateFileData
Определения commerceml_run.php:400
$STT_PRODUCT_ERROR
Определения commerceml_run.php:312
$STT_PRODUCT_UPDATE
Определения commerceml_run.php:312
global $IBLOCK_TYPE_ID
Определения commerceml_run.php:330
AddSectionsRecursive($parent="", $parent_id=0)
Определения commerceml_run.php:230
$ADD_TRANSLIT
Определения commerceml_run.php:389
$STT_PROP_ERROR
Определения commerceml_run.php:311
$STT_GROUP_ADD
Определения commerceml_run.php:309
$STT_GROUP_ERROR
Определения commerceml_run.php:309
$STT_CATALOG_ERROR
Определения commerceml_run.php:310
$STT_CATALOG_UPDATE
Определения commerceml_run.php:310
if(''===$strImportErrorMessage) if(''===$strImportErrorMessage) $USE_TRANSLIT
Определения commerceml_run.php:388
$arCurrencies
Определения commerceml_run_cur.php:4
if(!is_array($prop["VALUES"])) $tmp
Определения component_props.php:203
$arFields
Определения dblapprove.php:5
$data['IS_AVAILABLE']
Определения .description.php:13
$filename
Определения file_edit.php:47
$arr
Определения file_new.php:624
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$arGroups
Определения options.php:1766
$res
Определения filter_act.php:7
$result
Определения get_property_values.php:14
$p
Определения group_list_element_edit.php:23
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
$IBLOCK_ID
Определения csv_new_run.php:168
global $USER
Определения csv_new_run.php:40
$bTmpUserCreated
Определения csv_new_run.php:41
const LANG_CHARSET
Определения include.php:65
$groups
Определения options.php:30
ClearVars($prefix="str_")
Определения tools.php:4623
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
Rel2Abs($curdir, $relpath)
Определения tools.php:3297
GetMessage($name, $aReplace=null)
Определения tools.php:3397
$name
Определения menu_edit.php:35
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
$text
Определения template_pdf.php:79
$i
Определения factura.php:643
</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."%"
Определения waybill.php:936
$props
Определения template.php:269
$k
Определения template_pdf.php:567
$arOffers
Определения yandex_detail.php:75
$arIBlock['PROPERTY']
Определения yandex_detail.php:172
$SITE_ID
Определения yandex_run.php:607
if( $site[ 'SERVER_NAME']==='') if($site['SERVER_NAME']==='') $arProperties
Определения yandex_run.php:644