%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/components/bitrix/socialnetwork.forum.topic.read/ |
Current File : //home/bitrix/www/bitrix/components/bitrix/socialnetwork.forum.topic.read/action.php |
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); if (!CModule::IncludeModule("forum")) return 0; $this->IncludeComponentLang("action.php"); $action = strtoupper($arParams["ACTION"]); $action = ($action == "SUPPORT" ? "FORUM_MESSAGE2SUPPORT" : $action); $post = $this->request->getPostList()->toArray(); if ($post["AJAX_POST"] == "Y") CUtil::decodeURIComponent($post); if (strLen($action) <= 0) { } elseif (!check_bitrix_sessid()) { $arError[] = array( "id" => "bad_sessid", "text" => GetMessage("F_ERR_SESS_FINISH") ); } elseif ($_REQUEST["MESSAGE_MODE"] == "VIEW") { $arResult["VIEW"] = "Y"; $bVarsFromForm = true; /************** Preview message ************************************/ $arAllow["SMILES"] = ($post["USE_SMILES"]!="Y" ? "N" : "Y" ); $arResult["POST_MESSAGE_VIEW"] = $post["POST_MESSAGE"]; $arResult["MESSAGE_VIEW"]["AUTHOR_NAME"] = ($USER->IsAuthorized() || empty($post["AUTHOR_NAME"]) ? $arResult["USER"]["SHOW_NAME"] : trim($post["AUTHOR_NAME"])); $arResult["MESSAGE_VIEW"]["TEXT"] = $arResult["POST_MESSAGE_VIEW"]; $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): $strErrorMessage .= $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; } else { $arFields = array( "PERMISSION_EXTERNAL" => $arParams["PERMISSION"], "PERMISSION" => $arParams["PERMISSION"]); $url = false; $code = false; $message = (!empty($_REQUEST["MID_ARRAY"]) ? $_REQUEST["MID_ARRAY"] : $_REQUEST["MID"]); if ((empty($message) || $message == "s") && !empty($_REQUEST["message_id"])) $message = $_REQUEST["message_id"]; if ((empty($message) || $message == "s") && !empty($arParams["MID"])) $message = $arParams["MID"]; switch ($action) { case "EDIT_TOPIC": $MID = 0; $db_res = CForumMessage::GetList(array("ID"=>"ASC"), array("TOPIC_ID"=>$arParams["TID"]), false, 1); if (($db_res) && ($res = $db_res->Fetch())) $MID = intVal($res["ID"]); if ($MID > 0) { $url = ForumAddPageParams( CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_TOPIC_EDIT"], array("FID" => $arParams["FID"], "TID" => $arParams["TID"], "MID" => $MID, "MESSAGE_TYPE" => "EDIT")), array("TID" => $arParams["TID"], "MID" => $MID, "MESSAGE_TYPE" => "EDIT", "sessid" => bitrix_sessid()), false, false); LocalRedirect($url); } break; case "REPLY": $arFields = array( "FID" => $arParams["FID"], "TID" => $arParams["TID"], "POST_MESSAGE" => $post["POST_MESSAGE"], "AUTHOR_NAME" => $post["AUTHOR_NAME"], "AUTHOR_EMAIL" => $post["AUTHOR_EMAIL"], "USE_SMILES" => $post["USE_SMILES"], "ATTACH_IMG" => $_FILES["ATTACH_IMG"], "captcha_word" => $post["captcha_word"], "captcha_code" => $post["captcha_code"], "NAME_TEMPLATE" => $arParams["NAME_TEMPLATE"]); if (!empty($_FILES["ATTACH_IMG"])) { $arFields["ATTACH_IMG"] = $_FILES["ATTACH_IMG"]; } 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"; endforeach; } 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]; endif; endforeach; } if (!empty($arFiles)) $arFields["FILES"] = $arFiles; } $url = CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_MESSAGE"], array("FID" => $arParams["FID"], "TID" => $arParams["TID"], "MID"=>"#result#")); break; case "VOTE4USER": return false; $arFields = array( "UID" => $_GET["UID"], "VOTES" => $_GET["VOTES"], "VOTE" => (($_GET["VOTES_TYPE"]=="U") ? True : False)); $url = CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_MESSAGE"], array("FID" => $arParams["FID"], "TID" => $arParams["TID"], "MID" => (intVal($_REQUEST["MID"]) > 0 ? $_REQUEST["MID"] : "s"))); break; case "HIDE": case "SHOW": case "FORUM_MESSAGE2SUPPORT": $arFields = array("MID" => $message); $mid = (is_array($message) ? $message[0] : $message); $url = CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_MESSAGE"], array("FID" => $arParams["FID"], "TID" => $arParams["TID"], "MID" => (!empty($mid) ? $mid : "s"))); if ($action == "FORUM_MESSAGE2SUPPORT") { $url = "/bitrix/admin/ticket_edit.php?ID=#result#&lang=".LANGUAGE_ID; } break; case "DEL": case "SPAM": $arFields = array("MID" => $message, "PERMISSION" => $arParams["PERMISSION"]); $url = CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_MESSAGE"], array("FID" => $arParams["FID"], "TID" => $arParams["TID"], "MID" => "#MID#")); break; case "SET_ORDINARY": case "SET_TOP": case "STATE_Y": case "STATE_N": if ($action == "STATE_Y") $action = "OPEN"; elseif ($action == "STATE_N") $action = "CLOSE"; elseif ($action == "SET_ORDINARY") $action = "ORDINARY"; else $action = "TOP"; $arFields = array("TID" => $arParams["TID"]); $url = CComponentEngine::MakePathFromTemplate( $arParams["~URL_TEMPLATES_MESSAGE"], array("FID" => $arParams["FID"], "TID" => $arParams["TID"], "MID" => ($arParams["MID"] > 0 ? $arParams["MID"] : "s"))); break; case "HIDE_TOPIC": case "SHOW_TOPIC": $arFields = array("TID" => $arParams["TID"]); $url = CComponentEngine::MakePathFromTemplate( $arParams["~URL_TEMPLATES_MESSAGE"], array("FID" => $arParams["FID"], "TID" => $arParams["TID"], "MID" => ($arParams["MID"] > 0 ? $arParams["MID"] : "s"))); break; case "SPAM_TOPIC": case "DEL_TOPIC": $arFields = array("TID" => $arParams["TID"]); $url = CComponentEngine::MakePathFromTemplate( $arParams["~URL_TEMPLATES_TOPIC_LIST"], array("FID" => $arParams["FID"])); break; } $strErrorMessage = ""; $strOKMessage = ""; $res = false; $arFields["PERMISSION_EXTERNAL"] = $arParams["PERMISSION"]; $arFields["PERMISSION"] = $arParams["PERMISSION"]; $arLogID_Del = array(); $arLogCommentID_Del = array(); switch ($action) { case "DEL": case "HIDE": // delete message log record $dbRes = CSocNetLogComments::GetList( array("ID" => "DESC"), array( "EVENT_ID" => "forum", "SOURCE_ID" => $arFields["MID"] ), false, false, array("ID") ); while ($arRes = $dbRes->Fetch()) $arLogCommentID_Del[] = $arRes["ID"]; break; case "DEL_TOPIC": case "HIDE_TOPIC": if (!is_array($arFields["TID"])) $arTID = array($arFields["TID"]); else $arTID = $arFields["TID"]; $arLogID_Del = array(); foreach($arTID as $topic_id_tmp) { // delete message log records $dbForumMessage = CForumMessage::GetList( array("ID" => "ASC"), array("TOPIC_ID" => $topic_id_tmp) ); while ($arForumMessage = $dbForumMessage->Fetch()) { $dbRes = CSocNetLog::GetList( array("ID" => "DESC"), array( "EVENT_ID" => "forum", "SOURCE_ID" => $arForumMessage["ID"] ), false, false, array("ID") ); while ($arRes = $dbRes->Fetch()) $arLogID_Del[] = $arRes["ID"]; } } break; } $actionResult = $res = ForumActions($action, $arFields, $strErrorMessage, $strOKMessage); if ($res) { // check out not hidden topic messages $iApprovedMessagesCnt = CForumMessage::GetList(array(), array("TOPIC_ID"=>$arParams["TID"], "APPROVED"=>"Y"), true); if ($iApprovedMessagesCnt <= 0) { $rsForumMessage = CForumMessage::GetList(array("ID"=>"ASC"), array("TOPIC_ID"=>$arParams["TID"]), false, 1); if ($arForumMessage = $rsForumMessage->Fetch()) { $dbLogRes = CSocNetLog::GetList( array("ID" => "DESC"), array( "EVENT_ID" => "forum", "SOURCE_ID" => $arForumMessage["ID"] ), false, false, array("ID") ); if ($arLogRes = $dbLogRes->Fetch()) $arLogID_Del[] = $arLogRes["ID"]; } } foreach($arLogID_Del as $log_id) CSocNetLog::Delete($log_id); foreach($arLogCommentID_Del as $log_comment_id) CSocNetLogComments::Delete($log_comment_id); } if (!empty($strErrorMessage)) { $arError[] = array( "id" => $action, "text" => $strErrorMessage ); } elseif ($action == "DEL" || $action == "SPAM") { $arFields = CForumTopic::GetByID($arParams["TID"]); if (empty($arFields)) { $url = CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_TOPIC_LIST"], array("FID" => $arParams["FID"])); $action = "del_topic"; } else { $res = intVal($message); $mid = "s"; if (is_array($message)): sort($message); $res = array_pop($message); endif; $arFilter = array("TOPIC_ID" => $arParams["TID"], ">ID" => $res); if ($arParams["PERMISSION"] < "Q"): $arFilter["APPROVED"] = "Y"; endif; $db_res = CForumMessage::GetList(array("ID" => "ASC"), $arFilter); if ($db_res && $res = $db_res->Fetch()) $mid = $res["ID"]; $url = str_replace("#MID#", $mid, $url); } } elseif ($action == "REPLY" || $action == "SHOW") { if ($action == "REPLY") $arParams["MID"] = intVal($res); $result = CForumMessage::GetByIDEx($arParams["MID"], array("GET_TOPIC_INFO" => "Y")); $arResult["MESSAGE"] = $result; if (is_array($result) && !empty($result)) { $arParams["TID"] = intVal($result["TOPIC_ID"]); if ($arParams["AUTOSAVE"]) $arParams["AUTOSAVE"]->Reset(); $sText = (COption::GetOptionString("forum", "FILTER", "Y") == "Y" ? $result["POST_MESSAGE_FILTER"] : $result["POST_MESSAGE"]); if ($arParams["MODE"] == "GROUP") CSocNetGroup::SetLastActivity($arParams["SOCNET_GROUP_ID"]); // calculate root MID $dbFirstMessage = CForumMessage::GetList( array("ID" => "ASC"), array("TOPIC_ID" => $arParams["TID"]), false, 1 ); if ($arFirstMessage = $dbFirstMessage->Fetch()) { $bSocNetLogRecordExists = false; $dbRes = CSocNetLog::GetList( array("ID" => "DESC"), array( "EVENT_ID" => "forum", "SOURCE_ID" => $arFirstMessage["ID"] ), false, false, array("ID", "TMP_ID", "USER_ID") ); if ($arRes = $dbRes->Fetch()) { $log_id = $arRes["TMP_ID"]; $log_user_id = $arRes["USER_ID"]; $bSocNetLogRecordExists = true; } else { // get root message $arFirstMessage = CForumMessage::GetByIDEx($arFirstMessage["ID"], array("GET_TOPIC_INFO" => "Y", "getFiles" => "Y")); $arTopic = $arFirstMessage["TOPIC_INFO"]; $sFirstMessageText = (COption::GetOptionString("forum", "FILTER", "Y") == "Y" ? $arFirstMessage["POST_MESSAGE_FILTER"] : $arFirstMessage["POST_MESSAGE"]); $sFirstMessageURL = CComponentEngine::MakePathFromTemplate( $arParams["~URL_TEMPLATES_MESSAGE"], array( "UID" => $arFirstMessage["AUTHOR_ID"], "FID" => $arFirstMessage["FORUM_ID"], "TID" => $arFirstMessage["TOPIC_ID"], "MID" => $arFirstMessage["ID"] ) ); $arFieldsForSocnet = 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" => $arFirstMessage["POST_DATE"], "LOG_UPDATE" => $arFirstMessage["POST_DATE"], "TITLE_TEMPLATE" => str_replace("#AUTHOR_NAME#", $arFirstMessage["AUTHOR_NAME"], GetMessage("SONET_FORUM_LOG_TOPIC_TEMPLATE")), "TITLE" => $arTopic["TITLE"], "MESSAGE" => $sFirstMessageText, "TEXT_MESSAGE" => $parser->convert4mail($sFirstMessageText), "URL" => $sFirstMessageURL, "PARAMS" => serialize(array( "PATH_TO_MESSAGE" => CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_MESSAGE"], array("TID" => $arParams["TID"])), "VOTE_ID" => ($arFirstMessage["PARAM1"] == "VT" ? $arFirstMessage["PARAM2"] : 0))), "MODULE_ID" => false, "CALLBACK_FUNC" => false, "SOURCE_ID" => $arFirstMessage["ID"], "RATING_TYPE_ID" => "FORUM_TOPIC", "RATING_ENTITY_ID" => intval($arParams["TID"]) ); if (intVal($arFirstMessage["AUTHOR_ID"]) > 0) $arFieldsForSocnet["USER_ID"] = $arFirstMessage["AUTHOR_ID"]; $log_id = CSocNetLog::Add($arFieldsForSocnet, false); if (intval($log_id) > 0) { $log_user_id = $arFieldsForSocnet["USER_ID"]; CSocNetLog::Update($log_id, array("TMP_ID" => $log_id)); CSocNetLogRights::SetForSonet($log_id, ($arParams["MODE"] == "GROUP" ? SONET_ENTITY_GROUP : SONET_ENTITY_USER), ($arParams["MODE"] == "GROUP" ? $arParams["SOCNET_GROUP_ID"] : $arParams["USER_ID"]), "forum", "view"); } } if (intval($log_id) > 0) { $arFieldsForSocnet = 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(), "MESSAGE" => $sText, "TEXT_MESSAGE" => $parser->convert4mail($sText), "URL" => str_replace("#result#", $arParams["MID"], $url), "MODULE_ID" => false, "SOURCE_ID" => $arParams["MID"], "LOG_ID" => $log_id, "RATING_TYPE_ID" => "FORUM_POST", "RATING_ENTITY_ID" => intval($arParams["MID"]) ); $ufFileID = array(); $dbAddedMessageFiles = CForumFiles::GetList(array("ID" => "ASC"), array("MESSAGE_ID" => $arParams["MID"])); while ($arAddedMessageFiles = $dbAddedMessageFiles->Fetch()) $ufFileID[] = $arAddedMessageFiles["FILE_ID"]; if (count($ufFileID) > 0) $arFieldsForSocnet["UF_SONET_COM_FILE"] = $ufFileID; $ufDocID = $GLOBALS["USER_FIELD_MANAGER"]->GetUserFieldValue("FORUM_MESSAGE", "UF_FORUM_MESSAGE_DOC", $arParams["MID"], LANGUAGE_ID); if ($ufDocID) $arFieldsForSocnet["UF_SONET_COM_DOC"] = $ufDocID; if ($bSocNetLogRecordExists) { if (intVal($arResult["MESSAGE"]["AUTHOR_ID"]) > 0) $arFieldsForSocnet["USER_ID"] = $arResult["MESSAGE"]["AUTHOR_ID"]; $log_comment_id = CSocNetLogComments::Add($arFieldsForSocnet, false, false); CSocNetLog::CounterIncrement($log_comment_id, false, false, "LC"); if ( CModule::IncludeModule("im") && intval($arFieldsForSocnet["USER_ID"]) > 0 && $arFieldsForSocnet["USER_ID"] != $log_user_id ) { $rsUnFollower = CSocNetLogFollow::GetList( array( "USER_ID" => $log_user_id, "CODE" => "L".$log_id, "TYPE" => "N" ), array("USER_ID") ); $arUnFollower = $rsUnFollower->Fetch(); if (!$arUnFollower) { $arMessageFields = array( "MESSAGE_TYPE" => IM_MESSAGE_SYSTEM, "TO_USER_ID" => $log_user_id, "FROM_USER_ID" => $arFieldsForSocnet["USER_ID"], "NOTIFY_TYPE" => IM_NOTIFY_FROM, "NOTIFY_MODULE" => "forum", "NOTIFY_EVENT" => "comment", ); $arParams["TITLE"] = str_replace(Array("\r\n", "\n"), " ", $arResult["MESSAGE"]["TOPIC_INFO"]["TITLE"]); $arParams["TITLE"] = TruncateText($arParams["TITLE"], 100); $arParams["TITLE_OUT"] = TruncateText($arParams["TITLE"], 255); $arTmp = CSocNetLogTools::ProcessPath(array("MESSAGE_URL" => $arFieldsForSocnet["URL"]), $log_user_id); $serverName = $arTmp["SERVER_NAME"]; $url = $arTmp["URLS"]["MESSAGE_URL"]; $arMessageFields["NOTIFY_TAG"] = "FORUM|COMMENT|".$arParams["MID"]; $arMessageFields["NOTIFY_MESSAGE"] = GetMessage("SONET_FORUM_ACTION_IM_COMMENT", Array( "#title#" => "<a href=\"".$url."\" class=\"bx-notifier-item-action\">".htmlspecialcharsbx($arParams["TITLE"])."</a>", )); $arMessageFields["NOTIFY_MESSAGE_OUT"] = GetMessage("SONET_FORUM_ACTION_IM_COMMENT", Array( "#title#" => htmlspecialcharsbx($arParams["TITLE_OUT"]) ))." (".$serverName.$url.")#BR##BR#".$sText; CIMNotify::Add($arMessageFields); } } } else //socnetlog record didn't exist - adding all comments { $dbComments = CForumMessage::GetListEx( array("ID" => "ASC"), array('TOPIC_ID' => $arParams["TID"], "NEW_TOPIC" => "N") ); if ($dbComments && ($arComment = $dbComments->Fetch())) { do { $ufFileID = array(); $dbAddedMessageFiles = CForumFiles::GetList(array("ID" => "ASC"), array("MESSAGE_ID" => $arComment["ID"])); while ($arAddedMessageFiles = $dbAddedMessageFiles->Fetch()) $ufFileID[] = $arAddedMessageFiles["FILE_ID"]; if (count($ufFileID) > 0) $arFieldsForSocnet["UF_SONET_COM_FILE"] = $ufFileID; else unset($arFieldsForSocnet["UF_SONET_COM_FILE"]); $ufDocID = $GLOBALS["USER_FIELD_MANAGER"]->GetUserFieldValue("FORUM_MESSAGE", "UF_FORUM_MESSAGE_DOC", $arComment["ID"], LANGUAGE_ID); if ($ufDocID) $arFieldsForSocnet["UF_SONET_COM_DOC"] = $ufDocID; else unset($arFieldsForSocnet["UF_SONET_COM_DOC"]); $arSocLog = array( "=LOG_DATE" => $DB->CharToDateFunction($arComment['POST_DATE'], "FULL", SITE_ID), "MESSAGE" => $arComment['POST_MESSAGE'], "TEXT_MESSAGE" => $parser->convert4mail($arComment['POST_MESSAGE']), "SOURCE_ID" => intval($arComment["ID"]), "RATING_ENTITY_ID" => intval($arComment["ID"]) ) + (!!$arComment['AUTHOR_ID'] ? array("USER_ID" => $arComment["AUTHOR_ID"]) : array()); $log_comment_id = CSocNetLogComments::Add(array_merge($arFieldsForSocnet, $arSocLog), false, false); CSocNetLog::CounterIncrement($log_comment_id, false, false, "LC"); } while ($arComment = $dbComments->Fetch()); } } } } } $res = $arParams["MID"]; } if (!$res) $bVarsFromForm = true; else { $arNote = array( "code" => $action, "title" => $strOKMessage, "link" => $url); } $arResult['RESULT'] = $res; if (isset($_REQUEST['AJAX_CALL']) && in_array($action, array('SHOW', 'HIDE', 'DEL'))) { $GLOBALS['APPLICATION']->RestartBuffer(); $arRes = array('status' => (!($actionResult === false)), 'message' => ( (!($actionResult===false)) ? $strOKMessage : $strErrorMessage)); echo CUtil::PhpToJSObject($arRes); die(); } if (empty($arError) && !($arParams['AJAX_POST'] == 'Y' && $action == 'REPLY')) { $url = str_replace("#result#", $res, $url); LocalRedirect(ForumAddPageParams($url, array("result" => strtolower($action)), true, false).(!empty($arParams["MID"]) ? "#message".$arParams["MID"] : "")); } } if (!empty($arError)) { $bVarsFromForm = true; } ?>