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