Здравствуйте! Раньше был портал коробка старый стоял на 7.1 php и bitrixvm
Так уже получилось что решили сделать новый портал на Astre, его полностью настроили ошибок не выдает, стоит php 8.0
Вопрос у нас есть старый импорт, я все сделал по аналогии со старым порталом (доп поля, временная таблица и везде ID подставил нужные), вроде показывает что отработал, но ничего не добавляет, подскажите пожалуйста куда копать
Подозреваю что ошибка идёт от
$bs->Add($arFields);
$added++;
Сам код импорта такой
<?php
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
/*
* Настройки
*/
require($_SERVER["DOCUMENT_ROOT"]."/1c_exchange/core/options.php");
/*
* Функции
*/
require($_SERVER["DOCUMENT_ROOT"]."/1c_exchange/core/functions.php");
/*
* получение файла, проверка на открытие
*/
$reader = new XMLReader();
$xmlfile = GetXML("sections",false);
/*echo "<pre>";
var_dump($xmlfile);
echo "</pre>";*/
if (!$reader->xml($xmlfile)){
$error_text = date("d.m.Y H:i:s")." - Импорт сотрудников: полученный ответ от веб-сервиса не удалось открыть на чтение, как xml файл";
hlb_import_log($error_text);
die($error_text);
}
//очищаем таблицу от предыдущих данных
$sql_delete_request = "DELETE FR OM b_dl_import_company";
/* todo заранее создать
* перебор файла - сохраняем во временную таблицу b_dl_import_company
* CRE ATE TABLE b_dl_import_company
(
`ID` INT NOT NULL AUTO_INCREMENT,
`INDEX` VARCHAR(200),
`DELETE` VARCHAR(10),
`NAME` VARCHAR(255),
`XML_ID` VARCHAR(255),
`HEAD` VARCHAR(255),
`DEPTH_LEVEL` int,
`PARENT_SECTION` VARCHAR(255),
PRIMARY KEY(`ID`)
);
*/
//новый импорт - очищаем текущую временную таблицу
global $DB;
$DB->Query($sql_delete_request);
//чтение ответа веб сервиса
while ($reader->read()):
if ($reader->nodeType == XMLReader::ELEMENT && $reader->name == 'm:object'){
$data = new XMLReader();
$data->xml($reader->readOuterXML());
$Fields = array();
while($data->read()){
switch ($data->name){
case "m:name": $v = $data->readInnerXML(); if(strlen($v)>0 && !isset($Fields["NAME"]))$Fields["NAME"] = $v; break; //внешний код
case "m:loginAD": $v = $data->readInnerXML(); if(strlen(trim($v))>0)$Fields["HEAD"] = trim($v); break; //внешний код
case "m:level": $v = $data->readInnerXML(); if(strlen($v)>0)$Fields["DEPTH_LEVEL"] = $v; break; //внешний код
case "m:subdivisioncode": $v = $data->readInnerXML(); if(strlen($v)>0)$Fields["CODE"] = $v; break; //внешний код
}
if ($data->nodeType == XMLReader::ELEMENT && $data->name == 'm:objectID'){
$dataID = new XMLReader();
$dataID->xml($data->readOuterXML());
while($dataID->read()){
switch ($dataID->name){
case "m:id": $v = $dataID->readInnerXML(); if(strlen($v)>0 && !isset($Fields["XML_ID"]))$Fields["XML_ID"] = $v; break; //внешний код
}
}
}
}
}
if($reader->nodeType == XMLReader::ELEMENT && $reader->name == 'm:parentID'){
$dataParentID = new XMLReader();
$dataParentID->xml($reader->readOuterXML());
while($dataParentID->read()){
switch ($dataParentID->name){
case "m:id": $v = $dataParentID->readInnerXML(); if(strlen($v)>0)$Fields["PARENT_SECTION"] = $v; break; //внешний код
}
}
$sql_request = "INS ERT INTO `b_dl_import_company` (`INDEX`,`NAME`,`XML_ID`,`HEAD`,`DEPTH_LEVEL`,`PARENT_SECTION`) VALUES('{$Fields["CODE"]}','{$Fields["NAME"]}','{$Fields["XML_ID"]}','{$Fields["HEAD"]}',{$Fields["DEPTH_LEVEL"]},'{$Fields["PARENT_SECTION"]}')";
$res = $DB->Query($sql_request);
}
endwhile;
/*
* запрос из временной таблицы с сортировкой по уровню вложенности и сортировкой по ид + ограничением из настроек
*/
$sel ect = "SELE CT *
FR OM `b_dl_import_company`
WH ERE `DEPTH_LEVEL`>0
ORDER BY `DEPTH_LEVEL` ASC, `id` ASC";
$res = $DB->Query($select);
/*
* цикл по результату запроса
*/
$XML_ID_UPDATE = array();
while($ar = $res->Fetch()){
/* todo или всегда полная выгрузка?
* Пометка на удаление? - находим и удаляем
*/
$bs = new CIBlockSection;
/*
* сбор информации по подразделению
*/
$head_id = 0;
if(strlen($ar["HEAD"])>0){
$filter = Array("LOGIN_EQUAL"=> $ar["HEAD"]);
$reshead = CUser::GetList(($by="id"), ($order="desc"), $filter, array("SELECT"=>array("UF_*"), "FIELDS"=>array("ID","LOGIN")));
while($arhead = $reshead->fetch()){
if($arhead["LOGIN"]==$ar["HEAD"])
$head_id = $arhead["ID"];
}
}
$arFields = Array(
"ACTIVE" => "Y",
"XML_ID" => $ar["XML_ID"],
"CODE" => $ar["INDEX"],
"IBLOCK_ID" => 3,
"NAME" => $ar["NAME"],
);
if($head_id>0) {
$arFields["UF_HEAD"] = (int)$head_id;
}else{
$arFields["UF_HEAD"] = '';
}
if($ar["DEPTH_LEVEL"]>0){
$arFields["IBLOCK_SECTION_ID"] = CIBlockSection::GetList(array(), array("IBLOCK_ID"=>3,"XML_ID"=>$ar["PARENT_SECTION"]), false, array("ID"))->Fetch()["ID"];
if(is_null($arFields["IBLOCK_SECTION_ID"]));
}
$XML_ID_UPDATE[] = $ar["XML_ID"];
$resSectionFind = CIBlockSection::GetList(Array(), array("IBLOCK_ID"=>3,"XML_ID"=>$ar["XML_ID"]), Array("nPageSize"=>1), array("ID"));
if($arSectionFind = $resSectionFind->Fetch()){
//обновляем
$bs->Update($arSectionFind["ID"], $arFields);
$updated++;
}else{
//создаем
$bs->Add($arFields);
$added++;
}
}
//удаление
if(!empty($XML_ID_UPDATE)){
$resSectionDel = CIBlockSection::GetList(Array(), array("IBLOCK_ID"=>3,">DEPTH_LEVEL"=>1, "!XML_ID"=>$XML_ID_UPDATE), false, array("ID"));
while ($arDel = $resSectionDel->Fetch()){
$deleted++;
CIBlockSection::Delete($arDel["ID"]);
}
}
/*
* Логируем успешное выполнение
*/
$result = array(
"Выполшнение" => "Успешно",
"Обработано подразделений"=> ($deleted+$updated+$added),
"Удалено" => $deleted,
"Обновлено" => $updated,
"Добавлено" => $added,
);
hlb_import_log($result,"ok");
/*
* Очищаем таблицу b_dl_import_company, возвращаем success
*/
//$DB->Query($sql_delete_request);
die("success");