• Модуль: 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; }