Your IP : 216.73.216.170


Current Path : /home/bitrix/ext_www/mr.yacl.site/demo/
Upload File :
Current File : /home/bitrix/ext_www/mr.yacl.site/demo/4_meeting_rooms.php

<?php

use Bitrix\Main\Application;
use Bitrix\Main\InvalidOperationException;
use Bitrix\Main\Loader;
use Bitrix\Main\UserField\Types\EnumType;
use Bitrix\Main\UserTable;
use Bitrix\Main\Web\MimeType;
use Faker\Factory;
use Korus\Main\Orm\Iblock\Manager;

define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS", true);
define("BX_CRONTAB", true);
define('BX_WITH_ON_AFTER_EPILOG', true);
define('BX_NO_ACCELERATOR_RESET', true);
define("CRON_RUN", true);

if (empty($_SERVER["DOCUMENT_ROOT"])) {
    $_SERVER["DOCUMENT_ROOT"] = realpath(dirname(__DIR__));
}
$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];

require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
require($_SERVER["DOCUMENT_ROOT"] . "/vendor/autoload.php");

@set_time_limit(0);
@ignore_user_abort(true);

Loader::includeModule('korus.main');

$iblockManager = Manager::getInstance()->getProviderByCode('meeting_rooms_s1', 'events');

$arSectionsMap = [];
$secTable = $iblockManager->getSectionTableClassName();
$db = $secTable::query()
    ->setSelect(['ID', 'NAME'])
    ->where('ACTIVE', 'Y')
    ->where('IBLOCK_ID', $secTable::getIblockId())
    ->exec();
while ($row = $db->fetch()) {
    $arSectionsMap[$row['NAME']] = $row['ID'];
}

/** @var \CUserTypeManager */
global $USER_FIELD_MANAGER;
$UF = $USER_FIELD_MANAGER->GetUserFields($secTable::getUfId());
EnumType::getEnumList($UF['UF_CITY']);

$coordinators = [];
$db = UserTable::query()
    ->setSelect(['ID'])
    ->where('WORK_POSITION', 'Директор по персоналу')
    ->setOrder(['ID'])
    ->exec();
while ($row = $db->fetch()) {
    $coordinators[] = $row['ID'];
}

$connection = Application::getConnection();
$connection->startTransaction();
try {
    $faker = Factory::create('ru_RU');

    $counter = 0;
    $csvFile = new \CCSVData();
    $csvFile->SetFirstHeader(true);
    $csvFile->SetDelimiter(',');
    $csvFile->LoadFile(Application::getDocumentRoot() . '/demo/src/meeting_rooms.csv');
    while ($row = $csvFile->Fetch()) {
        var_dump($row);

        $uploadPath = Application::getDocumentRoot() . '/demo/src/upload/meeting_rooms';
        CheckDirPath($uploadPath . '/');

        list($title, $description, $city, $agreement, $img) = array_map('trim', $row);
        $agreement = $agreement == 'Да';
        $img = sprintf('%s/%s', $uploadPath, $img);

//        $imgUrl = trim($row[5]);
//        if ($imgUrl) {
//            $path = sprintf('%s/%s', $uploadPath, $code);
//            $ext = pathinfo($imgUrl, PATHINFO_EXTENSION);
//            if ($ext) {
//                $path .= '.' . $ext;
//            }
//            if (false === file_put_contents($path, file_get_contents($imgUrl))) {
//                ShowError('Не удалось скачать файл ' . $imgUrl);
//            }
//            if (!$ext) {
//                $ext = array_search(MimeType::getByFilePath($path), MimeType::getMimeTypeList());
//                if ($ext) {
//                    rename($path, $path . '.' . $ext);
//                }
//            }
//        }

        if (!isset($arSectionsMap[$title])) {
            $arFields = [
                "ACTIVE" => "Y",
                "IBLOCK_ID" => $secTable::getIblockId(),
                "NAME" => $title,
                "CODE" => $faker->unique()->numerify('demo_###'),
                "DESCRIPTION" => $description,
                "UF_CITY" => array_search($city, $UF['UF_CITY']['USER_TYPE']['FIELDS']),
                "UF_MATCHING" => (int)$agreement,
            ];

            if (file_exists($img) && MimeType::isImage(MimeType::getByFilePath($img))) {
                $arImg = \CFile::MakeFileArray($img);
                if ($arImg) {
                    $arImg["MODULE_ID"] = "iblock";
                    $arFields['PICTURE'] = $arImg;
                }
            }

            if ($agreement) {
                $arFields['UF_MATCHING_MANAGER'] = $coordinators[(int)($city != 'Москва')];
            }

            $sec = new \CIBlockSection();
            $id = $sec->Add($arFields);
            if (!$id) {
                throw new InvalidOperationException(sprintf('Не удалось создать раздел "%s": %s', $title, $sec->LAST_ERROR));
            }
        }
        $counter++;
    }

    $connection->commitTransaction();
} catch (\Exception $e) {
    ShowError($e->getMessage());
    $connection->rollbackTransaction();
}