%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/socialnetwork/classes/general/ |
Current File : //home/bitrix/www/bitrix/modules/socialnetwork/classes/general/log.php |
<? IncludeModuleLangFile(__FILE__); class CAllSocNetLog { /***************************************/ /******** DATA MODIFICATION **********/ /***************************************/ function CheckFields($ACTION, &$arFields, $ID = 0) { static $arSiteWorkgroupsPage; global $DB, $APPLICATION, $USER_FIELD_MANAGER; if (!$arSiteWorkgroupsPage && IsModuleInstalled("extranet") && $arFields["ENTITY_TYPE"] == SONET_ENTITY_GROUP) { $rsSite = CSite::GetList($by="sort", $order="desc", Array("ACTIVE" => "Y")); while($arSite = $rsSite->Fetch()) { $arSiteWorkgroupsPage[$arSite["ID"]] = COption::GetOptionString("socialnetwork", "workgroups_page", $arSite["DIR"]."workgroups/", $arSite["ID"]); } } if ($ACTION != "ADD" && IntVal($ID) <= 0) { $APPLICATION->ThrowException("System error 870164", "ERROR"); return false; } $newEntityType = ""; if ((is_set($arFields, "ENTITY_TYPE") || $ACTION=="ADD") && StrLen($arFields["ENTITY_TYPE"]) <= 0) { $APPLICATION->ThrowException(GetMessage("SONET_GL_EMPTY_ENTITY_TYPE"), "EMPTY_ENTITY_TYPE"); return false; } elseif (is_set($arFields, "ENTITY_TYPE")) { if (!in_array($arFields["ENTITY_TYPE"], CSocNetAllowed::GetAllowedEntityTypes())) { $APPLICATION->ThrowException(GetMessage("SONET_GL_ERROR_NO_ENTITY_TYPE"), "ERROR_NO_ENTITY_TYPE"); return false; } $newEntityType = $arFields["ENTITY_TYPE"]; } if ((is_set($arFields, "ENTITY_ID") || $ACTION=="ADD") && IntVal($arFields["ENTITY_ID"]) <= 0) { $APPLICATION->ThrowException(GetMessage("SONET_GL_EMPTY_ENTITY_ID"), "EMPTY_ENTITY_ID"); return false; } elseif (is_set($arFields, "ENTITY_ID")) { if (StrLen($newEntityType) <= 0 && $ID > 0) { $arRe = CAllSocNetLog::GetByID($ID); if ($arRe) { $newEntityType = $arRe["ENTITY_TYPE"]; } } if (StrLen($newEntityType) <= 0) { $APPLICATION->ThrowException(GetMessage("SONET_GL_ERROR_CALC_ENTITY_TYPE"), "ERROR_CALC_ENTITY_TYPE"); return false; } if ($newEntityType == SONET_ENTITY_GROUP) { $arResult = CSocNetGroup::GetByID($arFields["ENTITY_ID"]); if ($arResult == false) { $APPLICATION->ThrowException(GetMessage("SONET_GL_ERROR_NO_ENTITY_ID"), "ERROR_NO_ENTITY_ID"); return false; } } elseif ($newEntityType == SONET_ENTITY_USER) { $dbResult = CUser::GetByID($arFields["ENTITY_ID"]); if (!$dbResult->Fetch()) { $APPLICATION->ThrowException(GetMessage("SONET_GL_ERROR_NO_ENTITY_ID"), "ERROR_NO_ENTITY_ID"); return false; } } } if ( $ACTION == "ADD" && ( !is_set($arFields, "SITE_ID") || ( (is_array($arFields["SITE_ID"]) && count($arFields["SITE_ID"]) <= 0) || (!is_array($arFields["SITE_ID"]) && StrLen($arFields["SITE_ID"]) <= 0) ) ) ) { if ($newEntityType == SONET_ENTITY_GROUP) { $arSites = array(); $rsGroupSite = CSocNetGroup::GetSite($arFields["ENTITY_ID"]); while($arGroupSite = $rsGroupSite->Fetch()) { $arSites[] = $arGroupSite["LID"]; } $arFields["SITE_ID"] = $arSites; } else { $arFields["SITE_ID"] = array(SITE_ID); } } if ( isset($arFields["TAG"]) && !is_array($arFields["TAG"]) ) { $arFields["TAG"] = array($arFields["TAG"]); } if ((is_set($arFields, "EVENT_ID") || $ACTION=="ADD") && StrLen($arFields["EVENT_ID"]) <= 0) { $APPLICATION->ThrowException(GetMessage("SONET_GL_EMPTY_EVENT_ID"), "EMPTY_EVENT_ID"); return false; } elseif (is_set($arFields, "EVENT_ID")) { $arFields["EVENT_ID"] = strtolower($arFields["EVENT_ID"]); $arEvent = CSocNetLogTools::FindLogEventByID($arFields["EVENT_ID"], $arFields["ENTITY_TYPE"]); if (!$arEvent) { $APPLICATION->ThrowException(GetMessage("SONET_GL_ERROR_NO_FEATURE_ID"), "ERROR_NO_FEATURE"); return false; } } if (is_set($arFields, "USER_ID")) { $dbResult = CUser::GetByID($arFields["USER_ID"]); if (!$dbResult->Fetch()) { $APPLICATION->ThrowException(GetMessage("SONET_GL_ERROR_NO_USER_ID"), "ERROR_NO_USER_ID"); return false; } } if (is_set($arFields, "LOG_DATE") && (!$DB->IsDate($arFields["LOG_DATE"], false, LANG, "FULL"))) { $APPLICATION->ThrowException(GetMessage("SONET_GL_EMPTY_DATE_CREATE"), "EMPTY_LOG_DATE"); return false; } if ((is_set($arFields, "TITLE") || $ACTION=="ADD") && StrLen($arFields["TITLE"]) <= 0) { $APPLICATION->ThrowException(GetMessage("SONET_GL_EMPTY_TITLE"), "EMPTY_TITLE"); return false; } if ( isset($arFields["CONTEXT_USER_ID"]) && intval($arFields["CONTEXT_USER_ID"]) > 0 ) { $contextUserId = intval($arFields["CONTEXT_USER_ID"]); } elseif ( isset($arFields["USER_ID"]) && intval($arFields["USER_ID"]) > 0 ) { $contextUserId = intval($arFields["USER_ID"]); } else { $contextUserId = false; } if (!$USER_FIELD_MANAGER->CheckFields("SONET_LOG", $ID, $arFields, $contextUserId)) { return false; } if (is_set($arFields["URL"]) && is_array($arSiteWorkgroupsPage)) { foreach($arSiteWorkgroupsPage as $groups_page) { if (strpos($arFields["URL"], $groups_page) === 0) { $arFields["URL"] = "#GROUPS_PATH#".substr($arFields["URL"], strlen($groups_page), strlen($arFields["URL"])-strlen($groups_page)); } } } return True; } /***************************************/ /********** DATA SELECTION ***********/ /***************************************/ public static function GetByID($ID) { global $APPLICATION; $ID = IntVal($ID); if ($ID <= 0) { $APPLICATION->ThrowException(GetMessage("SONET_GL_WRONG_PARAMETER_ID"), "ERROR_NO_ID"); return false; } $dbResult = CSocNetLog::GetList(Array(), Array("ID" => $ID)); if ($arResult = $dbResult->GetNext()) { return $arResult; } return False; } function MakeTitle($titleTemplate, $title, $url = "", $bHtml = true) { if (StrLen($url) > 0) $title = ($bHtml ? "<a href=\"".$url."\">".$title."</a>" : $title." [".$url."]"); if (StrLen($titleTemplate) > 0) { if (StrPos($titleTemplate, "#TITLE#") !== false) return Str_Replace("#TITLE#", $title, $titleTemplate); else return $titleTemplate." \"".$title."\""; } else { return $title; } } /***************************************/ /********** SEND EVENTS **************/ /***************************************/ function __InitUserTmp($userID) { $title = ""; $dbUser = CUser::GetByID($userID); if ($arUser = $dbUser->GetNext()) $title .= CSocNetUser::FormatName($arUser["NAME"], $arUser["LAST_NAME"], $arUser["LOGIN"]); return $title; } function __InitUsersTmp($message, $titleTemplate1, $titleTemplate2) { $arUsersID = explode(",", $message); $title = ""; $bFirst = true; $count = 0; foreach ($arUsersID as $userID) { $titleTmp = CSocNetLog::__InitUserTmp($userID); if (StrLen($titleTmp) > 0) { if (!$bFirst) $title .= ", "; $title .= $titleTmp; $count++; } $bFirst = false; } return Str_Replace("#TITLE#", $title, (($count > 1) ? $titleTemplate2 : $titleTemplate1)); } function __InitGroupTmp($groupID) { $title = ""; $arGroup = CSocNetGroup::GetByID($groupID); if ($arGroup) $title .= $arGroup["NAME"]; return $title; } function __InitGroupsTmp($message, $titleTemplate1, $titleTemplate2) { $arGroupsID = explode(",", $message); $title = ""; $bFirst = true; $count = 0; foreach ($arGroupsID as $groupID) { $titleTmp = CSocNetLog::__InitGroupTmp($groupID); if (StrLen($titleTmp) > 0) { if (!$bFirst) $title .= ", "; $title .= $titleTmp; $count++; } $bFirst = false; } return Str_Replace("#TITLE#", $title, (($count > 1) ? $titleTemplate2 : $titleTemplate1)); } function SendEventAgent($ID, $mailTemplate = "SONET_NEW_EVENT", $tmp_id = false) { if (CSocNetLog::SendEvent($ID, $mailTemplate, $tmp_id, true)) return ""; else return "CSocNetLog::SendEventAgent(".$ID.", '".$mailTemplate."', ".($tmp_id ? $tmp_id : 'false').");"; } public static function SendEvent($ID, $mailTemplate = "SONET_NEW_EVENT", $tmp_id = false, $bAgent = false, $bTransport = false) { $arSocNetAllowedSubscribeEntityTypesDesc = CSocNetAllowed::GetAllowedEntityTypesDesc(); $ID = IntVal($ID); $tmp_id = IntVal($tmp_id); if ($ID <= 0) { return false; } if ($tmp_id > 0) { $arFilter = array("ID" => $tmp_id); } else { $arFilter = array("ID" => $ID); } $dbLog = CSocNetLog::GetList( array(), $arFilter, false, false, array("ID", "ENTITY_TYPE", "ENTITY_ID", "USER_ID", "USER_NAME", "USER_LAST_NAME", "USER_SECOND_NAME", "USER_LOGIN", "EVENT_ID", "LOG_DATE", "TITLE_TEMPLATE", "TITLE", "MESSAGE", "TEXT_MESSAGE", "URL", "MODULE_ID", "CALLBACK_FUNC", "SITE_ID", "PARAMS", "SOURCE_ID", "GROUP_NAME", "CREATED_BY_NAME", "CREATED_BY_SECOND_NAME", "CREATED_BY_LAST_NAME", "CREATED_BY_LOGIN", "LOG_SOURCE_ID"), array("MIN_ID_JOIN" => true) ); $arLog = $dbLog->Fetch(); if (!$arLog) { return $bAgent; } if (MakeTimeStamp($arLog["LOG_DATE"]) > (time() + CTimeZone::GetOffset())) { $agent = "CSocNetLog::SendEventAgent(".$ID.", '".CUtil::addslashes($mailTemplate)."', ".($tmp_id ? $tmp_id : 'false').");"; $rsAgents = CAgent::GetList(array("ID"=>"DESC"), array("NAME" => $agent)); if(!$rsAgents->Fetch()) { $res = CAgent::AddAgent($agent, "socialnetwork", "N", 0, $arLog["LOG_DATE"], "Y", $arLog["LOG_DATE"]); if(!$res) $GLOBALS["APPLICATION"]->ResetException(); } elseif ($bAgent) { CAgent::RemoveAgent($agent, "socialnetwork"); CAgent::AddAgent($agent, "socialnetwork", "N", 0, $arLog["LOG_DATE"], "Y", $arLog["LOG_DATE"]); return true; } return false; } $arEvent = CSocNetLogTools::FindLogEventByID($arLog["EVENT_ID"], $arLog["ENTITY_TYPE"]); if ( $arEvent && array_key_exists("CLASS_FORMAT", $arEvent) && array_key_exists("METHOD_FORMAT", $arEvent) ) { $dbSiteCurrent = CSite::GetByID(SITE_ID); if ( ($arSiteCurrent = $dbSiteCurrent->Fetch()) && $arSiteCurrent["LANGUAGE_ID"] != LANGUAGE_ID ) { $arLog["MAIL_LANGUAGE_ID"] = $arSiteCurrent["LANGUAGE_ID"]; } $arLog["FIELDS_FORMATTED"] = call_user_func(array($arEvent["CLASS_FORMAT"], $arEvent["METHOD_FORMAT"]), $arLog, array(), true); } if ( array_key_exists($arLog["ENTITY_TYPE"], $arSocNetAllowedSubscribeEntityTypesDesc) && array_key_exists("HAS_MY", $arSocNetAllowedSubscribeEntityTypesDesc[$arLog["ENTITY_TYPE"]]) && $arSocNetAllowedSubscribeEntityTypesDesc[$arLog["ENTITY_TYPE"]]["HAS_MY"] == "Y" && array_key_exists("CLASS_OF", $arSocNetAllowedSubscribeEntityTypesDesc[$arLog["ENTITY_TYPE"]]) && array_key_exists("METHOD_OF", $arSocNetAllowedSubscribeEntityTypesDesc[$arLog["ENTITY_TYPE"]]) && strlen($arSocNetAllowedSubscribeEntityTypesDesc[$arLog["ENTITY_TYPE"]]["CLASS_OF"]) > 0 && strlen($arSocNetAllowedSubscribeEntityTypesDesc[$arLog["ENTITY_TYPE"]]["METHOD_OF"]) > 0 && method_exists($arSocNetAllowedSubscribeEntityTypesDesc[$arLog["ENTITY_TYPE"]]["CLASS_OF"], $arSocNetAllowedSubscribeEntityTypesDesc[$arLog["ENTITY_TYPE"]]["METHOD_OF"]) ) { $arOfEntities = call_user_func(array($arSocNetAllowedSubscribeEntityTypesDesc[$arLog["ENTITY_TYPE"]]["CLASS_OF"], $arSocNetAllowedSubscribeEntityTypesDesc[$arLog["ENTITY_TYPE"]]["METHOD_OF"]), $arLog["ENTITY_ID"]); } else { $arOfEntities = false; } if ($bTransport) { $arListParams = array( "USE_SUBSCRIBE" => "Y", "ENTITY_TYPE" => $arLog["ENTITY_TYPE"], "ENTITY_ID" => $arLog["ENTITY_ID"], "EVENT_ID" => $arLog["EVENT_ID"], "USER_ID" => $arLog["USER_ID"], "OF_ENTITIES" => $arOfEntities, "TRANSPORT" => array("M", "X") ); $arLogSites = array(); $rsLogSite = CSocNetLog::GetSite($ID); while($arLogSite = $rsLogSite->Fetch()) { $arLogSites[] = $arLogSite["LID"]; } if (CModule::IncludeModule("extranet")) { $arSites = array(); $dbSite = CSite::GetList($by="sort", $order="desc", array("ACTIVE" => "Y")); while($arSite = $dbSite->Fetch()) { $arSites[$arSite["ID"]] = array( "DIR" => (strlen(trim($arSite["DIR"])) > 0 ? $arSite["DIR"] : "/"), "SERVER_NAME" => (strlen(trim($arSite["SERVER_NAME"])) > 0 ? $arSite["SERVER_NAME"] : COption::GetOptionString("main", "server_name", $_SERVER["HTTP_HOST"])) ); } $extranet_site_id = CExtranet::GetExtranetSiteID(); $intranet_site_id = CSite::GetDefSite(); $arIntranetUsers = CExtranet::GetIntranetUsers(); } $dbSubscribers = CSocNetLogEvents::GetList( array("TRANSPORT" => "DESC"), array( "USER_ACTIVE" => "Y", "SITE_ID" => array_merge($arLogSites, array(false)) ), false, false, array("USER_ID", "SITE_ID", "ENTITY_TYPE", "ENTITY_ID", "ENTITY_CB", "ENTITY_MY", "USER_NAME", "USER_LAST_NAME", "USER_LOGIN", "USER_LID", "USER_EMAIL", "TRANSPORT"), $arListParams ); $arListParams = array( "USE_SUBSCRIBE" => "Y", "ENTITY_TYPE" => $arLog["ENTITY_TYPE"], "ENTITY_ID" => $arLog["ENTITY_ID"], "EVENT_ID" => $arLog["EVENT_ID"], "USER_ID" => $arLog["USER_ID"], "OF_ENTITIES" => $arOfEntities, "TRANSPORT" => "N" ); $dbUnSubscribers = CSocNetLogEvents::GetList( array("TRANSPORT" => "DESC"), array( "USER_ACTIVE" => "Y", "SITE_ID" => array_merge($arLogSites, array(false)) ), false, false, array("USER_ID", "SITE_ID", "ENTITY_TYPE", "ENTITY_ID", "ENTITY_CB", "ENTITY_MY", "TRANSPORT", "EVENT_ID"), $arListParams ); $arUnSubscribers = array(); while ($arUnSubscriber = $dbUnSubscribers->Fetch()) { $arUnSubscribers[] = $arUnSubscriber["USER_ID"]."_".$arUnSubscriber["ENTITY_TYPE"]."_".$arUnSubscriber["ENTITY_ID"]."_".$arUnSubscriber["ENTITY_MY"]."_".$arUnSubscriber["ENTITY_CB"]."_".$arUnSubscriber["EVENT_ID"]; } $bHasAccessAll = CSocNetLogRights::CheckForUserAll($arLog["ID"]); $arSentUserID = array("M" => array(), "X" => array()); while ($arSubscriber = $dbSubscribers->Fetch()) { if ( is_array($arIntranetUsers) && !in_array($arSubscriber["USER_ID"], $arIntranetUsers) && !in_array($extranet_site_id, $arLogSites) ) { continue; } if ( array_key_exists($arSubscriber["TRANSPORT"], $arSentUserID) && in_array($arSubscriber["USER_ID"], $arSentUserID[$arSubscriber["TRANSPORT"]]) ) { continue; } if ( intval($arSubscriber["ENTITY_ID"]) != 0 && $arSubscriber["EVENT_ID"] == "all" && ( in_array($arSubscriber["USER_ID"]."_".$arSubscriber["ENTITY_TYPE"]."_".$arSubscriber["ENTITY_ID"]."_N_".$arSubscriber["ENTITY_CB"]."_".$arLog["EVENT_ID"], $arUnSubscribers) || in_array($arSubscriber["USER_ID"]."_".$arSubscriber["ENTITY_TYPE"]."_".$arSubscriber["ENTITY_ID"]."_Y_".$arSubscriber["ENTITY_CB"]."_".$arLog["EVENT_ID"], $arUnSubscribers) ) ) { continue; } elseif ( intval($arSubscriber["ENTITY_ID"]) == 0 && $arSubscriber["ENTITY_CB"] == "N" && $arSubscriber["EVENT_ID"] != "all" && ( in_array($arSubscriber["USER_ID"]."_".$arSubscriber["ENTITY_TYPE"]."_".$arLog["ENTITY_ID"]."_Y_N_all", $arUnSubscribers) || in_array($arSubscriber["USER_ID"]."_".$arSubscriber["ENTITY_TYPE"]."_".$arLog["ENTITY_ID"]."_N_N_all", $arUnSubscribers) || in_array($arSubscriber["USER_ID"]."_".$arSubscriber["ENTITY_TYPE"]."_".$arLog["ENTITY_ID"]."_Y_N_".$arLog["EVENT_ID"], $arUnSubscribers) || in_array($arSubscriber["USER_ID"]."_".$arSubscriber["ENTITY_TYPE"]."_".$arLog["ENTITY_ID"]."_N_N_".$arLog["EVENT_ID"], $arUnSubscribers) ) ) { continue; } $arSentUserID[$arSubscriber["TRANSPORT"]][] = $arSubscriber["USER_ID"]; if (!$bHasAccessAll) { $bHasAccess = CSocNetLogRights::CheckForUserOnly($arLog["ID"], $arSubscriber["USER_ID"]); if (!$bHasAccess) { continue; } } if (CModule::IncludeModule("extranet")) { $server_name = $arSites[((!in_array($arSubscriber["USER_ID"], $arIntranetUsers) && $extranet_site_id) ? $extranet_site_id : $intranet_site_id)]["SERVER_NAME"]; $arLog["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["URL_TO_SEND"] = str_replace( array("#SERVER_NAME#", "#GROUPS_PATH#"), array( $server_name, COption::GetOptionString("socialnetwork", "workgroups_page", false, ((!in_array($arSubscriber["USER_ID"], $arIntranetUsers) && $extranet_site_id) ? $extranet_site_id : $intranet_site_id)) ), $arLog["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["URL"] ); $arLog["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["MESSAGE_TO_SEND"] = str_replace( array("#SERVER_NAME#", "#GROUPS_PATH#"), array( $server_name, COption::GetOptionString("socialnetwork", "workgroups_page", false, ((!in_array($arSubscriber["USER_ID"], $arIntranetUsers) && $extranet_site_id) ? $extranet_site_id : $intranet_site_id)) ), $arLog["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["MESSAGE"] ); } else { $arLog["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["MESSAGE_TO_SEND"] = $arLog["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["MESSAGE"]; } switch ($arSubscriber["TRANSPORT"]) { case "X": if ( array_key_exists("URL_TO_SEND", $arLog["FIELDS_FORMATTED"]["EVENT_FORMATTED"]) && strlen($arLog["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["URL_TO_SEND"]) > 0 ) $link = GetMessage("SONET_GL_SEND_EVENT_LINK").$arLog["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["URL_TO_SEND"]; elseif ( array_key_exists("URL", $arLog["FIELDS_FORMATTED"]["EVENT_FORMATTED"]) && strlen($arLog["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["URL"]) > 0 ) $link = GetMessage("SONET_GL_SEND_EVENT_LINK").$arLog["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["URL"]; else $link = ""; $arMessageFields = array( "FROM_USER_ID" => (intval($arLog["USER_ID"]) > 0 ? $arLog["USER_ID"] : 1), "TO_USER_ID" => $arSubscriber["USER_ID"], "MESSAGE" => $arLog["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["TITLE"]." #BR#".$arLog["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["MESSAGE_TO_SEND"].(strlen($link) > 0 ? "#BR# ".$link : ""), "=DATE_CREATE" => $GLOBALS["DB"]->CurrentTimeFunction(), "MESSAGE_TYPE" => SONET_MESSAGE_SYSTEM, "IS_LOG" => "Y" ); CSocNetMessages::Add($arMessageFields); break; case "M": $arFields["SUBSCRIBER_ID"] = $arSubscriber["USER_ID"]; $arFields["SUBSCRIBER_NAME"] = $arSubscriber["USER_NAME"]; $arFields["SUBSCRIBER_LAST_NAME"] = $arSubscriber["USER_LAST_NAME"]; $arFields["SUBSCRIBER_LOGIN"] = $arSubscriber["USER_LOGIN"]; $arFields["SUBSCRIBER_EMAIL"] = $arSubscriber["USER_EMAIL"]; $arFields["EMAIL_TO"] = $arSubscriber["USER_EMAIL"]; $arFields["TITLE"] = str_replace("#BR#", "\n", $arLog["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["TITLE"]); $arFields["MESSAGE"] = str_replace("#BR#", "\n", $arLog["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["MESSAGE_TO_SEND"]); $arFields["ENTITY"] = $arLog["FIELDS_FORMATTED"]["ENTITY"]["FORMATTED"]; $arFields["ENTITY_TYPE"] = $arLog["FIELDS_FORMATTED"]["ENTITY"]["TYPE_MAIL"]; if ( array_key_exists("URL_TO_SEND", $arLog["FIELDS_FORMATTED"]["EVENT_FORMATTED"]) && strlen($arLog["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["URL_TO_SEND"]) > 0 ) $arFields["URL"] = $arLog["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["URL_TO_SEND"]; elseif ( array_key_exists("URL", $arLog["FIELDS_FORMATTED"]["EVENT_FORMATTED"]) && strlen($arLog["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["URL"]) > 0 ) $arFields["URL"] = $arLog["FIELDS_FORMATTED"]["EVENT_FORMATTED"]["URL"]; else $arFields["URL"] = $arLog["URL"]; if (CModule::IncludeModule("extranet")) $arUserGroup = CUser::GetUserGroup($arSubscriber["USER_ID"]); foreach ($arLogSites as $site_id_tmp) { if (IsModuleInstalled("extranet")) { if ( ( CExtranet::IsExtranetSite($site_id_tmp) && in_array(CExtranet::GetExtranetUserGroupID(), $arUserGroup) ) || ( !CExtranet::IsExtranetSite($site_id_tmp) && !in_array(CExtranet::GetExtranetUserGroupID(), $arUserGroup) ) ) { $siteID = $site_id_tmp; break; } else continue; } else { $siteID = $site_id_tmp; break; } } if (!$siteID) { $siteID = (defined("SITE_ID") ? SITE_ID : $arSubscriber["SITE_ID"]); } if (StrLen($siteID) <= 0) $siteID = $arSubscriber["USER_LID"]; if (StrLen($siteID) <= 0) continue; $event = new CEvent; $event->Send($mailTemplate, $siteID, $arFields, "N"); break; default: } } } if (!$bHasAccessAll) { $arUserIdToPush = array(); $dbRight = CSocNetLogRights::GetList(array(), array("LOG_ID" => $arLog["ID"])); while ($arRight = $dbRight->Fetch()) { if (preg_match('/^U(\d+)$/', $arRight["GROUP_CODE"], $matches)) { $arUserIdToPush[] = $matches[1]; } elseif (!in_array($arRight["GROUP_CODE"], array("SA"))) { $arUserIdToPush = array(); break; } } } $arUserIdToPush = (isset($arFields["USERS_TO_PUSH"]) ? $arFields["USERS_TO_PUSH"] : array()); CSocNetLog::CounterIncrement(array( 'ENTITY_ID' => $arLog["ID"], 'EVENT_ID' => $arLog["EVENT_ID"], 'OF_ENTITIES' => $arOfEntities, 'TYPE' => CSocNetLogCounter::TYPE_LOG_ENTRY, 'FOR_ALL_ACCESS' => $bHasAccessAll, 'USERS_TO_PUSH' => ( $bHasAccessAll || empty($arUserIdToPush) || count($arUserIdToPush) > 20 ? array() : $arUserIdToPush ) )); return true; } public static function CounterIncrement($entityId, $event_id = false, $arOfEntities = false, $type = CSocNetLogCounter::TYPE_LOG_ENTRY, $bForAllAccess = false, $arUserIdToPush = array()) { if ( is_array($entityId) && isset($entityId["ENTITY_ID"]) ) { $arFields = $entityId; $entityId = $arFields["ENTITY_ID"]; $event_id = (isset($arFields["EVENT_ID"]) ? $arFields["EVENT_ID"] : false); $arOfEntities = (isset($arFields["OF_ENTITIES"]) ? $arFields["OF_ENTITIES"] : false); $type = (isset($arFields["TYPE"]) ? $arFields["TYPE"] : CSocNetLogCounter::TYPE_LOG_ENTRY); $bForAllAccess = (isset($arFields["FOR_ALL_ACCESS"]) ? $arFields["FOR_ALL_ACCESS"] : false); $arUserIdToPush = (isset($arFields["USERS_TO_PUSH"]) ? $arFields["USERS_TO_PUSH"] : array()); $bSendToAuthor = ( !isset($arFields["SEND_TO_AUTHOR"]) || $arFields["SEND_TO_AUTHOR"] != 'Y' ? false : true ); } else { $bSendToAuthor = false; } if (intval($entityId) <= 0) { return false; } if ( !$bForAllAccess || strtolower($GLOBALS["DB"]->type) != "mysql" ) { $arParams = array( "SET_TIMESTAMP" => "Y" ); if (!empty($arUserIdToPush)) { $arParams["USERS_TO_PUSH"] = $arUserIdToPush; } CUserCounter::IncrementWithSelect( CSocNetLogCounter::GetSubSelect2( $entityId, array( "TYPE" => $type, "FOR_ALL_ACCESS" => $bForAllAccess, "MULTIPLE" => "Y", "SET_TIMESTAMP" => "Y", "SEND_TO_AUTHOR" => ($bSendToAuthor ? 'Y' : 'N') ) ), true, $arParams ); } else // for all, mysql only { $tag = time(); CUserCounter::IncrementWithSelect( CSocNetLogCounter::GetSubSelect2( $entityId, array( "TYPE" => $type, "FOR_ALL_ACCESS_ONLY" => true, "TAG_SET" => $tag, "MULTIPLE" => "Y", "SET_TIMESTAMP" => "Y", "SEND_TO_AUTHOR" => ($bSendToAuthor ? 'Y' : 'N') ) ), false, // sendpull array( "SET_TIMESTAMP" => "Y", "TAG_SET" => $tag ) ); CUserCounter::IncrementWithSelect( CSocNetLogCounter::GetSubSelect2( $entityId, array( "TYPE" => $type, "FOR_ALL_ACCESS_ONLY" => false, "MULTIPLE" => "Y", "SET_TIMESTAMP" => "Y", "SEND_TO_AUTHOR" => ($bSendToAuthor ? 'Y' : 'N') ) ), true, // sendpull array( "SET_TIMESTAMP" => "Y", "TAG_CHECK" => $tag ) ); } if ($event_id == "blog_post_important") { CUserCounter::IncrementWithSelect( CSocNetLogCounter::GetSubSelect2( $entityId, array( "TYPE" => CSocNetLogCounter::TYPE_LOG_ENTRY, "CODE" => "'BLOG_POST_IMPORTANT'", "FOR_ALL_ACCESS" => $bForAllAccess, "MULTIPLE" => "N", "SEND_TO_AUTHOR" => ($bSendToAuthor ? 'Y' : 'N') ) ) ); } if ($type == CSocNetLogCounter::TYPE_LOG_COMMENT) { \Bitrix\Socialnetwork\Item\LogSubscribe::sendPush(array( 'commentId' => $entityId )); } } function CounterDecrement($log_id, $event_id = false, $type = CSocNetLogCounter::TYPE_LOG_ENTRY, $bForAllAccess = false) { if (intval($log_id) <= 0) return false; CUserCounter::IncrementWithSelect( CSocNetLogCounter::GetSubSelect2( $log_id, array( "TYPE" => $type, "DECREMENT" => true, "FOR_ALL_ACCESS" => $bForAllAccess ) ) ); if ($event_id == "blog_post_important") { CUserCounter::IncrementWithSelect( CSocNetLogCounter::GetSubSelect2( $log_id, array( "TYPE" => CSocNetLogCounter::TYPE_LOG_ENTRY, "CODE" => "'BLOG_POST_IMPORTANT'", "DECREMENT" => true, "FOR_ALL_ACCESS" => $bForAllAccess ) ) ); } } function ClearOldAgent() { return ""; } function GetSign($url, $userID = false, $site_id = false) { if (!$url || strlen(trim($url)) <= 0) return false; if (!$userID) $userID = $GLOBALS["USER"]->GetID(); if ($hash = CUser::GetHitAuthHash($url, $userID)) return $hash; else { $hash = CUser::AddHitAuthHash($url, $userID, $site_id); return $hash; } } function CheckSign($sign, $userId) { return (md5($userId."||".CSocNetLog::GetUniqLogID()) == $sign); } function OnSocNetLogFormatEvent($arEvent, $arParams) { if ($arEvent["EVENT_ID"] == "system" || $arEvent["EVENT_ID"] == "system_friends" || $arEvent["EVENT_ID"] == "system_groups") { $arEvent["TITLE_TEMPLATE"] = ""; $arEvent["URL"] = ""; switch ($arEvent["TITLE"]) { case "join": list($titleTmp, $messageTmp) = CSocNetLog::InitUsersTmp($arEvent["MESSAGE"], GetMessage("SONET_GL_TITLE_JOIN1"), GetMessage("SONET_GL_TITLE_JOIN2"), $arParams); $arEvent["TITLE"] = $titleTmp; $arEvent["MESSAGE_FORMAT"] = $messageTmp; break; case "unjoin": list($titleTmp, $messageTmp) = CSocNetLog::InitUsersTmp($arEvent["MESSAGE"], GetMessage("SONET_GL_TITLE_UNJOIN1"), GetMessage("SONET_GL_TITLE_UNJOIN2"), $arParams); $arEvents["TITLE"] = $titleTmp; $arEvents["MESSAGE_FORMAT"] = $messageTmp; break; case "moderate": list($titleTmp, $messageTmp) = CSocNetLog::InitUsersTmp($arEvent["MESSAGE"], GetMessage("SONET_GL_TITLE_MODERATE1"), GetMessage("SONET_GL_TITLE_MODERATE2"), $arParams); $arEvent["TITLE"] = $titleTmp; $arEvent["MESSAGE_FORMAT"] = $messageTmp; break; case "unmoderate": list($titleTmp, $messageTmp) = CSocNetLog::InitUsersTmp($arEvent["MESSAGE"], GetMessage("SONET_GL_TITLE_UNMODERATE1"), GetMessage("SONET_GL_TITLE_UNMODERATE2"), $arParams); $arEvent["TITLE"] = $titleTmp; $arEvent["MESSAGE_FORMAT"] = $messageTmp; break; case "owner": list($titleTmp, $messageTmp) = CSocNetLog::InitUsersTmp($arEvent["MESSAGE"], GetMessage("SONET_GL_TITLE_OWNER1"), GetMessage("SONET_GL_TITLE_OWNER1"), $arParams); $arEvent["TITLE"] = $titleTmp; $arEvent["MESSAGE_FORMAT"] = $messageTmp; break; case "friend": list($titleTmp, $messageTmp) = CSocNetLog::InitUsersTmp($arEvent["MESSAGE"], GetMessage("SONET_GL_TITLE_FRIEND1"), GetMessage("SONET_GL_TITLE_FRIEND1"), $arParams); $arEvent["TITLE"] = $titleTmp; $arEvent["MESSAGE_FORMAT"] = $messageTmp; break; case "unfriend": list($titleTmp, $messageTmp) = CSocNetLog::InitUsersTmp($arEvent["MESSAGE"], GetMessage("SONET_GL_TITLE_UNFRIEND1"), GetMessage("SONET_GL_TITLE_UNFRIEND1"), $arParams); $arEvent["TITLE"] = $titleTmp; $arEvent["MESSAGE_FORMAT"] = $messageTmp; break; case "group": list($titleTmp, $messageTmp) = CSocNetLog::InitGroupsTmp($arEvent["MESSAGE"], GetMessage("SONET_GL_TITLE_GROUP1"), GetMessage("SONET_GL_TITLE_GROUP1"), $arParams); $arEvent["TITLE"] = $titleTmp; $arEvent["MESSAGE_FORMAT"] = $messageTmp; break; case "ungroup": list($titleTmp, $messageTmp) = CSocNetLog::InitGroupsTmp($arEvent["MESSAGE"], GetMessage("SONET_GL_TITLE_UNGROUP1"), GetMessage("SONET_GL_TITLE_UNGROUP1"), $arParams); $arEvent["TITLE"] = $titleTmp; $arEvent["MESSAGE_FORMAT"] = $messageTmp; break; case "exclude_user": list($titleTmp, $messageTmp) = CSocNetLog::InitGroupsTmp($arEvent["MESSAGE"], GetMessage("SONET_GL_TITLE_EXCLUDE_USER1"), GetMessage("SONET_GL_TITLE_EXCLUDE_USER1"), $arParams); $arEvent["TITLE"] = $titleTmp; $arEvent["MESSAGE_FORMAT"] = $messageTmp; break; case "exclude_group": list($titleTmp, $messageTmp) = CSocNetLog::InitUsersTmp($arEvent["MESSAGE"], GetMessage("SONET_GL_TITLE_EXCLUDE_GROUP1"), GetMessage("SONET_GL_TITLE_EXCLUDE_GROUP1"), $arParams); $arEvent["TITLE"] = $titleTmp; $arEvent["MESSAGE_FORMAT"] = $messageTmp; break; default: continue; break; } } return $arEvent; } function InitUserTmp($userID, $arParams, $bCurrentUserIsAdmin = "unknown", $bRSS = false) { $title = ""; $message = ""; $bUseLogin = $arParams['SHOW_LOGIN'] != "N" ? true : false; $dbUser = CUser::GetByID($userID); if ($arUser = $dbUser->Fetch()) { if ($bCurrentUserIsAdmin == "unknown") $bCurrentUserIsAdmin = CSocNetUser::IsCurrentUserModuleAdmin(); $canViewProfile = CSocNetUserPerms::CanPerformOperation($GLOBALS["USER"]->GetID(), $arUser["ID"], "viewprofile", $bCurrentUserIsAdmin); $pu = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_USER"], array("user_id" => $arUser["ID"])); if (!$bRSS && $canViewProfile) $title .= "<a href=\"".$pu."\">"; $title .= CUser::FormatName($arParams['NAME_TEMPLATE'], $arUser, $bUseLogin); if (!$bRSS && $canViewProfile) $title .= "</a>"; if (intval($arUser["PERSONAL_PHOTO"]) <= 0) { switch ($arUser["PERSONAL_GENDER"]) { case "M": $suffix = "male"; break; case "F": $suffix = "female"; break; default: $suffix = "unknown"; } $arUser["PERSONAL_PHOTO"] = COption::GetOptionInt("socialnetwork", "default_user_picture_".$suffix, false, SITE_ID); } $arImage = CSocNetTools::InitImage($arUser["PERSONAL_PHOTO"], 100, "/bitrix/images/socialnetwork/nopic_user_100.gif", 100, $pu, $canViewProfile); $message = $arImage["IMG"]; } return array($title, $message); } function InitUsersTmp($message, $titleTemplate1, $titleTemplate2, $arParams, $bCurrentUserIsAdmin = "unknown", $bRSS = false) { $arUsersID = explode(",", $message); $message = ""; $title = ""; $bFirst = true; $count = 0; if ($bCurrentUserIsAdmin == "unknown") $bCurrentUserIsAdmin = CSocNetUser::IsCurrentUserModuleAdmin(); foreach ($arUsersID as $userID) { list($titleTmp, $messageTmp) = CSocNetLog::InitUserTmp($userID, $arParams, $bCurrentUserIsAdmin, $bRSS); if (StrLen($titleTmp) > 0) { if (!$bFirst) $title .= ", "; $title .= $titleTmp; $count++; } if (StrLen($messageTmp) > 0) { if (!$bFirst) $message .= " "; $message .= $messageTmp; } $bFirst = false; } return array(Str_Replace("#TITLE#", $title, (($count > 1) ? $titleTemplate2 : $titleTemplate1)), $message); } function InitGroupTmp($groupID, $arParams, $bRSS = false) { $title = ""; $message = ""; $arGroup = CSocNetGroup::GetByID($groupID); if ($arGroup) { $pu = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_GROUP"], array("group_id" => $arGroup["ID"])); if (!$bRSS) $title .= "<a href=\"".$pu."\">"; $title .= $arGroup["NAME"]; if (!$bRSS) $title .= "</a>"; if (intval($arGroup["IMAGE_ID"]) <= 0) $arGroup["IMAGE_ID"] = COption::GetOptionInt("socialnetwork", "default_group_picture", false, SITE_ID); $arImage = CSocNetTools::InitImage($arGroup["IMAGE_ID"], 100, "/bitrix/images/socialnetwork/nopic_group_100.gif", 100, $pu, true); $message = $arImage["IMG"]; } return array($title, $message); } function InitGroupsTmp($message, $titleTemplate1, $titleTemplate2, $arParams, $bRSS = false) { $arGroupsID = explode(",", $message); $message = ""; $title = ""; $bFirst = true; $count = 0; foreach ($arGroupsID as $groupID) { list($titleTmp, $messageTmp) = CSocNetLog::InitGroupTmp($groupID, $arParams, $bRSS); if (StrLen($titleTmp) > 0) { if (!$bFirst) $title .= ", "; $title .= $titleTmp; $count++; } if (StrLen($messageTmp) > 0) { if (!$bFirst) $message .= " "; $message .= $messageTmp; } $bFirst = false; } return array(Str_Replace("#TITLE#", $title, (($count > 1) ? $titleTemplate2 : $titleTemplate1)), $message); } function ShowGroup($arEntityDesc, $strEntityURL, $arParams) { return CSocNetLogTools::ShowGroup($arEntityDesc, $strEntityURL, $arParams); } function ShowUser($arEntityDesc, $strEntityURL, $arParams) { return CSocNetLogTools::ShowUser($arEntityDesc, $strEntityURL, $arParams); } static function FormatEvent_FillTooltip($arFields, $arParams) { return CSocNetLogTools::FormatEvent_FillTooltip($arFields, $arParams); } public static function FormatEvent_CreateAvatar($arFields, $arParams, $source = "CREATED_BY_") { return CSocNetLogTools::FormatEvent_CreateAvatar($arFields, $arParams, $source); } static function FormatEvent_IsMessageShort($message, $short_message = false) { return CSocNetLogTools::FormatEvent_IsMessageShort($message, $short_message); } function FormatEvent_BlogPostComment($arFields, $arParams, $bMail = false) { return CSocNetLogTools::FormatEvent_Blog($arFields, $arParams, $bMail); } function FormatEvent_Forum($arFields, $arParams, $bMail = false) { return CSocNetLogTools::FormatEvent_Forum($arFields, $arParams, $bMail); } function FormatEvent_Photo($arFields, $arParams, $bMail = false) { return CSocNetLogTools::FormatEvent_Photo($arFields, $arParams, $bMail); } function FormatEvent_Files($arFields, $arParams, $bMail = false) { return CSocNetLogTools::FormatEvent_Files($arFields, $arParams, $bMail); } function FormatEvent_Task($arFields, $arParams, $bMail = false) { return CSocNetLogTools::FormatEvent_Task($arFields, $arParams, $bMail); } function FormatEvent_SystemGroups($arFields, $arParams, $bMail = false) { return CSocNetLogTools::FormatEvent_SystemGroups($arFields, $arParams, $bMail); } function FormatEvent_SystemFriends($arFields, $arParams, $bMail = false) { return CSocNetLogTools::FormatEvent_SystemFriends($arFields, $arParams, $bMail); } function FormatEvent_System($arFields, $arParams, $bMail = false) { return CSocNetLogTools::FormatEvent_System($arFields, $arParams, $bMail); } function FormatEvent_Microblog($arFields, $arParams, $bMail = false) { return CSocNetLogTools::FormatEvent_Microblog($arFields, $arParams, $bMail); } function SetCacheLastLogID($id) { CSocNetLogTools::SetCacheLastLogID("log", $id); } function GetCacheLastLogID() { return CSocNetLogTools::GetCacheLastLogID("log"); } function SetUserCache($user_id, $max_id, $max_viewed_id, $count) { CSocNetLogTools::SetUserCache("log", $user_id, $max_id, $max_viewed_id, $count); } function GetUserCache($user_id) { return CSocNetLogTools::GetUserCache("log", $user_id); } public static function GetSite($log_id) { global $DB; $strSql = "SELECT L.*, LS.* FROM b_sonet_log_site LS, b_lang L WHERE L.LID=LS.SITE_ID AND LS.LOG_ID=".IntVal($log_id); return $DB->Query($strSql); } function GetSimpleOrQuery($val, $key, $strOperation, $strNegative, $OrFields, &$arFields, &$arFilter) { global $DB; if ($strNegative != "Y") { $arOrFields = explode("|", $OrFields); if (count($arOrFields) > 1) { $strOrFields = ""; foreach($arOrFields as $i => $field) { if ($i > 0) $strOrFields .= " OR "; $strOrFields .= "(".$field." ".$strOperation." '".$DB->ForSql($val)."')"; } return $strOrFields; } else return false; } else return false; } } ?>