Advertisement
vitvayti

Untitled

Dec 4th, 2018
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 10.06 KB | None | 0 0
  1. <?
  2. /*$_SERVER["DOCUMENT_ROOT"] = "/home/bitrix/ext_www/agco-rm.sverka.o2k.ru/";*/
  3. $_SERVER["DOCUMENT_ROOT"] = "/home/mg/hosts/agco-rm.ru/public";
  4. $DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];
  5. $_SERVER['SERVER_NAME'] = 'agco-rm.ru';
  6.  
  7.  
  8. define("NO_KEEP_STATISTIC", true);
  9. define("NOT_CHECK_PERMISSIONS", true);
  10. set_time_limit(0);
  11. require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
  12. CModule::IncludeModule("iblock");
  13. //Выгрузка Запчасти
  14.  
  15. // функция по делению файла на части
  16. // $filename - путь до исх файла;
  17. // $sizeporcii - кол-во строк в файле порции;
  18. // $mask - маска файла порции;
  19. function createporcii($filename, $sizeporcii, $mask)
  20. {
  21.    $file = file($filename);//создаёт массив из файлов, где строки являются элементами массива
  22.  
  23.    //считаем кол-во элементов файла и делим его на выбранное число, в случае дробного числа в результате, округляем его в большую сторону. В результате получаем кол-во временных файлов
  24.    $countporcii = ceil(count($file)/$sizeporcii);
  25.    for ($i = 0; $i < $countporcii; $i++)
  26.    {
  27.        file_put_contents(
  28.             $mask.($i + 1).'.txt',//создаём название временного файла маска.(i+1)
  29.             array_merge(//соединяем массивы
  30.                 array_slice($file, $sizeporcii*$i, ($sizeporcii-1)), //указываем, с какого элемента массива и какое кол-во символов извлекаем из общего файла
  31.                 array(trim($file[($i+1)*$sizeporcii-1]))// добавляем элемент в массив по ключу равный кол-ву выбранного числа * (i+1)
  32.             )
  33.         );
  34.    }
  35.    return $i;//возвращаем число файлов
  36. }
  37.  
  38. $inf_name="Запчасти";//Название выгрузки
  39. $filename="MMI.txt";//Название файла
  40. $directory="office";//Директория
  41. $IBLOCK_ID=20;
  42.  
  43.  
  44. $iblock_for_imp=23;//ID инфоблока "Дилеры для импорта"
  45. $del_id="00000";//ID дилера (предустановленный)
  46. $f_if="00";//ID филиала (предустановленный)
  47.  
  48. $fw=$_SERVER["DOCUMENT_ROOT"]."/upload/_aftersales/".$directory."/".$filename;
  49.  
  50.  
  51. if (!is_dir($_SERVER["DOCUMENT_ROOT"]."/import")){//если путь не найден - создаём данный путь
  52.     mkdir($_SERVER["DOCUMENT_ROOT"]."/import", 0775);
  53. }
  54. if (!is_dir($_SERVER["DOCUMENT_ROOT"]."/import/archive")){//если путь не найден - создаём данный путь
  55.     mkdir($_SERVER["DOCUMENT_ROOT"]."/import/archive", 0775);
  56. }
  57. if (!is_dir($_SERVER["DOCUMENT_ROOT"]."/import/log")){//если путь не найден - создаём данный путь
  58.     mkdir($_SERVER["DOCUMENT_ROOT"]."/import/log", 0775);
  59. }
  60.  
  61. //путь логирования
  62. $kd_dir=$_SERVER["DOCUMENT_ROOT"]."/import/log/".$directory;
  63. if (!is_dir($kd_dir)){//если путь не найден - создаём данный путь
  64.     mkdir($kd_dir, 0775);
  65. }
  66. $file_fc=$kd_dir."/".$filename."_".date("Ymd").".txt";//файл для логов
  67.  
  68.  
  69. //путь архивирования
  70. $kd_dir2=$_SERVER["DOCUMENT_ROOT"]."/import/archive/".$directory;
  71. if (!is_dir($kd_dir2)){//если путь не найден - создаём данный путь
  72.     mkdir($kd_dir2, 0775);
  73. }
  74. $file_fc2=$kd_dir2."/".$filename."_".date("Ymd").".txt";//файл для архивирования
  75.  
  76. file_put_contents($file_fc,"Начало загрузки ".date("Y-m-d H:i:s")."\n\n", FILE_APPEND);
  77.  
  78.  
  79. $arSelect = Array("ID","IBLOCK_ID","PROPERTY_VERSION_SUC_IMPORT","PROPERTY_DEALER_ID","PROPERTY_BRANCH_ID");
  80. $arFilter = Array("IBLOCK_ID"=>$iblock_for_imp,"PROPERTY_DEALER_ID"=>$del_id,"PROPERTY_BRANCH_ID"=>$f_if);
  81. $res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
  82. if($ob = $res->GetNext()){
  83.     $version=$ob["PROPERTY_VERSION_SUC_IMPORT_VALUE"]+1;
  84.     $for_imp_elem=$ob["ID"];
  85. }
  86.  
  87.  
  88. file_put_contents($file_fc,"Установлена новая версия выгрузки элементов инфоблока ".$inf_name." - ".$version."\n\n", FILE_APPEND);
  89.  
  90. $i=createporcii($fw, 2000, $fw."_");
  91.  
  92. $key_str=1;
  93. for ($k = 1; $i >= $k; $k++){// к переменной
  94.     $temp_file=$fw."_".$k.".txt";
  95.     $content=file($temp_file);
  96.  
  97.    
  98.     foreach ($content as $key=>$string) {
  99.         if($key==0 && $k==1){
  100.             file_put_contents($file_fc,"Cтрока № 1 - пропущена\n", FILE_APPEND);
  101.         }
  102.         else{
  103.             $str=$key_str;
  104.  
  105.             $w[$key]=explode("|", $string);
  106.            
  107.             file_put_contents($file_fc,"Считана строка №".$str."\n", FILE_APPEND);
  108.  
  109.  
  110.             foreach ($w[$key] as $key2 => $value) {
  111.                 switch ($key2) {
  112.                     case 0:
  113.                         #Артикул
  114.                         $data["ARTICLE"]=$value;
  115.                         break;
  116.                        
  117.                     case 1:
  118.                         #Описание англ
  119.                         $data["DESCRIPTION_EN"]=$value;
  120.                         break;
  121.  
  122.                     case 2:
  123.                         #Описание рус
  124.                         $data["DESCRIPTION_RU"]=$value;
  125.                         break;
  126.  
  127.                     case 3:
  128.                         #Статус ЗЧ
  129.                         $data["STATUS"]=$value;
  130.                         break;
  131.  
  132.                     case 4:
  133.                         #RRP
  134.                         $data["RRP"]=$value;
  135.                         break;
  136.  
  137.                     case 5:
  138.                         #Валюта
  139.                         $data["CURRENCY"]=$value;
  140.                         break;
  141.                     case 6:
  142.                         #Единица измерения
  143.                        $data["MEASURE"]=$value;
  144.                         break;
  145.  
  146.                 }
  147.             }
  148.             $el = new CIBlockElement;
  149.  
  150.             $data["VERSION"]=$version;
  151.             foreach ($data as $data_key => $data_value) {
  152.                 $data[$data_key]=trim($data_value);
  153.             }
  154.            
  155.            
  156.             $arLoadProductArray = Array(
  157.               "MODIFIED_BY"    => $USER->GetID(), // элемент изменен текущим пользователем
  158.               "IBLOCK_ID"      => $IBLOCK_ID,
  159.               "PROPERTY_VALUES"=> $data,
  160.               "NAME"           => $data["ARTICLE"],
  161.               "ACTIVE"         => "N",
  162.               );
  163.  
  164.            
  165.  
  166.             //добавляем файлы в бд и записываем в логи результат добавления
  167.             if($PRODUCT_ID = $el->Add($arLoadProductArray)){
  168.                 if($suc!=true){
  169.                     $suc_array[0]=$PRODUCT_ID;
  170.                     $suc=true;
  171.                 }
  172.                 file_put_contents($file_fc,"Строка ".$str." - добавлена в ИБ (ID=".$PRODUCT_ID.")\n", FILE_APPEND);
  173.             }
  174.             else{
  175.                 $error=true;
  176.                 file_put_contents($file_fc,"Строка ".$str." - ошибка при добавлении в БД\n", FILE_APPEND);
  177.             }
  178.  
  179.             unset($data);
  180.             unset($w[$key]);
  181.         }
  182.  
  183.         $key_str++;
  184.     }
  185.  
  186.     unlink($temp_file);
  187. }
  188.  
  189. //если нет ошибок при добавлении файлов
  190. if(!$error && count($suc_array)>0){
  191.     $el = new CIBlockElement;
  192.     $arSelect = Array("ID", "IBLOCK_ID");
  193.     $arFilter = Array("IBLOCK_ID"=>IntVal($IBLOCK_ID), ">=ID"=>$suc_array[0]);
  194.     $res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
  195.     $act_error=0;
  196.     while($ob2 = $res->GetNext()){
  197.         $arLoadProductArray = Array(
  198.             "ACTIVE"         => "Y",            // активен
  199.         );
  200.  
  201.         $PRODUCT_ID = $ob2["ID"];
  202.         if($el->Update($PRODUCT_ID, $arLoadProductArray)){
  203.             file_put_contents($file_fc,"ID".$PRODUCT_ID." - активирован\n", FILE_APPEND);
  204.         }
  205.         else{
  206.             file_put_contents($file_fc,"ID".$PRODUCT_ID." - не активирован\n", FILE_APPEND);
  207.             $act_error++;
  208.         }
  209.     }
  210.  
  211.  
  212.     file_put_contents($file_fc,"\nАктивированы элементы ".$suc_array[0]." - ".$PRODUCT_ID."\n\n", FILE_APPEND);
  213.  
  214.  
  215.     if($act_error===0){
  216.         CIBlockElement::SetPropertyValuesEx($for_imp_elem, false, array("VERSION_SUC_IMPORT" => $version));
  217.         CIBlockElement::SetPropertyValuesEx($for_imp_elem, false, array("DATA_SUC_IMPORT" => date("d.m.Y")));
  218.     }
  219.  
  220.  
  221.     //находим элементы предыдущих версий
  222.     $arSelect = Array("ID", "IBLOCK_ID");
  223.     $arFilter = Array("IBLOCK_ID"=>IntVal($IBLOCK_ID), "<ID"=>$suc_array[0]);
  224.     unset($suc_array);
  225.    
  226.     $res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
  227.     while($ob2 = $res->GetNext()){
  228.         $del_error=false;
  229.         $c=CIBlockElement::Delete($ob2["ID"]);
  230.         $del_error=$c;
  231.  
  232.         if($del_error){
  233.             file_put_contents($file_fc,"ID".$ob2["ID"]." - удалён\n", FILE_APPEND);
  234.         }
  235.         else{
  236.             file_put_contents($file_fc,"ID".$ob2["ID"]." - не удалён\n", FILE_APPEND);
  237.            
  238.         }
  239.     }
  240.  
  241.  
  242.     // перемещение файла &&unlink($content)
  243.     if(copy($fw, $file_fc2)&&unlink($fw)){
  244.         file_put_contents($file_fc,"\nФайл ".$fw." перемещён в ".$file_fc2."\n", FILE_APPEND);
  245.     }
  246.     else{
  247.         file_put_contents($file_fc,"\nОшибка. Файл ".$fw." не перемещён в ".$file_fc2."\n", FILE_APPEND);
  248.     }
  249.  
  250.     $scanned_directory = array_diff(scandir($kd_dir2), array('..', '.'));//удаляем лишние линуксовые элементы
  251.  
  252.     $ar_limit=10;
  253.     if(count($scanned_directory)>$ar_limit){
  254.         unlink($kd_dir2."/".end($scanned_directory));
  255.         file_put_contents("\nФайл ".$file_fc,$kd_dir2."/".end($scanned_directory)." - удалён, т.к. был превышен лимит кол-ва файлов в архиве\n", FILE_APPEND);
  256.     }
  257. }
  258. else{
  259.     file_put_contents($file_fc,"\nФайл необходимого формата - отсутствует, либо произошли ошибки при считывании файла. Все операции прерваны.\n", FILE_APPEND);
  260. }
  261. file_put_contents($file_fc,"\n\n", FILE_APPEND);
  262. file_put_contents($file_fc,"Конец загрузки ".date("Y-m-d H:i:s")."\n\n", FILE_APPEND);
  263.  
  264.  
  265. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement