%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/socialnetwork/classes/general/ |
| Current File : //home/bitrix/www/bitrix/modules/socialnetwork/classes/general/log_forum_comments.php |
<?
IncludeModuleLangFile(__FILE__);
class CSocNetForumComments
{
function FindLogEventIDByForumEntityID($forumEntityType)
{
$event_id = false;
$arSocNetLogEvents = CSocNetAllowed::GetAllowedLogEvents();
foreach ($arSocNetLogEvents as $event_id_tmp => $arEventTmp)
{
if (
array_key_exists("FORUM_COMMENT_ENTITY", $arEventTmp)
&& $arEventTmp["FORUM_COMMENT_ENTITY"] == $forumEntityType
)
{
$event_id = $event_id_tmp;
break;
}
}
$arSocNetFeaturesSettings = CSocNetAllowed::GetAllowedFeatures();
foreach ($arSocNetFeaturesSettings as $feature_tmp => $arFeature)
{
if (array_key_exists("subscribe_events", $arFeature))
{
foreach ($arFeature["subscribe_events"] as $event_id_tmp => $arEventTmp)
{
if (
array_key_exists("FORUM_COMMENT_ENTITY", $arEventTmp)
&& $arEventTmp["FORUM_COMMENT_ENTITY"] == $forumEntityType
)
{
$event_id = $event_id_tmp;
break;
}
}
}
}
return $event_id;
}
public static function onAfterCommentAdd($entityType, $entityId, $arData)
{
global $APPLICATION, $DB, $USER_FIELD_MANAGER;
$log_event_id = CSocNetForumComments::FindLogEventIDByForumEntityID($entityType);
if (!$log_event_id)
{
return false;
}
$arLogCommentEvent = CSocNetLogTools::FindLogCommentEventByLogEventID($log_event_id);
if (!$arLogCommentEvent)
{
return false;
}
$entityId = intval($entityId);
if ($entityId <= 0)
{
return false;
}
$messageId = $arData['MESSAGE_ID'];
if ($messageId <= 0)
{
return false;
}
$arMessage = CForumMessage::GetByID($messageId);
if (!$arMessage)
{
return false;
}
$sText = (COption::GetOptionString("forum", "FILTER", "Y") == "Y" ? $arMessage["POST_MESSAGE_FILTER"] : $arMessage["POST_MESSAGE"]);
$logFilter = array(
"EVENT_ID" => $log_event_id,
"SOURCE_ID" => $entityId
);
foreach (GetModuleEvents("socialnetwork", "onAfterCommentAddBefore", true) as $arModuleEvent)
{
$res = ExecuteModuleEventEx($arModuleEvent, array(
$entityType,
$entityId,
$arData
));
if (isset($res) && is_array($res) && isset($res['LOG_ENTRY_ID']) && $res['LOG_ENTRY_ID'] > 1)
{
$logFilter = array(
'ID' => $res['LOG_ENTRY_ID']
);
}
}
$dbRes = CSocNetLog::GetList(
array("ID" => "DESC"),
$logFilter,
false,
false,
array("ID", "ENTITY_TYPE", "ENTITY_ID", "SOURCE_ID", "USER_ID")
);
if ($arRes = $dbRes->Fetch())
{
$log_id = $arRes["ID"];
$entity_type = $arRes["ENTITY_TYPE"];
$entity_id = $arRes["ENTITY_ID"];
$strURL = '';
if (
isset($arLogCommentEvent["METHOD_GET_URL"])
&& is_callable($arLogCommentEvent["METHOD_GET_URL"])
)
{
$strURL = call_user_func_array($arLogCommentEvent["METHOD_GET_URL"], array(array(
"ENTRY_ID" => $arRes["SOURCE_ID"],
"ENTRY_USER_ID" => $arRes["USER_ID"],
"COMMENT_ID" => $messageId
)));
}
$parser = new CTextParser();
$parser->allow = array("HTML" => 'N',"ANCHOR" => 'Y',"BIU" => 'Y',"IMG" => "Y","VIDEO" => "Y","LIST" => 'N',"QUOTE" => 'Y',"CODE" => 'Y',"FONT" => 'Y',"SMILES" => "N","UPLOAD" => 'N',"NL2BR" => 'N',"TABLE" => "Y");
$arFieldsForSocnet = array(
"ENTITY_TYPE" => $entity_type,
"ENTITY_ID" => $entity_id,
"EVENT_ID" => $arLogCommentEvent["EVENT_ID"],
"=LOG_DATE" => $DB->CurrentTimeFunction(),
"USER_ID" => $arMessage["AUTHOR_ID"],
"MESSAGE" => $sText,
"TEXT_MESSAGE" => $parser->convert4mail($sText),
"URL" => $strURL,
"MODULE_ID" => (array_key_exists("MODULE_ID", $arLogCommentEvent) && strlen($arLogCommentEvent["MODULE_ID"]) > 0 ? $arLogCommentEvent["MODULE_ID"] : ""),
"SOURCE_ID" => $messageId,
"LOG_ID" => $log_id
);
if (
!array_key_exists("RATING_TYPE_ID", $arLogCommentEvent)
|| $arLogCommentEvent["RATING_TYPE_ID"] == "FORUM_POST"
)
{
$arFieldsForSocnet["RATING_TYPE_ID"] = "FORUM_POST";
$arFieldsForSocnet["RATING_ENTITY_ID"] = $messageId;
}
$ufFileID = array();
$dbAddedMessageFiles = CForumFiles::GetList(array("ID" => "ASC"), array("MESSAGE_ID" => $messageId));
while ($arAddedMessageFiles = $dbAddedMessageFiles->Fetch())
{
$ufFileID[] = $arAddedMessageFiles["FILE_ID"];
}
if (count($ufFileID) > 0)
{
$arFieldsForSocnet["UF_SONET_COM_FILE"] = $ufFileID;
}
$ufDocID = $USER_FIELD_MANAGER->GetUserFieldValue("FORUM_MESSAGE", "UF_FORUM_MESSAGE_DOC", $messageId, LANGUAGE_ID);
if ($ufDocID)
{
$arFieldsForSocnet["UF_SONET_COM_DOC"] = $ufDocID;
}
$ufUrlPreview = $USER_FIELD_MANAGER->GetUserFieldValue("FORUM_MESSAGE", "UF_FORUM_MES_URL_PRV", $messageId, LANGUAGE_ID);
if ($ufUrlPreview)
{
$arFieldsForSocnet["UF_SONET_COM_URL_PRV"] = $ufUrlPreview;
}
$comment_id = CSocNetLogComments::Add($arFieldsForSocnet, false, false);
CSocNetLog::CounterIncrement(
$comment_id,
false,
false,
"LC",
CSocNetLogRights::CheckForUserAll($log_id)
);
}
foreach (GetModuleEvents("socialnetwork", "onAfterCommentAddAfter", true) as $arModuleEvent)
ExecuteModuleEventEx($arModuleEvent, array(
$entityType,
$entityId,
$arData,
$log_id
));
foreach (GetModuleEvents("socialnetwork", "OnForumCommentIMNotify", true) as $arModuleEvent) // send notification
{
ExecuteModuleEventEx($arModuleEvent, array(
$entityType,
$entityId,
array(
"LOG_ID" => $log_id,
"USER_ID" => $arMessage["AUTHOR_ID"],
"MESSAGE_ID" => $messageId,
"MESSAGE" => $sText,
"URL" => $strURL
)
));
}
return false;
}
public static function onAfterCommentUpdate($entityType, $entityId, $arData)
{
global $APPLICATION, $DB, $USER_FIELD_MANAGER;
$log_event_id = CSocNetForumComments::FindLogEventIDByForumEntityID($entityType);
if (!$log_event_id)
{
return false;
}
$arLogCommentEvent = CSocNetLogTools::FindLogCommentEventByLogEventID($log_event_id);
if (!$arLogCommentEvent)
{
return false;
}
$entityId = intval($entityId);
if ($entityId <= 0)
{
return false;
}
if (empty($arData["MESSAGE_ID"]))
{
return false;
}
$parser = new CTextParser();
$parser->allow = array("HTML" => 'N',"ANCHOR" => 'Y',"BIU" => 'Y',"IMG" => "Y","VIDEO" => "Y","LIST" => 'N',"QUOTE" => 'Y',"CODE" => 'Y',"FONT" => 'Y',"SMILES" => "N","UPLOAD" => 'N',"NL2BR" => 'N',"TABLE" => "Y");
switch ($arData["ACTION"])
{
case "DEL":
case "HIDE":
$dbLogComment = CSocNetLogComments::GetList(
array("ID" => "DESC"),
array(
"EVENT_ID" => array($arLogCommentEvent["EVENT_ID"]),
"SOURCE_ID" => intval($arData["MESSAGE_ID"])
),
false,
false,
array("ID")
);
while ($arLogComment = $dbLogComment->Fetch())
CSocNetLogComments::Delete($arLogComment["ID"]);
break;
case "SHOW":
$dbLogComment = CSocNetLogComments::GetList(
array("ID" => "DESC"),
array(
"EVENT_ID" => array($arLogCommentEvent["EVENT_ID"]),
"SOURCE_ID" => intval($arData["MESSAGE_ID"])
),
false,
false,
array("ID")
);
$arLogComment = $dbLogComment->Fetch();
if (!$arLogComment)
{
$arMessage = CForumMessage::GetByID(intval($arData["MESSAGE_ID"]));
if ($arMessage)
{
$dbLog = CSocNetLog::GetList(
array("ID" => "DESC"),
array(
"EVENT_ID" => $log_event_id,
"SOURCE_ID" => $entityId
),
false,
false,
array("ID", "ENTITY_TYPE", "ENTITY_ID")
);
if ($arLog = $dbLog->Fetch())
{
$log_id = $arLog["ID"];
$entity_type = $arLog["ENTITY_TYPE"];
$entity_id = $arLog["ENTITY_ID"];
$sText = (COption::GetOptionString("forum", "FILTER", "Y") == "Y" ? $arMessage["POST_MESSAGE_FILTER"] : $arMessage["POST_MESSAGE"]);
$strURL = $APPLICATION->GetCurPageParam("", array("IFRAME", "MID", "SEF_APPLICATION_CUR_PAGE_URL", BX_AJAX_PARAM_ID, "result"));
$strURL = ForumAddPageParams(
$strURL,
array(
"MID" => intval($arData["MESSAGE_ID"]),
"result" => "reply"
),
false,
false
);
$arFieldsForSocnet = array(
"ENTITY_TYPE" => $entity_type,
"ENTITY_ID" => $entity_id,
"EVENT_ID" => $arLogCommentEvent["EVENT_ID"],
"MESSAGE" => $sText,
"TEXT_MESSAGE" => $parser->convert4mail($sText),
"URL" => str_replace("?IFRAME=Y", "", str_replace("&IFRAME=Y", "", str_replace("IFRAME=Y&", "", $strURL))),
"MODULE_ID" => (array_key_exists("MODULE_ID", $arLogCommentEvent) && strlen($arLogCommentEvent["MODULE_ID"]) > 0 ? $arLogCommentEvent["MODULE_ID"] : ""),
"SOURCE_ID" => intval($arData["MESSAGE_ID"]),
"LOG_ID" => $log_id,
"RATING_TYPE_ID" => "FORUM_POST",
"RATING_ENTITY_ID" => intval($arData["MESSAGE_ID"])
);
$arFieldsForSocnet["USER_ID"] = $arMessage["AUTHOR_ID"];
$arFieldsForSocnet["=LOG_DATE"] = $DB->CurrentTimeFunction();
$ufFileID = array();
$dbAddedMessageFiles = CForumFiles::GetList(array("ID" => "ASC"), array("MESSAGE_ID" => intval($arData["MESSAGE_ID"])));
while ($arAddedMessageFiles = $dbAddedMessageFiles->Fetch())
$ufFileID[] = $arAddedMessageFiles["FILE_ID"];
if (count($ufFileID) > 0)
$arFieldsForSocnet["UF_SONET_COM_FILE"] = $ufFileID;
$ufDocID = $USER_FIELD_MANAGER->GetUserFieldValue("FORUM_MESSAGE", "UF_FORUM_MESSAGE_DOC", intval($arData["MESSAGE_ID"]), LANGUAGE_ID);
if ($ufDocID)
$arFieldsForSocnet["UF_SONET_COM_DOC"] = $ufDocID;
$ufUrlPreview = $USER_FIELD_MANAGER->GetUserFieldValue("FORUM_MESSAGE", "UF_FORUM_MES_URL_PRV", intval($arData["MESSAGE_ID"]), LANGUAGE_ID);
if ($ufUrlPreview)
{
$arFieldsForSocnet["UF_SONET_COM_URL_PRV"] = $ufUrlPreview;
}
$comment_id = CSocNetLogComments::Add($arFieldsForSocnet, false, false);
CSocNetLog::CounterIncrement(
$comment_id,
false,
false,
"LC",
CSocNetLogRights::CheckForUserAll($log_id)
);
}
}
}
break;
case "EDIT":
$arMessage = CForumMessage::GetByID(intval($arData["MESSAGE_ID"]));
if ($arMessage)
{
$dbLogComment = CSocNetLogComments::GetList(
array("ID" => "DESC"),
array(
"EVENT_ID" => array($arLogCommentEvent["EVENT_ID"]),
"SOURCE_ID" => intval($arData["MESSAGE_ID"])
),
false,
false,
array("ID")
);
$arLogComment = $dbLogComment->Fetch();
if ($arLogComment)
{
$sText = (COption::GetOptionString("forum", "FILTER", "Y") == "Y" ? $arMessage["POST_MESSAGE_FILTER"] : $arMessage["POST_MESSAGE"]);
$arFieldsForSocnet = array(
"MESSAGE" => $sText,
"TEXT_MESSAGE" => $parser->convert4mail($sText),
);
$ufFileID = array();
$dbAddedMessageFiles = CForumFiles::GetList(array("ID" => "ASC"), array("MESSAGE_ID" => intval($arData["MESSAGE_ID"])));
while ($arAddedMessageFiles = $dbAddedMessageFiles->Fetch())
$ufFileID[] = $arAddedMessageFiles["FILE_ID"];
if (count($ufFileID) > 0)
$arFieldsForSocnet["UF_SONET_COM_FILE"] = $ufFileID;
$ufDocID = $USER_FIELD_MANAGER->GetUserFieldValue("FORUM_MESSAGE", "UF_FORUM_MESSAGE_DOC", intval($arData["MESSAGE_ID"]), LANGUAGE_ID);
if ($ufDocID)
$arFieldsForSocnet["UF_SONET_COM_DOC"] = $ufDocID;
$ufUrlPreview = $USER_FIELD_MANAGER->GetUserFieldValue("FORUM_MESSAGE", "UF_FORUM_MES_URL_PRV", intval($arData["MESSAGE_ID"]), LANGUAGE_ID);
if ($ufUrlPreview)
{
$arFieldsForSocnet["UF_SONET_COM_URL_PRV"] = $ufUrlPreview;
}
CSocNetLogComments::Update($arLogComment["ID"], $arFieldsForSocnet);
}
}
break;
default:
}
foreach (GetModuleEvents("socialnetwork", "onAfterCommentUpdateAfter", true) as $arModuleEvent)
{
ExecuteModuleEventEx($arModuleEvent, array(
$entityType,
$entityId,
$arData,
$log_id
));
}
}
}
?>