Current Path : /home/bitrix/ext_www/mr.yacl.site/demo/ |
Current File : /home/bitrix/ext_www/mr.yacl.site/demo/1_employees.php |
<?php use Bitrix\Main\Application; use Bitrix\Main\Config\Option; use Bitrix\Main\InvalidOperationException; use Bitrix\Main\Loader; use Bitrix\Main\PhoneNumber\Format; use Bitrix\Main\PhoneNumber\Parser; 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('departments', 'structure'); $rootId = null; $arSectionsMap = []; $secTable = $iblockManager->getSectionTableClassName(); $db = $secTable::query() ->setSelect(['ID', 'NAME', 'DEPTH_LEVEL']) ->where('ACTIVE', 'Y') ->where('IBLOCK_ID', $secTable::getIblockId()) ->whereBetween('DEPTH_LEVEL', 1, 3) ->setOrder(['LEFT_MARGIN']) ->exec(); while ($row = $db->fetch()) { switch ($row['DEPTH_LEVEL']) { case 1: $rootId = $row['ID']; break; case 2: $parent = $row; if (!isset($arSectionsMap[$row['NAME']])) { $arSectionsMap[$row['NAME']] = [ 'ID' => $row['ID'], 'SECTIONS' => [] ]; } break; case 3: $arSectionsMap[$parent['NAME']]['SECTIONS'][$row['NAME']] = $row['ID']; break; } } $imagesPath = Application::getDocumentRoot() . '/demo/src/upload/employees'; $images = array_diff(scandir($imagesPath), ['.', '..']); $phoneFilter = function ($v) { return '(35222)' != substr($v, 0, 7); }; $connection = Application::getConnection(); $connection->startTransaction(); try { $faker = Factory::create('ru_RU'); $userGroups = Option::get('main', 'new_user_registration_def_group'); $userGroups = explode(',', $userGroups); if (!$rootId) { $arFields = [ "ACTIVE" => 'Y', "IBLOCK_ID" => $secTable::getIblockId(), "NAME" => 'Компания', "CODE" => $faker->unique()->numerify('demo_###') ]; $bs = new \CIBlockSection; $rootId = $bs->Add($arFields); if (!$rootId) { throw new InvalidOperationException(sprintf('Не удалось создать раздел "Компания": %s', $bs->LAST_ERROR)); } } $csvFile = new \CCSVData(); $csvFile->SetFirstHeader(true); $csvFile->SetDelimiter(','); $csvFile->LoadFile(Application::getDocumentRoot() . '/demo/src/employees.csv'); while ($row = $csvFile->Fetch()) { list($position, $department, $affiliate) = array_map('trim', $row); if ($affiliate) { if (!isset($arSectionsMap[$affiliate])) { $arFields = [ "ACTIVE" => 'Y', "IBLOCK_ID" => $secTable::getIblockId(), "IBLOCK_SECTION_ID" => $rootId, "NAME" => $affiliate, "CODE" => $faker->unique()->numerify('demo_###') ]; $bs = new \CIBlockSection; $id = $bs->Add($arFields); if ($id) { $arSectionsMap[$affiliate] = [ 'ID' => $id, 'SECTIONS' => [] ]; } else { throw new InvalidOperationException(sprintf('Не удалось создать раздел "%s": %s', $affiliate, $bs->LAST_ERROR)); } } if (!isset($arSectionsMap[$affiliate]['SECTIONS'][$department])) { $arFields = [ "ACTIVE" => 'Y', "IBLOCK_ID" => $secTable::getIblockId(), "IBLOCK_SECTION_ID" => $arSectionsMap[$affiliate]['ID'], "NAME" => $department, "CODE" => $faker->unique()->numerify('demo_###') ]; $bs = new \CIBlockSection; $id = $bs->Add($arFields); if ($id) { $arSectionsMap[$affiliate]['SECTIONS'][$department] = $id; } else { throw new InvalidOperationException(sprintf('Не удалось создать раздел "%s": %s', $department, $bs->LAST_ERROR)); } } } $img = $faker->unique()->randomElement($images); $gender = mb_substr($img, 0, 1); $genderForFaker = $gender == 'M' ? 'male' : 'female'; $login = $faker->unique()->numerify('demo_###'); $email = $login . '@k-team.vm'; $pass = $login . '_pass1937'; $arUser = [ 'ACTIVE' => 'Y', 'NAME' => $faker->firstName($genderForFaker), 'SECOND_NAME' => $faker->middleName($genderForFaker), 'LAST_NAME' => $faker->lastName($genderForFaker), 'EMAIL' => $email, 'LOGIN' => $login, 'PASSWORD' => $pass, 'CONFIRM_PASSWORD' => $pass, 'PERSONAL_GENDER' => $gender, 'PERSONAL_BIRTHDAY' => $faker->dateTimeInInterval('-30years', '+1month')->format('d.m.Y'), 'PERSONAL_PHOTO' => \CFile::MakeFileArray($imagesPath . DIRECTORY_SEPARATOR . $img), 'PERSONAL_PHONE' => Parser::getInstance()->parse($faker->valid($phoneFilter)->phoneNumber())->format(Format::INTERNATIONAL), 'WORK_POSITION' => $position, 'WORK_PHONE' => Parser::getInstance()->parse($faker->valid($phoneFilter)->phoneNumber())->format(Format::INTERNATIONAL), 'UF_DEPARTMENT' => [$arSectionsMap[$affiliate]['SECTIONS'][$department]], 'GROUP_ID' => $userGroups ]; $us = new \CUser; $id = $us->Add($arUser); if (!$id) { throw new InvalidOperationException(sprintf('Не удалось создать пользователя: %s', $us->LAST_ERROR)); } } $connection->commitTransaction(); } catch (\Exception $e) { ShowError($e->getMessage()); $connection->rollbackTransaction(); }