- Модуль: fileman
- Путь к файлу: ~/bitrix/modules/fileman/classes/general/medialib.php
- Класс: CMedialibItem
- Вызов: CMedialibItem::Edit
static function Edit($Params)
{
global $DB;
$source_id = false;
$arFields = $Params['arFields'];
$arFields['ID'] = $arFields['ID'] ?? null;
$bNew = !isset($arFields['ID']) || $arFields['ID'] <= 0;
$Params['path'] ??= null;
$Params['file'] ??= null;
$bFile_FD = $Params['path'] && $Params['path'] <> '';
$bFile_PC = $Params['file'] && $Params['file']['name'] <> '' && $Params['file']['size'] > 0;
$io = CBXVirtualIo::GetInstance();
if ($bFile_FD || $bFile_PC)
{
if ($bFile_FD)
{
$DocRoot = CSite::GetSiteDocRoot(false);
$tmp_name = $DocRoot.$Params['path'];
if ($io->FileExists($tmp_name))
{
$flTmp = $io->GetFile($tmp_name);
$file_name = mb_substr($Params['path'], mb_strrpos($Params['path'], '/') + 1);
$arFile = array(
"name" => $file_name,
"size" => $flTmp->GetFileSize(),
"tmp_name" => $tmp_name,
"type" => CFile::IsImage($file_name) ? 'image' : 'file'
);
}
}
else if ($bFile_PC)
{
$arFile = $Params['file'];
}
if (!CMedialib::CheckFileExtention($arFile["name"]))
return false;
if (!$bNew) // Del old file
{
$arFile["old_file"] = CMedialibItem::GetSourceId($arFields['ID']);
$arFile["del"] = "Y";
}
// Resizing Image
if (CFile::IsImage($arFile["name"]))
{
$arSize = array(
'width' => COption::GetOptionInt('fileman', "ml_max_width", 1024),
'height' => COption::GetOptionInt('fileman', "ml_max_height", 1024)
);
$res = CFile::ResizeImage($arFile, $arSize);
}
$arFile["MODULE_ID"] = "fileman";
$source_id = CFile::SaveFile($arFile, "medialibrary");
if ($source_id) // Get file
{
$r = CFile::GetByID($source_id);
if ($arFile = $r->Fetch())
{
if (CFile::IsImage($arFile['FILE_NAME']))
CMedialibItem::GenerateThumbnail($arFile, array('width' => COption::GetOptionInt('fileman', "ml_thumb_width", 140), 'height' => COption::GetOptionInt('fileman', "ml_thumb_height", 105)));
$arFile['PATH'] = CMedialibItem::GetFullPath($arFile);
}
}
}
// TODO: Add error handling
if ($bNew && !$source_id)
return false;
// 2. Add to b_medialib_item
if (!isset($arFields['~DATE_UPDATE']))
$arFields['~DATE_UPDATE'] = $DB->CurrentTimeFunction();
if(!CMedialibItem::CheckFields($arFields))
return false;
if (CModule::IncludeModule("search"))
{
$arStem = stemming($arFields['NAME'].' '.$arFields['DESCRIPTION'].' '.$arFields['KEYWORDS'], LANGUAGE_ID);
if (count($arStem) > 0)
$arFields['SEARCHABLE_CONTENT'] = '{'.implode('}{', array_keys($arStem)).'}';
else
$arFields['SEARCHABLE_CONTENT'] = '';
}
if ($bNew) // Add
{
unset($arFields['ID']);
$arFields['SOURCE_ID'] = $source_id;
$arFields['~DATE_CREATE'] = $arFields['~DATE_UPDATE'];
$arFields['ITEM_TYPE'] = '';
$ID = $DB->Add("b_medialib_item", $arFields, array("DESCRIPTION","SEARCHABLE_CONTENT"));
}
else // Update
{
if ($source_id)
$arFields['SOURCE_ID'] = $source_id;
$ID = $arFields['ID'];
unset($arFields['ID']);
$strUpdate = $DB->PrepareUpdate("b_medialib_item", $arFields);
$strSql =
"UPDATE b_medialib_item SET ".
$strUpdate.
" WHERE ID=".intval($ID);
$DB->QueryBind($strSql,
array(
"DESCRIPTION" => $arFields["DESCRIPTION"],
"SEARCHABLE_CONTENT" => $arFields["SEARCHABLE_CONTENT"]
),
false, "File: ".__FILE__."
Line: ".__LINE__);
}
// 3. Set fields to b_medialib_collection_item
if (!$bNew) // Del all rows if
{
$strSql = "DELETE FROM b_medialib_collection_item WHERE ITEM_ID=".intval($ID);
$DB->Query($strSql, false, "FILE: ".__FILE__."
LINE: ".__LINE__);
}
$strCollections = "0";
for($i = 0, $l = count($Params['arCollections']); $i < $l; $i++)
$strCollections .= ",".intval($Params['arCollections'][$i]);
$strSql =
"INSERT INTO b_medialib_collection_item(ITEM_ID, COLLECTION_ID) ".
"SELECT ".intval($ID).", ID ".
"FROM b_medialib_collection ".
"WHERE ID in (".$strCollections.")";
$res = $DB->Query($strSql, false, "FILE: ".__FILE__."
LINE: ".__LINE__);
if (!($arFields['ID'] ?? false))
$arFields['ID'] = $ID;
if ($source_id)
$arFields = array_merge($arFile, $arFields);
return $arFields;
}