konratnox
5/10/2017 - 10:20 AM

Импорт битрикс через стандартный функционал (пример Норбел)

Импорт битрикс через стандартный функционал (пример Норбел)

<?php
set_time_limit(0);

$_SERVER['DOCUMENT_ROOT'] = '/home/site.ru/www/';


$siteHash = trim(file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/upload/norbel_site_hash.txt'));
$md5has = md5_file($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/upload/norbel_site.zip');

if ($siteHash != $md5has) {
    file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/logImportNorbel.txt', "ХЭШ НЕ СОВПАДАЕТ, СЛОМАННЫЙ АРХИВ -> " . date('Y-m-d H:i:s'));
} else {
    file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/logImportNorbel.txt', "Начало проверки файла -> " . date('Y-m-d H:i:s'));

    $lastDateSaved = trim(file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/last_date.txt'));

    $lastDateChanged = date("Y-m-d", filemtime($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/upload/norbel_site.zip'));

    if ($lastDateSaved == $lastDateChanged) {
        file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/logImportNorbel.txt', "\r\nФАЙЛ НЕ ИЗМЕНЕН, ПОСЛЕДНЕЕ ИЗМЕНЕНИЕ -> " . $lastDateSaved, FILE_APPEND);
    } else {
        file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/logImportNorbel.txt', "\r\nФайл свежий -> " . date('Y-m-d H:i:s') . "\r\n", FILE_APPEND);

        if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/upload/1c_catalog/import.xml')) {
            unlink($_SERVER['DOCUMENT_ROOT'] . '/upload/1c_catalog/import.xml');
        }

        $zip = new ZipArchive;
        $zip->open($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/upload/norbel_site.zip');
        $zip->extractTo($_SERVER['DOCUMENT_ROOT'] . '/upload/1c_catalog/');
        $zip->close();
        
        if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/upload/1c_catalog/norbel_site.xml')) {
            rename($_SERVER['DOCUMENT_ROOT'] . '/upload/1c_catalog/norbel_site.xml', $_SERVER['DOCUMENT_ROOT'] . '/upload/1c_catalog/import.xml');
        }

        if (!file_exists($_SERVER['DOCUMENT_ROOT'] . '/upload/1c_catalog/import.xml')) {
            file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/logImportNorbel.txt', "\r\nАРХИВ НЕ РАСПАКОВАН -> " . date('Y-m-d H:i:s'), FILE_APPEND);
        } else {

            file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/logImportNorbel.txt', "\r\nАрхив распакован -> " . date('Y-m-d H:i:s'), FILE_APPEND);
            file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/last_date.txt', date('Y-m-d'));

            $STATUS = 'progress';

            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, "https://site.ru/bitrix/admin/1c_exchange.php?type=sale&mode=checkauth");
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_USERPWD, 'login:parole');
            $output = curl_exec($ch);
            curl_close($ch);

            $output = explode("\n", $output);


            if ($output[0] == "success") {
                file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/logImportNorbel.txt', "\r\nСтарт импорта -> " . date('Y-m-d H:i:s'), FILE_APPEND);
                $PHPSESSID = $output[1] . '=' . $output[2];

                while ($STATUS == "progress") {
                    sleep(10);

                    $ch = curl_init();
                    curl_setopt($ch, CURLOPT_URL, "https://site.ru/bitrix/admin/1c_exchange.php?type=catalog&mode=import&filename=import.xml");
                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                    curl_setopt($ch, CURLOPT_COOKIE, $PHPSESSID);
                    $output = curl_exec($ch);
                    curl_close($ch);
                    $output = explode("\n", iconv("CP1251", "UTF-8", $output));
                    $STATUS = $output[0];
                    file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/logImportNorbel.txt', "\r\n" . $output[1] . " -> " . date('Y-m-d H:i:s'), FILE_APPEND);

                }

                if ($STATUS == "success") {
                    include($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php');

                    CModule::IncludeModule('iblock');
                    $IBLOCK_ID = 2;

                    //  обновление цен
                    $res = CIBlockElement::GetList(
                        array("ID" => "ASC"),
                        array("IBLOCK_ID" => $IBLOCK_ID),
                        false,
                        array("nTopCount" => 999999),
                        array("ID", "DETAIL_PICTURE", "PROPERTY_KARTINKA", "PROPERTY_TSENA_V_RUBLYAKH")
                    );
                    while ($ar_res = $res->GetNext()) {

                        $PRODUCT_ID = $ar_res["ID"];
                        $PRICE = ceil($ar_res["PROPERTY_TSENA_V_RUBLYAKH_VALUE"]);
                        CPrice::SetBasePrice($PRODUCT_ID, $PRICE, "RUB");

                        Bitrix\Iblock\PropertyIndex\Manager::updateElementIndex($IBLOCK_ID, $PRODUCT_ID); // обновление фасетных индексов
                    }

                    file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/logImportNorbel.txt', "\r\nЦены и фасетные индексы обновлены -> " . date('Y-m-d H:i:s'), FILE_APPEND);


                    //  деактивация пустых разделов  
                    $db_list = CIBlockSection::GetList(
                        array("ID" => "ASC"),
                        array("ACTIVE" => "Y", "IBLOCK_ID" => $IBLOCK_ID, "ELEMENT_SUBSECTIONS" => "Y", "CNT_ACTIVE" => "Y"),
                        true,
                        array("IBLOCK_ID", "ID", "NAME", "IBLOCK_SECTION_ID"),
                        false
                    );
                    while ($ar_result = $db_list->GetNext()) {
                        if ($ar_result['ELEMENT_CNT'] == 0) {
                            $bs = new CIBlockSection;
                            $bs->Update($ar_result['ID'], array("ACTIVE" => "N"));
                        }
                    }
                    file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/logImportNorbel.txt', "\r\nПустые разделы деактивированы -> " . date('Y-m-d H:i:s'), FILE_APPEND);

                    //  обновление картинок  

                    $elementDB = CIBlockElement::GetList(
                        array("SORT" => "ASC"),
                        array("ACTIVE" => "Y", "IBLOCK_ID" => $IBLOCK_ID, "PROPERTY_AUTO_EMPTY_IMAGE" => 37),
                        false,
                        false,
                        array("ID", "IBLOCK_ID")
                    );
                    while ($elementArray = $elementDB->GetNext()) {
                        $el = new CIBlockElement;
                        $res = $el->Update($elementArray['ID'], array("PREVIEW_PICTURE" => array('del' => 'Y')));
                        CIBlockElement::SetPropertyValuesEx($elementArray['ID'], $elementArray['IBLOCK_ID'], array("AUTO_EMPTY_IMAGE" => false));
                    }
                    $elementDB = CIBlockElement::GetList(
                        array("ID" => "ASC"),
                        array("ACTIVE" => "Y", "PREVIEW_PICTURE" => false, "IBLOCK_ID" => 2, "!PROPERTY_KARTINKA" => "http://www.computermarket.ru/files/sitedata/Catalog/__stub.jpg"),
                        false,
                        false,
                        array("ID", "IBLOCK_ID", "PROPERTY_KARTINKA")
                    );
                    while ($elementArray = $elementDB->GetNext()) {
                        $pictUrl = str_replace('files/sitedata/Catalog', 'files/sitedatanorbel/Catalog', $elementArray['PROPERTY_KARTINKA_VALUE']);
                        $pageHeaders = get_headers($pictUrl);
                        if ($pageHeaders[0] == 'HTTP/1.1 200 OK') {
                            $propArray = array(
                                "PREVIEW_PICTURE" => CFile::MakeFileArray($pictUrl)
                            );
                        } else {
                            $propArray = array(
                                "PREVIEW_PICTURE" => CFile::MakeFileArray('https://site.ru/local/templates/.default/components/bitrix/catalog/catalog_with_filter/bitrix/catalog.section/.default/images/no_photo.png')
                            );
                            CIBlockElement::SetPropertyValuesEx($elementArray['ID'], $elementArray['IBLOCK_ID'], array("AUTO_EMPTY_IMAGE" => 37));
                        }
                        $el = new CIBlockElement;
                        $res = $el->Update($elementArray['ID'], $propArray);
                    }
                    file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/logImportNorbel.txt', "\r\nКартинки обновлены -> " . date('Y-m-d H:i:s'), FILE_APPEND);
                }

            }

            sleep(10);
        }
    }

}


$message = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/logImportNorbel.txt');

$to = 'q';
$toBCC = 'q';
$subject = 'Иqweл';
$headers = 'From: eqwe' . "\r\n" .
    'To: eqwe' . "\r\n" .
    'Bcc: ' . $toBCC . "\r\n" .
    'Reply-To: eqwe' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);


?>