• Модуль: clouds
  • Путь к файлу: ~/bitrix/modules/clouds/classes/general/storage.php
  • Класс: CCloudStorage
  • Вызов: CCloudStorage::FindBucketForFile
static function FindBucketForFile($arFile, $strFileName)
{
	if (array_key_exists("size", $arFile) && $arFile["size"] > 0)
		$file_size = intval($arFile["size"]);
	elseif (array_key_exists("FILE_SIZE", $arFile) && $arFile["FILE_SIZE"] > 0)
		$file_size = intval($arFile["FILE_SIZE"]);
	else
		$file_size = intval($arFile["file_size"]);

	self::$file_skip_reason = '';
	$activeCounter = 0;
	$writableCounter = 0;
	foreach (CCloudStorageBucket::GetAllBuckets() as $bucket)
	{
		if ($bucket["ACTIVE"] !== "Y")
		{
			continue;
		}
		$activeCounter++;


		if ($bucket["READ_ONLY"] === "Y")
		{
			continue;
		}
		$writableCounter++;

		foreach ($bucket["FILE_RULES_COMPILED"] as $rule)
		{
			if ($rule["MODULE_MASK"] != "")
			{
				$bMatchModule = (preg_match($rule["MODULE_MASK"], $arFile["MODULE_ID"]) > 0);
			}
			else
			{
				$bMatchModule = true;
			}

			if ($rule["EXTENTION_MASK"] != "")
			{
				$bMatchExtention =
					(preg_match($rule["EXTENTION_MASK"], $strFileName) > 0)
					|| (preg_match($rule["EXTENTION_MASK"], $arFile["ORIGINAL_NAME"]) > 0);
			}
			else
			{
				$bMatchExtention = true;
			}

			if ($rule["SIZE_ARRAY"])
			{
				$bMatchSize = false;
				foreach ($rule["SIZE_ARRAY"] as $size)
				{
					if (
						($file_size >= $size[0])
						&& ($size[1] === 0.0 || $file_size <= $size[1])
					)
						$bMatchSize = true;
				}
			}
			else
			{
				$bMatchSize = true;
			}

			if (!$bMatchModule)
			{
				self::$file_skip_reason = 'NO_FILE_MODULE_MATCH';
			}
			elseif (!$bMatchExtention)
			{
				self::$file_skip_reason = 'NO_FILE_EXTENTION_MATCH';
			}
			elseif (!$bMatchSize)
			{
				self::$file_skip_reason = 'NO_FILE_SIZE_MATCH';
			}

			if ($bMatchModule && $bMatchExtention && $bMatchSize)
			{
				return new CCloudStorageBucket(intval($bucket["ID"]));
			}
		}
	}

	if (!$activeCounter)
	{
		self::$file_skip_reason = 'NO_ACTIVE_BUCKETS';
	}
	elseif (!$writableCounter)
	{
		self::$file_skip_reason = 'NO_WRITABLE_BUCKETS';
	}

	return null;
}