%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/components/bitrix/socialnetwork.forum.topic.new/ |
| Current File : /home/bitrix/www/bitrix/components/bitrix/socialnetwork.forum.topic.new/component.php |
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
if (!CModule::IncludeModule("forum")):
ShowError(GetMessage("F_NO_MODULE"));
return false;
elseif (!CModule::IncludeModule("socialnetwork")):
ShowError(GetMessage("SONET_MODULE_NOT_INSTALL"));
return false;
elseif (intVal($arParams["FID"]) <= 0):
ShowError(GetMessage("F_FID_IS_EMPTY"));
return false;
endif;
/********************************************************************
Input params
********************************************************************/
/***************** BASE ********************************************/
$arParams["FID"] = intVal($arParams["FID"]);
$arParams["TID"] = 0;
$arParams["MID"] = (intVal($arParams["MID"]) <= 0 ? $_REQUEST["MID"] : $arParams["MID"]);
$arParams["MESSAGE_TYPE"] = (empty($arParams["MESSAGE_TYPE"]) ? $_REQUEST["MESSAGE_TYPE"] : $arParams["MESSAGE_TYPE"]);
$arParams["MESSAGE_TYPE"] = ($arParams["MESSAGE_TYPE"] != "EDIT" ? "NEW" : "EDIT");
$arParams["SOCNET_GROUP_ID"] = intVal($arParams["SOCNET_GROUP_ID"]);
$arParams["MODE"] = ($arParams["SOCNET_GROUP_ID"] > 0 ? "GROUP" : "USER");
$arParams["USER_ID"] = intVal(intVal($arParams["USER_ID"]) > 0 ? $arParams["USER_ID"] : $USER->GetID());
/***************** URL *********************************************/
$URL_NAME_DEFAULT = array(
"topic_list" => "PAGE_NAME=topic_list",
"message" => "PAGE_NAME=message&TID=#TID#&MID=#MID#",
"profile_view" => "PAGE_NAME=user&UID=#UID#");
if (empty($arParams["URL_TEMPLATES_MESSAGE"]) && !empty($arParams["URL_TEMPLATES_READ"]))
{
$arParams["URL_TEMPLATES_MESSAGE"] = $arParams["URL_TEMPLATES_READ"];
}
foreach ($URL_NAME_DEFAULT as $URL => $URL_VALUE)
{
if (strLen(trim($arParams["URL_TEMPLATES_".strToUpper($URL)])) <= 0)
$arParams["URL_TEMPLATES_".strToUpper($URL)] = $APPLICATION->GetCurPage()."?".$URL_VALUE;
$arParams["~URL_TEMPLATES_".strToUpper($URL)] = $arParams["URL_TEMPLATES_".strToUpper($URL)];
$arParams["URL_TEMPLATES_".strToUpper($URL)] = htmlspecialcharsbx($arParams["URL_TEMPLATES_".strToUpper($URL)]);
}
/***************** ADDITIONAL **************************************/
$arParams["DATE_TIME_FORMAT"] = trim(empty($arParams["DATE_TIME_FORMAT"]) ? $DB->DateFormatToPHP(CSite::GetDateFormat("FULL")) : $arParams["DATE_TIME_FORMAT"]);
$arParams['NAME_TEMPLATE'] = empty($arParams['NAME_TEMPLATE']) ? CSite::GetNameFormat() : $arParams["NAME_TEMPLATE"];
$arParams["PATH_TO_SMILE"] = (empty($arParams["PATH_TO_SMILE"]) ? "/bitrix/images/forum/smile/" : $arParams["PATH_TO_SMILE"]);
$arParams["PATH_TO_ICON"] = (empty($arParams["PATH_TO_ICON"]) ? "/bitrix/images/forum/icons/" : $arParams["PATH_TO_ICON"]);
if ($arParams["AJAX_TYPE"] == "Y" || ($arParams["AJAX_TYPE"] == "A" && COption::GetOptionString("main", "component_ajax_on", "Y") == "Y"))
$arParams["AJAX_TYPE"] = "Y";
else
$arParams["AJAX_TYPE"] = "N";
$arParams["AJAX_CALL"] = ($_REQUEST["AJAX_CALL"] == "Y" ? "Y" : "N");
$arParams["AJAX_CALL"] = (($arParams["AJAX_TYPE"] == "Y" && $arParams["AJAX_CALL"] == "Y") ? "Y" : "N");
$arParams["VOTE_CHANNEL_ID"] = intVal($arParams["VOTE_CHANNEL_ID"]);
$arParams["SHOW_VOTE"] = ($arParams["SHOW_VOTE"] == "Y" && $arParams["VOTE_CHANNEL_ID"] > 0 && IsModuleInstalled("vote") ? "Y" : "N");
$arParams["VOTE_GROUP_ID"] = (!is_array($arParams["VOTE_GROUP_ID"]) || empty($arParams["VOTE_GROUP_ID"]) ? array() : $arParams["VOTE_GROUP_ID"]);
if (!is_array($arParams['VOTE_UNIQUE'])) $arParams['VOTE_UNIQUE'] = array();
if (!(isset($arParams['VOTE_UNIQUE_IP_DELAY']) && strlen(trim($arParams['VOTE_UNIQUE_IP_DELAY'])) > 0 && strpos($arParams['VOTE_UNIQUE_IP_DELAY'], " ") !== false))
$arParams['VOTE_UNIQUE_IP_DELAY'] = "10 D";
$arParams["AUTOSAVE"] = CForumAutosave::GetInstance();
/***************** STANDART ****************************************/
$arParams["SET_TITLE"] = ($arParams["SET_TITLE"] == "N" ? "N" : "Y");
if ($arParams["CACHE_TYPE"] == "Y" || ($arParams["CACHE_TYPE"] == "A" && COption::GetOptionString("main", "component_cache_on", "Y") == "Y"))
$arParams["CACHE_TIME"] = intval($arParams["CACHE_TIME"]);
else
$arParams["CACHE_TIME"] = 0;
/********************************************************************
/Input params
********************************************************************/
/********************************************************************
Default values
********************************************************************/
//************** SocNet Activity ***********************************/
if (($arParams["MODE"] == "GROUP" && !CSocNetFeatures::IsActiveFeature(SONET_ENTITY_GROUP, $arParams["SOCNET_GROUP_ID"], "forum")) ||
($arParams["MODE"] != "GROUP" && !CSocNetFeatures::IsActiveFeature(SONET_ENTITY_USER, $arParams["USER_ID"], "forum"))):
ShowError(GetMessage("FORUM_SONET_MODULE_NOT_AVAIBLE"));
return false;
endif;
//************** Forum *********************************************/
$arResult["FORUM"] = CForumNew::GetByID($arParams["FID"]);
$arResult["TOPIC"] = array();
$arResult["MESSAGE"] = array();
$arParams["PERMISSION_ORIGINAL"] = ForumCurrUserPermissions($arParams["FID"]);
$arParams["PERMISSION"] = "A";
$arResult["ERROR_MESSAGE"] = "";
$arResult["OK_MESSAGE"] = "";
$arError = array();
$arNote = array();
$user_id = $USER->GetID();
//************** Permission ****************************************/
$bCurrentUserIsAdmin = CSocNetUser::IsCurrentUserModuleAdmin();
if (empty($arResult["FORUM"]))
{
CHTTP::SetStatus("404 Not Found");
$arError[] = array(
"id" => "forum_is_lost",
"text" => GetMessage("F_FID_IS_LOST"));
}
elseif ($arParams["MODE"] == "GROUP")
{
if (CSocNetFeaturesPerms::CanPerformOperation($user_id, SONET_ENTITY_GROUP, $arParams["SOCNET_GROUP_ID"], "forum", "full", $bCurrentUserIsAdmin))
$arParams["PERMISSION"] = "Y";
elseif (CSocNetFeaturesPerms::CanPerformOperation($user_id, SONET_ENTITY_GROUP, $arParams["SOCNET_GROUP_ID"], "forum", "newtopic", $bCurrentUserIsAdmin))
$arParams["PERMISSION"] = "M";
elseif (CSocNetFeaturesPerms::CanPerformOperation($user_id, SONET_ENTITY_GROUP, $arParams["SOCNET_GROUP_ID"], "forum", "answer", $bCurrentUserIsAdmin))
$arParams["PERMISSION"] = "I";
elseif (CSocNetFeaturesPerms::CanPerformOperation($user_id, SONET_ENTITY_GROUP, $arParams["SOCNET_GROUP_ID"], "forum", "view", $bCurrentUserIsAdmin))
$arParams["PERMISSION"] = "E";
}
else
{
if (CSocNetFeaturesPerms::CanPerformOperation($user_id, SONET_ENTITY_USER, $arParams["USER_ID"], "forum", "full", $bCurrentUserIsAdmin))
$arParams["PERMISSION"] = "Y";
elseif (CSocNetFeaturesPerms::CanPerformOperation($user_id, SONET_ENTITY_USER, $arParams["USER_ID"], "forum", "newtopic", $bCurrentUserIsAdmin))
$arParams["PERMISSION"] = "M";
elseif (CSocNetFeaturesPerms::CanPerformOperation($user_id, SONET_ENTITY_USER, $arParams["USER_ID"], "forum", "answer", $bCurrentUserIsAdmin))
$arParams["PERMISSION"] = "I";
elseif (CSocNetFeaturesPerms::CanPerformOperation($user_id, SONET_ENTITY_USER, $arParams["USER_ID"], "forum", "view", $bCurrentUserIsAdmin))
$arParams["PERMISSION"] = "E";
}
if ($arParams["SHOW_VOTE"] == "Y")
{
CModule::IncludeModule("vote");
$arParams["SHOW_VOTE"] = ( ($arParams["PERMISSION"] == "A") ? "N" : $arParams["SHOW_VOTE"]);
}
/************** Message ********************************************/
if ($arParams["MESSAGE_TYPE"] == "EDIT")
{
$res = CForumMessage::GetByIDEx($arParams["MID"], array("GET_TOPIC_INFO" => "Y"));
if (!is_array($res) || empty($res))
$arError[] = array(
"id" => "mid_is_lost",
"text" => GetMessage("F_MID_IS_LOST")
);
elseif ($arParams["MODE"] != "GROUP" && $res["FORUM_ID"] != $arParams["FID"])
$arError[] = array(
"id" => "mid_is_lost",
"text" => GetMessage("F_MID_IS_LOST_IN_FORUM")
);
elseif (($arParams["MODE"] == "GROUP" && $res["TOPIC_INFO"]["SOCNET_GROUP_ID"] == $arParams["SOCNET_GROUP_ID"]) ||
($arParams["MODE"] != "GROUP" && $res["TOPIC_INFO"]["OWNER_ID"] == $arParams["USER_ID"]))
{
$arResult["MESSAGE"] = $res;
$arParams["TID"] = $res["TOPIC_INFO"]["ID"];
$arResult["TOPIC"] = $res["TOPIC_INFO"];
$arResult["TOPIC_FILTER"] = CForumTopic::GetByID($arParams["TID"]);
if ($arParams["SHOW_VOTE"] == "Y" && $arResult["MESSAGE"]["PARAM1"] == "VT" && intVal($arResult["MESSAGE"]["PARAM2"]) > 0)
{
$db_res = CVoteQuestion::GetListEx(
array("ID" => "ASC"),
array("CHANNEL_ID" => $arParams["VOTE_CHANNEL_ID"], "VOTE_ID" => $arResult["MESSAGE"]["PARAM2"]));
if ($db_res && $res = $db_res->Fetch())
{
do {
$arResult["~QUESTIONS"][$res["ID"]] = $res + array("ANSWERS" => array());
} while ($res = $db_res->Fetch());
}
if (!empty($arResult["~QUESTIONS"]))
{
$db_res = CVoteAnswer::GetListEx(array("ID" => "ASC"),
array("VOTE_ID" => $arResult["MESSAGE"]["PARAM2"]));
if ($db_res && $res = $db_res->Fetch())
{
do
{
if (is_set($arResult["~QUESTIONS"], $res["QUESTION_ID"]))
$arResult["~QUESTIONS"][$res["QUESTION_ID"]]["ANSWERS"][$res["ID"]] = $res;
}
while ($res = $db_res->Fetch());
}
}
$arResult["QUESTIONS"] = $arResult["~QUESTIONS"];
}
}
else
$arError[] = array(
"id" => "mid_is_lost",
"text" => GetMessage("F_MID_IS_LOST")
);
}
/************** Permission *****************************************/
if ($arParams["MESSAGE_TYPE"]=="NEW" && !CForumTopic::CanUserAddTopic($arParams["FID"], $USER->GetUserGroupArray(), $USER->GetID(), false, $arParams["PERMISSION"])):
$arError[] = array(
"id" => "acces denied",
"text" => GetMessage("F_NO_NPERMS"));
elseif ($arParams["MESSAGE_TYPE"]=="EDIT" && !CForumMessage::CanUserUpdateMessage($arParams["MID"], $USER->GetUserGroupArray(), $USER->GetID(), $arParams["PERMISSION"])):
$arError[] = array(
"id" => "acces denied",
"text" => GetMessage("F_NO_EPERMS"));
endif;
/************** Fatal Errors ***************************************/
if (!empty($arError))
{
$e = new CAdminException($arError);
$res = $e->GetString();
ShowError($res);
return false;
}
/*******************************************************************/
$strErrorMessage = ""; $strOKMessage = "";
$bVarsFromForm = false;
$arResult["VIEW"] = ((strToUpper($_REQUEST["MESSAGE_MODE"]) == "VIEW" && $_SERVER["REQUEST_METHOD"] == "POST") ? "Y" : "N");
$_REQUEST["FILES"] = (is_array($_REQUEST["FILES"]) ? $_REQUEST["FILES"] : array());
$_REQUEST["FILES_TO_UPLOAD"] = (is_array($_REQUEST["FILES_TO_UPLOAD"]) ? $_REQUEST["FILES_TO_UPLOAD"] : array());
$arResult["MESSAGE_VIEW"] = array();
$arAllow = forumTextParser::GetFeatures($arResult["FORUM"]);
$arAllow["SMILES"] = ($_POST["USE_SMILES"] == "Y" ? $arAllow["SMILES"] : "N");
/*******************************************************************/
$arResult["URL"] = array(
"~LIST" => CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_TOPIC_LIST"],
array("FID" => $arParams["FID"], "TID" => $arParams["TID"], "UID" => $arParams["USER_ID"])),
"LIST" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_TOPIC_LIST"],
array("FID" => $arParams["FID"], "TID" => $arParams["TID"], "UID" => $arParams["USER_ID"])),
"~READ" => CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_MESSAGE"],
array("UID" => $arParams["USER_ID"], "FID" => $arParams["FID"], "TID" => $arParams["TID"],
"MID"=>((intVal($arParams["MID"]) > 0) ? intVal($arParams["MID"]) : "s"))),
"READ" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_MESSAGE"],
array("UID" => $arParams["USER_ID"], "FID" => $arParams["FID"], "TID" => $arParams["TID"],
"MID"=>((intVal($arParams["MID"]) > 0) ? intVal($arParams["MID"]) : "s"))));
/*******************************************************************/
$parser = new forumTextParser(LANGUAGE_ID, $arParams["PATH_TO_SMILE"]);
/********************************************************************
/Default params
********************************************************************/
ForumSetLastVisit($arParams["FID"], $arParams["TID"]);
/********************************************************************
Action
********************************************************************/
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
$TID1 = ($arParams["MESSAGE_TYPE"]=="NEW") ? 0 : intVal($arParams["TID"]);
$MID1 = ($arParams["MESSAGE_TYPE"]=="NEW") ? 0 : intVal($arParams["MID"]);
if (!check_bitrix_sessid())
{
$arError[] = array(
"id" => "bad sessid",
"text" => GetMessage("F_ERR_SESS_FINISH"));
}
elseif (!in_array($arResult["FORUM"]["ALLOW_UPLOAD"], array("Y", "A", "F")) && (!empty($_FILES) || !empty($_REQUEST["FILES"])))
{
$error = false;
if (!empty($_FILES))
{
foreach($_FILES as $name => $file)
{
if (strpos($name, "FILE_NEW_") === 0 && empty($file["error"]) && !empty($file["name"]))
{
$error = true;
break;
}
}
}
if ($error || !empty($_REQUEST["FILES"]))
{
$arError[] = array(
"id" => "bad files",
"text" => GetMessage("F_ERRRO_FILE_NOT_UPLOAD"));
unset($_REQUEST["FILES"]);
}
}
if (!empty($arError)) {}
elseif ($arResult["VIEW"] == "N")
{
$arFieldsG = array(
"POST_MESSAGE" => $_REQUEST["POST_MESSAGE"],
"USE_SMILES" => $_REQUEST["USE_SMILES"],
"OWNER_ID" => $arParams["USER_ID"],
"SOCNET_GROUP_ID" => $arParams["SOCNET_GROUP_ID"],
"PERMISSION_EXTERNAL" => $arParams["PERMISSION"]);
if ($arParams["SHOW_VOTE"] == "Y" && (!empty($_REQUEST["QUESTION"]) || !empty($_REQUEST["QUESTION_ID"])))
{
$VOTE_ID = ($arResult["MESSAGE"]["PARAM1"] == 'VT' ? intVal($arResult["MESSAGE"]["PARAM2"]) : 0);
$arVote = array(
"CHANNEL_ID" => $arParams["VOTE_CHANNEL_ID"],
"TITLE" => $_REQUEST["TITLE"],
"QUESTIONS" => array());
if ($VOTE_ID <= 0):
$arVote["DATE_START"] = GetTime(CForumNew::GetNowTime(), "FULL");
$arVote["DATE_END"] = GetTime(MakeTimeStamp($_REQUEST['DATE_END']), "FULL");
else:
$arVote["DATE_END"] = $_REQUEST['DATE_END'];
endif;
$arQuestions = $arResult["~QUESTIONS"];
$_REQUEST["QUESTION"] = (is_array($_REQUEST["QUESTION"]) ? $_REQUEST["QUESTION"] : array());
foreach ($_REQUEST["QUESTION"] as $key => $val)
{
$res = array(
"QUESTION" => trim($val),
"MULTI" => ($_REQUEST["MULTI"][$key] == "Y" ? "Y" : "N"),
"DEL" => ($_REQUEST["QUESTION_DEL"][$key] == "Y" ? "Y" : "N"),
"ANSWERS" => array());
$id = intval($_REQUEST["QUESTION_ID"][$key]);
if ($id > 0 && is_set($arQuestions, $id))
$res["ID"] = $id;
elseif ($res["DEL"] == "Y")
continue;
$arAnswers = (is_array($arResult["~QUESTIONS"][$res["ID"]]["ANSWERS"]) ?
$arResult["~QUESTIONS"][$res["ID"]]["ANSWERS"] : array());
foreach ($_REQUEST["ANSWER"][$key] as $keya => $vala)
{
$id = intval($_REQUEST["ANSWER_ID"][$key][$keya]);
$resa = array(
"ID" => ($id > 0 && is_set($arAnswers, $id) ? $id : false),
"DEL" => ($_REQUEST["ANSWER_DEL"][$key][$keya] == "Y" ? "Y" : "N"),
"MESSAGE" => trim($vala),
"FIELD_TYPE" => ($res["MULTI"] == "Y" ? 1 : 0));
if (!$resa["ID"] && ($resa["DEL"] == "Y" || empty($resa["MESSAGE"])))
continue;
unset($arAnswers[$resa["ID"]]);
$res["ANSWERS"][] = $resa;
}
foreach ($arAnswers as $keya => $vala)
$res["ANSWERS"][] = array_merge($vala, array("DEL" => "Y"));
if (empty($res["ANSWERS"]) && empty($res["QUESTION"]) && intVal($res["ID"]) <= 0)
continue;
unset($arQuestions[$res["ID"]]);
$arVote["QUESTIONS"][] = $res;
}
if (!empty($arQuestions))
foreach ($arQuestions as $key => $val)
$arVote["QUESTIONS"][] = array_merge($val, array("DEL" => "Y"));
if (!empty($arVote["QUESTIONS"]))
{
$uniqType = 0;
foreach ($arParams['VOTE_UNIQUE'] as $k => $v)
$uniqType |= intval($v);
$uniqType += 5;
list($uniqDelay, $uniqDelayType) = explode(" ", $arParams['VOTE_UNIQUE_IP_DELAY']);
$uniqDelay = intVal(trim($uniqDelay));
$uniqDelayType = trim($uniqDelayType);
if (!in_array($uniqDelayType, array("S", "M", "H", "D")))
$uniqDelayType = "D";
$arVoteParams = array(
"UNIQUE_TYPE" => $uniqType,
"DELAY" => $uniqDelay,
"DELAY_TYPE" => $uniqDelayType);
$VOTE_ID = VoteVoteEditFromArray($arParams["VOTE_CHANNEL_ID"], ($VOTE_ID > 0 ? $VOTE_ID : false), $arVote, $arVoteParams);
if (intVal($VOTE_ID) > 0)
{
$arFieldsG["PARAM1"] = "VT";
$arFieldsG["PARAM2"] = $VOTE_ID;
}
else
{
$e = $GLOBALS['APPLICATION']->GetException();
if ($e)
{
$err = reset($e->messages);
if ($err["id"] == "questions") {
CVote::Delete($VOTE_ID);
$arFieldsG["PARAM1"] = "";
$arFieldsG["PARAM2"] = false; }
else {
$strErrorMessage .= $e->GetString(); }
}
$VOTE_ID = false;
}
}
}
if (empty($strErrorMessage))
{
foreach (array("AUTHOR_NAME", "AUTHOR_EMAIL", "TITLE", "TAGS", "DESCRIPTION", "ICON_ID") as $res)
{
if (is_set($_REQUEST, $res))
$arFieldsG[$res] = $_REQUEST[$res];
}
if (!empty($_FILES["ATTACH_IMG"]))
{
$arFieldsG["ATTACH_IMG"] = $_FILES["ATTACH_IMG"];
if ($arParams["MESSAGE_TYPE"] == "EDIT" && $_REQUEST["ATTACH_IMG_del"] == "Y")
$arFieldsG["ATTACH_IMG"]["del"] = "Y";
}
else
{
$arFiles = array();
if (!empty($_REQUEST["FILES"]))
{
foreach ($_REQUEST["FILES"] as $key)
{
$arFiles[$key] = array("FILE_ID" => $key);
if (!in_array($key, $_REQUEST["FILES_TO_UPLOAD"]))
$arFiles[$key]["del"] = "Y";
}
}
if (!empty($_FILES))
{
$res = array();
foreach ($_FILES as $key => $val)
{
if (substr($key, 0, strLen("FILE_NEW")) == "FILE_NEW" && !empty($val["name"]))
{
$arFiles[] = $_FILES[$key];
}
}
}
if (!empty($arFiles))
$arFieldsG["FILES"] = $arFiles;
}
if ($arParams["MESSAGE_TYPE"] == "EDIT")
{
$arFieldsG["EDIT_ADD_REASON"] = $_REQUEST["EDIT_ADD_REASON"];
$arFieldsG["EDITOR_NAME"] = $_REQUEST["EDITOR_NAME"];
$arFieldsG["EDITOR_EMAIL"] = $_REQUEST["EDITOR_EMAIL"];
$arFieldsG["EDIT_REASON"] = $_REQUEST["EDIT_REASON"];
}
$MID1 = intVal(ForumAddMessage($arParams["MESSAGE_TYPE"], $arParams["FID"], $TID1, $MID1, $arFieldsG,
$strErrorMessage, $strOKMessage, false, $_POST["captcha_word"], 0, $_POST["captcha_code"], $arParams["NAME_TEMPLATE"]));
if ($MID1 > 0)
{
$arResult["MESSAGE"] = CForumMessage::GetByID($MID1);
$arParams["TID"] = $arResult["MESSAGE"]["TOPIC_ID"];
$arParams["MID"] = $arResult["MESSAGE"]["ID"];
$sText = (COption::GetOptionString("forum", "FILTER", "Y")=="Y" ? $arResult["MESSAGE"]["POST_MESSAGE_FILTER"] : $arResult["MESSAGE"]["POST_MESSAGE"]);
$sURL = CComponentEngine::MakePathFromTemplate(
$arParams["~URL_TEMPLATES_MESSAGE"],
array(
"UID" => $arParams["USER_ID"],
"FID" => $arParams["FID"],
"TID" => $arParams["TID"],
"MID" => $arParams["MID"])
);
if ($arParams['AUTOSAVE'])
$arParams['AUTOSAVE']->Reset();
/************** Socialnetwork notification *************************/
$workgroups_path = "";
if ($arParams["MODE"] == "GROUP" && IsModuleInstalled("extranet")) {
$workgroups_path = COption::GetOptionString("socialnetwork", "workgroups_page", false, SITE_ID);
$workgroups_path = "#GROUPS_PATH#".substr(
$arParams["~URL_TEMPLATES_MESSAGE"],
strlen($workgroups_path),
strlen($arParams["~URL_TEMPLATES_MESSAGE"]) - strlen($workgroups_path));
}
$arSonetFields = array(
"ENTITY_TYPE" => ($arParams["MODE"] == "GROUP" ? SONET_ENTITY_GROUP : SONET_ENTITY_USER),
"ENTITY_ID" => ($arParams["MODE"] == "GROUP" ? $arParams["SOCNET_GROUP_ID"] : $arParams["USER_ID"]),
"EVENT_ID" => "forum",
"=LOG_DATE" => $GLOBALS["DB"]->CurrentTimeFunction(),
"TITLE_TEMPLATE" => str_replace("#AUTHOR_NAME#", $arResult["MESSAGE"]["AUTHOR_NAME"], GetMessage("SONET_FORUM_LOG_TEMPLATE")),
"TITLE" => $arFieldsG["TITLE"],
"MESSAGE" => $sText,
"TEXT_MESSAGE" => $parser->convert4mail($sText),
"URL" => $sURL,
"PARAMS" => serialize(array(
"PATH_TO_MESSAGE" => CComponentEngine::MakePathFromTemplate(
(!empty($workgroups_path) ? $workgroups_path : $arParams["~URL_TEMPLATES_MESSAGE"]),
array("TID" => $arParams["TID"])),
"VOTE_ID" => ($arFieldsG["PARAM1"] == "VT" ? $arFieldsG["PARAM2"] : 0),
"PARSED" => "N"
)),
"MODULE_ID" => false,
"CALLBACK_FUNC" => false,
"SOURCE_ID" => $MID1,
"RATING_TYPE_ID" => "FORUM_TOPIC",
"RATING_ENTITY_ID" => intval($arParams["TID"])
);
if (intVal($arResult["MESSAGE"]["AUTHOR_ID"]) > 0)
$arSonetFields["USER_ID"] = $arResult["MESSAGE"]["AUTHOR_ID"];
$ufFileID = array();
$dbAddedMessageFiles = CForumFiles::GetList(array("ID" => "ASC"), array("MESSAGE_ID" => $MID1));
if (count($ufFileID) > 0)
$arSonetFields["UF_SONET_LOG_FILE"] = $ufFileID;
else
unset($arSonetFields["UF_SONET_LOG_FILE"]);
$ufDocID = $GLOBALS["USER_FIELD_MANAGER"]->GetUserFieldValue("FORUM_MESSAGE", "UF_FORUM_MESSAGE_DOC", $MID1, LANGUAGE_ID);
if ($ufDocID)
$arSonetFields["UF_SONET_LOG_DOC"] = $ufDocID;
else
unset($arSonetFields["UF_SONET_LOG_DOC"]);
if ($arParams["MESSAGE_TYPE"] == "NEW")
{
if ($arParams["MODE"] == "GROUP")
CSocNetGroup::SetLastActivity($arParams["SOCNET_GROUP_ID"]);
$logID = CSocNetLog::Add($arSonetFields, false);
if (intval($logID) > 0)
{
CSocNetLog::Update($logID, array("TMP_ID" => $logID));
CSocNetLogRights::SetForSonet($logID, $arSonetFields["ENTITY_TYPE"], $arSonetFields["ENTITY_ID"], "forum", "view", true);
CSocNetLog::CounterIncrement($logID);
if ($arParams["MODE"] == "GROUP")
{
$dbRight = CSocNetLogRights::GetList(array(), array("LOG_ID" => $logID));
while ($arRight = $dbRight->Fetch())
{
if ($arRight["GROUP_CODE"] == "SG".$arParams["SOCNET_GROUP_ID"]."_".SONET_ROLES_USER)
{
$title_tmp = str_replace(Array("\r\n", "\n"), " ", $arFieldsG["TITLE"]);
$title = TruncateText($title_tmp, 100);
$title_out = TruncateText($title_tmp, 255);
$arNotifyParams = array(
"LOG_ID" => $logID,
"GROUP_ID" => array($arParams["SOCNET_GROUP_ID"]),
"NOTIFY_MESSAGE" => "",
"FROM_USER_ID" => $arSonetFields["USER_ID"],
"URL" => $sURL,
"MESSAGE" => GetMessage("SONET_IM_NEW_TOPIC", Array(
"#title#" => "<a href=\"#URL#\" class=\"bx-notifier-item-action\">".$title."</a>",
)),
"MESSAGE_OUT" => GetMessage("SONET_IM_NEW_TOPIC", Array(
"#title#" => $title_out
))." (#URL#)",
"EXCLUDE_USERS" => array($arSonetFields["USER_ID"])
);
CSocNetSubscription::NotifyGroup($arNotifyParams);
break;
}
}
}
}
}
elseif ($arParams["MESSAGE_TYPE"] == "EDIT")
{
$dbRes = CSocNetLog::GetList(
array(),
array(
"EVENT_ID" => "forum",
"SOURCE_ID" => $MID1
),
false,
false,
array("ID")
);
if ($arRes = $dbRes->Fetch())
{
// topic
$arSonetFields = array_intersect_key($arSonetFields,
array_flip(array("TITLE_TEMPLATE", "TITLE", "MESSAGE", "TEXT_MESSAGE", "PARAMS", "UF_SONET_LOG_DOC")));
CSocNetLog::Update($arRes["ID"], $arSonetFields);
CSocNetLogRights::SetForSonet($arRes["ID"], ($arParams["MODE"] == "GROUP" ? SONET_ENTITY_GROUP : SONET_ENTITY_USER), ($arParams["MODE"] == "GROUP" ? $arParams["SOCNET_GROUP_ID"] : $arParams["USER_ID"]), "forum", "view");
}
else
{
$dbRes = CSocNetLogComments::GetList(
array(),
array(
"EVENT_ID" => "forum",
"SOURCE_ID" => $MID1
),
false,
false,
array("ID")
);
if ($arRes = $dbRes->Fetch())
{
// message/comment
$arSonetFields = array_intersect_key($arSonetFields,
array_flip(array("MESSAGE", "TEXT_MESSAGE", "PARAMS")));
CSocNetLogComments::Update($arRes["ID"], $arSonetFields);
}
}
}
$url = ForumAddPageParams(CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_MESSAGE"],
array("FID" => $arParams["FID"], "TID" => $arParams["TID"], "MID" => intVal($arParams["MID"]),
"UID" => $arParams["USER_ID"], "GID" => $arParams["SOCNET_GROUP_ID"])),
array("result" => $arNote["code"]));
LocalRedirect($url);
}
elseif (intVal($arFieldsG["PARAM2"]) > 0 && $arFieldsG["PARAM1"] == "VT")
{
CVote::Delete($arFieldsG["PARAM2"]);
}
}
if (!empty($strErrorMessage))
{
$arError[] = array(
"id" => $arParams["MESSAGE_TYPE"],
"text" => $strErrorMessage
);
}
}
elseif ($arResult["VIEW"] == "Y")
{
$bVarsFromForm = true;
$arFields = array(
"FORUM_ID" => intVal($arParams["FID"]),
"TOPIC_ID" => intVal($arParams["TID"]),
"MESSAGE_ID" => intVal($arParams["MID"]),
"USER_ID" => intVal($GLOBALS["USER"]->GetID()));
$arFiles = array();
$arFilesExists = array();
$res = array();
foreach ($_FILES as $key => $val):
if (substr($key, 0, strLen("FILE_NEW")) == "FILE_NEW" && !empty($val["name"])):
$arFiles[] = $_FILES[$key];
endif;
endforeach;
foreach ($_REQUEST["FILES"] as $key => $val)
{
if (!in_array($val, $_REQUEST["FILES_TO_UPLOAD"]))
{
$arFiles[$val] = array("FILE_ID" => $val, "del" => "Y");
unset($_REQUEST["FILES"][$key]);
unset($_REQUEST["FILES_TO_UPLOAD"][$key]);
}
else
{
$arFilesExists[$val] = array("FILE_ID" => $val);
}
}
if (!empty($arFiles))
{
$res = CForumFiles::Save($arFiles, $arFields);
$res1 = $GLOBALS['APPLICATION']->GetException();
if ($res1):
$arError[] = array(
"id" => "bad files",
"text" => $res1->GetString());
endif;
}
$res = is_array($res) ? $res : array();
foreach ($res as $key => $val)
$arFilesExists[$key] = $val;
$arFilesExists = array_keys($arFilesExists);
sort($arFilesExists);
$arResult["MESSAGE_VIEW"]["FILES"] = $_REQUEST["FILES"] = $arFilesExists;
$arResult["MESSAGE_VIEW"]["TEXT"] = $arResult["POST_MESSAGE_VIEW"] =
$parser->convert($_POST["POST_MESSAGE"], $arAllow, "html", $arResult["MESSAGE_VIEW"]["FILES"]);
$arResult["MESSAGE_VIEW"]["FILES_PARSED"] = $parser->arFilesIDParsed;
if ($arParams['AUTOSAVE'])
$arParams['AUTOSAVE']->Reset();
}
if (!empty($arError))
{
$e = new CAdminException($arError);
$arResult["ERROR_MESSAGE"] = $e->GetString();
$bVarsFromForm = true;
}
}
/********************************************************************
/Action
********************************************************************/
$this->IncludeComponentTemplate();
/********************************************************************
Standart Action
********************************************************************/
/*
$APPLICATION->AddChainItem(GetMessage("FL_FORUM_CHAIN"), $arResult["URL"]["LIST"]);
*/
if ($arParams["MESSAGE_TYPE"] == "EDIT"):
$APPLICATION->AddChainItem($arResult["TOPIC_FILTER"]["TITLE"], $arResult["URL"]["~READ"]);
endif;
$APPLICATION->AddChainItem(($arParams["MESSAGE_TYPE"]=="NEW" ? GetMessage("F_NTITLE") : GetMessage("F_ETITLE")));
if ($arParams["SET_TITLE"] != "N"):
$APPLICATION->SetTitle(($arParams["MESSAGE_TYPE"]=="NEW" ? GetMessage("F_NTITLE") : GetMessage("F_ETITLE")));
endif;
/********************************************************************
Standart Action
********************************************************************/
return array(
"PERMISSION" => $arParams["PERMISSION"],
"MESSAGE_TYPE" => $arParams["MESSAGE_TYPE"],
"FORUM" => $arResult["FORUM"],
"TOPIC" => $arResult["TOPIC"],
"MESSAGE" => $arResult["MESSAGE_VIEW"],
"bVarsFromForm" => ($bVarsFromForm ? "Y" : "N"),
"OK_MESSAGE" => $strOKMessage);
?>