Bitrix Add element in social network after iblock element add
<?
AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("MyClass_2", "OnAfterIBlockElementAddHandler"));
AddEventHandler('socialnetwork', 'OnFillSocNetLogEvents', array('MyClass_2', 'OnFillSocNetLogEvents'));
class MyClass_2{
function FormatEvent_News($arFields, $arParams, $bMail = false)
{
$GLOBALS["APPLICATION"]->SetAdditionalCSS("/bitrix/themes/.default/intranet_sonet_log.css");
$arResult = array(
"EVENT" => $arFields,
"ENTITY" => CIntranetEventHandlers::GetEntity_News($arFields, $bMail),
"URL" => "",
"CACHED_CSS_PATH" => "/bitrix/themes/.default/intranet_sonet_log.css"
);
if (!CModule::IncludeModule("socialnetwork"))
return $arResult;
$title = "";
if (strlen($arFields["TITLE_TEMPLATE"]) > 0)
{
if (!$bMail && strlen($arFields["URL"]) > 0)
$title_tmp = '<a href="'.$arFields["URL"].'">'.$arFields["TITLE"].'</a>';
else
$title_tmp = $arFields["TITLE"];
$title = str_replace(
array("#TITLE#", "#ENTITY#"),
array($title_tmp, ($bMail ? $arResult["ENTITY"]["FORMATTED"] : $arResult["ENTITY"]["FORMATTED"]["NAME"])),
($bMail ? GetMessage("INTR_SOCNET_LOG_NEWS_TITLE_MAIL") : GetMessage("INTR_SOCNET_LOG_NEWS_TITLE"))
);
}
else
$title_tmp = "";
$url = false;
if (
strlen($arFields["URL"]) > 0
&& strlen($arFields["SITE_ID"]) > 0
)
{
if (substr($arFields["URL"], 0, 1) === "/")
{
$rsSites = CSite::GetByID($arFields["SITE_ID"]);
$arSite = $rsSites->Fetch();
if (strlen($arSite["SERVER_NAME"]) > 0)
$server_name = $arSite["SERVER_NAME"];
else
$server_name = COption::GetOptionString("main", "server_name", $GLOBALS["SERVER_NAME"]);
$protocol = (CMain::IsHTTPS() ? "https" : "http");
$url = $protocol."://".$server_name.$arFields["URL"];
}
else
{
$url = $arFields["URL"];
}
}
$arResult["EVENT_FORMATTED"] = array(
"TITLE" => $title,
"MESSAGE" => ($bMail ? CSocNetTextParser::killAllTags($arFields["MESSAGE"]) : $arFields["MESSAGE"]),
"IS_IMPORTANT" => true,
"TITLE_24" => GetMessage("INTR_SONET_LOG_DATA_TITLE_IMPORTANT_24"),
"TITLE_24_2" => $arFields["TITLE"],
"STYLE" => "imp-post",
);
if ($arParams["MOBILE"] == "Y")
{
$arResult["EVENT_FORMATTED"]["STYLE"] = "item-top-text-important";
$arResult["EVENT_FORMATTED"]["AVATAR_STYLE"] = "avatar-info";
}
else
$arResult["EVENT_FORMATTED"]["STYLE"] = "info";
if (strlen($url) > 0)
$arResult["EVENT_FORMATTED"]["URL"] = $url;
if (!$bMail)
{
if (
intval($arFields["SOURCE_ID"]) > 0
&& CModule::IncludeModule("iblock")
)
{
$rsIBlockElement = CIBlockElement::GetList(
array(),
array("ID" => $arFields["SOURCE_ID"]),
false,
false,
array("ID", "DETAIL_TEXT")
);
if ($arIBlockElement = $rsIBlockElement->GetNext())
{
$arResult["EVENT_FORMATTED"]["MESSAGE"] = $arIBlockElement["DETAIL_TEXT"];
}
}
if (
$arParams["MOBILE"] != "Y"
&& $arParams["NEW_TEMPLATE"] != "Y"
)
{
$parserLog = new logTextParser(false, $arParams["PATH_TO_SMILE"]);
$arAllow = array("HTML" => "Y", "ANCHOR" => "Y", "BIU" => "Y", "IMG" => "Y", "QUOTE" => "Y", "CODE" => "Y", "FONT" => "Y", "LIST" => "Y", "SMILES" => "Y", "NL2BR" => "N", "MULTIPLE_BR" => "N", "VIDEO" => "Y", "LOG_VIDEO" => "N");
$arResult["EVENT_FORMATTED"]["SHORT_MESSAGE"] = $parserLog->html_cut(
$parserLog->convert(htmlspecialcharsback(str_replace("#CUT#", "", $arResult["EVENT_FORMATTED"]["MESSAGE"])), array(), $arAllow),
1000
);
$arResult["EVENT_FORMATTED"]["IS_MESSAGE_SHORT"] = CSocNetLogTools::FormatEvent_IsMessageShort($arResult["EVENT_FORMATTED"]["MESSAGE"], $arResult["EVENT_FORMATTED"]["SHORT_MESSAGE"]);
}
if ($arParams["MOBILE"] != "Y")
{
$rsRight = CSocNetLogRights::GetList(array(), array("LOG_ID" => $arFields["ID"]));
$arRights = array();
while ($arRight = $rsRight->Fetch())
$arRights[] = $arRight["GROUP_CODE"];
$arResult["EVENT_FORMATTED"]["DESTINATION"] = CSocNetLogTools::FormatDestinationFromRights($arRights, $arParams);
}
}
$arResult["HAS_COMMENTS"] = (intval($arFields["SOURCE_ID"]) > 0 ? "Y" : "N");
return $arResult;
}
function FormatComment_News($arFields, $arParams, $bMail = false, $arLog = array())
{
$arResult = array(
"EVENT_FORMATTED" => array(),
);
if (!CModule::IncludeModule("socialnetwork"))
return $arResult;
if ($bMail)
{
$arResult["CREATED_BY"] = CSocNetLogTools::FormatEvent_GetCreatedBy($arFields, $arParams, $bMail);
$arResult["ENTITY"] = CIntranetEventHandlers::GetEntity_News($arLog, $bMail);
}
elseif($arParams["USE_COMMENT"] != "Y")
{
$arLog["ENTITY_ID"] = $arFields["ENTITY_ID"];
$arLog["ENTITY_TYPE"] = $arFields["ENTITY_TYPE"];
$arResult["ENTITY"] = CIntranetEventHandlers::GetEntity_News($arLog, false);
}
if (
!$bMail
&& array_key_exists("URL", $arLog)
&& strlen($arLog["URL"]) > 0
)
$news_tmp = '<a href="'.$arLog["URL"].'">'.$arLog["TITLE"].'</a>';
else
$news_tmp = $arLog["TITLE"];
$title_tmp = ($bMail ? GetMessage("INTR_SOCNET_LOG_NEWS_COMMENT_TITLE_MAIL") : GetMessage("INTR_SOCNET_LOG_NEWS_COMMENT_TITLE"));
$title = str_replace(
array("#TITLE#", "#ENTITY#", "#CREATED_BY#"),
array($news_tmp, $arResult["ENTITY"]["FORMATTED"], ($bMail ? $arResult["CREATED_BY"]["FORMATTED"] : "")),
$title_tmp
);
$arResult["EVENT_FORMATTED"] = array(
"TITLE" => ($bMail || $arParams["USE_COMMENT"] != "Y" ? $title : ""),
"MESSAGE" => ($bMail ? $arFields["TEXT_MESSAGE"] : $arFields["MESSAGE"])
);
if ($bMail)
{
$url = CSocNetLogTools::FormatEvent_GetURL($arLog);
if (strlen($url) > 0)
$arResult["EVENT_FORMATTED"]["URL"] = $url;
}
else
{
static $parserLog = false;
if (CModule::IncludeModule("forum"))
{
if (!$parserLog)
$parserLog = new forumTextParser(LANGUAGE_ID);
$arAllow = array(
"HTML" => "N",
"ALIGN" => "Y",
"ANCHOR" => "Y", "BIU" => "Y",
"IMG" => "Y", "QUOTE" => "Y",
"CODE" => "Y", "FONT" => "Y",
"LIST" => "Y", "SMILES" => "Y",
"NL2BR" => "Y", "VIDEO" => "Y",
"LOG_VIDEO" => "N", "SHORT_ANCHOR" => "Y",
"USERFIELDS" => $arFields["UF"],
"USER" => "Y"
);
$parserLog->pathToUser = $arParams["PATH_TO_USER"];
$parserLog->arUserfields = $arFields["UF"];
$arResult["EVENT_FORMATTED"]["MESSAGE"] = htmlspecialcharsbx($parserLog->convert(htmlspecialcharsback($arResult["EVENT_FORMATTED"]["MESSAGE"]), $arAllow));
}
else
{
if (!$parserLog)
$parserLog = new logTextParser(false, $arParams["PATH_TO_SMILE"]);
$arAllow = array(
"HTML" => "Y", "ANCHOR" => "Y", "BIU" => "Y",
"IMG" => "Y", "LOG_IMG" => "N",
"QUOTE" => "Y", "LOG_QUOTE" => "N",
"CODE" => "Y", "LOG_CODE" => "N",
"FONT" => "Y", "LOG_FONT" => "N",
"LIST" => "Y",
"SMILES" => "Y",
"NL2BR" => "Y",
"MULTIPLE_BR" => "N",
"VIDEO" => "Y", "LOG_VIDEO" => "N"
);
$arResult["EVENT_FORMATTED"]["MESSAGE"] = htmlspecialcharsbx($parserLog->convert(htmlspecialcharsback($arResult["EVENT_FORMATTED"]["MESSAGE"]), array(), $arAllow));
}
if (
$arParams["MOBILE"] != "Y"
&& $arParams["NEW_TEMPLATE"] != "Y"
)
{
if (CModule::IncludeModule("forum"))
$arResult["EVENT_FORMATTED"]["SHORT_MESSAGE"] = $parserLog->html_cut(
$parserLog->convert(htmlspecialcharsback($arResult["EVENT_FORMATTED"]["MESSAGE"]), $arAllow),
500
);
else
$arResult["EVENT_FORMATTED"]["SHORT_MESSAGE"] = $parserLog->html_cut(
$parserLog->convert(htmlspecialcharsback($arResult["EVENT_FORMATTED"]["MESSAGE"]), array(), $arAllow),
500
);
$arResult["EVENT_FORMATTED"]["IS_MESSAGE_SHORT"] = CSocNetLogTools::FormatEvent_IsMessageShort($arResult["EVENT_FORMATTED"]["MESSAGE"], $arResult["EVENT_FORMATTED"]["SHORT_MESSAGE"]);
}
}
return $arResult;
}
function AddComment_News($arFields)
{
if (!CModule::IncludeModule("forum"))
return false;
if (!CModule::IncludeModule("iblock"))
return false;
if (!CModule::IncludeModule("socialnetwork"))
return false;
$dbResult = CSocNetLog::GetList(
array("ID" => "DESC"),
array("TMP_ID" => $arFields["LOG_ID"]),
false,
false,
array("ID", "SOURCE_ID", "PARAMS")
);
$bFound = false;
if ($arLog = $dbResult->Fetch())
{
if (intval($arLog["SOURCE_ID"]) > 0)
{
$arFilter = array("ID" => $arLog["SOURCE_ID"]);
$arSelectedFields = array("IBLOCK_ID", "ID", "CREATED_BY", "NAME", "PROPERTY_FORUM_TOPIC_ID", "PROPERTY_FORUM_MESSAGE_CNT");
$db_res = CIBlockElement::GetList(array(), $arFilter, false, false, $arSelectedFields);
if ($db_res && $res = $db_res->GetNext())
{
$arElement = $res;
$val = COption::GetOptionString("intranet", "sonet_log_news_iblock_forum");
if (strlen($val) > 0)
$arIBlockForum = unserialize($val);
else
$arIBlockForum = array();
if (array_key_exists($arElement["IBLOCK_ID"], $arIBlockForum))
$FORUM_ID = $arIBlockForum[$arElement["IBLOCK_ID"]];
if (intval($FORUM_ID) > 0)
{
CSocNetLogTools::AddComment_Review_CheckIBlock($arElement);
$dbMessage = CForumMessage::GetList(
array(),
array("PARAM2" => $arElement["ID"])
);
if (!$arMessage = $dbMessage->Fetch())
{
// Add Topic
$TOPIC_ID = CSocNetLogTools::AddComment_Review_CreateRoot($arElement, $FORUM_ID);
$bNewTopic = true;
}
else
$TOPIC_ID = $arMessage["TOPIC_ID"];
if(intval($TOPIC_ID) > 0)
{
// Add comment
$messageID = false;
$bError = false;
if (CForumMessage::CanUserAddMessage($TOPIC_ID, $GLOBALS["USER"]->GetUserGroupArray(), $GLOBALS["USER"]->GetID(), false))
{
$bSHOW_NAME = true;
$res = CForumUser::GetByUSER_ID($GLOBALS["USER"]->GetID());
if ($res)
$bSHOW_NAME = ($res["SHOW_NAME"]=="Y");
if ($bSHOW_NAME)
$AUTHOR_NAME = $GLOBALS["USER"]->GetFullName();
if (strlen(Trim($AUTHOR_NAME))<=0)
$AUTHOR_NAME = $GLOBALS["USER"]->GetLogin();
if (strlen($AUTHOR_NAME)<=0)
$bError = true;
}
if (!$bError)
{
$arFieldsMessage = Array(
"POST_MESSAGE" => $arFields["TEXT_MESSAGE"],
"USE_SMILES" => "Y",
"APPROVED" => "Y",
"PARAM2" => $arElement["ID"],
"AUTHOR_NAME" => $AUTHOR_NAME,
"AUTHOR_ID" => IntVal($GLOBALS["USER"]->GetParam("USER_ID")),
"FORUM_ID" => $FORUM_ID,
"TOPIC_ID" => $TOPIC_ID,
"NEW_TOPIC" => "N",
"GUEST_ID" => $_SESSION["SESS_GUEST_ID"],
"ADD_TO_LOG" => "N"
);
$AUTHOR_IP = ForumGetRealIP();
$AUTHOR_IP_tmp = $AUTHOR_IP;
$AUTHOR_REAL_IP = $_SERVER['REMOTE_ADDR'];
if (COption::GetOptionString("forum", "FORUM_GETHOSTBYADDR", "N") == "Y")
{
$AUTHOR_IP = @gethostbyaddr($AUTHOR_IP);
if ($AUTHOR_IP_tmp==$AUTHOR_REAL_IP)
$AUTHOR_REAL_IP = $AUTHOR_IP;
else
$AUTHOR_REAL_IP = @gethostbyaddr($AUTHOR_REAL_IP);
}
$arFieldsMessage["AUTHOR_IP"] = ($AUTHOR_IP!==False) ? $AUTHOR_IP : "<no address>";
$arFieldsMessage["AUTHOR_REAL_IP"] = ($AUTHOR_REAL_IP!==False) ? $AUTHOR_REAL_IP : "<no address>";
$messageID = CForumMessage::Add($arFieldsMessage, false);
if (intVal($messageID)<=0)
$bError = true;
else
{
if (CModule::IncludeModule("statistic"))
{
$arForum = CForumNew::GetByID($FORUM_ID);
$F_EVENT1 = $arForum["EVENT1"];
$F_EVENT2 = $arForum["EVENT2"];
$F_EVENT3 = $arForum["EVENT3"];
if (strlen($F_EVENT3)<=0)
{
$arForumSite_tmp = CForumNew::GetSites($FORUM_ID);
$F_EVENT3 = CForumNew::PreparePath2Message($arForumSite_tmp[SITE_ID], array("FORUM_ID"=>$FORUM_ID, "TOPIC_ID"=>$TOPIC_ID, "MESSAGE_ID"=>$messageID));
}
CStatistic::Set_Event($F_EVENT1, $F_EVENT2, $F_EVENT3);
}
CForumMessage::SendMailMessage($messageID, array(), false, "NEW_FORUM_MESSAGE");
CSocNetLogTools::AddComment_Review_UpdateElement($arElement, $TOPIC_ID, $bNewTopic);
}
}
}
}
}
}
}
if (intval($messageID) <= 0)
$strError = GetMessage("SONET_ADD_COMMENT_SOURCE_ERROR");
return array(
"SOURCE_ID" => $messageID,
"RATING_TYPE_ID" => "FORUM_POST",
"RATING_ENTITY_ID" => $messageID,
"ERROR" => $strError,
"NOTES" => ""
);
}
function OnFillSocNetLogEvents(&$arSocNetLogEvents)
{
$arSocNetLogEvents["news"] = array(
"ENTITIES" => array(
SONET_SUBSCRIBE_ENTITY_NEWS => array(
"TITLE" => "Новость",
"TITLE_SETTINGS" => "Новость",
"TITLE_SETTINGS_1" => "Новость",
"TITLE_SETTINGS_2" => "Новость",
),
),
"CLASS_FORMAT" => "MyClass_2",
"METHOD_FORMAT" => "FormatEvent_News",
"FULL_SET" => array("news", "news_comment"),
"COMMENT_EVENT" => array(
"EVENT_ID" => "news_comment",
/* "CLASS_FORMAT" => "CIntranetEventHandlers",
"METHOD_FORMAT" => "FormatComment_News",
"ADD_CALLBACK" => array("CIntranetEventHandlers", "AddComment_News")*/
),
"XDIMPORT_ALLOWED" => "Y"
);
}
function OnAfterIBlockElementAddHandler(&$arFields, $Is_Add=TRUE)
{ global $USER;
if ($arFields["IBLOCK_ID"]=="31") {
//$_SESSION["TEST"]=$arFields;
$ELEMENT_ID=$arFields["ID"];
$IBLOCK_ID=$arFields["IBLOCK_ID"];
$arFilter = Array("IBLOCK_ID"=>$IBLOCK_ID, "ID"=>$ELEMENT_ID);
$res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>50));
while($ob = $res->GetNextElement()){
$arFields_el = $ob->GetFields();
$DETAIL_PAGE_URL=$arFields_el["DETAIL_PAGE_URL"];
$TIMESTAMP_X=$arFields_el["TIMESTAMP_X"];
$IBLOCK_TYPE_ID=$arFields_el["IBLOCK_TYPE_ID"];
$ACTIVE=$arFields_el["ACTIVE"];
$NAME=$arFields_el["NAME"];
$DETAIL_TEXT=$arFields_el["DETAIL_TEXT"];
$LID=$arFields_el["LID"];
};
$arFields_2["ENTITY_TYPE"]="N";
$arFields_2["ENTITY_ID"]=$IBLOCK_ID;
$arFields_2["EVENT_ID"]=$IBLOCK_TYPE_ID;
$arFields_2["USER_ID"]=$USER->GetID();
$arFields_2["LOG_UPDATE"]="";
$arFields_2["LOG_DATE"]=$TIMESTAMP_X;
$arFields_2["SITE_ID"]=$LID;
$arFields_2["TITLE_TEMPLATE"]="Добавлена или изменена новость: \"#TITLE#\"";
$arFields_2["TITLE"]=$NAME;
$arFields_2["MESSAGE"]=$DETAIL_TEXT;
$arFields_2["TEXT_MESSAGE"]="";
$arFields_2["URL"]=$DETAIL_PAGE_URL;
$arFields_2["MODULE_ID"]="intranet";
$arFields_2["SOURCE_ID"]=$ELEMENT_ID;
$arFields_2["ENABLE_COMMENTS"]="Y";
$LOG_ID=0;
if ($Is_Add==TRUE) {
$LOG_ID=CSocNetLog::Add($arFields_2,true);
if (intval($LOG_ID) > 0)
{
CSocNetLog::Update($LOG_ID, array("TMP_ID" => $LOG_ID));
CSocNetLogRights::Add($LOG_ID, "G2");
};
}
else {
$dbResult = CSocNetLog::GetList(Array(), Array("ENTITY_ID" => $IBLOCK_ID, "SOURCE_ID"=>$ELEMENT_ID),Array("ID"));
if ($arResult = $dbResult->GetNext()){
$LOG_ID=$arResult["ID"];
};
if (intval($LOG_ID) > 0){
CSocNetLog::Update($LOG_ID, $arFields_2);
CSocNetLog::Update($LOG_ID, array("TMP_ID" => $LOG_ID));
}
};
};
}
};
?>