Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?
- /*$_SERVER["DOCUMENT_ROOT"] = "/home/bitrix/ext_www/agco-rm.sverka.o2k.ru/";*/
- $_SERVER["DOCUMENT_ROOT"] = "/home/mg/hosts/agco-rm.ru/public";
- $DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];
- $_SERVER['SERVER_NAME'] = 'agco-rm.ru';
- define("NO_KEEP_STATISTIC", true);
- define("NOT_CHECK_PERMISSIONS", true);
- set_time_limit(0);
- require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
- CModule::IncludeModule("iblock");
- //Выгрузка Запчасти
- // функция по делению файла на части
- // $filename - путь до исх файла;
- // $sizeporcii - кол-во строк в файле порции;
- // $mask - маска файла порции;
- function createporcii($filename, $sizeporcii, $mask)
- {
- $file = file($filename);//создаёт массив из файлов, где строки являются элементами массива
- //считаем кол-во элементов файла и делим его на выбранное число, в случае дробного числа в результате, округляем его в большую сторону. В результате получаем кол-во временных файлов
- $countporcii = ceil(count($file)/$sizeporcii);
- for ($i = 0; $i < $countporcii; $i++)
- {
- file_put_contents(
- $mask.($i + 1).'.txt',//создаём название временного файла маска.(i+1)
- array_merge(//соединяем массивы
- array_slice($file, $sizeporcii*$i, ($sizeporcii-1)), //указываем, с какого элемента массива и какое кол-во символов извлекаем из общего файла
- array(trim($file[($i+1)*$sizeporcii-1]))// добавляем элемент в массив по ключу равный кол-ву выбранного числа * (i+1)
- )
- );
- }
- return $i;//возвращаем число файлов
- }
- $inf_name="Запчасти";//Название выгрузки
- $filename="MMI.txt";//Название файла
- $directory="office";//Директория
- $IBLOCK_ID=20;
- $iblock_for_imp=23;//ID инфоблока "Дилеры для импорта"
- $del_id="00000";//ID дилера (предустановленный)
- $f_if="00";//ID филиала (предустановленный)
- $fw=$_SERVER["DOCUMENT_ROOT"]."/upload/_aftersales/".$directory."/".$filename;
- if (!is_dir($_SERVER["DOCUMENT_ROOT"]."/import")){//если путь не найден - создаём данный путь
- mkdir($_SERVER["DOCUMENT_ROOT"]."/import", 0775);
- }
- if (!is_dir($_SERVER["DOCUMENT_ROOT"]."/import/archive")){//если путь не найден - создаём данный путь
- mkdir($_SERVER["DOCUMENT_ROOT"]."/import/archive", 0775);
- }
- if (!is_dir($_SERVER["DOCUMENT_ROOT"]."/import/log")){//если путь не найден - создаём данный путь
- mkdir($_SERVER["DOCUMENT_ROOT"]."/import/log", 0775);
- }
- //путь логирования
- $kd_dir=$_SERVER["DOCUMENT_ROOT"]."/import/log/".$directory;
- if (!is_dir($kd_dir)){//если путь не найден - создаём данный путь
- mkdir($kd_dir, 0775);
- }
- $file_fc=$kd_dir."/".$filename."_".date("Ymd").".txt";//файл для логов
- //путь архивирования
- $kd_dir2=$_SERVER["DOCUMENT_ROOT"]."/import/archive/".$directory;
- if (!is_dir($kd_dir2)){//если путь не найден - создаём данный путь
- mkdir($kd_dir2, 0775);
- }
- $file_fc2=$kd_dir2."/".$filename."_".date("Ymd").".txt";//файл для архивирования
- file_put_contents($file_fc,"Начало загрузки ".date("Y-m-d H:i:s")."\n\n", FILE_APPEND);
- $arSelect = Array("ID","IBLOCK_ID","PROPERTY_VERSION_SUC_IMPORT","PROPERTY_DEALER_ID","PROPERTY_BRANCH_ID");
- $arFilter = Array("IBLOCK_ID"=>$iblock_for_imp,"PROPERTY_DEALER_ID"=>$del_id,"PROPERTY_BRANCH_ID"=>$f_if);
- $res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
- if($ob = $res->GetNext()){
- $version=$ob["PROPERTY_VERSION_SUC_IMPORT_VALUE"]+1;
- $for_imp_elem=$ob["ID"];
- }
- file_put_contents($file_fc,"Установлена новая версия выгрузки элементов инфоблока ".$inf_name." - ".$version."\n\n", FILE_APPEND);
- $i=createporcii($fw, 2000, $fw."_");
- $key_str=1;
- for ($k = 1; $i >= $k; $k++){// к переменной
- $temp_file=$fw."_".$k.".txt";
- $content=file($temp_file);
- foreach ($content as $key=>$string) {
- if($key==0 && $k==1){
- file_put_contents($file_fc,"Cтрока № 1 - пропущена\n", FILE_APPEND);
- }
- else{
- $str=$key_str;
- $w[$key]=explode("|", $string);
- file_put_contents($file_fc,"Считана строка №".$str."\n", FILE_APPEND);
- foreach ($w[$key] as $key2 => $value) {
- switch ($key2) {
- case 0:
- #Артикул
- $data["ARTICLE"]=$value;
- break;
- case 1:
- #Описание англ
- $data["DESCRIPTION_EN"]=$value;
- break;
- case 2:
- #Описание рус
- $data["DESCRIPTION_RU"]=$value;
- break;
- case 3:
- #Статус ЗЧ
- $data["STATUS"]=$value;
- break;
- case 4:
- #RRP
- $data["RRP"]=$value;
- break;
- case 5:
- #Валюта
- $data["CURRENCY"]=$value;
- break;
- case 6:
- #Единица измерения
- $data["MEASURE"]=$value;
- break;
- }
- }
- $el = new CIBlockElement;
- $data["VERSION"]=$version;
- foreach ($data as $data_key => $data_value) {
- $data[$data_key]=trim($data_value);
- }
- $arLoadProductArray = Array(
- "MODIFIED_BY" => $USER->GetID(), // элемент изменен текущим пользователем
- "IBLOCK_ID" => $IBLOCK_ID,
- "PROPERTY_VALUES"=> $data,
- "NAME" => $data["ARTICLE"],
- "ACTIVE" => "N",
- );
- //добавляем файлы в бд и записываем в логи результат добавления
- if($PRODUCT_ID = $el->Add($arLoadProductArray)){
- if($suc!=true){
- $suc_array[0]=$PRODUCT_ID;
- $suc=true;
- }
- file_put_contents($file_fc,"Строка ".$str." - добавлена в ИБ (ID=".$PRODUCT_ID.")\n", FILE_APPEND);
- }
- else{
- $error=true;
- file_put_contents($file_fc,"Строка ".$str." - ошибка при добавлении в БД\n", FILE_APPEND);
- }
- unset($data);
- unset($w[$key]);
- }
- $key_str++;
- }
- unlink($temp_file);
- }
- //если нет ошибок при добавлении файлов
- if(!$error && count($suc_array)>0){
- $el = new CIBlockElement;
- $arSelect = Array("ID", "IBLOCK_ID");
- $arFilter = Array("IBLOCK_ID"=>IntVal($IBLOCK_ID), ">=ID"=>$suc_array[0]);
- $res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
- $act_error=0;
- while($ob2 = $res->GetNext()){
- $arLoadProductArray = Array(
- "ACTIVE" => "Y", // активен
- );
- $PRODUCT_ID = $ob2["ID"];
- if($el->Update($PRODUCT_ID, $arLoadProductArray)){
- file_put_contents($file_fc,"ID".$PRODUCT_ID." - активирован\n", FILE_APPEND);
- }
- else{
- file_put_contents($file_fc,"ID".$PRODUCT_ID." - не активирован\n", FILE_APPEND);
- $act_error++;
- }
- }
- file_put_contents($file_fc,"\nАктивированы элементы ".$suc_array[0]." - ".$PRODUCT_ID."\n\n", FILE_APPEND);
- if($act_error===0){
- CIBlockElement::SetPropertyValuesEx($for_imp_elem, false, array("VERSION_SUC_IMPORT" => $version));
- CIBlockElement::SetPropertyValuesEx($for_imp_elem, false, array("DATA_SUC_IMPORT" => date("d.m.Y")));
- }
- //находим элементы предыдущих версий
- $arSelect = Array("ID", "IBLOCK_ID");
- $arFilter = Array("IBLOCK_ID"=>IntVal($IBLOCK_ID), "<ID"=>$suc_array[0]);
- unset($suc_array);
- $res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
- while($ob2 = $res->GetNext()){
- $del_error=false;
- $c=CIBlockElement::Delete($ob2["ID"]);
- $del_error=$c;
- if($del_error){
- file_put_contents($file_fc,"ID".$ob2["ID"]." - удалён\n", FILE_APPEND);
- }
- else{
- file_put_contents($file_fc,"ID".$ob2["ID"]." - не удалён\n", FILE_APPEND);
- }
- }
- // перемещение файла &&unlink($content)
- if(copy($fw, $file_fc2)&&unlink($fw)){
- file_put_contents($file_fc,"\nФайл ".$fw." перемещён в ".$file_fc2."\n", FILE_APPEND);
- }
- else{
- file_put_contents($file_fc,"\nОшибка. Файл ".$fw." не перемещён в ".$file_fc2."\n", FILE_APPEND);
- }
- $scanned_directory = array_diff(scandir($kd_dir2), array('..', '.'));//удаляем лишние линуксовые элементы
- $ar_limit=10;
- if(count($scanned_directory)>$ar_limit){
- unlink($kd_dir2."/".end($scanned_directory));
- file_put_contents("\nФайл ".$file_fc,$kd_dir2."/".end($scanned_directory)." - удалён, т.к. был превышен лимит кол-ва файлов в архиве\n", FILE_APPEND);
- }
- }
- else{
- file_put_contents($file_fc,"\nФайл необходимого формата - отсутствует, либо произошли ошибки при считывании файла. Все операции прерваны.\n", FILE_APPEND);
- }
- file_put_contents($file_fc,"\n\n", FILE_APPEND);
- file_put_contents($file_fc,"Конец загрузки ".date("Y-m-d H:i:s")."\n\n", FILE_APPEND);
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement