• Модуль: mobile
  • Путь к файлу: ~/bitrix/modules/mobile/classes/general/mobile_helper.php
  • Класс: CMobileHelper
  • Вызов: CMobileHelper::SaveFile
static function SaveFile($arFile, $arFileStorage)
{
	$arResult = array();

	if (empty($arFile))
	{
		$arResult = array(
			"ERROR_CODE" => "EMPTY_FILE",
			"ERROR_MESSAGE" => "File is empty"
		);
	}

	if (!empty($arFileStorage["DISC_FOLDER"]))
	{
		$file = $arFileStorage["DISC_FOLDER"]->uploadFile(
			$arFile,
			array(
				'NAME' => $arFile["name"],
				'CREATED_BY' => $GLOBALS["USER"]->GetID()
			),
			array(),
			true
		);

		$arResult["ID"] = $file->getId();
	}
	elseif (
		!empty($arFileStorage["WEBDAV_DATA"])
		&& !empty($arFileStorage["WEBDAV_IBLOCK_OBJECT"])
	)
	{
		$dropTargetID = $arFileStorage["WEBDAV_IBLOCK_OBJECT"]->GetMetaID("DROPPED");
		$arParent = $arFileStorage["WEBDAV_IBLOCK_OBJECT"]->GetObject(array("section_id" => $dropTargetID));
		if (!$arParent["not_found"])
		{
			$path = $arFileStorage["WEBDAV_IBLOCK_OBJECT"]->_get_path($arParent["item_id"], false);
			$tmpName = str_replace(array(":", ".", "/", "\"), "_", ConvertTimeStamp(time(), "FULL"));
			$tmpOptions = array("path" => str_replace("//", "/", $path."/".$tmpName));
			$arParent = $arFileStorage["WEBDAV_IBLOCK_OBJECT"]->GetObject($tmpOptions);
			if ($arParent["not_found"])
			{
				$rMKCOL = $arFileStorage["WEBDAV_IBLOCK_OBJECT"]->MKCOL($tmpOptions);
				if (intval($rMKCOL) == 201)
				{
					$arFileStorage["WEBDAV_DATA"]["SECTION_ID"] = $arFileStorage["WEBDAV_IBLOCK_OBJECT"]->arParams["changed_element_id"];
				}
			}
			else
			{
				$arFileStorage["WEBDAV_DATA"]["SECTION_ID"] = $arParent['item_id'];
				if (!$arFileStorage["WEBDAV_IBLOCK_OBJECT"]->CheckUniqueName($tmpName, $arFileStorage["WEBDAV_DATA"]["SECTION_ID"], $tmpRes))
				{
					$path = $arFileStorage["WEBDAV_IBLOCK_OBJECT"]->_get_path($arFileStorage["WEBDAV_DATA"]["SECTION_ID"], false);
					$tmpName = randString(6);
					$tmpOptions = array("path" => str_replace("//", "/", $path."/".$tmpName));
					$rMKCOL = $arFileStorage["WEBDAV_IBLOCK_OBJECT"]->MKCOL($tmpOptions);
					if (intval($rMKCOL) == 201)
					{
						$arFileStorage["WEBDAV_DATA"]["SECTION_ID"] = $arFileStorage["WEBDAV_IBLOCK_OBJECT"]->arParams["changed_element_id"];
					}
				}
			}
		}

		$options = array(
			"new" => true,
			'dropped' => true,
			"arFile" => $arFile,
			"arDocumentStates" => false,
			"arUserGroups" => array_merge($arFileStorage["WEBDAV_IBLOCK_OBJECT"]->USER["GROUPS"], array("Author")),
			"FILE_NAME" => $arFile["name"],
			"IBLOCK_ID" => $arFileStorage["WEBDAV_DATA"]["IBLOCK_ID"],
			"IBLOCK_SECTION_ID" => $arFileStorage["WEBDAV_DATA"]["SECTION_ID"],
			"USER_FIELDS" => array()
		);

		$GLOBALS['USER_FIELD_MANAGER']->EditFormAddFields($arFileStorage["WEBDAV_IBLOCK_OBJECT"]->GetUfEntity(), $options['USER_FIELDS']);

		$GLOBALS["DB"]->StartTransaction();

		if (!$arFileStorage["WEBDAV_IBLOCK_OBJECT"]->put_commit($options))
		{
			$arResult = array(
				"ERROR_CODE" => "error_put",
				"ERROR_MESSAGE" => $arFileStorage["WEBDAV_IBLOCK_OBJECT"]->LAST_ERROR
			);
			$GLOBALS["DB"]->Rollback();
		}
		else
		{
			$GLOBALS["DB"]->Commit();
			$arResult["ID"] = $options['ELEMENT_ID'];
		}
	}
	else
	{
		$arResult["ID"] = CFile::SaveFile($arFile, $arFile["MODULE_ID"]);
	}

	return $arResult;
}