%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/socialnetwork/classes/general/ |
| Current File : //home/bitrix/www/bitrix/modules/socialnetwork/classes/general/user_group.php |
<?
IncludeModuleLangFile(__FILE__);
use Bitrix\Socialnetwork\UserToGroupTable;
use Bitrix\Socialnetwork\Item\UserToGroup;
use Bitrix\Socialnetwork\Item\Workgroup;
use Bitrix\Socialnetwork\Integration;
use Bitrix\Main\Localization\Loc;
class CAllSocNetUserToGroup
{
protected static $roleCache = array();
/***************************************/
/******** DATA MODIFICATION **********/
/***************************************/
function CheckFields($ACTION, &$arFields, $ID = 0)
{
global $APPLICATION, $DB, $arSocNetAllowedRolesForUserInGroup, $arSocNetAllowedInitiatedByType;
if ($ACTION != "ADD" && IntVal($ID) <= 0)
{
$APPLICATION->ThrowException("System error 870164", "ERROR");
return false;
}
if ((is_set($arFields, "USER_ID") || $ACTION=="ADD") && IntVal($arFields["USER_ID"]) <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UG_EMPTY_USER_ID"), "EMPTY_USER_ID");
return false;
}
elseif (is_set($arFields, "USER_ID"))
{
$dbResult = CUser::GetByID($arFields["USER_ID"]);
if (!$dbResult->Fetch())
{
$APPLICATION->ThrowException(GetMessage("SONET_UG_ERROR_NO_USER_ID"), "ERROR_NO_USER_ID");
return false;
}
}
if ((is_set($arFields, "GROUP_ID") || $ACTION=="ADD") && IntVal($arFields["GROUP_ID"]) <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UG_EMPTY_GROUP_ID"), "EMPTY_GROUP_ID");
return false;
}
elseif (is_set($arFields, "GROUP_ID"))
{
$arResult = CSocNetGroup::GetByID($arFields["GROUP_ID"]);
if ($arResult == false)
{
$APPLICATION->ThrowException(GetMessage("SONET_UG_ERROR_NO_GROUP_ID"), "ERROR_NO_GROUP_ID");
return false;
}
}
if ((is_set($arFields, "ROLE") || $ACTION=="ADD") && strlen($arFields["ROLE"]) <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UG_EMPTY_ROLE"), "EMPTY_ROLE");
return false;
}
elseif (is_set($arFields, "ROLE") && !in_array($arFields["ROLE"], $arSocNetAllowedRolesForUserInGroup))
{
$APPLICATION->ThrowException(str_replace("#ID#", $arFields["ROLE"], GetMessage("SONET_UG_ERROR_NO_ROLE")), "ERROR_NO_ROLE");
return false;
}
if ((is_set($arFields, "INITIATED_BY_TYPE") || $ACTION=="ADD") && strlen($arFields["INITIATED_BY_TYPE"]) <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UG_EMPTY_INITIATED_BY_TYPE"), "EMPTY_INITIATED_BY_TYPE");
return false;
}
elseif (is_set($arFields, "INITIATED_BY_TYPE") && !in_array($arFields["INITIATED_BY_TYPE"], $arSocNetAllowedInitiatedByType))
{
$APPLICATION->ThrowException(str_replace("#ID#", $arFields["INITIATED_BY_TYPE"], GetMessage("SONET_UG_ERROR_NO_INITIATED_BY_TYPE")), "ERROR_NO_INITIATED_BY_TYPE");
return false;
}
if ((is_set($arFields, "INITIATED_BY_USER_ID") || $ACTION=="ADD") && IntVal($arFields["INITIATED_BY_USER_ID"]) <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UG_EMPTY_INITIATED_BY_USER_ID"), "EMPTY_INITIATED_BY_USER_ID");
return false;
}
elseif (is_set($arFields, "INITIATED_BY_USER_ID"))
{
$dbResult = CUser::GetByID($arFields["INITIATED_BY_USER_ID"]);
if (!$dbResult->Fetch())
{
$APPLICATION->ThrowException(GetMessage("SONET_UG_ERROR_NO_INITIATED_BY_USER_ID"), "ERROR_NO_INITIATED_BY_USER_ID");
return false;
}
}
if (is_set($arFields, "DATE_CREATE") && (!$DB->IsDate($arFields["DATE_CREATE"], false, LANG, "FULL")))
{
$APPLICATION->ThrowException(GetMessage("SONET_UG_EMPTY_DATE_CREATE"), "EMPTY_DATE_CREATE");
return false;
}
if (is_set($arFields, "DATE_UPDATE") && (!$DB->IsDate($arFields["DATE_UPDATE"], false, LANG, "FULL")))
{
$APPLICATION->ThrowException(GetMessage("SONET_UG_EMPTY_DATE_UPDATE"), "EMPTY_DATE_UPDATE");
return false;
}
if (is_set($arFields, "DATE_LAST_VIEW") && (!$DB->IsDate($arFields["DATE_LAST_VIEW"], false, LANG, "FULL")))
{
$APPLICATION->ThrowException(GetMessage("SONET_UG_EMPTY_DATE_LAST_VIEW"), "EMPTY_DATE_LAST_VIEW");
return false;
}
if ((is_set($arFields, "SEND_MAIL") && $arFields["SEND_MAIL"] != "N") || !is_set($arFields, "SEND_MAIL"))
$arFields["SEND_MAIL"] = "Y";
return True;
}
public static function Delete($ID, $bSendExclude = false)
{
global $APPLICATION, $DB, $USER, $CACHE_MANAGER;
if (!CSocNetGroup::__ValidateID($ID))
return false;
$ID = IntVal($ID);
$arUser2Group = CSocNetUserToGroup::GetByID($ID);
if (!$arUser2Group)
{
$APPLICATION->ThrowException(GetMessage("SONET_NO_USER2GROUP"), "ERROR_NO_USER2GROUP");
return false;
}
$db_events = GetModuleEvents("socialnetwork", "OnBeforeSocNetUserToGroupDelete");
while ($arEvent = $db_events->Fetch())
{
if (ExecuteModuleEventEx($arEvent, array($ID)) === false)
{
return false;
}
}
$events = GetModuleEvents("socialnetwork", "OnSocNetUserToGroupDelete");
while ($arEvent = $events->Fetch())
{
ExecuteModuleEventEx($arEvent, array($ID, $arUser2Group));
}
if (CModule::IncludeModule("im"))
{
CIMNotify::DeleteByTag("SOCNET|INVITE_GROUP|".intval($arUser2Group['USER_ID'])."|".intval($ID));
}
$bSuccess = $DB->Query("DELETE FROM b_sonet_user2group WHERE ID = ".$ID."", true);
CSocNetGroup::SetStat($arUser2Group["GROUP_ID"]);
CSocNetSearch::OnUserRelationsChange($arUser2Group["USER_ID"]);
if (array_key_exists($arUser2Group["USER_ID"]."_".$arUser2Group["GROUP_ID"], self::$roleCache))
{
unset(self::$roleCache[$arUser2Group["USER_ID"]."_".$arUser2Group["GROUP_ID"]]);
}
if($bSuccess && defined("BX_COMP_MANAGED_CACHE"))
{
$CACHE_MANAGER->ClearByTag("sonet_user2group_G".$arUser2Group["GROUP_ID"]);
$CACHE_MANAGER->ClearByTag("sonet_user2group_U".$arUser2Group["USER_ID"]);
$CACHE_MANAGER->ClearByTag("sonet_user2group");
}
if (
$bSuccess
&& in_array($arUser2Group["ROLE"], array(SONET_ROLES_MODERATOR, SONET_ROLES_USER))
)
{
$chatNotificationResult = false;
if (CModule::IncludeModule("im"))
{
$chatNotificationResult = UserToGroup::addInfoToChat(array(
'group_id' => $arUser2Group["GROUP_ID"],
'user_id' => $arUser2Group["USER_ID"],
'action' => UserToGroup::CHAT_ACTION_OUT,
'sendMessage' => $bSendExclude
));
if ($bSendExclude)
{
$arMessageFields = array(
"TO_USER_ID" => $arUser2Group["USER_ID"],
"FROM_USER_ID" => 0,
"NOTIFY_TYPE" => IM_NOTIFY_SYSTEM,
"NOTIFY_MODULE" => "socialnetwork",
"NOTIFY_EVENT" => "invite_group",
"NOTIFY_TAG" => "SOCNET|INVITE_GROUP|".intval($arUser2Group["USER_ID"])."|".intval($arUser2Group["ID"]),
"NOTIFY_MESSAGE" => str_replace(array("#NAME#"), array($arUser2Group["GROUP_NAME"]), GetMessage("SONET_UG_EXCLUDE_MESSAGE"))
);
CIMNotify::Add($arMessageFields);
}
}
if (
$bSendExclude
&& !$chatNotificationResult
)
{
CSocNetUserToGroup::notifyImToModerators(array(
"TYPE" => "exclude",
"RELATION_ID" => $arUser2Group["ID"],
"USER_ID" => $arUser2Group["USER_ID"],
"GROUP_ID" => $arUser2Group["GROUP_ID"],
"GROUP_NAME" => $arUser2Group["GROUP_NAME"],
"EXCLUDE_USERS" => array($USER->GetID())
));
}
}
return $bSuccess;
}
public static function DeleteNoDemand($userID)
{
global $DB;
if (!CSocNetGroup::__ValidateID($userID))
return false;
$userID = IntVal($userID);
$bSuccess = True;
$arGroups = array();
$dbResult = CSocNetUserToGroup::GetList(array(), array("USER_ID" => $userID), false, false, array("GROUP_ID"));
while ($arResult = $dbResult->Fetch())
$arGroups[] = $arResult["GROUP_ID"];
$DB->Query("DELETE FROM b_sonet_user2group WHERE USER_ID = ".$userID."", true);
$tmp_count = count($arGroups);
for ($i = 0; $i < $tmp_count; $i++)
CSocNetGroup::SetStat($arGroups[$i]);
self::$roleCache = array();
CSocNetUserToGroup::__SpeedFileDelete($userID);
CSocNetSearch::OnUserRelationsChange($userID);
return $bSuccess;
}
/***************************************/
/********** DATA SELECTION ***********/
/***************************************/
public static function GetByID($ID)
{
if (!CSocNetGroup::__ValidateID($ID))
return false;
$ID = IntVal($ID);
$dbResult = CSocNetUserToGroup::GetList(
Array(),
Array("ID" => $ID),
false,
false,
Array("ID", "USER_ID", "GROUP_ID", "GROUP_VISIBLE", "GROUP_NAME", "ROLE", "DATE_CREATE", "DATE_UPDATE", "INITIATED_BY_TYPE", "INITIATED_BY_USER_ID", "MESSAGE")
);
if ($arResult = $dbResult->GetNext())
return $arResult;
return False;
}
/***************************************/
/********** COMMON METHODS ***********/
/***************************************/
public static function GetUserRole($userID, $groupID, $bExtendedReturn = false)
{
$userID = IntVal($userID);
if ($userID <= 0)
{
return false;
}
// compatibility?
if (array_key_exists("arSocNetUserInRoleCache", $_REQUEST))
{
self::$roleCache = array();
}
if (is_array($groupID))
{
$arReturn = false;
$arGroupToGet = array();
foreach($groupID as $TmpGroupID)
{
if (!array_key_exists($userID."_".$TmpGroupID, self::$roleCache))
{
$arGroupToGet[] = $TmpGroupID;
}
}
if (count($arGroupToGet) > 0)
{
$dbResult = CSocNetUserToGroup::GetList(
array(),
array("USER_ID" => $userID, "GROUP_ID" => $arGroupToGet),
false,
false,
array("GROUP_ID", "ROLE", "AUTO_MEMBER")
);
$arRolesFromDB = array();
while ($arResult = $dbResult->Fetch())
{
$arRolesFromDB[$arResult["GROUP_ID"]] = array(
"ROLE" => $arResult["ROLE"],
"AUTO_MEMBER" => $arResult["AUTO_MEMBER"]
);
}
foreach($arGroupToGet as $TmpGroupID)
{
self::$roleCache[$userID."_".$TmpGroupID] = (
array_key_exists($TmpGroupID, $arRolesFromDB)
? array(
"ROLE" => $arRolesFromDB[$TmpGroupID]["ROLE"],
"AUTO_MEMBER" => $arRolesFromDB[$TmpGroupID]["AUTO_MEMBER"]
)
: array(
"ROLE" => false,
"AUTO_MEMBER" => "N"
)
);
}
}
foreach($groupID as $TmpGroupID)
{
if ($arReturn === false)
{
$arReturn = array();
}
$arReturn[$TmpGroupID] = (
$bExtendedReturn
? self::$roleCache[$userID."_".$TmpGroupID]
: self::$roleCache[$userID."_".$TmpGroupID]["ROLE"]
);
}
return $arReturn;
}
else
{
$groupID = IntVal($groupID);
if ($groupID <= 0)
{
return false;
}
if (!array_key_exists($userID."_".$groupID, self::$roleCache))
{
$dbResult = CSocNetUserToGroup::GetList(
array(),
array("USER_ID" => $userID, "GROUP_ID" => $groupID),
false,
false,
array("ROLE", "AUTO_MEMBER")
);
if ($arResult = $dbResult->Fetch())
{
self::$roleCache[$userID."_".$groupID] = array(
"ROLE" => $arResult["ROLE"],
"AUTO_MEMBER" => $arResult["AUTO_MEMBER"]
);
}
else
{
self::$roleCache[$userID."_".$groupID] = array(
"ROLE" => false,
"AUTO_MEMBER" => false
);
}
}
return (
$bExtendedReturn
? self::$roleCache[$userID."_".$groupID]
: self::$roleCache[$userID."_".$groupID]["ROLE"]
);
}
}
/***************************************/
/********** SEND EVENTS **************/
/***************************************/
function SendEvent($userGroupID, $mailTemplate = "SONET_INVITE_GROUP")
{
$userGroupID = IntVal($userGroupID);
if ($userGroupID <= 0)
return false;
$dbRelation = CSocNetUserToGroup::GetList(
array(),
array("ID" => $userGroupID),
false,
false,
array("ID", "USER_ID", "GROUP_ID", "ROLE", "DATE_CREATE", "MESSAGE", "INITIATED_BY_TYPE", "INITIATED_BY_USER_ID", "GROUP_NAME", "USER_NAME", "USER_LAST_NAME", "USER_EMAIL", "USER_LID")
);
$arRelation = $dbRelation->Fetch();
if (!$arRelation)
return false;
$arUserGroup = array();
if (CModule::IncludeModule("extranet"))
$arUserGroup = CUser::GetUserGroup($arRelation["USER_ID"]);
$bExtranetInstalled = IsModuleInstalled("extranet");
$siteID = false;
$rsGroupSite = CSocNetGroup::GetSite($arRelation["GROUP_ID"]);
while ($arGroupSite = $rsGroupSite->Fetch())
{
if ($bExtranetInstalled)
{
if (
(
CExtranet::IsExtranetSite($arGroupSite["LID"])
&& in_array(CExtranet::GetExtranetUserGroupID(), $arUserGroup)
)
||
(
!CExtranet::IsExtranetSite($arGroupSite["LID"])
&& !in_array(CExtranet::GetExtranetUserGroupID(), $arUserGroup)
)
)
{
$siteID = $arGroupSite["LID"];
break;
}
else
continue;
}
else
{
$siteID = $arGroupSite["LID"];
break;
}
}
if ($siteID == false || StrLen($siteID) <= 0)
return false;
$requestsPagePath = str_replace("#USER_ID#", $arRelation["USER_ID"], COption::GetOptionString("socialnetwork", "user_request_page",
(IsModuleInstalled("intranet")) ? "/company/personal/user/#USER_ID#/requests/" : "/club/user/#USER_ID#/requests/", $siteID));
$arUserInitiatedForEmail = array("NAME"=>"", "LAST_NAME"=>"");
if (intval($arRelation["INITIATED_BY_USER_ID"]) > 0):
$dbUserInitiated = CUser::GetList(
($by="id"),
($order="desc"),
array("ID" => $arRelation["INITIATED_BY_USER_ID"])
);
if ($arUserInitiated = $dbUserInitiated->Fetch())
$arUserInitiatedForEmail = array("NAME"=>$arUserInitiated["NAME"], "LAST_NAME"=>$arUserInitiated["LAST_NAME"]);
endif;
$arFields = array(
"RELATION_ID" => $userGroupID,
"URL" => $requestsPagePath,
"GROUP_ID" => $arRelation["GROUP_ID"],
"USER_ID" => $arRelation["USER_ID"],
"GROUP_NAME" => $arRelation["GROUP_NAME"],
"USER_NAME" => $arRelation["USER_NAME"],
"USER_LAST_NAME" => $arRelation["USER_LAST_NAME"],
"USER_EMAIL" => $arRelation["USER_EMAIL"],
"INITIATED_USER_NAME" => $arUserInitiatedForEmail["NAME"],
"INITIATED_USER_LAST_NAME" => $arUserInitiatedForEmail["LAST_NAME"],
"MESSAGE" => $arRelation["MESSAGE"]
);
$event = new CEvent;
$event->Send($mailTemplate, $siteID, $arFields, "N");
return true;
}
/***************************************/
/************ ACTIONS ****************/
/***************************************/
public static function SendRequestToBeMember($userID, $groupID, $message, $RequestConfirmUrl = "", $bAutoSubscribe = true)
{
global $APPLICATION, $DB;
$userID = IntVal($userID);
if ($userID <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UR_EMPTY_USERID"), "ERROR_USERID");
return false;
}
$groupID = IntVal($groupID);
if ($groupID <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UR_EMPTY_GROUPID"), "ERROR_GROUPID");
return false;
}
$arGroup = CSocNetGroup::GetByID($groupID);
if (!$arGroup || !is_array($arGroup) || $arGroup["ACTIVE"] != "Y"/* || $arGroup["VISIBLE"] != "Y"*/)
{
$APPLICATION->ThrowException(GetMessage("SONET_UG_ERROR_NO_GROUP_ID"), "ERROR_NO_GROUP");
return false;
}
$arFields = array(
"USER_ID" => $userID,
"GROUP_ID" => $groupID,
"ROLE" => SONET_ROLES_REQUEST,
"=DATE_CREATE" => $DB->CurrentTimeFunction(),
"=DATE_UPDATE" => $DB->CurrentTimeFunction(),
"MESSAGE" => $message,
"INITIATED_BY_TYPE" => SONET_INITIATED_BY_USER,
"INITIATED_BY_USER_ID" => $userID
);
if ($arGroup["OPENED"] == "Y")
{
$arFields["ROLE"] = SONET_ROLES_USER;
}
$ID = CSocNetUserToGroup::Add($arFields);
if (!$ID)
{
$errorMessage = "";
if ($e = $APPLICATION->GetException())
{
$errorMessage = $e->GetString();
}
if (StrLen($errorMessage) <= 0)
{
$errorMessage = GetMessage("SONET_UR_ERROR_CREATE_USER2GROUP");
}
$APPLICATION->ThrowException($errorMessage, "ERROR_CREATE_USER2GROUP");
return false;
}
if ($arGroup["OPENED"] == "Y")
{
if ($bAutoSubscribe)
{
CSocNetLogEvents::AutoSubscribe($userID, SONET_ENTITY_GROUP, $groupID);
}
if (IsModuleInstalled("im"))
{
$chatNotificationResult = UserToGroup::addInfoToChat(array(
'group_id' => $groupID,
'user_id' => $userID,
'action' => UserToGroup::CHAT_ACTION_IN
));
if (!$chatNotificationResult)
{
CSocNetUserToGroup::notifyImToModerators(array(
"TYPE" => "join",
"RELATION_ID" => $ID,
"USER_ID" => $userID,
"GROUP_ID" => $groupID,
"GROUP_NAME" => $arGroup["NAME"],
));
}
}
}
elseif (
strlen(trim($RequestConfirmUrl)) > 0
&& CModule::IncludeModule("im")
)
{
static $serverName;
if (!$serverName)
{
$dbSite = CSite::GetByID(SITE_ID);
$arSite = $dbSite->Fetch();
$serverName = htmlspecialcharsEx($arSite["SERVER_NAME"]);
if (strlen($serverName) <= 0)
{
if (defined("SITE_SERVER_NAME") && strlen(SITE_SERVER_NAME) > 0)
{
$serverName = SITE_SERVER_NAME;
}
else
{
$serverName = COption::GetOptionString("main", "server_name", "");
}
if (strlen($serverName) <=0)
{
$serverName = $_SERVER["SERVER_NAME"];
}
}
$serverName = (CMain::IsHTTPS() ? "https" : "http")."://".$serverName;
}
// send sonet system messages to owner and (may be) moderators to accept or refuse request
$FilterRole = ($arGroup["INITIATE_PERMS"] == SONET_ROLES_OWNER ? SONET_ROLES_OWNER : SONET_ROLES_MODERATOR);
$dbRequests = CSocNetUserToGroup::GetList(
array("USER_ID" => "ASC"),
array(
"GROUP_ID" => $groupID,
"<=ROLE" => $FilterRole,
"USER_ACTIVE" => "Y"
),
false,
false,
array("ID", "USER_ID", "USER_NAME", "USER_LAST_NAME", "USER_EMAIL")
);
if ($dbRequests)
{
$groupSiteId = CSocNetGroup::GetDefaultSiteId($groupID, $arGroup["SITE_ID"]);
$workgroupsPage = COption::GetOptionString("socialnetwork", "workgroups_page", "/workgroups/", SITE_ID);
$groupUrlTemplate = COption::GetOptionString("socialnetwork", "group_path_template", "/workgroups/group/#group_id#/", SITE_ID);
$groupUrlTemplate = "#GROUPS_PATH#".substr($groupUrlTemplate, strlen($workgroupsPage), strlen($groupUrlTemplate)-strlen($workgroupsPage));
$groupUrl = str_replace(array("#group_id#", "#GROUP_ID#"), $groupID, $groupUrlTemplate);
while ($arRequests = $dbRequests->GetNext())
{
$arTmp = CSocNetLogTools::ProcessPath(
array(
"GROUP_URL" => $groupUrl
),
$arRequests["USER_ID"],
$groupSiteId
);
$groupUrl = $arTmp["URLS"]["GROUP_URL"];
$domainName = (
strpos($groupUrl, "http://") === 0
|| strpos($groupUrl, "https://") === 0
? ""
: (
isset($arTmp["DOMAIN"])
&& !empty($arTmp["DOMAIN"])
? "//".$arTmp["DOMAIN"]
: ""
)
);
$arMessageFields = array(
"TO_USER_ID" => $arRequests["USER_ID"],
"FROM_USER_ID" => $userID,
"NOTIFY_TYPE" => IM_NOTIFY_CONFIRM,
"NOTIFY_MODULE" => "socialnetwork",
"NOTIFY_EVENT" => "invite_group_btn",
"NOTIFY_TAG" => "SOCNET|REQUEST_GROUP|".intval($userID)."|".$groupID."|".intval($ID)."|".$arRequests["USER_ID"],
"NOTIFY_SUB_TAG" => "SOCNET|REQUEST_GROUP|".intval($userID)."|".$groupID."|".intval($ID),
"NOTIFY_TITLE" => str_replace(
"#GROUP_NAME#",
$arGroup["NAME"],
GetMessage("SONET_UG_REQUEST_CONFIRM_TEXT_EMPTY")
),
"NOTIFY_MESSAGE" => str_replace(
array(
"#TEXT#",
"#GROUP_NAME#"
),
array(
$message,
"<a href=\"".$domainName.$groupUrl."\" class=\"bx-notifier-item-action\">".$arGroup["NAME"]."</a>"
),
(empty($message)
? GetMessage("SONET_UG_REQUEST_CONFIRM_TEXT_EMPTY")
: GetMessage("SONET_UG_REQUEST_CONFIRM_TEXT")
)
),
"NOTIFY_BUTTONS" => Array(
Array("TITLE" => GetMessage("SONET_UG_REQUEST_CONFIRM"), "VALUE" => "Y", "TYPE" => "accept"),
Array("TITLE" => GetMessage("SONET_UG_REQUEST_REJECT"), "VALUE" => "N", "TYPE" => "cancel"),
),
);
$groupUrl = $serverName.str_replace("#group_id#", $groupID, COption::GetOptionString("socialnetwork", "group_path_template", "/workgroups/group/#group_id#/", SITE_ID));
$arMessageFields["NOTIFY_MESSAGE_OUT"] = $arMessageFields["NOTIFY_MESSAGE"];
$arMessageFields["NOTIFY_MESSAGE_OUT"] .= "\n\n".GetMessage("SONET_UG_GROUP_LINK").$groupUrl;
$arMessageFields['NOTIFY_MESSAGE_OUT'] .= "\n\n".GetMessage("SONET_UG_REQUEST_CONFIRM_REJECT").": ".$RequestConfirmUrl;
CIMNotify::Add($arMessageFields);
}
}
}
return true;
}
public static function SendRequestToJoinGroup($senderID, $userID, $groupID, $message, $bMail = true)
{
global $APPLICATION, $DB, $USER;
$senderID = IntVal($senderID);
if ($senderID <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UR_EMPTY_USERID"), "ERROR_SENDERID");
return false;
}
$userID = IntVal($userID);
if ($userID <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UR_EMPTY_USERID"), "ERROR_USERID");
return false;
}
$groupID = IntVal($groupID);
if ($groupID <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UR_EMPTY_GROUPID"), "ERROR_GROUPID");
return false;
}
$arGroup = CSocNetGroup::GetByID($groupID);
if (!$arGroup || !is_array($arGroup))
{
$APPLICATION->ThrowException(GetMessage("SONET_UG_ERROR_NO_GROUP_ID"), "ERROR_NO_GROUP");
return false;
}
$arGroupSites = array();
$rsGroupSite = CSocNetGroup::GetSite($groupID);
while ($arGroupSite = $rsGroupSite->Fetch())
{
$arGroupSites[] = $arGroupSite["LID"];
}
$userRole = CSocNetUserToGroup::GetUserRole($senderID, $groupID);
$bUserIsMember = ($userRole && in_array($userRole, UserToGroupTable::getRolesMember()));
$bCanInitiate = (
$USER->IsAdmin()
|| CSocNetUser::IsCurrentUserModuleAdmin($arGroupSites)
|| (
$userRole
&& (
(
$arGroup["INITIATE_PERMS"] == SONET_ROLES_OWNER
&& $senderID == $arGroup["OWNER_ID"]
)
|| (
$arGroup["INITIATE_PERMS"] == SONET_ROLES_MODERATOR
&& in_array($userRole, array(SONET_ROLES_OWNER, SONET_ROLES_MODERATOR))
)
|| (
$arGroup["INITIATE_PERMS"] == SONET_ROLES_USER
&& $bUserIsMember
)
)
)
);
if (!$bCanInitiate)
{
$APPLICATION->ThrowException(GetMessage("SONET_UG_ERROR_NO_PERMS"), "ERROR_NO_PERMS");
return false;
}
$arFields = array(
"USER_ID" => $userID,
"GROUP_ID" => $groupID,
"ROLE" => SONET_ROLES_REQUEST,
"=DATE_CREATE" => $DB->CurrentTimeFunction(),
"=DATE_UPDATE" => $DB->CurrentTimeFunction(),
"MESSAGE" => str_replace(Array("#TEXT#", "#GROUP_NAME#"), Array($message, $arGroup["NAME"]), (empty($message) ? GetMessage("SONET_UG_INVITE_CONFIRM_TEXT_EMPTY") : GetMessage("SONET_UG_INVITE_CONFIRM_TEXT"))),
"INITIATED_BY_TYPE" => SONET_INITIATED_BY_GROUP,
"INITIATED_BY_USER_ID" => $senderID,
"SEND_MAIL" => ($bMail ? "Y" : "N")
);
$ID = CSocNetUserToGroup::Add($arFields);
if (!$ID)
{
$errorMessage = "";
if ($e = $APPLICATION->GetException())
{
$errorMessage = $e->GetString();
}
if (StrLen($errorMessage) <= 0)
{
$errorMessage = GetMessage("SONET_UR_ERROR_CREATE_USER2GROUP");
}
$APPLICATION->ThrowException($errorMessage, "ERROR_CREATE_USER2GROUP");
return false;
}
$userIsConfirmed = true;
$rsInvitedUser = CUser::GetByID($userID);
$arInvitedUser = $rsInvitedUser->Fetch();
if (
(
!is_array($arInvitedUser["UF_DEPARTMENT"])
|| intval($arInvitedUser["UF_DEPARTMENT"][0]) <= 0
) // extranet
&& ($arInvitedUser["LAST_LOGIN"] <= 0)
&& strlen($arInvitedUser["LAST_ACTIVITY_DATE"]) <= 0
)
{
$userIsConfirmed = false;
}
if (
CModule::IncludeModule("im")
&& $userIsConfirmed
)
{
$arMessageFields = array(
"MESSAGE_TYPE" => IM_MESSAGE_SYSTEM,
"TO_USER_ID" => intval($arFields['USER_ID']),
"FROM_USER_ID" => intval($arFields['INITIATED_BY_USER_ID']),
"NOTIFY_TYPE" => IM_NOTIFY_CONFIRM,
"NOTIFY_MODULE" => "socialnetwork",
"NOTIFY_EVENT" => "invite_group_btn",
"NOTIFY_TAG" => "SOCNET|INVITE_GROUP|".intval($arFields['USER_ID'])."|".intval($ID),
"NOTIFY_TITLE" => str_replace("#GROUP_NAME#", $arGroup["NAME"], GetMessage("SONET_UG_INVITE_CONFIRM_TEXT_EMPTY")),
"NOTIFY_MESSAGE" => str_replace(Array("#TEXT#", "#GROUP_NAME#"), Array($message, $arGroup["NAME"]), (empty($message)?GetMessage("SONET_UG_INVITE_CONFIRM_TEXT_EMPTY"):GetMessage("SONET_UG_INVITE_CONFIRM_TEXT"))),
"NOTIFY_BUTTONS" => Array(
Array('TITLE' => GetMessage('SONET_UG_INVITE_CONFIRM'), 'VALUE' => 'Y', 'TYPE' => 'accept'),
Array('TITLE' => GetMessage('SONET_UG_INVITE_REJECT'), 'VALUE' => 'N', 'TYPE' => 'cancel'),
),
);
$siteId = (
(
!is_array($arInvitedUser["UF_DEPARTMENT"])
|| intval($arInvitedUser["UF_DEPARTMENT"][0]) <= 0
)
&& CModule::IncludeModule('extranet')
? CExtranet::GetExtranetSiteID()
: SITE_ID
);
$dbSite = CSite::GetByID($siteId);
$arSite = $dbSite->Fetch();
$serverName = htmlspecialcharsEx($arSite["SERVER_NAME"]);
if (strlen($serverName) <= 0)
{
$serverName = (defined("SITE_SERVER_NAME") && strlen(SITE_SERVER_NAME) > 0 ? SITE_SERVER_NAME : COption::GetOptionString("main", "server_name", ""));
}
if (strlen($serverName) <= 0)
{
$serverName = $_SERVER["SERVER_NAME"];
}
$serverName = (CMain::IsHTTPS() ? "https" : "http")."://".$serverName;
$requestUrl = COption::GetOptionString(
"socialnetwork",
"user_request_page",
(IsModuleInstalled("intranet")) ? "/company/personal/user/#USER_ID#/requests/" : "/club/user/#USER_ID#/requests/",
$siteId
);
$requestUrl = $serverName.str_replace(array("#USER_ID#", "#user_id#"), $userID, $requestUrl);
$groupUrl = $serverName.str_replace("#group_id#", $groupID, COption::GetOptionString("socialnetwork", "group_path_template", "/workgroups/group/#group_id#/", $siteId));
$arMessageFields['NOTIFY_MESSAGE_OUT'] = $arMessageFields['NOTIFY_MESSAGE'];
$arMessageFields['NOTIFY_MESSAGE_OUT'] .= "\n\n".GetMessage('SONET_UG_GROUP_LINK').$groupUrl;
$arMessageFields['NOTIFY_MESSAGE_OUT'] .= "\n\n".GetMessage('SONET_UG_INVITE_CONFIRM').": ".$requestUrl.'?INVITE_GROUP='.$ID.'&CONFIRM=Y';
$arMessageFields['NOTIFY_MESSAGE_OUT'] .= "\n\n".GetMessage('SONET_UG_INVITE_REJECT').": ".$requestUrl.'?INVITE_GROUP='.$ID.'&CONFIRM=N';
CIMNotify::Add($arMessageFields);
}
$events = GetModuleEvents("socialnetwork", "OnSocNetSendRequestToJoinGroup");
while ($arEvent = $events->Fetch())
{
ExecuteModuleEventEx($arEvent, array($ID, $arFields));
}
CSocNetUserToGroup::__SpeedFileCreate($userID);
return true;
}
public static function ConfirmRequestToBeMember($userID, $groupID, $arRelationID, $bAutoSubscribe = true) // request from a user confirmed by a moderator
{
global $APPLICATION, $DB, $USER;
$userID = IntVal($userID);
if ($userID <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UR_EMPTY_USERID"), "ERROR_USERID");
return false;
}
$groupID = IntVal($groupID);
if ($groupID <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UR_EMPTY_GROUPID"), "ERROR_GROUPID");
return false;
}
if (!is_array($arRelationID))
{
return true;
}
$arGroup = CSocNetGroup::GetByID($groupID);
if (!$arGroup || !is_array($arGroup))
{
$APPLICATION->ThrowException(GetMessage("SONET_UG_ERROR_NO_GROUP_ID"), "ERROR_NO_GROUP");
return false;
}
$arGroupSites = array();
$rsGroupSite = CSocNetGroup::GetSite($groupID);
while ($arGroupSite = $rsGroupSite->Fetch())
{
$arGroupSites[] = $arGroupSite["LID"];
}
$userRole = CSocNetUserToGroup::GetUserRole($userID, $groupID);
$bUserIsMember = ($userRole && in_array($userRole, array(SONET_ROLES_OWNER, SONET_ROLES_MODERATOR, SONET_ROLES_USER)));
$bCanInitiate = (
$USER->IsAdmin()
|| CSocNetUser::IsCurrentUserModuleAdmin($arGroupSites)
|| (
$userRole
&& (
($arGroup["INITIATE_PERMS"] == SONET_ROLES_OWNER && $userID == $arGroup["OWNER_ID"])
|| ($arGroup["INITIATE_PERMS"] == SONET_ROLES_MODERATOR && in_array($userRole, array(SONET_ROLES_OWNER, SONET_ROLES_MODERATOR)))
|| ($arGroup["INITIATE_PERMS"] == SONET_ROLES_USER && $bUserIsMember)
)
)
);
if (!$bCanInitiate)
{
$APPLICATION->ThrowException(GetMessage("SONET_UG_ERROR_NO_PERMS"), "ERROR_NO_PERMS");
return false;
}
$bSuccess = true;
$arSuccessRelations = array();
$tmp_count = count($arRelationID);
$chatNotificationResult = false;
for ($i = 0; $i < $tmp_count; $i++)
{
$arRelationID[$i] = IntVal($arRelationID[$i]);
if ($arRelationID[$i] <= 0)
{
continue;
}
$arRelation = CSocNetUserToGroup::GetByID($arRelationID[$i]);
if (!$arRelation)
{
continue;
}
if (
$arRelation["GROUP_ID"] != $groupID
|| $arRelation["INITIATED_BY_TYPE"] != SONET_INITIATED_BY_USER
|| $arRelation["ROLE"] != SONET_ROLES_REQUEST
)
{
continue;
}
$arFields = array(
"ROLE" => SONET_ROLES_USER,
"=DATE_UPDATE" => $DB->CurrentTimeFunction(),
);
if (CSocNetUserToGroup::Update($arRelation["ID"], $arFields))
{
$arSuccessRelations[] = $arRelation;
if ($bAutoSubscribe)
{
CSocNetLogEvents::AutoSubscribe($arRelation["USER_ID"], SONET_ENTITY_GROUP, $groupID);
}
$chatNotificationResult = UserToGroup::addInfoToChat(array(
'group_id' => $groupID,
'user_id' => $arRelation["USER_ID"],
'action' => UserToGroup::CHAT_ACTION_IN
));
if (
!$chatNotificationResult
&& CModule::IncludeModule("im")
)
{
$groupSiteId = CSocNetGroup::GetDefaultSiteId($groupID, $arGroup["SITE_ID"]);
$workgroupsPage = COption::GetOptionString("socialnetwork", "workgroups_page", "/workgroups/", SITE_ID);
$groupUrlTemplate = COption::GetOptionString("socialnetwork", "group_path_template", "/workgroups/group/#group_id#/", SITE_ID);
$groupUrlTemplate = "#GROUPS_PATH#".substr($groupUrlTemplate, strlen($workgroupsPage), strlen($groupUrlTemplate)-strlen($workgroupsPage));
$arTmp = CSocNetLogTools::ProcessPath(
array(
"GROUP_URL" => str_replace(array("#group_id#", "#GROUP_ID#"), $groupID, $groupUrlTemplate)
),
$arRelation["USER_ID"],
$groupSiteId
);
$groupUrl = $arTmp["URLS"]["GROUP_URL"];
$serverName = (
strpos($groupUrl, "http://") === 0
|| strpos($groupUrl, "https://") === 0
? ""
: $arTmp["SERVER_NAME"]
);
$domainName = (
strpos($groupUrl, "http://") === 0
|| strpos($groupUrl, "https://") === 0
? ""
: (
isset($arTmp["DOMAIN"])
&& !empty($arTmp["DOMAIN"])
? "//".$arTmp["DOMAIN"]
: ""
)
);
$arMessageFields = array(
"MESSAGE_TYPE" => IM_MESSAGE_SYSTEM,
"TO_USER_ID" => $arRelation["USER_ID"],
"FROM_USER_ID" => $userID,
"NOTIFY_TYPE" => IM_NOTIFY_FROM,
"NOTIFY_MODULE" => "socialnetwork",
"NOTIFY_EVENT" => "invite_group",
"NOTIFY_TAG" => "SOCNET|INVITE_GROUP|".intval($arRelation["USER_ID"])."|".intval($arRelation["ID"]),
"NOTIFY_MESSAGE" => str_replace(
"#NAME#",
"<a href=\"".$domainName.$groupUrl."\" class=\"bx-notifier-item-action\">".$arGroup["NAME"]."</a>",
GetMessage("SONET_UG_CONFIRM_MEMBER_MESSAGE_G")
),
"NOTIFY_MESSAGE_OUT" => str_replace(
"#NAME#",
$arGroup["NAME"],
GetMessage("SONET_UG_CONFIRM_MEMBER_MESSAGE_G")." (".$serverName.$groupUrl.")"
)
);
CIMNotify::DeleteBySubTag("SOCNET|REQUEST_GROUP|".$arRelation["USER_ID"]."|".$arRelation["GROUP_ID"]."|".$arRelation["ID"]);
CIMNotify::Add($arMessageFields);
}
}
else
{
$errorMessage = "";
if ($e = $APPLICATION->GetException())
{
$errorMessage = $e->GetString();
}
if (StrLen($errorMessage) <= 0)
{
$errorMessage = GetMessage("SONET_UR_ERROR_CREATE_USER2GROUP");
}
$APPLICATION->ThrowException($errorMessage, "ERROR_CONFIRM_MEMBER");
$bSuccess = false;
}
}
if (
!empty($arSuccessRelations)
&& !$chatNotificationResult
)
{
foreach ($arSuccessRelations as $arRel)
{
CSocNetUserToGroup::notifyImToModerators(array(
"TYPE" => "join",
"RELATION_ID" => $arRel["ID"],
"USER_ID" => $arRel["USER_ID"],
"GROUP_ID" => $arRel["GROUP_ID"],
"GROUP_NAME" => $arRel["GROUP_NAME"],
"EXCLUDE_USERS" => array($USER->GetID())
));
}
}
return $bSuccess;
}
public static function RejectRequestToBeMember($userID, $groupID, $arRelationID)
{
global $APPLICATION, $DB, $USER;
$userID = IntVal($userID);
if ($userID <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UR_EMPTY_USERID"), "ERROR_USERID");
return false;
}
$groupID = IntVal($groupID);
if ($groupID <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UR_EMPTY_GROUPID"), "ERROR_GROUPID");
return false;
}
if (!is_array($arRelationID))
return true;
$arGroup = CSocNetGroup::GetByID($groupID);
if (!$arGroup || !is_array($arGroup))
{
$APPLICATION->ThrowException(GetMessage("SONET_UG_ERROR_NO_GROUP_ID"), "ERROR_NO_GROUP");
return false;
}
$arGroupSites = array();
$rsGroupSite = CSocNetGroup::GetSite($groupID);
while ($arGroupSite = $rsGroupSite->Fetch())
$arGroupSites[] = $arGroupSite["LID"];
$userRole = CSocNetUserToGroup::GetUserRole($userID, $groupID);
$bUserIsMember = ($userRole && in_array($userRole, array(SONET_ROLES_OWNER, SONET_ROLES_MODERATOR, SONET_ROLES_USER)));
$bCanInitiate = ($USER->IsAdmin() || CSocNetUser::IsCurrentUserModuleAdmin($arGroupSites) || ($userRole
&& (($arGroup["INITIATE_PERMS"] == SONET_ROLES_OWNER && $userID == $arGroup["OWNER_ID"])
|| ($arGroup["INITIATE_PERMS"] == SONET_ROLES_MODERATOR && in_array($userRole, array(SONET_ROLES_OWNER, SONET_ROLES_MODERATOR)))
|| ($arGroup["INITIATE_PERMS"] == SONET_ROLES_USER && $bUserIsMember))));
if (!$bCanInitiate)
{
$APPLICATION->ThrowException(GetMessage("SONET_UG_ERROR_NO_PERMS"), "ERROR_NO_PERMS");
return false;
}
$bSuccess = true;
$tmp_count = count($arRelationID);
for ($i = 0; $i < $tmp_count; $i++)
{
$arRelationID[$i] = IntVal($arRelationID[$i]);
if ($arRelationID[$i] <= 0)
continue;
$arRelation = CSocNetUserToGroup::GetByID($arRelationID[$i]);
if (!$arRelation)
continue;
if (
$arRelation["GROUP_ID"] != $groupID
|| $arRelation["INITIATED_BY_TYPE"] != SONET_INITIATED_BY_USER
|| $arRelation["ROLE"] != SONET_ROLES_REQUEST
)
{
continue;
}
if (CSocNetUserToGroup::Delete($arRelation["ID"]))
{
$arMessageFields = array(
"FROM_USER_ID" => $userID,
"TO_USER_ID" => $arRelation["USER_ID"],
"MESSAGE" => str_replace("#NAME#", $arGroup["NAME"], GetMessage("SONET_UG_REJECT_MEMBER_MESSAGE_G")),
"=DATE_CREATE" => $DB->CurrentTimeFunction(),
"MESSAGE_TYPE" => SONET_MESSAGE_SYSTEM
);
CSocNetMessages::Add($arMessageFields);
}
else
{
$errorMessage = "";
if ($e = $APPLICATION->GetException())
$errorMessage = $e->GetString();
if (StrLen($errorMessage) <= 0)
$errorMessage = GetMessage("SONET_UR_ERROR_CREATE_USER2GROUP");
$APPLICATION->ThrowException($errorMessage, "ERROR_CONFIRM_MEMBER");
$bSuccess = false;
}
}
return $bSuccess;
}
public static function UserConfirmRequestToBeMember($targetUserID, $relationID, $bAutoSubscribe = true) // request from group confirmed by a user
{
global $APPLICATION, $DB;
$targetUserID = IntVal($targetUserID);
if ($targetUserID <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UR_EMPTY_USERID"), "ERROR_SENDER_USER_ID");
return false;
}
$relationID = IntVal($relationID);
if ($relationID <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UR_EMPTY_RELATIONID"), "ERROR_RELATION_ID");
return false;
}
$dbResult = CSocNetUserToGroup::GetList(
array(),
array(
"ID" => $relationID,
"USER_ID" => $targetUserID,
"ROLE" => SONET_ROLES_REQUEST,
"INITIATED_BY_TYPE" => SONET_INITIATED_BY_GROUP
),
false,
false,
array("ID", "USER_ID", "INITIATED_BY_USER_ID", "GROUP_ID", "GROUP_VISIBLE", "GROUP_SITE_ID", "GROUP_NAME")
);
if ($arResult = $dbResult->Fetch())
{
$arFields = array(
"ROLE" => SONET_ROLES_USER,
"=DATE_UPDATE" => $DB->CurrentTimeFunction(),
);
if (CSocNetUserToGroup::Update($arResult["ID"], $arFields))
{
$events = GetModuleEvents("socialnetwork", "OnSocNetUserConfirmRequestToBeMember");
while ($arEvent = $events->Fetch())
{
ExecuteModuleEventEx($arEvent, array($arResult["ID"], $arResult));
}
if ($bAutoSubscribe)
{
CSocNetLogEvents::AutoSubscribe($targetUserID, SONET_ENTITY_GROUP, $arResult["GROUP_ID"]);
}
if (CModule::IncludeModule("im"))
{
$groupSiteId = CSocNetGroup::GetDefaultSiteId($arResult["GROUP_ID"], $arResult["GROUP_SITE_ID"]);
CIMNotify::DeleteByTag("SOCNET|INVITE_GROUP|".intval($targetUserID)."|".intval($relationID));
$workgroupsPage = COption::GetOptionString("socialnetwork", "workgroups_page", "/workgroups/", $groupSiteId);
$groupUrlTemplate = COption::GetOptionString("socialnetwork", "group_path_template", "/workgroups/group/#group_id#/", $groupSiteId);
$groupUrlTemplate = "#GROUPS_PATH#".substr($groupUrlTemplate, strlen($workgroupsPage), strlen($groupUrlTemplate)-strlen($workgroupsPage));
$groupUrl = str_replace(array("#group_id#", "#GROUP_ID#"), $arResult["GROUP_ID"], $groupUrlTemplate);
$arTmp = CSocNetLogTools::ProcessPath(
array(
"GROUP_URL" => $groupUrl
),
$arResult["INITIATED_BY_USER_ID"],
$groupSiteId
);
$url = $arTmp["URLS"]["GROUP_URL"];
$serverName = (
strpos($url, "http://") === 0
|| strpos($url, "https://") === 0
? ""
: $arTmp["SERVER_NAME"]
);
$domainName = (
strpos($url, "http://") === 0
|| strpos($url, "https://") === 0
? ""
: (
isset($arTmp["DOMAIN"])
&& !empty($arTmp["DOMAIN"])
? "//".$arTmp["DOMAIN"]
: ""
)
);
$arMessageFields = array(
"MESSAGE_TYPE" => IM_MESSAGE_SYSTEM,
"TO_USER_ID" => $arResult['USER_ID'],
"NOTIFY_TYPE" => IM_NOTIFY_SYSTEM,
"NOTIFY_MODULE" => "socialnetwork",
"NOTIFY_EVENT" => "invite_group",
"NOTIFY_TAG" => "SOCNET|INVITE_GROUP|".intval($arResult['USER_ID'])."|".$relationID,
"NOTIFY_MESSAGE" => str_replace(
"#NAME#",
"<a href=\"".$domainName.$url."\" class=\"bx-notifier-item-action\">".$arResult["GROUP_NAME"]."</a>",
GetMessage("SONET_UG_CONFIRM_MEMBER_MESSAGE_G")
),
"NOTIFY_MESSAGE_OUT" => str_replace(
"#NAME#",
$arResult["GROUP_NAME"],
GetMessage("SONET_UG_CONFIRM_MEMBER_MESSAGE_G")." (".$serverName.$url.")"
)
);
CIMNotify::Add($arMessageFields);
$chatNotificationResult = UserToGroup::addInfoToChat(array(
'group_id' => $arResult["GROUP_ID"],
'user_id' => $arResult["USER_ID"],
'action' => UserToGroup::CHAT_ACTION_IN
));
if (!$chatNotificationResult)
{
$arMessageFields = array(
"MESSAGE_TYPE" => IM_MESSAGE_SYSTEM,
"TO_USER_ID" => $arResult["INITIATED_BY_USER_ID"],
"FROM_USER_ID" => $arResult['USER_ID'],
"NOTIFY_TYPE" => IM_NOTIFY_FROM,
"NOTIFY_MODULE" => "socialnetwork",
"NOTIFY_EVENT" => "invite_group",
"NOTIFY_TAG" => "SOCNET|INVITE_GROUP_SUCCESS|".intval($arResult["GROUP_ID"]),
"NOTIFY_MESSAGE" => str_replace(
"#NAME#",
"<a href=\"".$domainName.$url."\" class=\"bx-notifier-item-action\">".$arResult["GROUP_NAME"]."</a>",
GetMessage("SONET_UG_CONFIRM_MEMBER_MESSAGE")
),
"NOTIFY_MESSAGE_OUT" => str_replace("#NAME#", $arResult["GROUP_NAME"], GetMessage("SONET_UG_CONFIRM_MEMBER_MESSAGE")." (".$serverName.$url.")"),
);
CIMNotify::Add($arMessageFields);
CSocNetUserToGroup::NotifyImToModerators(array(
"TYPE" => "join",
"RELATION_ID" => $arResult["ID"],
"USER_ID" => $arResult["USER_ID"],
"GROUP_ID" => $arResult["GROUP_ID"],
"GROUP_NAME" => htmlspecialcharsbx($arResult["GROUP_NAME"]),
"EXCLUDE_USERS" => array($arResult["INITIATED_BY_USER_ID"])
));
}
}
}
else
{
$errorMessage = "";
if ($e = $APPLICATION->GetException())
$errorMessage = $e->GetString();
if (StrLen($errorMessage) <= 0)
$errorMessage = GetMessage("SONET_UR_ERROR_CREATE_USER2GROUP");
$APPLICATION->ThrowException($errorMessage, "ERROR_CREATE_RELATION");
return false;
}
}
else
{
$APPLICATION->ThrowException(GetMessage("SONET_NO_USER2GROUP"), "ERROR_NO_GROUP_REQUEST");
return false;
}
CSocNetUserToGroup::__SpeedFileCheckMessages($targetUserID);
return true;
}
public static function UserRejectRequestToBeMember($targetUserID, $relationID)
{
global $APPLICATION;
$targetUserID = IntVal($targetUserID);
if ($targetUserID <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UR_EMPTY_USERID"), "ERROR_SENDER_USER_ID");
return false;
}
$relationID = IntVal($relationID);
if ($relationID <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UR_EMPTY_RELATIONID"), "ERROR_RELATION_ID");
return false;
}
$dbResult = CSocNetUserToGroup::GetList(
array(),
array(
"ID" => $relationID,
"USER_ID" => $targetUserID,
"ROLE" => SONET_ROLES_REQUEST,
"INITIATED_BY_TYPE" => SONET_INITIATED_BY_GROUP
),
false,
false,
array("ID", "USER_ID", "GROUP_ID", "GROUP_SITE_ID", "INITIATED_BY_USER_ID", "GROUP_NAME")
);
if ($arResult = $dbResult->Fetch())
{
if (CSocNetUserToGroup::Delete($arResult["ID"]))
{
$events = GetModuleEvents("socialnetwork", "OnSocNetUserRejectRequestToBeMember");
while ($arEvent = $events->Fetch())
{
ExecuteModuleEventEx($arEvent, array($arResult["ID"], $arResult));
}
if (CModule::IncludeModule("im"))
{
$groupSiteId = CSocNetGroup::GetDefaultSiteId($arResult["GROUP_ID"], $arResult["GROUP_SITE_ID"]);
$groupUrl = str_replace(array("#group_id#", "#GROUP_ID#"), $arResult["GROUP_ID"], COption::GetOptionString("socialnetwork", "group_path_template", "/workgroups/group/#group_id#/", $groupSiteId));
$arTmp = CSocNetLogTools::ProcessPath(
array(
"GROUP_URL" => $groupUrl
),
$arResult["INITIATED_BY_USER_ID"],
$groupSiteId
);
$url = $arTmp["URLS"]["GROUP_URL"];
$serverName = (
strpos($url, "http://") === 0
|| strpos($url, "https://") === 0
? ""
: $arTmp["SERVER_NAME"]
);
$domainName = (
strpos($url, "http://") === 0
|| strpos($url, "https://") === 0
? ""
: (
isset($arTmp["DOMAIN"])
&& !empty($arTmp["DOMAIN"])
? "//".$arTmp["DOMAIN"]
: ""
)
);
$arMessageFields = array(
"MESSAGE_TYPE" => IM_MESSAGE_SYSTEM,
"TO_USER_ID" => $arResult["INITIATED_BY_USER_ID"],
"FROM_USER_ID" => $arResult['USER_ID'],
"NOTIFY_TYPE" => IM_NOTIFY_FROM,
"NOTIFY_MODULE" => "socialnetwork",
"NOTIFY_EVENT" => "invite_group",
"NOTIFY_TAG" => "SOCNET|INVITE_GROUP_REJECT|".intval($arResult["GROUP_ID"]),
"NOTIFY_MESSAGE" => str_replace(
"#NAME#",
"<a href=\"".$domainName.$url."\" class=\"bx-notifier-item-action\">".$arResult["GROUP_NAME"]."</a>",
GetMessage("SONET_UG_REJECT_MEMBER_MESSAGE")
),
"NOTIFY_MESSAGE_OUT" => str_replace(
"#NAME#",
$arResult["GROUP_NAME"],
GetMessage("SONET_UG_REJECT_MEMBER_MESSAGE")." (".$serverName.$url.")"
)
);
CIMNotify::Add($arMessageFields);
}
}
else
{
$errorMessage = "";
if ($e = $APPLICATION->GetException())
$errorMessage = $e->GetString();
if (StrLen($errorMessage) <= 0)
$errorMessage = GetMessage("SONET_UR_ERROR_CREATE_USER2GROUP");
$APPLICATION->ThrowException($errorMessage, "ERROR_DELETE_RELATION");
return false;
}
}
else
{
$APPLICATION->ThrowException(GetMessage("SONET_NO_USER2GROUP"), "ERROR_NO_MEMBER_REQUEST");
return false;
}
CSocNetUserToGroup::__SpeedFileCheckMessages($targetUserID);
return true;
}
public static function TransferModerator2Member($userID, $groupID, $arRelationID, $currentUserIsAdmin)
{
global $APPLICATION, $DB, $USER;
$userID = IntVal($userID);
if ($userID <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UR_EMPTY_USERID"), "ERROR_USERID");
return false;
}
$groupID = IntVal($groupID);
if ($groupID <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UR_EMPTY_GROUPID"), "ERROR_GROUPID");
return false;
}
if (!is_array($arRelationID))
return true;
$arGroup = CSocNetGroup::GetByID($groupID);
if (!$arGroup || !is_array($arGroup))
{
$APPLICATION->ThrowException(GetMessage("SONET_UG_ERROR_NO_GROUP_ID"), "ERROR_NO_GROUP");
return false;
}
$arUserPerms = CSocNetUserToGroup::InitUserPerms($userID, $arGroup, $currentUserIsAdmin);
if (!$arUserPerms["UserCanModifyGroup"])
{
$APPLICATION->ThrowException(GetMessage("SONET_UG_ERROR_NO_PERMS"), "ERROR_NO_PERMS");
return false;
}
$bSuccess = true;
$arSuccessRelations = array();
$bIMIncluded = false;
$groupSiteId = SITE_ID;
if (CModule::IncludeModule("im"))
{
$bIMIncluded = true;
$groupSiteId = CSocNetGroup::GetDefaultSiteId($groupID, $arGroup["SITE_ID"]);
}
$workgroupsPage = COption::GetOptionString("socialnetwork", "workgroups_page", "/workgroups/", $groupSiteId);
$groupUrlTemplate = COption::GetOptionString("socialnetwork", "group_path_template", "/workgroups/group/#group_id#/", $groupSiteId);
$groupUrlTemplate = "#GROUPS_PATH#".substr($groupUrlTemplate, strlen($workgroupsPage), strlen($groupUrlTemplate)-strlen($workgroupsPage));
$groupUrl = str_replace(array("#group_id#", "#GROUP_ID#"), $groupID, $groupUrlTemplate);
$relationsToUpdateCount = 0;
foreach($arRelationID as $key => $relationId)
{
$relationId = intval($relationId);
if ($relationId <= 0)
{
continue;
}
$arRelation = CSocNetUserToGroup::GetByID($relationId);
if (
!$arRelation
|| $arRelation["GROUP_ID"] != $groupID
|| $arRelation["ROLE"] != SONET_ROLES_MODERATOR
)
{
continue;
}
$relationsToUpdateCount++;
$arFields = array(
"ROLE" => SONET_ROLES_USER,
"=DATE_UPDATE" => $DB->CurrentTimeFunction(),
);
if (CSocNetUserToGroup::Update($arRelation["ID"], $arFields))
{
$arSuccessRelations[] = $arRelation;
if ($bIMIncluded)
{
$arTmp = CSocNetLogTools::ProcessPath(
array(
"GROUP_URL" => $groupUrl
),
$arRelation["USER_ID"],
$groupSiteId
);
$groupUrl = $arTmp["URLS"]["GROUP_URL"];
$serverName = (
strpos($groupUrl, "http://") === 0
|| strpos($groupUrl, "https://") === 0
? ""
: $arTmp["SERVER_NAME"]
);
$domainName = (
strpos($groupUrl, "http://") === 0
|| strpos($groupUrl, "https://") === 0
? ""
: (
isset($arTmp["DOMAIN"])
&& !empty($arTmp["DOMAIN"])
? "//".$arTmp["DOMAIN"]
: ""
)
);
$arMessageFields = array(
"TO_USER_ID" => $arRelation["USER_ID"],
"FROM_USER_ID" => $userID,
"NOTIFY_TYPE" => IM_NOTIFY_FROM,
"NOTIFY_MODULE" => "socialnetwork",
"NOTIFY_EVENT" => "moderators_group",
"NOTIFY_TAG" => "SOCNET|MOD_GROUP|".intval($userID)."|".$groupID."|".$arRelation["ID"]."|".$arRelation["USER_ID"],
"NOTIFY_MESSAGE" => str_replace(
array("#NAME#"),
array("<a href=\"".$domainName.$groupUrl."\" class=\"bx-notifier-item-action\">".$arGroup["NAME"]."</a>"),
GetMessage("SONET_UG_MOD2MEMBER_MESSAGE")
),
"NOTIFY_MESSAGE_OUT" => str_replace(
array("#NAME#"),
array($arGroup["NAME"]),
GetMessage("SONET_UG_MOD2MEMBER_MESSAGE")
)." (".$serverName.$groupUrl.")"
);
CIMNotify::Add($arMessageFields);
}
}
else
{
$errorMessage = "";
if ($e = $APPLICATION->GetException())
$errorMessage = $e->GetString();
if (StrLen($errorMessage) <= 0)
$errorMessage = GetMessage("SONET_UR_ERROR_CREATE_USER2GROUP");
$APPLICATION->ThrowException($errorMessage, "ERROR_MOD2MEMBER");
$bSuccess = false;
}
}
if ($relationsToUpdateCount <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UR_ERROR_MEM2MOD_EMPTY_CORRECT_LIST"), "MOD2MEM_EMPTY_CORRECT_LIST");
return false;
}
$successfulUserIdList = array();
foreach($arSuccessRelations as $arRel)
{
$arNotifyParams = array(
"TYPE" => "unmoderate",
"RELATION_ID" => $arRel["ID"],
"USER_ID" => $arRel["USER_ID"],
"GROUP_ID" => $arRel["GROUP_ID"],
"GROUP_NAME" => $arRel["GROUP_NAME"],
"EXCLUDE_USERS" => array($USER->GetID())
);
CSocNetUserToGroup::NotifyImToModerators($arNotifyParams);
$successfulUserIdList[] = $arRel["USER_ID"];
}
$successfulUserIdList = array_unique($successfulUserIdList);
if (!empty($successfulUserIdList))
{
Integration\Im\Chat\Workgroup::setChatManagers(array(
'group_id' => $groupID,
'user_id' => $successfulUserIdList,
'set' => false
));
}
if (
$bSuccess
&& count($arSuccessRelations) <= 0
)
{
$APPLICATION->ThrowException(GetMessage("SONET_UR_ERROR_MOD2MEM_INCORRECT_PARAMS"), "MOD2MEM_INCORRECT_PARAMS");
$bSuccess = false;
}
return $bSuccess;
}
public static function TransferMember2Moderator($userID, $groupID, $arRelationID, $currentUserIsAdmin)
{
global $APPLICATION, $DB, $USER;
$userID = IntVal($userID);
if ($userID <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UR_EMPTY_USERID"), "ERROR_USERID");
return false;
}
$groupID = IntVal($groupID);
if ($groupID <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UR_EMPTY_GROUPID"), "ERROR_GROUPID");
return false;
}
if (!is_array($arRelationID))
return true;
$arGroup = CSocNetGroup::GetByID($groupID);
if (!$arGroup || !is_array($arGroup))
{
$APPLICATION->ThrowException(GetMessage("SONET_UG_ERROR_NO_GROUP_ID"), "ERROR_NO_GROUP");
return false;
}
$arUserPerms = CSocNetUserToGroup::InitUserPerms($userID, $arGroup, $currentUserIsAdmin);
if (!$arUserPerms["UserCanModifyGroup"])
{
$APPLICATION->ThrowException(GetMessage("SONET_UG_ERROR_NO_PERMS"), "ERROR_NO_PERMS");
return false;
}
$bSuccess = true;
$arSuccessRelations = array();
$bIMIncluded = false;
$groupSiteId = SITE_ID;
if (CModule::IncludeModule("im"))
{
$bIMIncluded = true;
$groupSiteId = CSocNetGroup::GetDefaultSiteId($groupID, $arGroup["SITE_ID"]);
}
$workgroupsPage = COption::GetOptionString("socialnetwork", "workgroups_page", "/workgroups/", SITE_ID);
$groupUrlTemplate = COption::GetOptionString("socialnetwork", "group_path_template", "/workgroups/group/#group_id#/", SITE_ID);
$groupUrlTemplate = "#GROUPS_PATH#".substr($groupUrlTemplate, strlen($workgroupsPage), strlen($groupUrlTemplate)-strlen($workgroupsPage));
$groupUrl = str_replace(array("#group_id#", "#GROUP_ID#"), $groupID, $groupUrlTemplate);
$relationsToUpdateCount = 0;
foreach($arRelationID as $key => $relationId)
{
$relationId = intval($relationId);
if ($relationId <= 0)
{
continue;
}
$arRelation = CSocNetUserToGroup::GetByID($relationId);
if (
!$arRelation
|| $arRelation["GROUP_ID"] != $groupID
|| $arRelation["ROLE"] != SONET_ROLES_USER
)
{
continue;
}
$relationsToUpdateCount++;
$arFields = array(
"ROLE" => SONET_ROLES_MODERATOR,
"=DATE_UPDATE" => $DB->CurrentTimeFunction(),
);
if (CSocNetUserToGroup::Update($arRelation["ID"], $arFields))
{
$arSuccessRelations[] = $arRelation;
if ($bIMIncluded)
{
$arTmp = CSocNetLogTools::ProcessPath(
array(
"GROUP_URL" => $groupUrl
),
$arRelation["USER_ID"],
$groupSiteId
);
$groupUrl = $arTmp["URLS"]["GROUP_URL"];
$serverName = (
strpos($groupUrl, "http://") === 0
|| strpos($groupUrl, "https://") === 0
? ""
: $arTmp["SERVER_NAME"]
);
$domainName = (
strpos($groupUrl, "http://") === 0
|| strpos($groupUrl, "https://") === 0
? ""
: (
isset($arTmp["DOMAIN"])
&& !empty($arTmp["DOMAIN"])
? "//".$arTmp["DOMAIN"]
: ""
)
);
$arMessageFields = array(
"TO_USER_ID" => $arRelation["USER_ID"],
"FROM_USER_ID" => $userID,
"NOTIFY_TYPE" => IM_NOTIFY_FROM,
"NOTIFY_MODULE" => "socialnetwork",
"NOTIFY_EVENT" => "moderators_group",
"NOTIFY_TAG" => "SOCNET|MOD_GROUP|".intval($userID)."|".$groupID."|".$arRelation["ID"]."|".$arRelation["USER_ID"],
"NOTIFY_MESSAGE" => str_replace(
array("#NAME#"),
array("<a href=\"".$domainName.$groupUrl."\" class=\"bx-notifier-item-action\">".$arGroup["NAME"]."</a>"),
GetMessage("SONET_UG_MEMBER2MOD_MESSAGE")
),
"NOTIFY_MESSAGE_OUT" => str_replace(
array("#NAME#"),
array($arGroup["NAME"]),
GetMessage("SONET_UG_MEMBER2MOD_MESSAGE")
)." (".$serverName.$groupUrl.")"
);
CIMNotify::Add($arMessageFields);
}
}
else
{
$errorMessage = "";
if ($e = $APPLICATION->GetException())
$errorMessage = $e->GetString();
if (StrLen($errorMessage) <= 0)
$errorMessage = GetMessage("SONET_UR_ERROR_CREATE_USER2GROUP");
$APPLICATION->ThrowException($errorMessage, "ERROR_MEMBER2MOD");
$bSuccess = false;
}
}
if ($relationsToUpdateCount <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UR_ERROR_MEM2MOD_EMPTY_CORRECT_LIST"), "MOD2MEM_EMPTY_CORRECT_LIST");
return false;
}
$successfulUserIdList = array();
foreach($arSuccessRelations as $arRel)
{
$arNotifyParams = array(
"TYPE" => "moderate",
"RELATION_ID" => $arRel["ID"],
"USER_ID" => $arRel["USER_ID"],
"GROUP_ID" => $arRel["GROUP_ID"],
"GROUP_NAME" => $arRel["GROUP_NAME"],
"EXCLUDE_USERS" => array($arRel["USER_ID"], $USER->GetID())
);
CSocNetUserToGroup::NotifyImToModerators($arNotifyParams);
CSocNetSubscription::Set($arRel["USER_ID"], "SG".$arRel["GROUP_ID"], "Y");
$successfulUserIdList[] = $arRel["USER_ID"];
}
$successfulUserIdList = array_unique($successfulUserIdList);
if (!empty($successfulUserIdList))
{
Integration\Im\Chat\Workgroup::setChatManagers(array(
'group_id' => $groupID,
'user_id' => $successfulUserIdList,
'set' => true
));
}
if (
$bSuccess
&& count($arSuccessRelations) <= 0
)
{
$errorMessage = "";
if ($e = $APPLICATION->GetException())
$errorMessage = $e->GetString();
if (StrLen($errorMessage) <= 0)
$errorMessage = GetMessage("SONET_UR_ERROR_MEM2MOD_INCORRECT_PARAMS");
$APPLICATION->ThrowException($errorMessage, "MEM2MOD_INCORRECT_PARAMS");
$bSuccess = false;
}
return $bSuccess;
}
public static function BanMember($userID, $groupID, $arRelationID, $currentUserIsAdmin)
{
global $APPLICATION, $DB;
$userID = IntVal($userID);
if ($userID <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UR_EMPTY_USERID"), "ERROR_USERID");
return false;
}
$groupID = IntVal($groupID);
if ($groupID <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UR_EMPTY_GROUPID"), "ERROR_GROUPID");
return false;
}
if (!is_array($arRelationID))
return true;
$arGroup = CSocNetGroup::GetByID($groupID);
if (!$arGroup || !is_array($arGroup))
{
$APPLICATION->ThrowException(GetMessage("SONET_UG_ERROR_NO_GROUP_ID"), "ERROR_NO_GROUP");
return false;
}
$arUserPerms = CSocNetUserToGroup::InitUserPerms($userID, $arGroup, $currentUserIsAdmin);
if (!$arUserPerms["UserCanModifyGroup"] && !$arUserPerms["UserCanModerateGroup"])
{
$APPLICATION->ThrowException(GetMessage("SONET_UG_ERROR_NO_PERMS"), "ERROR_NO_PERMS");
return false;
}
$bSuccess = true;
$tmp_count = count($arRelationID);
for ($i = 0; $i < $tmp_count; $i++)
{
$arRelationID[$i] = IntVal($arRelationID[$i]);
if ($arRelationID[$i] <= 0)
continue;
$arRelation = CSocNetUserToGroup::GetByID($arRelationID[$i]);
if (!$arRelation)
continue;
if ($arRelation["GROUP_ID"] != $groupID || $arRelation["ROLE"] != SONET_ROLES_USER)
continue;
$arFields = array(
"ROLE" => SONET_ROLES_BAN,
"=DATE_UPDATE" => $DB->CurrentTimeFunction(),
);
if (CSocNetUserToGroup::Update($arRelation["ID"], $arFields))
{
$arMessageFields = array(
"FROM_USER_ID" => $userID,
"TO_USER_ID" => $arRelation["USER_ID"],
"MESSAGE" => str_replace("#NAME#", $arGroup["NAME"], GetMessage("SONET_UG_BANMEMBER_MESSAGE")),
"=DATE_CREATE" => $DB->CurrentTimeFunction(),
"MESSAGE_TYPE" => SONET_MESSAGE_SYSTEM
);
CSocNetMessages::Add($arMessageFields);
CSocNetSubscription::DeleteEx($arRelation["USER_ID"], "SG".$arRelation["GROUP_ID"]);
UserToGroup::addInfoToChat(array(
'group_id' => $groupID,
'user_id' => $arRelation["USER_ID"],
'action' => UserToGroup::CHAT_ACTION_OUT
));
}
else
{
$errorMessage = "";
if ($e = $APPLICATION->GetException())
$errorMessage = $e->GetString();
if (StrLen($errorMessage) <= 0)
$errorMessage = GetMessage("SONET_UR_ERROR_CREATE_USER2GROUP");
$APPLICATION->ThrowException($errorMessage, "ERROR_BANMEMBER");
$bSuccess = false;
}
}
return $bSuccess;
}
public static function UnBanMember($userID, $groupID, $arRelationID, $currentUserIsAdmin)
{
global $APPLICATION, $DB;
$userID = IntVal($userID);
if ($userID <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UR_EMPTY_USERID"), "ERROR_USERID");
return false;
}
$groupID = IntVal($groupID);
if ($groupID <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UR_EMPTY_GROUPID"), "ERROR_GROUPID");
return false;
}
if (!is_array($arRelationID))
return true;
$arGroup = CSocNetGroup::GetByID($groupID);
if (!$arGroup || !is_array($arGroup))
{
$APPLICATION->ThrowException(GetMessage("SONET_UG_ERROR_NO_GROUP_ID"), "ERROR_NO_GROUP");
return false;
}
$arUserPerms = CSocNetUserToGroup::InitUserPerms($userID, $arGroup, $currentUserIsAdmin);
if (!$arUserPerms["UserCanModifyGroup"] && !$arUserPerms["UserCanModerateGroup"])
{
$APPLICATION->ThrowException(GetMessage("SONET_UG_ERROR_NO_PERMS"), "ERROR_NO_PERMS");
return false;
}
$bSuccess = true;
$tmp_count = count($arRelationID);
for ($i = 0; $i < $tmp_count; $i++)
{
$arRelationID[$i] = IntVal($arRelationID[$i]);
if ($arRelationID[$i] <= 0)
continue;
$arRelation = CSocNetUserToGroup::GetByID($arRelationID[$i]);
if (!$arRelation)
continue;
if ($arRelation["GROUP_ID"] != $groupID || $arRelation["ROLE"] != SONET_ROLES_BAN)
continue;
$arFields = array(
"ROLE" => SONET_ROLES_USER,
"=DATE_UPDATE" => $DB->CurrentTimeFunction(),
);
if (CSocNetUserToGroup::Update($arRelation["ID"], $arFields))
{
CSocNetMessages::Add(array(
"FROM_USER_ID" => $userID,
"TO_USER_ID" => $arRelation["USER_ID"],
"MESSAGE" => str_replace("#NAME#", $arGroup["NAME"], GetMessage("SONET_UG_UNBANMEMBER_MESSAGE")),
"=DATE_CREATE" => $DB->CurrentTimeFunction(),
"MESSAGE_TYPE" => SONET_MESSAGE_SYSTEM
));
UserToGroup::addInfoToChat(array(
'group_id' => $groupID,
'user_id' => $userID,
'action' => UserToGroup::CHAT_ACTION_IN
));
}
else
{
$errorMessage = "";
if ($e = $APPLICATION->GetException())
$errorMessage = $e->GetString();
if (StrLen($errorMessage) <= 0)
$errorMessage = GetMessage("SONET_UR_ERROR_CREATE_USER2GROUP");
$APPLICATION->ThrowException($errorMessage, "ERROR_UNBANMEMBER");
$bSuccess = false;
}
}
return $bSuccess;
}
public static function SetOwner($userID, $groupID, $arGroup = false)
{
global $DB, $APPLICATION, $USER;
if (!$arGroup)
{
$arGroup = CSocNetGroup::GetByID($groupID);
}
if (!$arGroup)
{
return false;
}
$errorMessage = "";
$DB->StartTransaction();
// setting relations for the old owner
$dbRelation = CSocNetUserToGroup::GetList(
array(),
array(
"USER_ID" => $arGroup["OWNER_ID"],
"GROUP_ID" => $groupID
),
false,
false,
array("ID")
);
if ($arRelation = $dbRelation->Fetch())
{
$arFields = array(
"ROLE" => SONET_ROLES_USER,
"=DATE_UPDATE" => $DB->CurrentTimeFunction(),
"INITIATED_BY_TYPE" => SONET_INITIATED_BY_USER,
"INITIATED_BY_USER_ID" => $USER->GetID(),
);
if (!CSocNetUserToGroup::Update($arRelation["ID"], $arFields))
{
if ($e = $APPLICATION->GetException())
{
$errorMessage = $e->GetString();
}
if (StrLen($errorMessage) <= 0)
{
$errorMessage = GetMessage("SONET_UG_ERROR_CANNOT_UPDATE_CURRENT_OWNER");
}
$APPLICATION->ThrowException($errorMessage, "ERROR_UPDATE_USER2GROUP");
$DB->Rollback();
return false;
}
}
else
{
if ($e = $APPLICATION->GetException())
{
$errorMessage = $e->GetString();
}
if (StrLen($errorMessage) <= 0)
{
$errorMessage = GetMessage("SONET_UG_ERROR_CANNOT_GET_CURRENT_OWNER_RELATION");
}
$APPLICATION->ThrowException($errorMessage, "ERROR_GET_USER2GROUP");
$DB->Rollback();
return false;
}
// delete requests to the old owner
if (strlen($errorMessage) <= 0)
CSocNetUserToGroup::__SpeedFileDelete($arGroup["OWNER_ID"]);
if (strlen($errorMessage) <= 0)
{
// setting relations for the new owner
$dbRelation = CSocNetUserToGroup::GetList(array(), array("USER_ID" => $userID, "GROUP_ID" => $groupID), false, false, array("ID"));
if ($arRelation = $dbRelation->Fetch())
{
$arFields = array(
"ROLE" => SONET_ROLES_OWNER,
"=DATE_UPDATE" => $DB->CurrentTimeFunction(),
"INITIATED_BY_TYPE" => SONET_INITIATED_BY_USER,
"INITIATED_BY_USER_ID" => $USER->GetID(),
"AUTO_MEMBER" => "N"
);
if (!CSocNetUserToGroup::Update($arRelation["ID"], $arFields))
{
if ($e = $APPLICATION->GetException())
$errorMessage = $e->GetString();
if (StrLen($errorMessage) <= 0)
$errorMessage = GetMessage("SONET_UG_ERROR_CANNOT_UPDATE_NEW_OWNER_RELATION");
$APPLICATION->ThrowException($errorMessage, "ERROR_UPDATE_USER2GROUP");
$DB->Rollback();
return false;
}
}
else
{
$arFields = array(
"USER_ID" => $userID,
"GROUP_ID" => $groupID,
"ROLE" => SONET_ROLES_OWNER,
"=DATE_CREATE" => $DB->CurrentTimeFunction(),
"=DATE_UPDATE" => $DB->CurrentTimeFunction(),
"INITIATED_BY_TYPE" => SONET_INITIATED_BY_USER,
"INITIATED_BY_USER_ID" => $USER->GetID(),
"MESSAGE" => false,
);
if (!CSocNetUserToGroup::Add($arFields))
{
if ($e = $APPLICATION->GetException())
$errorMessage = $e->GetString();
if (StrLen($errorMessage) <= 0)
$errorMessage = GetMessage("SONET_UG_ERROR_CANNOT_ADD_NEW_OWNER_RELATION");
$APPLICATION->ThrowException($errorMessage, "ERROR_ADD_USER2GROUP");
$DB->Rollback();
return false;
}
else
{
UserToGroup::addInfoToChat(array(
'group_id' => $groupID,
'user_id' => $userID,
'action' => UserToGroup::CHAT_ACTION_IN
));
}
}
}
if (strlen($errorMessage) <= 0)
{
$GROUP_ID = CSocNetGroup::Update($groupID, array("OWNER_ID" => $userID));
if (!$GROUP_ID || IntVal($GROUP_ID) <= 0)
{
if ($e = $APPLICATION->GetException())
$errorMessage = $e->GetString();
if (StrLen($errorMessage) <= 0)
$errorMessage = GetMessage("SONET_UG_ERROR_CANNOT_UPDATE_GROUP");
$APPLICATION->ThrowException($errorMessage, "ERROR_UPDATE_GROUP");
$DB->Rollback();
return false;
}
}
$bIMIncluded = false;
$groupUrl = "";
$groupSiteId = SITE_ID;
if (CModule::IncludeModule("im"))
{
$bIMIncluded = true;
$groupSiteId = CSocNetGroup::GetDefaultSiteId($groupID, $arGroup["SITE_ID"]);
$workgroupsPage = COption::GetOptionString("socialnetwork", "workgroups_page", "/workgroups/", $groupSiteId);
$groupUrlTemplate = COption::GetOptionString("socialnetwork", "group_path_template", "/workgroups/group/#group_id#/", $groupSiteId);
$groupUrlTemplate = "#GROUPS_PATH#".substr($groupUrlTemplate, strlen($workgroupsPage), strlen($groupUrlTemplate)-strlen($workgroupsPage));
$groupUrl = str_replace(array("#group_id#", "#GROUP_ID#"), $groupID, $groupUrlTemplate);
}
// send message to the old owner
if ($bIMIncluded)
{
$arTmp = CSocNetLogTools::ProcessPath(
array(
"GROUP_URL" => $groupUrl
),
$arGroup["OWNER_ID"],
$groupSiteId
);
$groupUrl = $arTmp["URLS"]["GROUP_URL"];
$serverName = (
strpos($groupUrl, "http://") === 0
|| strpos($groupUrl, "https://") === 0
? ""
: $arTmp["SERVER_NAME"]
);
$arMessageFields = array(
"TO_USER_ID" => $arGroup["OWNER_ID"],
"FROM_USER_ID" => $USER->GetID(),
"NOTIFY_TYPE" => IM_NOTIFY_FROM,
"NOTIFY_MODULE" => "socialnetwork",
"NOTIFY_EVENT" => "owner_group",
"NOTIFY_TAG" => "SOCNET|OWNER_GROUP|".$groupID,
"NOTIFY_MESSAGE" => str_replace(
"#NAME#",
"<a href=\"".$groupUrl."\" class=\"bx-notifier-item-action\">".$arGroup["NAME"]."</a>",
GetMessage("SONET_UG_OWNER2MEMBER_MESSAGE")
),
"NOTIFY_MESSAGE_OUT" => str_replace(
"#NAME#",
$arGroup["NAME"],
GetMessage("SONET_UG_OWNER2MEMBER_MESSAGE")." (".$serverName.$groupUrl.")"
)
);
CIMNotify::Add($arMessageFields);
}
// send message to the new owner
if ($bIMIncluded)
{
$arTmp = CSocNetLogTools::ProcessPath(
array(
"GROUP_URL" => $groupUrl
),
$userID,
$groupSiteId
);
$groupUrl = $arTmp["URLS"]["GROUP_URL"];
if (
strpos($groupUrl, "http://") === 0
|| strpos($groupUrl, "https://") === 0
)
$serverName = "";
else
$serverName = $arTmp["SERVER_NAME"];
$arMessageFields = array(
"TO_USER_ID" => $userID,
"FROM_USER_ID" => $USER->GetID(),
"NOTIFY_TYPE" => IM_NOTIFY_FROM,
"NOTIFY_MODULE" => "socialnetwork",
"NOTIFY_EVENT" => "owner_group",
"NOTIFY_TAG" => "SOCNET|OWNER_GROUP|".$groupID,
"NOTIFY_MESSAGE" => str_replace(
"#NAME#",
"<a href=\"".$groupUrl."\" class=\"bx-notifier-item-action\">".$arGroup["NAME"]."</a>",
GetMessage("SONET_UG_MEMBER2OWNER_MESSAGE")
),
"NOTIFY_MESSAGE_OUT" => str_replace(
"#NAME#",
$arGroup["NAME"],
GetMessage("SONET_UG_MEMBER2OWNER_MESSAGE")." (".$serverName.$groupUrl.")"
)
);
CIMNotify::Add($arMessageFields);
}
$arNotifyParams = array(
"TYPE" => "owner",
"RELATION_ID" => $arRelation["ID"],
"USER_ID" => $userID,
"GROUP_ID" => $groupID,
"GROUP_NAME" => htmlspecialcharsbx($arGroup["NAME"]),
"EXCLUDE_USERS" => array($userID, $arGroup["OWNER_ID"], $USER->GetID())
);
CSocNetUserToGroup::NotifyImToModerators($arNotifyParams);
CSocNetSubscription::Set($userID, "SG".$groupID, "Y");
if (strlen($errorMessage) <= 0)
{
$DB->Commit();
return true;
}
else
{
$DB->Rollback();
return false;
}
}
public static function DeleteRelation($userID, $groupID)
{
global $APPLICATION;
$userID = IntVal($userID);
if ($userID <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UR_EMPTY_USERID"), "ERROR_USER_ID");
return false;
}
$groupID = IntVal($groupID);
if ($groupID <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UR_EMPTY_GROUPID"), "ERROR_GROUPID");
return false;
}
$dbResult = CSocNetUserToGroup::GetList(
array(),
array(
"GROUP_ID" => $groupID,
"USER_ID" => $userID,
),
false,
false,
array("ID", "ROLE", "GROUP_VISIBLE", "GROUP_NAME")
);
if ($arResult = $dbResult->Fetch())
{
if (!in_array($arResult["ROLE"], array(UserToGroupTable::ROLE_USER, UserToGroupTable::ROLE_MODERATOR)))
{
return false;
}
if (CSocNetUserToGroup::Delete($arResult["ID"]))
{
CSocNetSubscription::DeleteEx($userID, "SG".$groupID);
if (IsModuleInstalled("im"))
{
$chatNotificationResult = UserToGroup::addInfoToChat(array(
'group_id' => $groupID,
'user_id' => $userID,
'action' => UserToGroup::CHAT_ACTION_OUT
));
if (!$chatNotificationResult)
{
CSocNetUserToGroup::notifyImToModerators(array(
"TYPE" => "unjoin",
"RELATION_ID" => $arResult["ID"],
"USER_ID" => $userID,
"GROUP_ID" => $groupID,
"GROUP_NAME" => $arResult["GROUP_NAME"]
));
}
}
}
else
{
$errorMessage = "";
if ($e = $APPLICATION->GetException())
$errorMessage = $e->GetString();
if (StrLen($errorMessage) <= 0)
$errorMessage = GetMessage("SONET_UR_ERROR_CREATE_USER2GROUP");
$APPLICATION->ThrowException($errorMessage, "ERROR_DELETE_RELATION");
return false;
}
}
else
{
$APPLICATION->ThrowException(GetMessage("SONET_NO_USER2GROUP"), "ERROR_NO_MEMBER_REQUEST");
return false;
}
CSocNetUserToGroup::__SpeedFileCheckMessages($userID);
return true;
}
public static function InitUserPerms($userID, $arGroup, $bCurrentUserIsAdmin)
{
global $arSocNetAllowedInitiatePerms;
global $arSocNetAllowedSpamPerms;
$arReturn = array();
$userID = IntVal($userID);
$groupID = IntVal($arGroup["ID"]);
$groupOwnerID = IntVal($arGroup["OWNER_ID"]);
$groupInitiatePerms = Trim($arGroup["INITIATE_PERMS"]);
$groupVisible = Trim($arGroup["VISIBLE"]);
$groupOpened = Trim($arGroup["OPENED"]);
$groupSpamPerms = Trim($arGroup["SPAM_PERMS"]);
if ($groupID <= 0 || $groupOwnerID <= 0 || !in_array($groupInitiatePerms, $arSocNetAllowedInitiatePerms))
return false;
$arReturn["Operations"] = array();
if (!in_array($groupSpamPerms, $arSocNetAllowedSpamPerms))
$groupSpamPerms = "K";
// UserRole - User role in group. False if user is not group member.
// UserIsMember - True in user is group member.
// UserIsAuto - True in user is group auto member.
// UserIsOwner - True if user is group owner.
// UserCanInitiate - True if user can invite friends to group.
// UserCanViewGroup - True if user can view group.
// UserCanAutoJoinGroup - True if user can join group automatically.
// UserCanModifyGroup - True if user can modify group.
// UserCanModerateGroup - True if user can moderate group.
if ($userID <= 0)
{
$arReturn["UserRole"] = false;
$arReturn["UserIsMember"] = false;
$arReturn["UserIsAutoMember"] = false;
$arReturn["UserIsOwner"] = false;
$arReturn["UserCanInitiate"] = false;
$arReturn["UserCanProcessRequestsIn"] = false;
$arReturn["UserCanViewGroup"] = ($groupVisible == "Y");
$arReturn["UserCanAutoJoinGroup"] = false;
$arReturn["UserCanModifyGroup"] = false;
$arReturn["UserCanModerateGroup"] = false;
$arReturn["UserCanSpamGroup"] = false;
$arReturn["InitiatedByType"] = false;
$arReturn["Operations"]["viewsystemevents"] = false;
}
else
{
$arUserRoleExtended = CSocNetUserToGroup::GetUserRole($userID, $groupID, true);
$arReturn["UserRole"] = $arUserRoleExtended["ROLE"];
$arReturn["UserIsMember"] = (
$arReturn["UserRole"]
&& in_array($arReturn["UserRole"], \Bitrix\Socialnetwork\UserToGroupTable::getRolesMember())
);
$arReturn["UserIsAutoMember"] = (
$arReturn["UserIsMember"]
&& $arUserRoleExtended["AUTO_MEMBER"] == "Y"
);
$arReturn["InitiatedByType"] = false;
if ($arReturn["UserRole"] == SONET_ROLES_REQUEST)
{
$dbRelation = CSocNetUserToGroup::GetList(array(), array("USER_ID" => $userID, "GROUP_ID" => $groupID), false, false, array("INITIATED_BY_TYPE"));
if ($arRelation = $dbRelation->Fetch())
{
$arReturn["InitiatedByType"] = $arRelation["INITIATED_BY_TYPE"];
}
}
$arReturn["UserIsOwner"] = ($userID == $groupOwnerID);
if ($bCurrentUserIsAdmin)
{
$arReturn["UserCanInitiate"] = true;
$arReturn["UserCanProcessRequestsIn"] = true;
$arReturn["UserCanViewGroup"] = true;
$arReturn["UserCanAutoJoinGroup"] = true;
$arReturn["UserCanModifyGroup"] = true;
$arReturn["UserCanModerateGroup"] = true;
$arReturn["UserCanSpamGroup"] = true;
$arReturn["Operations"]["viewsystemevents"] = true;
}
else
{
if ($arReturn["UserIsMember"])
{
$arReturn["UserCanInitiate"] = (
($groupInitiatePerms == SONET_ROLES_OWNER && $arReturn["UserIsOwner"])
|| (
$groupInitiatePerms == SONET_ROLES_MODERATOR
&& in_array($arReturn["UserRole"], array(SONET_ROLES_OWNER, SONET_ROLES_MODERATOR))
)
|| (
$groupInitiatePerms == SONET_ROLES_USER
&& $arReturn["UserIsMember"]
)
);
$arReturn["UserCanProcessRequestsIn"] = (
$arReturn["UserCanInitiate"]
&& in_array($arReturn["UserRole"], array(SONET_ROLES_OWNER, SONET_ROLES_MODERATOR))
);
$arReturn["UserCanViewGroup"] = true;
$arReturn["UserCanAutoJoinGroup"] = false;
$arReturn["UserCanModifyGroup"] = $arReturn["UserIsOwner"];
$arReturn["UserCanModerateGroup"] = (in_array($arReturn["UserRole"], array(SONET_ROLES_OWNER, SONET_ROLES_MODERATOR)));
$arReturn["UserCanSpamGroup"] = (
($groupSpamPerms == SONET_ROLES_OWNER && $arReturn["UserIsOwner"])
|| ($groupSpamPerms == SONET_ROLES_MODERATOR
&& in_array($arReturn["UserRole"], array(SONET_ROLES_OWNER, SONET_ROLES_MODERATOR)))
|| ($groupSpamPerms == SONET_ROLES_USER && $arReturn["UserIsMember"])
|| ($groupSpamPerms == SONET_ROLES_ALL));
$arReturn["Operations"]["viewsystemevents"] = true;
}
else
{
$arReturn["UserCanInitiate"] = false;
$arReturn["UserCanViewGroup"] = ($groupVisible == "Y");
$arReturn["UserCanAutoJoinGroup"] = ($arReturn["UserCanViewGroup"] && ($groupOpened == "Y"));
$arReturn["UserCanModifyGroup"] = false;
$arReturn["UserCanModerateGroup"] = false;
$arReturn["UserCanSpamGroup"] = ($groupSpamPerms == SONET_ROLES_ALL);
$arReturn["Operations"]["viewsystemevents"] = false;
}
}
}
if (CModule::IncludeModule('extranet') && CExtranet::IsExtranetSite())
{
$arReturn["UserCanSpamGroup"] = true;
}
if (!CBXFeatures::IsFeatureEnabled("WebMessenger"))
{
$arReturn["UserCanSpamGroup"] = false;
}
return $arReturn;
}
public static function __SpeedFileCheckMessages($userID)
{
global $DB;
$userID = IntVal($userID);
if ($userID <= 0)
return;
$cnt = 0;
$dbResult = $DB->Query(
"SELECT COUNT(ID) as CNT ".
"FROM b_sonet_user2group ".
"WHERE USER_ID = ".$userID." ".
" AND ROLE = '".$DB->ForSql(SONET_ROLES_REQUEST, 1)."' ".
" AND INITIATED_BY_TYPE = '".$DB->ForSql(SONET_INITIATED_BY_GROUP, 1)."' "
);
if ($arResult = $dbResult->Fetch())
$cnt = IntVal($arResult["CNT"]);
if ($cnt > 0)
CSocNetUserToGroup::__SpeedFileCreate($userID);
else
CSocNetUserToGroup::__SpeedFileDelete($userID);
}
function __SpeedFileCreate($userID)
{
global $CACHE_MANAGER;
$userID = IntVal($userID);
if ($userID <= 0)
return;
if ($CACHE_MANAGER->Read(86400*30, "socnet_cg_".$userID))
$CACHE_MANAGER->Clean("socnet_cg_".$userID);
}
public static function __SpeedFileDelete($userID)
{
global $CACHE_MANAGER;
$userID = IntVal($userID);
if ($userID <= 0)
return;
if (!$CACHE_MANAGER->Read(86400*30, "socnet_cg_".$userID))
$CACHE_MANAGER->Set("socnet_cg_".$userID, true);
}
function SpeedFileExists($userID)
{
global $CACHE_MANAGER;
$userID = IntVal($userID);
if ($userID <= 0)
return false;
return (!$CACHE_MANAGER->Read(86400*30, "socnet_cg_".$userID));
}
/* Module IM callback */
function OnBeforeConfirmNotify($module, $tag, $value, $arParams)
{
global $USER;
if ($module == "socialnetwork")
{
$arTag = explode("|", $tag);
if (count($arTag) == 4 && $arTag[1] == 'INVITE_GROUP')
{
if ($value == 'Y')
{
self::UserConfirmRequestToBeMember($arTag[2], $arTag[3]);
return true;
}
else
{
self::UserRejectRequestToBeMember($arTag[2], $arTag[3]);
return true;
}
}
elseif (count($arTag) == 6 && $arTag[1] == "REQUEST_GROUP")
{
if ($value == "Y")
{
self::ConfirmRequestToBeMember($USER->GetID(), $arTag[3], array($arTag[4]));
}
else
{
self::RejectRequestToBeMember($USER->GetID(), $arTag[3], array($arTag[4]));
}
if (CModule::IncludeModule('im'))
{
CIMNotify::DeleteBySubTag("SOCNET|REQUEST_GROUP|".$arTag[2]."|".$arTag[3]."|".$arTag[4]);
}
return true;
}
}
}
public static function NotifyImToModerators($arNotifyParams)
{
if (!CModule::IncludeModule("im"))
{
return;
}
if (
!is_array($arNotifyParams)
|| !array_key_exists("TYPE", $arNotifyParams)
|| !in_array($arNotifyParams["TYPE"], array("join", "unjoin", "exclude", "moderate", "unmoderate", "owner"))
|| !array_key_exists("USER_ID", $arNotifyParams)
|| intval($arNotifyParams["USER_ID"]) <= 0
|| !array_key_exists("GROUP_ID", $arNotifyParams)
|| intval($arNotifyParams["GROUP_ID"]) <= 0
|| !array_key_exists("RELATION_ID", $arNotifyParams)
|| intval($arNotifyParams["RELATION_ID"]) <= 0
|| !array_key_exists("GROUP_NAME", $arNotifyParams)
|| strlen($arNotifyParams["GROUP_NAME"]) <= 0
)
{
return;
}
$from_user_id = $message_code = $schema_code = $notify_tag = false;
switch ($arNotifyParams["TYPE"])
{
case "join":
$from_user_id = $arNotifyParams["USER_ID"];
$message_code = "SONET_UG_IM_JOIN";
$schema_code = "inout_group";
$notify_tag = "INOUT_GROUP";
break;
case "unjoin":
$from_user_id = $arNotifyParams["USER_ID"];
$message_code = "SONET_UG_IM_UNJOIN";
$schema_code = "inout_group";
$notify_tag = "INOUT_GROUP";
break;
case "exclude":
$from_user_id = $arNotifyParams["USER_ID"];
$message_code = "SONET_UG_IM_EXCLUDE";
$schema_code = "inout_group";
$notify_tag = "INOUT_GROUP";
break;
case "moderate":
$from_user_id = $arNotifyParams["USER_ID"];
$message_code = "SONET_UG_IM_MODERATE";
$schema_code = "moderators_group";
$notify_tag = "MOD_GROUP";
break;
case "unmoderate":
$from_user_id = $arNotifyParams["USER_ID"];
$message_code = "SONET_UG_IM_UNMODERATE";
$schema_code = "moderators_group";
$notify_tag = "MOD_GROUP";
break;
case "owner":
$from_user_id = $arNotifyParams["USER_ID"];
$message_code = "SONET_UG_IM_OWNER";
$schema_code = "owner_group";
$notify_tag = "OWNER_GROUP";
break;
default:
}
$gender_suffix = "";
$rsUser = CUser::GetByID($arNotifyParams["USER_ID"]);
if ($arUser = $rsUser->Fetch())
{
switch ($arUser["PERSONAL_GENDER"])
{
case "M":
$gender_suffix = "_M";
break;
case "F":
$gender_suffix = "_F";
break;
default:
$gender_suffix = "";
}
}
$arToUserID = array();
$rsUserToGroup = CSocNetUserToGroup::GetList(
array(),
array(
"GROUP_ID" => $arNotifyParams["GROUP_ID"],
"USER_ACTIVE" => "Y",
"<=ROLE" => SONET_ROLES_MODERATOR
),
false,
false,
array("USER_ID")
);
while ($arUserToGroup = $rsUserToGroup->Fetch())
{
$arToUserID[] = $arUserToGroup["USER_ID"];
}
$arMessageFields = array(
"MESSAGE_TYPE" => IM_MESSAGE_SYSTEM,
"FROM_USER_ID" => $from_user_id,
"NOTIFY_TYPE" => IM_NOTIFY_FROM,
"NOTIFY_MODULE" => "socialnetwork",
"NOTIFY_EVENT" => $schema_code,
"NOTIFY_TAG" => "SOCNET|".$notify_tag."|".intval($arNotifyParams["USER_ID"])."|".intval($arNotifyParams["GROUP_ID"])."|".intval($arNotifyParams["RELATION_ID"]),
);
$groups_path = COption::GetOptionString("socialnetwork", "workgroups_page", SITE_DIR."workgroups/");
$group_url_template = str_replace(
$groups_path,
"#GROUPS_PATH#",
COption::GetOptionString("socialnetwork", "group_path_template", SITE_DIR."workgroups/group/#group_id#/")
);
$groupUrl = str_replace(
"#group_id#",
$arNotifyParams["GROUP_ID"],
$group_url_template
);
foreach($arToUserID as $to_user_id)
{
if (
(
is_array($arNotifyParams["EXCLUDE_USERS"])
&& in_array($to_user_id, $arNotifyParams["EXCLUDE_USERS"])
)
|| $to_user_id == $from_user_id
)
{
continue;
}
$arMessageFields["TO_USER_ID"] = $to_user_id;
$arTmp = CSocNetLogTools::ProcessPath(
array(
"GROUP_PAGE" => $groupUrl
),
$to_user_id,
SITE_ID
);
$arMessageFields["NOTIFY_MESSAGE"] = GetMessage($message_code.$gender_suffix, Array(
"#group_name#" => "<a href=\"".$arTmp["URLS"]["GROUP_PAGE"]."\" class=\"bx-notifier-item-action\">".$arNotifyParams["GROUP_NAME"]."</a>",
));
$arMessageFields["NOTIFY_MESSAGE_OUT"] = GetMessage($message_code.$gender_suffix, Array(
"#group_name#" => $arNotifyParams["GROUP_NAME"],
))." (".$arTmp["SERVER_NAME"].$arTmp["URLS"]["GROUP_PAGE"].")";
CIMNotify::Add($arMessageFields);
}
}
public static function getMessage($message)
{
return Loc::getMessage($message);
}
}
?>