%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/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 ********************************************/
$GLOBALS["FID"] = $arParams["FID"] = intVal($arParams["FID"]);
$arParams["TID"] = intVal((intVal($arParams["TID"]) <= 0 ? $_REQUEST["TID"] : $arParams["TID"]));
$arParams["MID_UNREAD"] = (strLen(trim($arParams["MID"])) <= 0 ? $_REQUEST["MID"] : $arParams["MID"]);
$arParams["MID"] = (is_array($arParams["MID"]) ? 0 : intVal($arParams["MID"]));
if (strtolower($arParams["MID_UNREAD"]) == "unread_mid")
$arParams["MID"] = intVal(ForumGetFirstUnreadMessage($arParams["FID"], $arParams["TID"]));
$arParams['AJAX_POST'] = ($arParams["AJAX_POST"] == "Y" ? "Y" : "N");
$arParams["ACTION"] = (!empty($arParams["ACTION"]) ? $arParams["ACTION"] : $_REQUEST["ACTION"]);
$arParams["ACTION"] = (!empty($arParams["ACTION"]) ? $arParams["ACTION"] : ($_POST["MESSAGE_TYPE"]=="REPLY" ? "REPLY" : false));
$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",
"topic" => "PAGE_NAME=topic&TID=#TID#",
"topic_edit" => "PAGE_NAME=topic_edit&TID=#TID#&MID=#MID#",
"message" => "PAGE_NAME=topic&TID=#TID#&MID=#MID#",
"profile_view" => "PAGE_NAME=profile_view&UID=#UID#");
foreach ($URL_NAME_DEFAULT as $URL => $URL_VALUE)
{
if (strLen(trim($arParams["URL_TEMPLATES_".strToUpper($URL)])) <= 0)
$arParams["URL_TEMPLATES_".strToUpper($URL)] = $APPLICATION->GetCurPageParam($URL_VALUE,
array("PAGE_NAME", "FID", "TID", "UID", "GID", "MID", "ACTION", "sessid", "SEF_APPLICATION_CUR_PAGE_URL",
"AJAX_TYPE", "AJAX_CALL", BX_AJAX_PARAM_ID, "result", "order"));
$arParams["~URL_TEMPLATES_".strToUpper($URL)] = $arParams["URL_TEMPLATES_".strToUpper($URL)];
$arParams["URL_TEMPLATES_".strToUpper($URL)] = htmlspecialcharsbx($arParams["~URL_TEMPLATES_".strToUpper($URL)]);
}
/***************** ADDITIONAL **************************************/
$arParams["PAGEN"] = (intVal($arParams["PAGEN"]) <= 0 ? 1 : intVal($arParams["PAGEN"]));
$arParams["PAGE_NAVIGATION_TEMPLATE"] = trim($arParams["PAGE_NAVIGATION_TEMPLATE"]);
$arParams["PAGE_NAVIGATION_WINDOW"] = intVal(intVal($arParams["PAGE_NAVIGATION_WINDOW"]) > 0 ? $arParams["PAGE_NAVIGATION_WINDOW"] : 11);
$arParams["PAGE_NAVIGATION_SHOW_ALL"] = ($arParams["PAGE_NAVIGATION_SHOW_ALL"] == "Y" ? "Y" : "N");
$arParams["USER_FIELDS"] = (is_array($arParams["USER_FIELDS"]) ? $arParams["USER_FIELDS"] : ($arParams["USER_FIELDS"] ? array($arParams["USER_FIELDS"]) : array()));
if (!in_array("UF_FORUM_MESSAGE_DOC", $arParams["USER_FIELDS"]))
$arParams["USER_FIELDS"][] = "UF_FORUM_MESSAGE_DOC";
$arParams["MESSAGES_PER_PAGE"] = intVal(empty($arParams["MESSAGES_PER_PAGE"]) ?
COption::GetOptionString("forum", "MESSAGES_PER_PAGE", "10") : $arParams["MESSAGES_PER_PAGE"]);
$arParams["PATH_TO_SMILE"] = trim($arParams["PATH_TO_SMILE"]);
$arParams["PATH_TO_ICON"] = trim($arParams["PATH_TO_ICON"]);
$arParams["WORD_LENGTH"] = intVal($arParams["WORD_LENGTH"]);
$arParams["IMAGE_SIZE"] = (intVal($arParams["IMAGE_SIZE"]) > 0 ? $arParams["IMAGE_SIZE"] : 500);
// Data and data-time format
$arParams["DATE_FORMAT"] = trim(empty($arParams["DATE_FORMAT"]) ? $DB->DateFormatToPHP(CSite::GetDateFormat("SHORT")) : $arParams["DATE_FORMAT"]);
$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"]) ? $arParams["NAME_TEMPLATE"] : CSite::GetNameFormat());
// AJAX
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"] = (($arParams["AJAX_TYPE"] == "Y" && $_REQUEST["AJAX_CALL"] == "Y") ? "Y" : "N");
$arParams["AUTOSAVE"] = CForumAutosave::GetInstance();
/***************** STANDART ****************************************/
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;
$arParams["SET_TITLE"] = ($arParams["SET_TITLE"] == "N" ? "N" : "Y");
/********************************************************************
/Input params
********************************************************************/
/********************************************************************
Default params # 1
********************************************************************/
$arResult["TOPIC"] = array();
$arResult["FORUM"] = CForumNew::GetByID($arParams["FID"]);
$arParams["PERMISSION_ORIGINAL"] = ForumCurrUserPermissions($arParams["FID"]);
$arParams["PERMISSION"] = "A";
$arError = array();
$arNote = array();
/********************************************************************
/Default params #1
********************************************************************/
/********************************************************************
Main Data & Permissions
********************************************************************/
$bCurrentUserIsAdmin = CSocNetUser::IsCurrentUserModuleAdmin();
if (empty($arResult["FORUM"])):
ShowError(GetMessage("F_FID_IS_LOST"));
CHTTP::SetStatus("404 Not Found");
return false;
elseif (($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;
else:
$user_id = $USER->GetID();
if ($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";
}
endif;
if ($arParams["SHOW_VOTE"] == "Y")
{
// A - NO ACCESS E - READ I - ANSWER
// M - NEW TOPIC Q - MODERATE U - EDIT Y - FULL_ACCESS
$arResult["VOTE_PERMISSION"] = (($arParams['PERMISSION'] === 'A') ? 0 : (($arParams['PERMISSION'] === 'E') ? 1 : 2));
$arParams["SHOW_VOTE"] = ($arResult["VOTE_PERMISSION"] <= 'A' ? "N" : "Y");
}
if (!CForumNew::CanUserViewForum($arParams["FID"], $USER->GetUserGroupArray(), $arParams["PERMISSION"])):
ShowError(GetMessage("FORUM_SONET_NO_ACCESS"));
return false;
endif;
$arResult["CURRENT_PAGE"] = CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_TOPIC"],
array("UID" => $arParams["USER_ID"], "TID" => $arParams["TID"], "GID" => $arParams["SOCNET_GROUP_ID"], "FID" => $arParams["FID"]));
if ((intVal($_REQUEST["PAGEN_".$arParams["PAGEN"]]) > 1) && (intVal($arParams["MID"]) <= 0)):
$arResult["CURRENT_PAGE"] = ForumAddPageParams($arResult["CURRENT_PAGE"],
array("PAGEN_".$arParams["PAGEN"] => intVal($_REQUEST["PAGEN_".$arParams["PAGEN"]])));
endif;
/************** Message ********************************************/
if ($arParams["MID"] > 0):
$res = CForumMessage::GetByIDEx($arParams["MID"], array("GET_TOPIC_INFO" => "Y"));
if (!(is_array($res) && $res["FORUM_ID"] == $arParams["FID"]))
{
LocalRedirect($arResult["CURRENT_PAGE"]);
}
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"];
if ($res["APPROVED"] != "Y" && $arParams["PERMISSION"] < "Q"):
$arNote[] = array(
"id" => "mid is not approved",
"text" => GetMessage("F_MID_IS_NOT_APPROVED"));
endif;
}
endif;
/************** Topic **********************************************/
$arFilter = array(
// "FORUM_ID" => $arParams["FID"],
"ID" => $arParams["TID"],
"SOCNET_GROUP_ID" => false
);
if ($arParams["MODE"] == "GROUP"):
$arFilter["SOCNET_GROUP_ID"] = $arParams["SOCNET_GROUP_ID"];
else:
$arFilter["OWNER_ID"] = $arParams["USER_ID"];
$arFilter["FORUM_ID"] = $arParams["FID"];
endif;
$db_res = CForumTopic::GetList(array(), $arFilter);
if (!($db_res && $res = $db_res->GetNext())):
$res = CForumTopic::GetByID($arParams["TID"]);
if (empty($res) || !is_array($res)):
$arError[] = array(
"id" => "topic is not found",
"text" => GetMessage("F_TID_IS_LOST"));
elseif ($arParams["MODE"] == "GROUP" && $res["SOCNET_GROUP_ID"] != $arParams["SOCNET_GROUP_ID"] ||
$arParams["MODE"] != "GROUP" && $res["OWNER_ID"] != $arParams["USER_ID"]):
$arError[] = array(
"id" => "not correct socnet_object",
"text" => str_replace("#SOCNET_OBJECT#", ($arParams["MODE"] == "GROUP" ?
GetMessage("F_GROUPS") : GetMessage("F_USERS")), GetMessage("F_TID_IS_LOST_IN_OBJECT")));
elseif ($res["FORUM_ID"] != $arParams["FID"]):
$arError[] = array(
"id" => "not correct forum_id",
"text" => GetMessage("F_TID_IS_LOST_IN_FORUM"));
endif;
elseif ($res["STATE"] == "L"):
$arError[] = array(
"id" => "topic is topic-link",
"text" => GetMessage("F_TID_IS_LINK"));
elseif ($res["APPROVED"] != "Y" && $arParams["PERMISSION"] < "Q"):
$arError[] = array(
"id" => "topic is not approved",
"text" => GetMessage("F_TID_IS_NOT_APPROVED"));
else:
$arResult["TOPIC"] = $res;
endif;
if (!empty($arError)):
$e = new CAdminException($arError);
$res = $e->GetString();
ShowError($res);
return false;
endif;
/********************************************************************
/Main Data & Permissions
********************************************************************/
/********************************************************************
Default params # 2
********************************************************************/
$arResult["MESSAGE_FIRST"] = array();
$arResult["MESSAGE_LIST"] = array();
$arResult["MESSAGE_VIEW"] = array();
$arResult["VIEW"] = "N";
$bVarsFromForm = false;
/************** Current User ***************************************/
$arResult["USER"] = array(
"INFO" => array(),
"PERMISSION" => $arParams["PERMISSION"],
"RIGHTS" => array(
"ADD_TOPIC" => (CForumTopic::CanUserAddTopic($arParams["FID"], $USER->GetUserGroupArray(), $USER->GetID(), $arResult["FORUM"], $arParams["PERMISSION"]) ? "Y" : "N"),
"MODERATE" => (CForumNew::CanUserModerateForum($arParams["FID"], $USER->GetUserGroupArray(), $USER->GetID(), $arParams["PERMISSION"]) == true ? "Y" : "N"),
"EDIT" => (CForumNew::CanUserEditForum($arParams["FID"], $USER->GetUserGroupArray(), $USER->GetID(), $arParams["PERMISSION"]) ? "Y" : "N"),
"ADD_MESSAGE" => (CForumMessage::CanUserAddMessage($arParams["TID"], $USER->GetUserGroupArray(), $USER->GetID(), $arParams["PERMISSION"]) ? "Y" : "N")),
"SUBSCRIBE" => array(),
"SHOW_NAME" => $GLOBALS["FORUM_STATUS_NAME"]["guest"]);
// to avoid forum module permissions extension for admin
if ($arParams["PERMISSION"] <= "E")
{
$arResult["USER"]["RIGHTS"] = array(
"ADD_TOPIC" => "N",
"MODERATE" => "N",
"EDIT" => "N",
"ADD_MESSAGE" => "N",
);
}
if ($USER->IsAuthorized()) {
$arResult["USER"]["INFO"] = CForumUser::GetByUSER_ID($USER->GetParam("USER_ID"));
$arResult["USER"]["SHOW_NAME"] = $_SESSION["FORUM"]["SHOW_NAME"];
$arResult["USER"]["RANK"] = CForumUser::GetUserRank($USER->GetParam("USER_ID"));
$db_res = CForumSubscribe::GetList(
array(),
array(
"USER_ID" => $USER->GetID(),
"FORUM_ID" => $arParams["FID"],
"TOPIC_ID" => $arParams["TID"],
"SITE_ID" => SITE_ID));
if ($db_res && $res = $db_res->Fetch())
$arResult["USER"]["SUBSCRIBE"][$res["ID"]] = $res;
}
/*******************************************************************/
$arResult["PANELS"] = array(
"MODERATE" => $arResult["USER"]["RIGHTS"]["MODERATE"],
"DELETE" => $arResult["USER"]["RIGHTS"]["EDIT"],
"SUPPORT" => IsModuleInstalled("support") && $APPLICATION->GetGroupRight("forum") >= "W" ? "Y" : "N",
"EDIT" => $arResult["USER"]["RIGHTS"]["EDIT"],
"STATISTIC" => IsModuleInstalled("statistic") && $APPLICATION->GetGroupRight("statistic") > "D" ? "Y" : "N",
"MAIN" => $APPLICATION->GetGroupRight("main") > "D" ? "Y" : "N",
"MAIL" => ($APPLICATION->GetGroupRight("mail") > "R" ? "Y" : "N"));
/*******************************************************************/
$_SERVER["REQUEST_URI"] = $arResult["CURRENT_PAGE"];
unset($_GET["MID"]); unset($GLOBALS["HTTP_GET_VARS"]["MID"]);
unset($_GET["ACTION"]); unset($GLOBALS["HTTP_GET_VARS"]["ACTION"]);
$parser = new forumTextParser(LANGUAGE_ID, $arParams["PATH_TO_SMILE"]);
$parser->MaxStringLen = $arParams["WORD_LENGTH"];
$parser->image_params["width"] = $parser->image_params["height"] = $arParams["IMAGE_SIZE"];
$_REQUEST["FILES"] = is_array($_REQUEST["FILES"]) ? $_REQUEST["FILES"] : array();
$_REQUEST["FILES_TO_UPLOAD"] = is_array($_REQUEST["FILES_TO_UPLOAD"]) ? $_REQUEST["FILES_TO_UPLOAD"] : array();
if (is_set($_REQUEST, "result"))
{
switch (strToLower($_REQUEST["result"]))
{
case "message_add":
case "mid_add":
case "reply":
$arNote[] = array(
"id" => "message_add",
"text" => GetMessage("F_MESS_SUCCESS_ADD"));
break;
}
unset($_GET["result"]);
DeleteParam(array("result"));
}
$arAllow = forumTextParser::GetFeatures($arResult["FORUM"]);
/********************************************************************
/Default params # 2
********************************************************************/
ForumSetLastVisit($arParams["FID"], $arParams["TID"]);
ForumSetReadTopic($arParams["FID"], $arParams["TID"]);
/********************************************************************
Action
********************************************************************/
$dir = dirname(__FILE__);
include(str_replace(array("\\", "//"), "/", $dir."/")."action.php");
/********************************************************************
/Action
********************************************************************/
if (!empty($arError)):
$e = new CAdminException($arError);
$arResult["ERROR_MESSAGE"] = $e->GetString();
endif;
if (!empty($arNote)):
if (isset($arNote['title']))
{
$arResult['OK_MESSAGE'] = $arNote['title'];
}
else
{
$e = new CAdminException($arNote);
$arResult["OK_MESSAGE"] = $e->GetString();
}
endif;
/********************************************************************
Data
********************************************************************/
/************** Message list ***************************************/
$arResult["TOPIC"]["iLAST_TOPIC_MESSAGE"] = $arResult["TOPIC"]["ABS_LAST_MESSAGE_ID"];
// Number current page
$iNumPage = 0;
if ($arParams["MID"] > 0):
$iNumPage = CForumMessage::GetMessagePage(
$arParams["MID"],
$arParams["MESSAGES_PER_PAGE"],
$USER->GetUserGroupArray(),
$arParams["TID"],
array("PERMISSION_EXTERNAL" => $arParams["PERMISSION"]));
endif;
$arFilter = array(
"TOPIC_ID" => $arParams["TID"]
);
if ($arParams["MODE"] != "GROUP")
$arFilter["FORUM_ID"] = $arParams["FID"];
if ($arResult["USER"]["RIGHTS"]["MODERATE"] != "Y")
$arFilter["APPROVED"] = "Y";
if ($USER->IsAuthorized())
$arFilter["POINTS_TO_AUTHOR_ID"] = $USER->GetID();
// Pagen
CPageOption::SetOptionString("main", "nav_page_in_session", "N");
$db_res = CForumMessage::GetListEx(array("ID" => "ASC"), $arFilter, false, false,
array(
"bDescPageNumbering" => false,
"nPageSize" => $arParams["MESSAGES_PER_PAGE"],
"bShowAll" => ($arParams["PAGE_NAVIGATION_SHOW_ALL"] == "Y"),
"iNumPage" => ($iNumPage > 0 ? $iNumPage : false),
"sNameTemplate" => $arParams["NAME_TEMPLATE"]));
$db_res->NavStart($arParams["MESSAGES_PER_PAGE"], false, ($iNumPage > 0 ? $iNumPage : false));
$arResult["NAV_RESULT"] = $db_res;
$arResult["NAV_STRING"] = $db_res->GetPageNavStringEx($navComponentObject, GetMessage("F_TITLE_NAV"), $arParams["PAGE_NAVIGATION_TEMPLATE"]);
$number = intVal($db_res->NavPageNomer - 1) * $arParams["MESSAGES_PER_PAGE"] + 1;
$arResult['PAGE_NUMBER'] = $db_res->NavPageNomer;
$UserInfo = array();
$bNeedFirstMessage = ($db_res->NavPageNomer > 1 && $arParams["SHOW_VOTE"] == "Y");
$bNeedLoop = true;
while ($bNeedLoop)
{
if (!($res = $db_res->GetNext())):
$bNeedLoop = false;
if ($bNeedFirstMessage):
$db_res = CForumMessage::GetListEx(array("ID"=>"ASC"), $arFilter, false, 1);
$res = $db_res->GetNext();
if (!($res["PARAM1"] == "VT" && !empty($res["PARAM2"])))
{
$bNeedFirstMessage = false;
break;
}
$number = 1;
else:
break;
endif;
endif;
/************** Message info ***************************************/
// number in topic
$res["NUMBER"] = $number++;
// data
$res["POST_DATE"] = CForumFormat::DateFormat($arParams["DATE_TIME_FORMAT"], MakeTimeStamp($res["POST_DATE"], CSite::GetDateFormat()));
$res["EDIT_DATE"] = CForumFormat::DateFormat($arParams["DATE_TIME_FORMAT"], MakeTimeStamp($res["EDIT_DATE"], CSite::GetDateFormat()));
// text
$res["ALLOW"] = array_merge($arAllow, array("SMILES" => ($res["USE_SMILES"] == "Y" ? $arResult["FORUM"]["ALLOW_SMILES"] : "N")));
$res["~POST_MESSAGE_TEXT"] = (COption::GetOptionString("forum", "FILTER", "Y") == "Y" ? $res["~POST_MESSAGE_FILTER"] : $res["~POST_MESSAGE"]);
// attach
$res["ATTACH_IMG"] = ""; $res["FILES"] = array();
$res["~ATTACH_FILE"] = array(); $res["ATTACH_FILE"] = array();
/************** Message info/***************************************/
/************** Author info ****************************************/
$res["AUTHOR_ID"] = intVal($res["AUTHOR_ID"]);
$res["AUTHOR_NAME"] = $parser->wrap_long_words($res["AUTHOR_NAME"]);
if ($res["AUTHOR_ID"] <= 0)
{
// Status
list($res["AUTHOR_STATUS_CODE"], $res["AUTHOR_STATUS"]) = ForumGetUserForumStatus(0);
}
else
{
if (!array_key_exists($res["AUTHOR_ID"], $UserInfo))
{
$perm = CForumNew::GetUserPermission($res["FORUM_ID"], CUser::GetUserGroup($res["AUTHOR_ID"]));
$arUser = array(
"Perms" => $perm,
"Rank" => ($perm <= "Q" ? CForumUser::GetUserRank($res["AUTHOR_ID"], LANGUAGE_ID) : ""),
"Points" => (!empty($res["POINTS"]) ? array("POINTS" => $res["POINTS"], "DATE_UPDATE" => $res["DATE_UPDATE"]) : false));
$arUData = array();
// Status
list($arUData["AUTHOR_STATUS_CODE"], $arUData["AUTHOR_STATUS"]) = ForumGetUserForumStatus($res["AUTHOR_ID"], $arUser["Perms"], $arUser);
// Avatar
if (!empty($res["AVATAR"])):
$arUData["AVATAR"] = array("ID" => $res["~AVATAR"], "FILE" => CFile::GetFileArray($res["~AVATAR"]));
$arUData["AVATAR"]["HTML"] = CFile::ShowImage($arUData["AVATAR"]["FILE"],
COption::GetOptionString("forum", "avatar_max_width", 90),
COption::GetOptionString("forum", "avatar_max_height", 90), "border=\"0\"", "", true);
endif;
// Voting
$arUData["VOTING"] = "N";
if (COption::GetOptionString("forum", "SHOW_VOTES", "Y") == "Y" && $USER->IsAuthorized() &&
($GLOBALS["APPLICATION"]->GetGroupRight("forum") >= "W" || $USER->GetID() != $res["AUTHOR_ID"]))
{
$bUnVote = $arUser["Points"];
$bVote = (!($arUser["Points"]) ? $arResult["USER"]["RANK"]["VOTES"] :
intval($arUser["Points"]["POINTS"]) < intval($arResult["USER"]["RANK"]["VOTES"]));
$bVote = ($bVote ? $bVote : $GLOBALS["APPLICATION"]->GetGroupRight("forum") >= "W");
$arUData["VOTING"] = ($bVote ? "VOTE" : ($bUnVote ? "UNVOTE" : "N"));
}
// data
$arUData["DATE_REG"] = CForumFormat::DateFormat($arParams["DATE_FORMAT"], MakeTimeStamp($res["DATE_REG"], CSite::GetDateFormat()));
// Another data
$arUData["DESCRIPTION"] = $parser->wrap_long_words($res["DESCRIPTION"]);
if (!empty($res["SIGNATURE"]))
$arUData["SIGNATURE"] = $parser->convert($res["~SIGNATURE"], array_merge($arAllow, array("SMILES" => "N")));
$UserInfo[$res["AUTHOR_ID"]] = $arUData;
}
$res = array_merge($res, $UserInfo[$res["AUTHOR_ID"]]);
}
$res["FOR_JS"]["AUTHOR_NAME"] = Cutil::JSEscape(htmlspecialcharsbx($res["~AUTHOR_NAME"]));
$res["FOR_JS"]["POST_MESSAGE"] = Cutil::JSEscape(htmlspecialcharsbx($res["~POST_MESSAGE_TEXT"]));
/************** Author info/****************************************/
/************** Panels *********************************************/
$res["PANELS"] = array(
"MODERATE" => $arResult["PANELS"]["MODERATE"],
"DELETE" => $arResult["PANELS"]["DELETE"],
"SUPPORT" => $arResult["PANELS"]["SUPPORT"] == "Y" && $res["AUTHOR_ID"] > 0 ? "Y" : "N",
"EDIT" => $arResult["PANELS"]["EDIT"],
"STATISTIC" => $arResult["PANELS"]["STATISTIC"] == "Y" && intVal($res["GUEST_ID"]) > 0 ? "Y" : "N",
"MAIN" => $arResult["PANELS"]["MAIN"] == "Y" && $res["AUTHOR_ID"] > 0 ? "Y" : "N",
"MAIL" => $arResult["PANELS"]["MAIL"],
"VOTES" => $res["VOTING"] != "N" ? "Y" : "N");
// here should be a trigger for turning off edit right for the archive group even for message author
if ($arResult["USER"]["RIGHTS"]["ADD_MESSAGE"] == "Y" && $res["PANELS"]["EDIT"] != "Y" &&
$USER->IsAuthorized() && $res["AUTHOR_ID"] == $USER->GetId() &&
(COption::GetOptionString("forum", "USER_EDIT_OWN_POST", "N") == "Y" || $arResult["TOPIC"]["iLAST_TOPIC_MESSAGE"] == intVal($res["ID"])))
{
$res["PANELS"]["EDIT"] = "Y";
}
$res["SHOW_PANEL"] = in_array("Y", $res["PANELS"]) ? "Y" : "N";
if ($arParams["PERMISSION_ORIGINAL"] >= "Q")
{
$bIP = (preg_match("/^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$/", $res["~AUTHOR_IP"]) ? true : false);
$res["AUTHOR_IP"] = ($bIP ? GetWhoisLink($res["~AUTHOR_IP"], "") : $res["AUTHOR_IP"]);
$bIP = (preg_match("/^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$/", $res["~AUTHOR_REAL_IP"]) ? true : false);
$res["AUTHOR_REAL_IP"] = ($bIP ? GetWhoisLink($res["~AUTHOR_REAL_IP"], "") : $res["AUTHOR_REAL_IP"]);
$res["IP_IS_DIFFER"] = ($res["AUTHOR_IP"] <> $res["AUTHOR_REAL_IP"] ? "Y" : "N");
}
/************** Panels/*********************************************/
/************** Urls ***********************************************/
$res["URL"] = array(
"~USER" => CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_PROFILE_VIEW"], array("UID" => $res["AUTHOR_ID"])),
"~AUTHOR" => CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_PROFILE_VIEW"], array("UID" => $res["AUTHOR_ID"])),
"~EDITOR" => CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_PROFILE_VIEW"], array("UID" => $res["EDITOR_ID"])),
"~MESSAGE" => CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_MESSAGE"],
array("UID" => $arParams["USER_ID"], "TID" => $arParams["TID"], "GID" => $arParams["SOCNET_GROUP_ID"], "MID" => $res["ID"])),
"~MESSAGE_EDIT" => CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_TOPIC_EDIT"],
array("UID" => $arParams["USER_ID"], "TID" => $arParams["TID"], "GID" => $arParams["SOCNET_GROUP_ID"], "MID" => $res["ID"])),
"USER" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_PROFILE_VIEW"], array("UID" => $res["AUTHOR_ID"])),
"AUTHOR" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_PROFILE_VIEW"], array("UID" => $res["AUTHOR_ID"])),
"EDITOR" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_PROFILE_VIEW"], array("UID" => $res["EDITOR_ID"])),
"MESSAGE" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_MESSAGE"],
array("UID" => $arParams["USER_ID"], "TID" => $arParams["TID"], "GID" => $arParams["SOCNET_GROUP_ID"], "MID" => $res["ID"])),
"MESSAGE_EDIT" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_TOPIC_EDIT"],
array("UID" => $arParams["USER_ID"], "TID" => $arParams["TID"], "GID" => $arParams["SOCNET_GROUP_ID"], "MID" => $res["ID"])));
$res["URL"]["MESSAGE_EDIT"] = ForumAddPageParams($res["URL"]["~MESSAGE_EDIT"],
array("MID" => $res["ID"], "ACTION" => "EDIT", "MESSAGE_TYPE" => "EDIT"));
$res["URL"]["MESSAGE_DELETE"] = ForumAddPageParams($res["URL"]["~MESSAGE"],
array("MID" => $res["ID"], "ACTION" => "del", "MESSAGE_TYPE" => "EDIT"/*, "sessid" => bitrix_sessid()*/));
$res["URL"]["MESSAGE_SHOW"] = ForumAddPageParams($res["URL"]["~MESSAGE"],
array("MID" => $res["ID"], "ACTION" => ($res["APPROVED"] == "Y" ? "hide" : "show"), "MESSAGE_TYPE" => "EDIT"/*, "sessid" => bitrix_sessid()*/));
$res["URL"]["MESSAGE_SUPPORT"] = ForumAddPageParams($res["URL"]["~MESSAGE"],
array("MID" => $res["ID"], "ACTION" => "support", "MESSAGE_TYPE" => "EDIT", "sessid" => bitrix_sessid()));
$res["URL"]["AUTHOR_VOTE"] = ForumAddPageParams($res["URL"]["MESSAGE"],
array("UID" => $res["AUTHOR_ID"], "MID" => $res["ID"], "VOTES" => intVal($arResult["USER"]["RANK"]["VOTES"]),
"VOTES_TYPE" => ($res["VOTING"] == "VOTE" ? "V" : "U"), "ACTION" => "VOTE4USER"))/*."&".bitrix_sessid_get()*/;
$res["URL"]["MESSAGE_SPAM"] = ForumAddPageParams($res["URL"]["~MESSAGE"],
array("MID" => $res["ID"], "ACTION" => "spam", "MESSAGE_TYPE" => "EDIT"/*, "sessid" => bitrix_sessid()*/));
/************** Urls/***********************************************/
if ($number == 2 && $bNeedFirstMessage):
$arResult["MESSAGE_FIRST"] = $res;
else:
$arResult["MESSAGE_LIST"][$res["ID"]] = $res;
endif;
}
/************** /Message list **************************************/
/************** Attach files ***************************************/
if (!empty($arResult["MESSAGE_LIST"]))
{
$res = array_keys($arResult["MESSAGE_LIST"]);
$arFilterProps = $arFilter;
if ($res[0] > 1)
$arFilterProps[">ID"] = $arFilter[">MESSAGE_ID"] = intVal($res[0]) - 1;
$arFilterProps["<ID"] = $arFilter["<MESSAGE_ID"] = intVal($res[count($res) - 1]) + 1;
$db_files = CForumFiles::GetList(array("MESSAGE_ID" => "ASC"), $arFilter);
$bNeedLoop = $bBreakLoop = false;
if ($db_files && $res = $db_files->Fetch()):
$bNeedLoop = true;
elseif ($bNeedFirstMessage):
$db_files = CForumFiles::GetList(array("MESSAGE_ID" => "ASC"),
array("MESSAGE_ID" => $arResult["MESSAGE_FIRST"]["ID"]));
if ($db_files && $res = $db_files->Fetch()){
$bNeedLoop = $bBreakLoop = true;}
endif;
while ($bNeedLoop)
{
do
{
$res["SRC"] = CFile::GetFileSRC($res);
if ($arResult["MESSAGE_LIST"][$res["MESSAGE_ID"]]["~ATTACH_IMG"] == $res["FILE_ID"])
{
// attach for custom
$arResult["MESSAGE_LIST"][$res["MESSAGE_ID"]]["~ATTACH_FILE"] = $res;
$arResult["MESSAGE_LIST"][$res["MESSAGE_ID"]]["ATTACH_FILE"] =
$arResult["MESSAGE_LIST"][$res["MESSAGE_ID"]]["ATTACH_IMG"] = CFile::ShowFile($res["FILE_ID"], 0,
$arParams["IMAGE_SIZE"], $arParams["IMAGE_SIZE"], true, "border=0", false);
}
if ($arResult["MESSAGE_FIRST"]["ID"] == $res["MESSAGE_ID"]):
$arResult["MESSAGE_FIRST"]["FILES"][$res["FILE_ID"]] = $res;
if (!$bNeedFirstMessage):
$arResult["MESSAGE_LIST"][$res["MESSAGE_ID"]]["FILES"][$res["FILE_ID"]] = $res;
endif;
else:
$arResult["MESSAGE_LIST"][$res["MESSAGE_ID"]]["FILES"][$res["FILE_ID"]] = $res;
endif;
$arResult["FILES"][$res["FILE_ID"]] = $res;
} while ($res = $db_files->Fetch());
$bNeedLoop = false;
if ($bNeedFirstMessage && !$bBreakLoop)
{
$db_files = CForumFiles::GetList(array("MESSAGE_ID" => "ASC"),
array("MESSAGE_ID" => $arResult["MESSAGE_FIRST"]["ID"]));
if ($db_files && $res = $db_files->Fetch()) {
$bNeedLoop = $bBreakLoop = true;}
}
}
if (!empty($arParams["USER_FIELDS"]))
{
$db_props = CForumMessage::GetList(array("ID" => "ASC"), $arFilterProps, false, 0, array("SELECT" => $arParams["USER_FIELDS"]));
while ($db_props && ($res = $db_props->Fetch())) {
$arResult["MESSAGE_LIST"][$res["ID"]]["PROPS"] = array_intersect_key($res, array_flip($arParams["USER_FIELDS"]));
}
if ($bNeedFirstMessage) {
$db_props = CForumMessage::GetList(array("ID" => "ASC"), array("ID" => $arResult["MESSAGE_FIRST"]["ID"]), false, 0, array("SELECT" => $arParams["USER_FIELDS"]));
if ($db_props && ($res = $db_props->Fetch()))
$arResult["MESSAGE_FIRST"]["PROPS"] = array_intersect_key($res, array_flip($arParams["USER_FIELDS"]));
}
}
}
$parser->arFiles = $arResult["FILES"];
if (!empty($arResult["MESSAGE_FIRST"])):
$parser->arUserfields = $arResult["MESSAGE_FIRST"]["PROPS"];
$arResult["MESSAGE_FIRST"]["POST_MESSAGE_TEXT"] = $parser->convert($arResult["MESSAGE_FIRST"]["~POST_MESSAGE_TEXT"], $arResult["MESSAGE_FIRST"]["ALLOW"]);
$arResult["MESSAGE_FIRST"]["FILES_PARSED"] = $parser->arFilesIDParsed;
endif;
foreach ($arResult["MESSAGE_LIST"] as $iID => $res):
$parser->arUserfields = $res["PROPS"];
$arResult["MESSAGE_LIST"][$iID]["POST_MESSAGE_TEXT"] = $parser->convert($res["~POST_MESSAGE_TEXT"], $res["ALLOW"]);
$arResult["MESSAGE_LIST"][$iID]["FILES_PARSED"] = $parser->arFilesIDParsed;
endforeach;
/************** Message List/***************************************/
/************** Paths **********************************************/
$arResult["URL"] = array(
"TOPIC_NEW" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_TOPIC_EDIT"],
array("FID" => $arParams["FID"], "UID" => $arParams["USER_ID"], "TID" => "new", "GID" => $arParams["SOCNET_GROUP_ID"])),
"TOPIC_LIST" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_TOPIC_LIST"],
array("FID" => $arResult["FORUM"]["ID"], "UID" => $arParams["USER_ID"], "GID" => $arParams["SOCNET_GROUP_ID"])));
/********************************************************************
/Data
********************************************************************/
/********************************************************************
Standart Action
********************************************************************/
$APPLICATION->AddChainItem($arResult["TOPIC"]["TITLE"]);
if ($arParams["SET_TITLE"] != "N"):
$APPLICATION->SetTitle($arResult["TOPIC"]["~TITLE"]);
endif;
/********************************************************************
Standart Action
********************************************************************/
$this->IncludeComponentTemplate();
return array(
"FORUM" => $arResult["FORUM"],
"TOPIC" => $arResult["TOPIC"],
"MESSAGE" => $arResult["MESSAGE_VIEW"],
"bVarsFromForm" => ($bVarsFromForm ? "Y" : "N"),
"PERMISSION" => $arParams["PERMISSION"]);
?>