12 static $runCache = [];
24 $user_id = intval($user_id);
27 $user_id =
$USER->GetID();
34 'date' => $follow_date,
39 $runCacheKey = md5(serialize($runCacheKey));
40 if (array_key_exists($runCacheKey, $runCache))
44 $runCache[$runCacheKey] =
true;
50 "USER_ID" => $user_id,
54 while($arFollow = $rsFollow->Fetch())
56 $arFollows[$arFollow[
"CODE"]] =
array(
57 "TYPE" => $arFollow[
"TYPE"],
58 "FOLLOW_DATE" => $arFollow[
"FOLLOW_DATE"]
63 array_key_exists(
"**", $arFollows)
64 ? $arFollows[
"**"][
"TYPE"]
65 : COption::GetOptionString(
"socialnetwork",
"follow_default_type",
"Y")
75 if (isset($LOG_CACHE[$log_id]))
77 $arLog = $LOG_CACHE[$log_id];
82 array(
"ID" =>
"DESC"),
83 array(
"ID" => $log_id),
86 array(
"ID",
"LOG_UPDATE",
"LOG_DATE"),
88 "CHECK_RIGHTS" =>
"N",
89 "USE_SUBSCRIBE" =>
"N",
94 if ($arLog = $rsLog->Fetch())
96 $LOG_CACHE[$log_id] = $arLog;
102 $log_date = ($arLog[
"LOG_DATE"] <>
'' ? $arLog[
"LOG_DATE"] :
false);
103 $log_update = ($arLog[
"LOG_UPDATE"] <>
'' ? $arLog[
"LOG_UPDATE"] :
false);
105 if (array_key_exists(
$code, $arFollows))
112 $arFollows[
$code][
"FOLLOW_DATE"] <>
''
113 ? $arFollows[
$code][
"FOLLOW_DATE"]
117 : (
$code ==
"**" ? $log_date :
false)
144 $events = getModuleEvents(
'socialnetwork',
'onAfterLogFollowSet');
145 while ($eventFields = $events->fetch())
147 executeModuleEventEx($eventFields, [ $log_id,
$type, $user_id ]);
156 array_key_exists(
$code, $arFollows)
165 public static function Add($user_id,
$code,
$type, $follow_date =
false, $bByWF =
false)
170 intval($user_id) <= 0
186 $sql =
$connection->getSqlHelper()->getInsertIgnore(
187 'b_sonet_log_follow',
188 ' (USER_ID, CODE, REF_ID, TYPE, FOLLOW_DATE, BY_WF) ',
190 . intval($user_id) .
", '"
194 . ($follow_date ?
$DB->CharToDateFunction($follow_date) :
$DB->CurrentTimeFunction()) .
", "
195 . ($bByWF ?
"'Y'" :
"null") .
")"
201 defined(
"BX_COMP_MANAGED_CACHE")
202 && intval($user_id) > 0
212 public static function Update($user_id,
$code,
$type, $follow_date =
false, $bByWF =
false)
216 if (intval($user_id) <= 0 ||
$code ==
'')
222 $strSQL =
"UPDATE b_sonet_log_follow SET TYPE = '".$DB->forSql(
$type).
"', FOLLOW_DATE = ".($follow_date ?
$DB->CharToDateFunction($follow_date) :
$DB->CurrentTimeFunction()).
", BY_WF = ".($bByWF ?
"'Y'" :
"null").
" WHERE USER_ID = ".intval($user_id).
" AND CODE = '".
$DB->forSql(
$code).
"'";
223 if (
$DB->Query($strSQL))
226 defined(
"BX_COMP_MANAGED_CACHE")
227 && intval($user_id) > 0
246 if (intval($user_id) <= 0 ||
$code ==
'')
249 $strSQL =
"DELETE FROM b_sonet_log_follow WHERE USER_ID = ".$user_id.
" AND CODE = '".
$code.
"'";
252 $strSQL .=
" AND TYPE = '".$type.
"'";
254 if (
$DB->Query($strSQL))
257 defined(
"BX_COMP_MANAGED_CACHE")
258 && intval($user_id) > 0
277 if (intval($log_id) <= 0)
287 $default_follow = COption::GetOptionString(
"socialnetwork",
"follow_default_type",
"Y");
289 if ($default_follow ==
"N")
293 USER_ID FROM b_sonet_log_follow
301 $arUserID[] =
$arRes[
"USER_ID"];
304 if (
count($arUserID) > 0)
306 $strSQL =
"DELETE FROM b_sonet_log_follow
309 AND CODE = 'L".$log_id.
"'
310 AND USER_ID IN (".implode(
", ", $arUserID).
")
315 $strSQL =
"UPDATE b_sonet_log_follow
316 SET FOLLOW_DATE = NULL
319 AND CODE = 'L".$log_id.
"'
321 if (
$DB->Query($strSQL))
334 USER_ID FROM b_sonet_log_follow
341 $arUserID[] =
$arRes[
"USER_ID"];
343 if (
count($arUserID) > 0)
345 $strSQL =
"UPDATE b_sonet_log_follow
346 SET FOLLOW_DATE = NULL
349 AND CODE = 'L".$log_id.
"'
350 AND USER_ID IN (".implode(
", ", $arUserID).
")
355 $strSQL =
"DELETE FROM b_sonet_log_follow
358 AND CODE = 'L".$log_id.
"'";
360 if (
count($arUserID) > 0)
361 $strSQL .=
" AND USER_ID NOT IN (".implode(
", ", $arUserID).
")";
363 if (
$DB->Query($strSQL))
371 $strSQL =
"DELETE FROM b_sonet_log_follow WHERE CODE = 'L".$log_id.
"'";
373 if (
$DB->Query($strSQL))
385 intval($user_id) <= 0
386 || $rating_type_id ==
''
387 || intval($rating_entity_id) <= 0
391 $arPostTypeID =
array(
400 $arCommentTypeID =
array(
403 "BITRIX24_NEW_USER_COMMENT",
404 "INTRANET_NEW_USER_COMMENT",
411 in_array($rating_type_id, $arCommentTypeID)
414 !in_array($rating_type_id, $arCommentTypeID)
415 && !in_array($rating_type_id, $arPostTypeID)
419 $strSQL =
"SELECT TYPE FROM b_sonet_log_follow LFW
420 INNER JOIN b_sonet_log_comment LC ON
421 LC.RATING_TYPE_ID = '".$rating_type_id.
"'
422 AND LC.RATING_ENTITY_ID = ".intval($rating_entity_id).
"
423 AND LFW.REF_ID = LC.LOG_ID
424 AND LFW.CODE = ".
$DB->Concat(
"'L'", (
$DB->type ==
"MSSQL" ?
"CAST(LC.LOG_ID as varchar(17))" :
"LC.LOG_ID")).
"
426 LFW.USER_ID = ".intval($user_id);
436 in_array($rating_type_id, $arPostTypeID)
439 !in_array($rating_type_id, $arCommentTypeID)
440 && !in_array($rating_type_id, $arPostTypeID)
445 $strSQL =
"SELECT TYPE FROM b_sonet_log_follow LFW
446 INNER JOIN b_sonet_log L ON
447 L.RATING_TYPE_ID = '".$rating_type_id.
"'
448 AND L.RATING_ENTITY_ID = ".intval($rating_entity_id).
"
449 AND LFW.REF_ID = L.ID
450 AND LFW.CODE = ".
$DB->Concat(
"'L'", (
$DB->type ==
"MSSQL" ?
"CAST(L.ID as varchar(17))" :
"L.ID")).
"
452 LFW.USER_ID = ".intval($user_id);
468 if (
count($arSelectFields) <= 0)
470 $arSelectFields =
array(
"USER_ID",
"CODE",
"TYPE",
"FOLLOW_DATE",
"BY_WF");
475 "USER_ID" => Array(
"FIELD" =>
"SLF.USER_ID",
"TYPE" =>
"int"),
476 "CODE" => Array(
"FIELD" =>
"SLF.CODE",
"TYPE" =>
"string"),
477 "REF_ID" => Array(
"FIELD" =>
"SLF.REF_ID",
"TYPE" =>
"int"),
478 "TYPE" =>
array(
"FIELD" =>
"SLF.TYPE",
"TYPE" =>
"char"),
479 "FOLLOW_DATE" => Array(
"FIELD" =>
"SLF.FOLLOW_DATE",
"TYPE" =>
"datetime"),
480 "BY_WF" =>
array(
"FIELD" =>
"SLF.BY_WF",
"TYPE" =>
"char"),
486 $arSqls[
"SELECT"] = str_replace(
"%%_DISTINCT_%%",
"", $arSqls[
"SELECT"]);
489 "SELECT ".$arSqls[
"SELECT"].
" ".
490 "FROM b_sonet_log_follow SLF ".
491 " ".$arSqls[
"FROM"].
" ";
492 if ($arSqls[
"WHERE"] <>
'')
493 $strSql .=
"WHERE ".$arSqls[
"WHERE"].
" ";
502 if (intval($user_id) <= 0)
509 $ttl = (defined(
"BX_COMP_MANAGED_CACHE") ? 2592000 : 600);
511 $cache_id =
'sonet_follow_default_'.$user_id;
512 $obCache =
new CPHPCache;
513 $cache_dir =
'/sonet/log_follow/'.$user_id.
'/';
515 if($obCache->InitCache($ttl, $cache_id, $cache_dir))
517 $tmpVal = $obCache->GetVars();
518 $default_follow = $tmpVal[
"VALUE"];
523 $default_follow =
false;
525 if (is_object($obCache))
526 $obCache->StartDataCache($ttl, $cache_id, $cache_dir);
528 if (defined(
"BX_COMP_MANAGED_CACHE"))
536 "USER_ID" => $user_id,
541 if ($arFollow = $rsFollow->Fetch())
543 $default_follow = $arFollow[
"TYPE"];
546 if (is_object($obCache))
548 $arCacheData = Array(
549 "VALUE" => $default_follow
551 $obCache->EndDataCache($arCacheData);
552 if (defined(
"BX_COMP_MANAGED_CACHE"))
560 if (!$default_follow)
562 $default_follow = COption::GetOptionString(
"socialnetwork",
"follow_default_type",
"Y");
565 return $default_follow;
573 is_array($arMessageFields)
574 && intval($arMessageFields[
"TO_USER_ID"]) > 0
575 && intval($arMessageFields[
"LOG_ID"]) > 0
579 'logId' => $arMessageFields[
"LOG_ID"],
580 'userId' => $arMessageFields[
"TO_USER_ID"],
583 'COUNTER_COMMENT_PUSH'
585 'followDate' =>
'CURRENT'
597 (
int)$traffic_cnt > 10
598 && (
int)$traffic_avg < 60*60*4
608 $default_follow = self::GetDefaultValue(
$userId);
609 if ($default_follow ===
'Y')
611 $isAlreadyChecked = CUserOptions::GetOption(
"socialnetwork",
"~log_autofollow_checked",
"N",
$userId);
612 if ($isAlreadyChecked !==
'Y')
614 if (CModule::IncludeModule(
'im'))
617 $arMessageFields2Send =
array(
620 "NOTIFY_MODULE" =>
"socialnetwork",
621 "NOTIFY_EVENT" =>
"sonet_auto_unfollow_btn",
622 "NOTIFY_TAG" =>
"SONET|UNFOLLOW|".
$userId,
624 "NOTIFY_MESSAGE" => fn (?
string $languageId =
null) => \
Bitrix\Main\Localization\Loc::getMessage($locCode,
null, $languageId),
626 "NOTIFY_BUTTONS" => Array(
627 Array(
"TITLE" =>
GetMessage(
"SONET_LF_UNFOLLOW_IM_BUTTON_Y"),
"VALUE" =>
"Y",
"TYPE" =>
"accept"),
628 Array(
"TITLE" =>
GetMessage(
"SONET_LF_UNFOLLOW_IM_BUTTON_N"),
"VALUE" =>
"N",
"TYPE" =>
"cancel"),
632 CIMNotify::Add($arMessageFields2Send);
635 CUserOptions::SetOption(
"socialnetwork",
"~log_autofollow_checked",
"Y",
false,
$userId);
645 if ($module ===
"socialnetwork")
647 $arTag = explode(
"|", $tag);
650 && $arTag[1] ===
'UNFOLLOW'
655 self::Set(
$USER->GetID(),
"**",
"N");
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
static getConnection($name="")
static isModuleInstalled($moduleName)
static userLogSubscribe($params=array())
static OnBeforeConfirmNotify($module, $tag, $value, $arParams)
static GetList($arFilter=Array(), $arSelectFields=array())
static Update($user_id, $code, $type, $follow_date=false, $bByWF=false)
static checkAutoUnfollow($traffic_cnt, $traffic_avg, $userId=false)
static Delete($user_id, $code, $type=false)
static DeleteByLogID($log_id, $type=false, $bUseSmartLogic=false)
static OnBlogPostMentionNotifyIm($ID, $arMessageFields)
static GetDefaultValue($user_id)
static GetExactValueByRating($user_id, $rating_type_id, $rating_entity_id)
static Set($user_id, $code="**", $type="Y", $follow_date=false, $site_id=SITE_ID, $bByWF=false)
static Add($user_id, $code, $type, $follow_date=false, $bByWF=false)
static GetList($arOrder=Array("ID"=> "DESC"), $arFilter=Array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array(), $arParams=array())
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
GetMessage($name, $aReplace=null)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"