91 public static function Set($userID,
$code, $value =
false): bool
95 if (!CSocNetGroup::__ValidateID($userID))
100 $userID = intval($userID);
111 $value = ($value ==
"Y" ?
"Y" :
"N");
113 $rsSubscription = CSocNetSubscription::GetList(
116 "USER_ID" => $userID,
123 if ($arSubscription = $rsSubscription->Fetch())
127 $result = CSocNetSubscription::delete($arSubscription[
"ID"]);
135 "USER_ID" => $userID,
149 'group_id' => $groupId
151 if (!empty($chatData[$groupId]) && intval($chatData[$groupId]) > 0)
153 $chatId = $chatData[$groupId];
158 $CIMChat =
new CIMChat($userID);
159 $CIMChat->muteNotify($chatId, ($value !=
"Y"));
163 if(defined(
"BX_COMP_MANAGED_CACHE"))
173 $arUserIDSent =
array();
175 if (!CModule::IncludeModule(
"im"))
177 return $arUserIDSent;
180 if (!is_array(
$arFields[
"GROUP_ID"] ??
null))
187 return $arUserIDSent;
195 if (intval(
$arFields[
"LOG_ID"] ??
null) > 0)
197 $rsUnFollower = CSocNetLogFollow::GetList(
199 "CODE" =>
"L".intval(
$arFields[
"LOG_ID"]),
205 while ($arUnFollower = $rsUnFollower->Fetch())
207 $arFields[
"EXCLUDE_USERS"][] = $arUnFollower[
"USER_ID"];
217 && !empty(
$arFields[
'PERMISSION'][
'FEATURE'])
218 && !empty(
$arFields[
'PERMISSION'][
'OPERATION'])
232 if (!empty($chatData))
234 $arFields[
"GROUP_ID"] = array_diff(
$arFields[
"GROUP_ID"], array_unique(array_keys($chatData)));
236 $tmp = CSocNetLogTools::processPath(
243 $chatUrl =
$tmp[
"URLS"][
"URL"];
245 $chatMessageFields =
array(
246 "MESSAGE" => str_replace(
247 array(
"#URL#",
"#url#"),
253 if (intval(
$arFields[
"FROM_USER_ID"]) > 0)
255 $chatMessageFields[
"FROM_USER_ID"] = intval(
$arFields[
"FROM_USER_ID"]);
258 foreach($chatData as $groupId => $chatId)
262 isset($roleList[$groupId])
269 CIMChat::addMessage(array_merge(
270 $chatMessageFields,
array(
271 "TO_CHAT_ID" => $chatId
280 return $arUserIDSent;
283 $arMessageFields =
array(
286 "NOTIFY_MODULE" =>
"socialnetwork",
287 "NOTIFY_EVENT" =>
"sonet_group_event",
291 if (intval(
$arFields[
"FROM_USER_ID"] ??
null) > 0)
293 $arMessageFields[
"FROM_USER_ID"] =
$arFields[
"FROM_USER_ID"];
298 $arMessageFields[
"NOTIFY_TAG"] =
$arFields[
"NOTIFY_TAG"];
299 CIMNotify::DeleteByTag(
306 $arMessageFields[
"NOTIFY_TAG"] =
"SONET|EVENT|".intval(
$arFields[
"LOG_ID"]);
309 $arUserToSend =
array();
310 $arUserIDToSend =
array();
311 $arGroupID =
array();
314 foreach (
$arFields[
"GROUP_ID"] as $group_id)
319 $rsSubscriber = CSocNetSubscription::GetList(
326 array(
"USER_ID",
"CODE")
329 while($arSubscriber = $rsSubscriber->Fetch())
332 !in_array($arSubscriber[
"USER_ID"],
$arFields[
"EXCLUDE_USERS"])
333 && !in_array($arSubscriber[
"USER_ID"], $arUserIDToSend)
336 if (preg_match(
'/^SG(\d+)$/', $arSubscriber[
"CODE"],
$matches))
338 $arUserToSend[] =
array(
339 "USER_ID" => $arSubscriber[
"USER_ID"],
342 $arUserIDToSend[] = $arSubscriber[
"USER_ID"];
350 $rsGroup = CSocNetGroup::GetList(
352 array(
"ID" => $arGroupID),
355 array(
"ID",
"NAME",
"OWNER_ID")
358 while($arGroup = $rsGroup->GetNext())
360 if (!empty($arGroup[
'NAME']))
362 $arGroup[
'NAME'] = Emoji::decode($arGroup[
'NAME']);
367 $workgroupsPage = COption::GetOptionString(
"socialnetwork",
"workgroups_page",
"/workgroups/",
SITE_ID);
369 $groupUrlTemplate =
"#GROUPS_PATH#".mb_substr($groupUrlTemplate, mb_strlen($workgroupsPage), mb_strlen($groupUrlTemplate) - mb_strlen($workgroupsPage));
371 $canViewUserIdList =
array();
373 foreach($arUserToSend as $arUser)
375 $groupId = $arUser[
'GROUP_ID'];
377 if (isset($roleList[$groupId]))
379 if (!isset($canViewUserIdList[$groupId]))
381 $canViewUserIdList[$groupId] =
array();
384 '=GROUP_ID' => $groupId,
385 '<=ROLE' => $roleList[$groupId]
387 'select' =>
array(
'USER_ID')
389 while($relation =
$res->fetch())
391 $canViewUserIdList[$groupId][] = $relation[
'USER_ID'];
395 if (!in_array($arUser[
"USER_ID"], $canViewUserIdList[$groupId]))
401 $arMessageFields[
"TO_USER_ID"] = $arUser[
"USER_ID"];
402 if (intval(
$arFields[
"LOG_ID"] ??
null) > 0)
404 $arMessageFields[
"NOTIFY_SUB_TAG"] =
"SONET|EVENT|".intval(
$arFields[
"LOG_ID"]).
"|".intval($arUser[
"USER_ID"]);
410 "GROUP_URL" => str_replace(
array(
"#group_id#",
"#GROUP_ID#"), $arUser[
"GROUP_ID"], $groupUrlTemplate)
418 mb_strpos(
$url,
"http://") === 0
419 || mb_strpos(
$url,
"https://") === 0
424 $groupUrl = $serverName.$arTmp[
"URLS"][
"GROUP_URL"];
426 $group_name = (array_key_exists($arUser[
"GROUP_ID"],
$arGroups) ?
$arGroups[$arUser[
"GROUP_ID"]][
"NAME"] :
"");
429 $messageOut =
$arFields[
"MESSAGE_OUT"] ??
'';
431 $arMessageFields[
"NOTIFY_MESSAGE"] = fn (?
string $languageId =
null) => str_replace(
432 array(
"#URL#",
"#url#",
"#group_name#",
"#GROUP_ID#",
"#group_id#"),
433 array(
$url,
$url,
"<a href=\"".$groupUrl.
"\" class=\"bx-notifier-item-action\">".$group_name.
"</a>", $arUser[
"GROUP_ID"], $arUser[
"GROUP_ID"]),
436 $arMessageFields[
"NOTIFY_MESSAGE_OUT"] = fn (?
string $languageId =
null) => str_replace(
437 array(
"#URL#",
"#url#",
"#group_name#"),
438 array($serverName.$url, $serverName.$url, $group_name),
439 is_callable($messageOut) ? $messageOut($languageId) : $messageOut
442 $arMessageFields[
"PUSH_PARAMS"] =
array(
443 "ACTION" =>
"sonet_group_event",
444 "TAG" => $arMessageFields[
"NOTIFY_TAG"]
447 if ((
int)(
$arFields[
"FROM_USER_ID"] ??
null) > 0)
449 $dbAuthor = CUser::getByID(
$arFields[
"FROM_USER_ID"]);
450 if($arAuthor = $dbAuthor->fetch())
452 if (!empty($arAuthor[
"PERSONAL_PHOTO"]))
454 $imageResized = CFile::resizeImageGet(
455 $arAuthor[
"PERSONAL_PHOTO"],
468 $authorName = CUser::formatName(CSite::getNameFormat(), $arAuthor,
true);
472 if (empty($authorName))
474 $authorName = Loc::getMessage(
"SONET_SS_PUSH_USER");
477 $arMessageFields[
"PUSH_PARAMS"][
"ADVANCED_PARAMS"] =
array(
478 'senderName' => $authorName
481 if (!empty($authorAvatarUrl))
483 $arMessageFields[
"PUSH_PARAMS"][
"ADVANCED_PARAMS"][
"avatarUrl"] = $authorAvatarUrl;
486 $arMessageFields[
"PUSH_MESSAGE"] = fn (?
string $languageId =
null) => str_replace(
487 array(
"[URL=#URL#]",
"[URL=#url#]",
"[/URL]",
"#group_name#",
"#GROUP_ID#",
"#group_id#"),
488 array(
'',
'',
'', $group_name, $arUser[
"GROUP_ID"], $arUser[
"GROUP_ID"]),
492 $arMessageFields2Send = $arMessageFields;
494 !
is_set($arMessageFields2Send[
"FROM_USER_ID"])
495 || (
int)$arMessageFields2Send[
"FROM_USER_ID"] <= 0
499 $arMessageFields2Send[
"FROM_USER_ID"] = 0;
502 CIMNotify::Add($arMessageFields2Send);
504 $arUserIDSent[] = $arUser[
"USER_ID"];
507 return $arUserIDSent;
514 $userID = intval($userID);
527 $cache_time = 31536000;
528 $cache_id =
"entity_".$code;
529 $cache_path =
"/sonet/subscription/";
531 if ($cache->InitCache($cache_time, $cache_id, $cache_path))
533 $arCacheVars = $cache->GetVars();
534 $arSubscriberID = $arCacheVars[
"arSubscriberID"];
538 $cache->StartDataCache($cache_time, $cache_id, $cache_path);
539 $arSubscriberID =
array();
541 $rsSubscription = CSocNetSubscription::GetList(
546 while ($arSubscription = $rsSubscription->Fetch())
547 $arSubscriberID[] = $arSubscription[
"USER_ID"];
549 if (defined(
"BX_COMP_MANAGED_CACHE"))
556 $arCacheData = Array(
557 "arSubscriberID" => $arSubscriberID
559 $cache->EndDataCache($arCacheData);
561 if(defined(
"BX_COMP_MANAGED_CACHE"))
567 return (in_array($userID, $arSubscriberID));