• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/integration/disk/hiddenstorage.php
  • Класс: Bitrix\Crm\Integration\Disk\HiddenStorage
  • Вызов: HiddenStorage::findOrCreateFolder
private function findOrCreateFolder(string $code): ?Folder
{
	$parentFolder = Folder::load(['=CODE' => $code, 'STORAGE_ID' => $this->storage->getId()]);
	if (!$parentFolder)
	{
		$parentFolder = $this->storage->addFolder([
			'NAME' => $code,
			'CODE' => $code,
			'CREATED_BY' => SystemUser::SYSTEM_USER_ID
		], [], true);
	}

	if ($parentFolder instanceof Folder)
	{
		$subFolderName = date('Y-m-d');
		$subFolder = $parentFolder->getChild(['=NAME' => $subFolderName, '=TYPE' => FolderTable::TYPE_FOLDER]);
		if ($subFolder)
		{
			return $subFolder;
		}

		$lockKey = sprintf('%s|%s', $code, $subFolderName);
		$this->lock($lockKey);
		$subFolder = $parentFolder->addSubFolder([
			'NAME' => $subFolderName,
			'CREATED_BY' => SystemUser::SYSTEM_USER_ID
		]);

		$this->unlock($lockKey);

		if ($subFolder instanceof Folder)
		{
			return $subFolder;
		}

		$this->errorCollection = array_merge($this->errorCollection, $subFolder->getErrors());

		return null;
	}

	$this->errorCollection = array_merge($this->errorCollection, $parentFolder->getErrors());

	return null;
}