static function UpdateActivityIBlock(&$arFields)
{
global $DB, $USER;
if ($arFields['RESULT'])
{
// absence
$iblock = COption::GetOptionInt('intranet', 'iblock_absence');
if (!$iblock)
{
$iblock = array();
$dbRes = CSite::GetList();
while ($arRes = $dbRes->Fetch())
{
if ($ib = COption::GetOptionInt('intranet', 'iblock_absence', false, $arRes['ID']))
$iblock[] = $ib;
}
}
else
{
$iblock = array($iblock);
}
if (count($iblock) > 0)
{
foreach ($iblock as $ib)
{
if ($arFields['IBLOCK_ID'] == $ib)
{
static $PROPERTY_USER = 0;
if ($PROPERTY_USER <= 0)
{
$dbRes = CIBlockProperty::GetByID('USER', $arFields['IBLOCK_ID']);
if ($arRes = $dbRes->Fetch())
$PROPERTY_USER = $arRes['ID'];
}
if ($PROPERTY_USER > 0)
{
// $arPropertyValue = array_values($arFields['PROPERTY_VALUES']);
// $USER_ID = $arPropertyValue[0];
$USER_ID = $arFields['PROPERTY_VALUES']['USER'] ?? 0;
$dbRes = CUser::GetByID($USER_ID);
if ($arUser = $dbRes->Fetch())
CIBlockElement::SetPropertyValues($arFields['ID'], $arFields['IBLOCK_ID'], $arUser['ACTIVE'], 'USER_ACTIVE');
}
}
}
}
// -- absence
// news
if ((int)$arFields["IBLOCK_ID"] > 0)
{
if (
(string)CIBlock::GetArrayByID($arFields["IBLOCK_ID"], 'IBLOCK_TYPE_ID') == "news"
&& CModule::IncludeModule("socialnetwork")
)
{
CSocNetAllowed::GetAllowedEntityTypes();
$dbLog = CSocNetLog::GetList(array("ID" => "DESC"), array("EVENT_ID" => "news", "SOURCE_ID" => $arFields["ID"]));
if ($arLog = $dbLog->Fetch())
{
if (
$arFields["ACTIVE"] == "Y"
&&
(
$arFields["PREVIEW_TEXT"] <> ''
|| $arFields["DETAIL_TEXT"] <> ''
)
&&
(
!array_key_exists("WF", $arFields)
|| $arFields["WF"] == "N"
|| (
$arFields["WF_STATUS_ID"] == 1
&& (
$arFields["WF_PARENT_ELEMENT_ID"] == $arFields["ID"]
|| empty($arFields["WF_PARENT_ELEMENT_ID"])
)
)
)
)
{
$arSoFields = Array(
"=LOG_DATE" => (
$arFields["ACTIVE_FROM"] <> ''
?
(
MakeTimeStamp($arFields["ACTIVE_FROM"], CSite::GetDateFormat("FULL", $site_id)) > time()
?
$DB->CharToDateFunction($arFields["ACTIVE_FROM"], "FULL", $site_id)
:
$DB->CurrentTimeFunction()
)
:
$DB->CurrentTimeFunction()
),
"=LOG_UPDATE" => $DB->CurrentTimeFunction(),
"TITLE" => $arFields["NAME"],
"MESSAGE" => (
$arFields["DETAIL_TEXT"] <> ''
? ($arFields["DETAIL_TEXT_TYPE"] == "text" ? htmlspecialcharsbx($arFields["DETAIL_TEXT"]) : $arFields["DETAIL_TEXT"])
: ($arFields["PREVIEW_TEXT_TYPE"] == "text" ? htmlspecialcharsbx($arFields["PREVIEW_TEXT"]) : $arFields["PREVIEW_TEXT"])
)
);
$logID = CSocNetLog::Update($arLog["ID"], $arSoFields);
if (intval($logID) > 0)
{
$rsRights = CSocNetLogRights::GetList(array(), array("LOG_ID" => $logID));
$arRights = $rsRights->Fetch();
if (!$arRights)
CSocNetLogRights::Add($logID, "G2");
CSocNetLog::SendEvent($logID, "SONET_NEW_EVENT");
}
}
else
{
CSocNetLog::Delete($arLog["ID"]);
}
}
else
{
if (
$arFields["ACTIVE"] == "Y"
&& (
$arFields["PREVIEW_TEXT"] <> ''
|| $arFields["DETAIL_TEXT"] <> ''
)
&& (
!array_key_exists("WF", $arFields)
|| $arFields["WF"] == "N"
|| ($arFields["WF_STATUS_ID"] == 1
&& (
$arFields["WF_PARENT_ELEMENT_ID"] == $arFields["ID"]
|| empty($arFields["WF_PARENT_ELEMENT_ID"])
)
)
)
)
{
$dbIBlock = CIBlock::GetByID($arFields["IBLOCK_ID"]);
if($arIBlock = $dbIBlock->Fetch())
{
$rsSite = CIBlock::GetSite($arFields["IBLOCK_ID"]);
if ($arSite = $rsSite->Fetch())
$site_id = $arSite["SITE_ID"];
$val = COption::GetOptionString("intranet", "sonet_log_news_iblock", "", $site_id);
if ($val <> '')
{
$arIBCode = unserialize($val, ["allowed_classes" => false]);
if (!is_array($arIBCode) || count($arIBCode) <= 0)
$arIBCode = array();
}
else
$arIBCode = array();
if (in_array($arIBlock["CODE"], $arIBCode))
{
$entity_url = str_replace(
"#SITE_DIR#",
$arSite["DIR"],
$arIBlock["LIST_PAGE_URL"]
);
if (mb_strpos($entity_url, "/") === 0)
$entity_url = "/".ltrim($entity_url, "/");
$url = str_replace(
array("#SITE_DIR#", "#ID#", "#CODE#"),
array($arSite["DIR"], $arFields["ID"], $arFields["CODE"]),
$arIBlock["DETAIL_PAGE_URL"]
);
if (mb_strpos($url, "/") === 0)
$url = "/".ltrim($url, "/");
$val = COption::GetOptionString("intranet", "sonet_log_news_iblock_forum");
if ($val <> '')
$arIBlockForum = unserialize($val, ["allowed_classes" => false]);
else
$arIBlockForum = array();
$strMessage = (
$arFields["DETAIL_TEXT"] <> ''
? ($arFields["DETAIL_TEXT_TYPE"] == "text" ? htmlspecialcharsbx($arFields["DETAIL_TEXT"]) : $arFields["DETAIL_TEXT"])
: ($arFields["PREVIEW_TEXT_TYPE"] == "text" ? htmlspecialcharsbx($arFields["PREVIEW_TEXT"]) : $arFields["PREVIEW_TEXT"])
);
$dtFormatSite = (defined("ADMIN_SECTION") && ADMIN_SECTION===true ? SITE_ID : $site_id);
$dtValue = (
$arFields["ACTIVE_FROM"] <> ''
?
(
MakeTimeStamp($arFields["ACTIVE_FROM"], CSite::GetDateFormat("FULL", $dtFormatSite)) > time()
?
$DB->CharToDateFunction($arFields["ACTIVE_FROM"], "FULL", $dtFormatSite)
:
$DB->CurrentTimeFunction()
)
:
$DB->CurrentTimeFunction()
);
$arSoFields = Array(
"SITE_ID" => $site_id,
"ENTITY_TYPE" => SONET_SUBSCRIBE_ENTITY_NEWS,
"ENTITY_ID" => $arIBlock["ID"],
"EVENT_ID" => "news",
"USER_ID" => $USER->GetID(),
"=LOG_DATE" => $dtValue,
"=LOG_UPDATE" => $dtValue,
"TITLE_TEMPLATE" => GetMessage("INTR_SOCNET_LOG_NEWS_TITLE"),
"TITLE" => $arFields["NAME"],
"MESSAGE" => $strMessage,
"TEXT_MESSAGE" => "",
"URL" => $url,
"MODULE_ID" => "intranet",
"CALLBACK_FUNC" => false,
"TMP_ID" => false,
"PARAMS" => serialize(array(
"ENTITY_NAME" => $arIBlock["NAME"],
"ENTITY_URL" => $entity_url
)),
"SOURCE_ID" => $arFields["ID"],
"ENABLE_COMMENTS" => (array_key_exists($arIBlock["ID"], $arIBlockForum) ? "Y" : "N"),
"TAG" => (!empty($arFields['TAGS']) ? explode(', ', $arFields['TAGS']) : array())
);
$logID = CSocNetLog::Add($arSoFields, false);
if (intval($logID) > 0)
{
CSocNetLog::Update($logID, array("TMP_ID" => $logID));
CSocNetLogRights::Add($logID, "G2");
CSocNetLog::SendEvent($logID, "SONET_NEW_EVENT");
if (Loader::includeModule('forum'))
{
$res = CForumTopic::GetList(
array(),
array(
'XML_ID' => 'IBLOCK_'.$arFields['ID']
)
);
if ($topic = $res->fetch())
{
$res = CForumMessage::GetList(
array(),
array(
'NEW_TOPIC' => 'N',
'TOPIC_ID' => $topic['ID']
)
);
$forumCommentsList = array();
while($message = $res->fetch())
{
$forumCommentsList[$message['ID']] = $message;
}
if (!empty($forumCommentsList))
{
$res = CSocNetLogComments::getList(
array(),
array(
'EVENT_ID' => 'news_comment',
'SOURCE_ID' => array_unique(array_keys($forumCommentsList))
),
false,
false,
array('ID', 'SOURCE_ID')
);
while($sonetComment = $res->fetch())
{
unset($forumCommentsList[$sonetComment['SOURCE_ID']]);
}
if (!empty($forumCommentsList))
{
$arForum = CForumNew::GetByID($arIBlockForum[$arIBlock["ID"]]);
$parser = new textParser(LANGUAGE_ID); // second parameter - path to smile!
$parser->image_params["width"] = false;
$parser->image_params["height"] = false;
$arAllow = array(
"HTML" => "N",
"ANCHOR" => "N",
"BIU" => "N",
"IMG" => "N",
"LIST" => "N",
"QUOTE" => "N",
"CODE" => "N",
"FONT" => "N",
"UPLOAD" => ($arForum ? $arForum["ALLOW_UPLOAD"] : "N"),
"NL2BR" => "N",
"VIDEO" => "N",
"SMILES" => "N"
);
foreach($forumCommentsList as $forumComment)
{
self::addNewsComment(array(
'entityId' => $arIBlock["ID"],
'message' => $parser->convert($forumComment["POST_MESSAGE"], $arAllow),
'textMessage' => $parser->convert4mail($forumComment["POST_MESSAGE"]),
'forumMessageId' => $forumComment['ID'],
'authorId' => intval($forumComment['AUTHOR_ID']),
'logId' => $logID,
'logDate' => $forumComment['POST_DATE']
));
}
}
}
}
}
}
}
}
}
}
if (
$logID > 0
&& $arFields["ACTIVE_TO"] <> ''
)
{
$agent = "CIntranetEventHandlers::DeleteLogEntry(".$arFields["ID"].");";
CAgent::RemoveAgent($agent, "intranet");
CAgent::AddAgent($agent, "intranet", "N", 0, $arFields["ACTIVE_TO"], "Y", $arFields["ACTIVE_TO"]);
}
}
}
// --news
}
}