- Модуль: socialnetwork
- Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/log_tools.php
- Класс: CSocNetLogComponent
- Вызов: CSocNetLogComponent::saveFileToUF
static function saveFileToUF($arFile = array(), &$type = null, $userId = false)
{
global $USER, $DB, $USER_FIELD_MANAGER;
static $isDiskEnabled = false;
static $isWebDavEnabled = false;
static $arDiskData = array();
static $arWebDavData = array();
$resultId = false;
if (
!$userId
|| (int)$userId <= 0
)
{
$userId = $USER->GetID();
}
if ($isDiskEnabled === false)
{
$isDiskEnabled = (
BitrixMainConfigOption::get('disk', 'successfully_converted', false)
&& CModule::includeModule('disk')
? 'Y'
: 'N'
);
}
if ($isWebDavEnabled === false)
{
$isWebDavEnabled = (
$isDiskEnabled === 'N'
&& CModule::includeModule('webdav')
? "Y"
: "N"
);
}
if (!isset($arDiskData[$userId]))
{
$arDiskData[$userId] = array(
"ENABLED" => "N"
);
if ($isDiskEnabled === "Y")
{
if (
($storage = BitrixDiskDriver::getInstance()->getStorageByUserId($userId))
&& ($folder = $storage->getFolderForUploadedFiles($userId))
)
{
$arDiskData[$userId] = array(
"ENABLED" => "Y",
"STORAGE" => $storage,
"FOLDER" => $folder
);
}
}
}
if (!isset($arWebDavData[$userId]))
{
$arWebDavData[$userId] = array(
"ENABLED" => "N"
);
if ($isWebDavEnabled === "Y" && $USER instanceof CUser)
{
$webDavData = CWebDavIblock::getRootSectionDataForUser($userId);
if (is_array($webDavData))
{
$webDavObject = new CWebDavIblock(
$webDavData["IBLOCK_ID"],
"",
array(
"ROOT_SECTION_ID" => $webDavData["SECTION_ID"],
"DOCUMENT_TYPE" => array("webdav", 'CIBlockDocumentWebdavSocnet', 'iblock_'.$webDavData['SECTION_ID'].'_user_'.$userId)
)
);
if ($webDavObject)
{
$arParent = $webDavObject->GetObject(
array(
"section_id" => $webDavObject->GetMetaID("DROPPED")
)
);
if (!$arParent["not_found"])
{
$path = $webDavObject->_get_path($arParent["item_id"], false);
$tmpName = str_replace(array(":", ".", "/", "\"), "_", ConvertTimeStamp(time(), "FULL"));
$tmpOptions = array("path" => str_replace("//", "/", $path."/".$tmpName));
$arParent = $webDavObject->GetObject($tmpOptions);
if ($arParent["not_found"])
{
$rMKCOL = $webDavObject->MKCOL($tmpOptions);
if ((int)$rMKCOL == 201)
{
$webDavData["SECTION_ID"] = $webDavObject->arParams["changed_element_id"];
}
}
else
{
$webDavData["SECTION_ID"] = $arParent['item_id'];
if (!$webDavObject->CheckUniqueName($tmpName, $webDavData["SECTION_ID"], $tmpRes))
{
$path = $webDavObject->_get_path($webDavData["SECTION_ID"], false);
$tmpName = randString(6);
$tmpOptions = array("path" => str_replace("//", "/", $path."/".$tmpName));
$rMKCOL = $webDavObject->MKCOL($tmpOptions);
if (intval($rMKCOL) == 201)
{
$webDavData["SECTION_ID"] = $webDavData->arParams["changed_element_id"];
}
}
}
$arWebDavData[$userId] = array(
"ENABLED" => "Y",
"OBJECT" => $webDavObject,
"DATA" => $webDavData
);
}
}
}
}
}
if(is_array($arFile))
{
$resultId = false;
if ($arDiskData[$userId]["ENABLED"] === "Y")
{
$type = "disk";
$file = $arDiskData[$userId]["FOLDER"]->uploadFile(
$arFile, // file array
array(
'NAME' => $arFile["name"],
'CREATED_BY' => $userId
),
array(),
true
);
if ($file)
{
$resultId = BitrixDiskUfFileUserType::NEW_FILE_PREFIX.$file->getId();
}
}
elseif ($arWebDavData[$userId]["ENABLED"] == "Y")
{
$type = "webdav";
$options = array(
"new" => true,
'dropped' => true,
"arFile" => $arFile,
"arDocumentStates" => false,
"arUserGroups" => array_merge($arWebDavData[$userId]["OBJECT"]->USER["GROUPS"], array("Author")),
"FILE_NAME" => $arFile["name"],
"IBLOCK_ID" => $arWebDavData[$userId]["DATA"]["IBLOCK_ID"],
"IBLOCK_SECTION_ID" => $arWebDavData[$userId]["DATA"]["SECTION_ID"],
"USER_FIELDS" => array()
);
$USER_FIELD_MANAGER->EditFormAddFields($arWebDavData[$userId]["OBJECT"]->GetUfEntity(), $options['USER_FIELDS']);
$DB->StartTransaction();
if (!$arWebDavData[$userId]["OBJECT"]->put_commit($options))
{
$DB->Rollback();
}
else
{
$DB->Commit();
$resultId = $options['ELEMENT_ID'];
}
}
else // for main
{
$type = "main";
$resultId = CFile::SaveFile($arFile, $arFile["MODULE_ID"]);
}
}
return $resultId;
}