• Модуль: forum
  • Путь к файлу: ~/bitrix/modules/forum/classes/general/message.php
  • Класс: CALLForumFiles
  • Вызов: CALLForumFiles::CheckFields
static function CheckFields(&$arFields, &$arParams, $ACTION = "ADD", $extParams = array())
{
	$aMsg = array();
	$arFiles = (!is_array($arFields) ? array($arFields) : $arFields);
	$arParams = (!is_array($arParams) ? array($arParams) : $arParams);
	$arParams["FORUM_ID"] = intval($arParams["FORUM_ID"]);
	if (isset($arParams["TOPIC_ID"]))
		$arParams["TOPIC_ID"] = intval($arParams["TOPIC_ID"]);
	$arParams["MESSAGE_ID"] = intval($arParams["MESSAGE_ID"]);
	$arParams["USER_ID"] = intval($arParams["USER_ID"]);

	if (empty($arFiles))
		return true;
	elseif (!empty($arFiles["name"]))
		$arFiles = array($arFiles);
	$ACTION = ($ACTION == "UPDATE" || "NOT_CHECK_DB" ? $ACTION : "ADD");

	if ($arParams["FORUM_ID"] <= 0):
		$aMsg[] = array(
			"id" => 'bad_forum',
			"text" => GetMessage("F_ERR_EMPTY_FORUM_ID"));
	else:
		// Y - Image files		F - Files of specified type		A - All files
		$arForum = (!!$extParams["FORUM"] ? $extParams["FORUM"] : CForumNew::GetByID($arParams["FORUM_ID"]));
		if (empty($arForum))
			$aMsg[] = array(
				"id" => 'bad_forum',
				"text" => GetMessage("F_ERR_FORUM_IS_LOST"));
		elseif (!in_array($arForum["ALLOW_UPLOAD"], array("Y", "F", "A")))
			$aMsg[] = array(
				"id" => 'bad_forum_permission',
				"text" => GetMessage("F_ERR_UPOAD_IS_DENIED"));
	endif;
	if (empty($aMsg)):
		$arFilesExists = array();
		$iFileSize = intval(COption::GetOptionString("forum", "file_max_size", 5242880));
		foreach ($arFiles as $key => $val):
			$res = "";
			if ($val["name"] == '' && intval($val["FILE_ID"]) <= 0):
				unset($arFiles[$key]);
				continue;
			elseif ($val["name"] <> ''):
				if ($arForum["ALLOW_UPLOAD"] == "Y"):
					$res = CFile::CheckImageFile($val, $iFileSize, 0, 0);
				elseif ($arForum["ALLOW_UPLOAD"] == "F"):
					$res = CFile::CheckFile($val, $iFileSize, false, $arForum["ALLOW_UPLOAD_EXT"]);
				else:
					$res = CFile::CheckFile($val, $iFileSize, false, false);
				endif;
				if ($res <> '')
				{
					$aMsg[] = array(
						"id"=>'attach_error',
						"text" => $res);
				}
			endif;

			if (intval($val["FILE_ID"]) > 0):
				$arFiles[$key]["old_file"] = $val["FILE_ID"];
				$arFilesExists[$val["FILE_ID"]] = $val;
				continue;
			endif;
		endforeach;
		if ($ACTION != "NOT_CHECK_DB" && !empty($arFilesExists))
		{
			$arFilter = array("FILE_FORUM_ID" => $arParams["FORUM_ID"]);
			if (isset($arParams["TOPIC_ID"]))
				$arFilter["FILE_TOPIC_ID"] = $arParams["TOPIC_ID"];
			if (isset($arParams["MESSAGE_ID"]))
				$arFilter["FILE_MESSAGE_ID"] = $arParams["MESSAGE_ID"];
			$arFilter["@FILE_ID"] = array_keys($arFilesExists);

			$db_res = CForumFiles::GetList(array("FILE_ID" => "ASC"), $arFilter);
			if ($db_res && $res = $db_res->Fetch())
			{
				do
				{
					unset($arFilesExists[$res["FILE_ID"]]);
				}while ($res = $db_res->Fetch());
			}

			if (!empty($arFilesExists))
			{
				$aMsg[] = array(
					"id" => 'attach_error',
					"text" => str_replace("#FILE_ID#", implode(", ", array_keys($arFilesExists)), GetMessage("F_ERR_UPOAD_FILES_IS_LOST")));
			}
		}
	endif;
	if(!empty($aMsg))
	{
		$e = new CAdminException($aMsg);
		$GLOBALS["APPLICATION"]->ThrowException($e);
		return false;
	}
	$arFields = $arFiles;
	return true;
}