%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/socialnetwork/classes/general/ |
| Current File : //home/bitrix/www/bitrix/modules/socialnetwork/classes/general/event_user_view.php |
<?
IncludeModuleLangFile(__FILE__);
class CAllSocNetEventUserView
{
function SetUser($entityID, $feature = false, $permX = false, $bSetFeatures = false)
{
global $APPLICATION, $DB;
$CacheRelatedUsers = array();
$entityID = IntVal($entityID);
if ($entityID <= 0)
{
$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_EUV_EMPTY_ENTITY_ID"), "ERROR_EMPTY_ENTITY_ID");
return false;
}
$event_id = array();
$arSocNetLogEvents = CSocNetAllowed::GetAllowedLogEvents();
foreach ($arSocNetLogEvents as $event_tmp_id => $arLogEventTmp)
{
if (
!array_key_exists("ENTITIES", $arLogEventTmp)
|| !array_key_exists(SONET_ENTITY_USER, $arLogEventTmp["ENTITIES"])
)
continue;
if (
array_key_exists("NO_SET", $arLogEventTmp)
&& $arLogEventTmp["NO_SET"]
)
continue;
if (
array_key_exists("OPERATION", $arLogEventTmp["ENTITIES"][SONET_ENTITY_USER])
&& strlen($arLogEventTmp["ENTITIES"][SONET_ENTITY_USER]["OPERATION"]) <= 0
)
continue;
$event_id[$arLogEventTmp["ENTITIES"][SONET_ENTITY_USER]["OPERATION"]] = $event_tmp_id;
if (
array_key_exists("COMMENT_EVENT", $arLogEventTmp)
&& is_array($arLogEventTmp["COMMENT_EVENT"])
&& array_key_exists("OPERATION", $arLogEventTmp["COMMENT_EVENT"])
&& array_key_exists("EVENT_ID", $arLogEventTmp["COMMENT_EVENT"])
&& strlen($arLogEventTmp["COMMENT_EVENT"]["OPERATION"]) > 0
&& strlen($arLogEventTmp["COMMENT_EVENT"]["EVENT_ID"]) > 0
&& $arLogEventTmp["ENTITIES"][SONET_ENTITY_USER]["OPERATION"] != $arLogEventTmp["COMMENT_EVENT"]["OPERATION"]
)
$event_id[$arLogEventTmp["COMMENT_EVENT"]["OPERATION"]] = $arLogEventTmp["COMMENT_EVENT"]["EVENT_ID"];
}
if ($feature && !array_key_exists($feature, $event_id))
return true;
if ($feature && !is_array($feature))
$event_id = array($feature => $event_id[$feature]);
foreach ($event_id as $op => $event)
{
if (!CSocNetEventUserView::Delete(SONET_ENTITY_USER, $entityID, $event))
{
$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_EUV_ERROR_DELETE"), "ERROR_DELETE");
return false;
}
$ar_event_tmp = array($event);
$arCommentEvent = CSocNetLogTools::FindLogCommentEventByLogEventID($event);
if ($arCommentEvent)
{
$event_comment = $arCommentEvent["EVENT_ID"];
if (!in_array($event_comment, $event_id))
$ar_event_tmp[] = $event_comment;
}
foreach($ar_event_tmp as $event_tmp)
{
if ($feature && $permX)
$perm = $permX;
else
$perm = CSocNetUserPerms::GetOperationPerms($entityID, $op);
if (
array_key_exists(SONET_ENTITY_USER, $CacheRelatedUsers)
&& array_key_exists($entityID, $CacheRelatedUsers[SONET_ENTITY_USER])
&& array_key_exists($perm, $CacheRelatedUsers[SONET_ENTITY_USER][$entityID])
)
$arRelatedUsers = $CacheRelatedUsers[SONET_ENTITY_USER][$entityID][$perm];
else
{
$arRelatedUsers = array();
switch($perm)
{
case SONET_RELATIONS_TYPE_FRIENDS:
$arRelatedUsers[] = array("entity_id" => $entityID, "user_id" => $entityID);
$dbFriends = CSocNetUserRelations::GetRelatedUsers($entityID, SONET_RELATIONS_FRIEND);
while ($arFriends = $dbFriends->Fetch())
{
$friendID = (($entityID == $arFriends["FIRST_USER_ID"]) ? $arFriends["SECOND_USER_ID"] : $arFriends["FIRST_USER_ID"]);
$arRelatedUsers[] = array("entity_id" => $entityID, "user_id" => $friendID);
}
break;
case SONET_RELATIONS_TYPE_FRIENDS2:
$arRelatedUsers[] = array("entity_id" => $entityID, "user_id" => $entityID);
$dbFriends = CSocNetUserRelations::GetRelatedUsers($entityID, SONET_RELATIONS_FRIEND);
while ($arFriends = $dbFriends->Fetch())
{
$friendID = (($entityID == $arFriends["FIRST_USER_ID"]) ? $arFriends["SECOND_USER_ID"] : $arFriends["FIRST_USER_ID"]);
$arRelatedUsers[] = array("entity_id" => $entityID, "user_id" => $friendID);
$dbFriends2 = CSocNetUserRelations::GetRelatedUsers($friendID, SONET_RELATIONS_FRIEND);
while ($arFriends2 = $dbFriends2->Fetch())
{
$friendID2 = (($friendID == $arFriends2["FIRST_USER_ID"]) ? $arFriends2["SECOND_USER_ID"] : $arFriends2["FIRST_USER_ID"]);
if ($friendID2 != $entityID)
$arRelatedUsers[] = array("entity_id" => $entityID, "user_id" => $friendID2, "user_im_id" => $friendID);
}
}
break;
case SONET_RELATIONS_TYPE_NONE:
$arRelatedUsers[] = array("entity_id" => $entityID, "user_id" => $entityID);
break;
case SONET_RELATIONS_TYPE_AUTHORIZED:
$arRelatedUsers[] = array("entity_id" => $entityID, "user_id" => 0);
break;
case SONET_RELATIONS_TYPE_ALL:
$arRelatedUsers = false;
break;
}
}
if (!empty($arRelatedUsers))
$arRelatedUsers = array_unique($arRelatedUsers);
$CacheRelatedUsers[SONET_ENTITY_USER][$entityID][$perm] = $arRelatedUsers;
if($arRelatedUsers && is_array($arRelatedUsers))
{
foreach($arRelatedUsers as $arRelatedUserID)
{
$arFields = array(
"ENTITY_TYPE" => SONET_ENTITY_USER,
"ENTITY_ID" => $arRelatedUserID["entity_id"],
"EVENT_ID" => $event_tmp,
"USER_ID" => $arRelatedUserID["user_id"],
"USER_ANONYMOUS" => "N"
);
if (array_key_exists("user_im_id", $arRelatedUserID))
$arFields["USER_IM_ID"] = $arRelatedUserID["user_im_id"];
if (!CSocNetEventUserView::Add($arFields))
{
$errorMessage = "";
if ($e = $APPLICATION->GetException())
$errorMessage = $e->GetString();
if (StrLen($errorMessage) <= 0)
$errorMessage = GetMessage("SONET_EUV_ERROR_SET");
$APPLICATION->ThrowException($errorMessage, "ERROR_SET");
return false;
}
}
}
elseif($arRelatedUsers === false)
{
$arFields = array(
"ENTITY_TYPE" => SONET_ENTITY_USER,
"ENTITY_ID" => $entityID,
"EVENT_ID" => $event_tmp,
"USER_ID" => 0,
"USER_ANONYMOUS" => "Y"
);
if (!CSocNetEventUserView::Add($arFields))
{
$errorMessage = "";
if ($e = $APPLICATION->GetException())
$errorMessage = $e->GetString();
if (StrLen($errorMessage) <= 0)
$errorMessage = GetMessage("SONET_EUV_ERROR_SET");
$APPLICATION->ThrowException($errorMessage, "ERROR_SET");
return false;
}
}
}
}
if ($bSetFeatures)
{
$arActiveFeatures = array_keys(CSocNetFeatures::GetActiveFeaturesNames(SONET_ENTITY_USER, $entityID));
foreach ($arActiveFeatures as $feature)
{
CSocNetEventUserView::SetFeature(SONET_ENTITY_USER, $entityID, $feature);
}
}
return true;
}
function SetGroup($entityID, $bSetFeatures = false)
{
global $APPLICATION, $DB;
$entityID = IntVal($entityID);
if ($entityID <= 0)
{
$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_EUV_EMPTY_ENTITY_ID"), "ERROR_EMPTY_ENTITY_ID");
return false;
}
$arGroup = CSocNetGroup::GetByID($entityID);
if (!$arGroup)
{
$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_EUV_NO_ENTITY"), "SONET_EUV_NO_ENTITY");
return false;
}
$arLogEvent = array();
$arSocNetLogEvents = CSocNetAllowed::GetAllowedLogEvents();
foreach ($arSocNetLogEvents as $event_tmp_id => $arLogEventTmp)
{
if (
!array_key_exists("ENTITIES", $arLogEventTmp)
|| !array_key_exists(SONET_SUBSCRIBE_ENTITY_GROUP, $arLogEventTmp["ENTITIES"])
)
continue;
if (
array_key_exists("NO_SET", $arLogEventTmp)
&& $arLogEventTmp["NO_SET"]
)
continue;
$arLogEvent[] = $event_tmp_id;
if (
array_key_exists("COMMENT_EVENT", $arLogEventTmp)
&& is_array($arLogEventTmp["COMMENT_EVENT"])
&& array_key_exists("EVENT_ID", $arLogEventTmp["COMMENT_EVENT"])
&& strlen($arLogEventTmp["COMMENT_EVENT"]["EVENT_ID"]) > 0
)
$arLogEvent[] = $arLogEventTmp["COMMENT_EVENT"]["EVENT_ID"];
}
$arLogEvent = array_unique($arLogEvent);
foreach ($arLogEvent as $event_tmp_id)
{
if (!CSocNetEventUserView::Delete(SONET_ENTITY_GROUP, $entityID, $event_tmp_id))
{
$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_EUV_ERROR_DELETE"), "ERROR_DELETE");
return false;
}
}
$dbResult = CSocNetUserToGroup::GetList(
array(),
array(
"GROUP_ID" => $entityID,
"<=ROLE" => SONET_ROLES_USER,
"USER_ACTIVE" => "Y"
),
false,
false,
array("USER_ID")
);
while ($arResult = $dbResult->Fetch())
{
foreach ($arLogEvent as $event_tmp_id)
{
$arFields = array(
"ENTITY_TYPE" => SONET_ENTITY_GROUP,
"ENTITY_ID" => $entityID,
"EVENT_ID" => $event_tmp_id,
"USER_ID" => $arResult["USER_ID"],
"USER_ANONYMOUS" => "N"
);
if (!CSocNetEventUserView::Add($arFields))
{
$errorMessage = "";
if ($e = $APPLICATION->GetException())
$errorMessage = $e->GetString();
if (StrLen($errorMessage) <= 0)
$errorMessage = GetMessage("SONET_EUV_ERROR_SET");
$APPLICATION->ThrowException($errorMessage, "ERROR_SET");
return false;
}
}
}
if ($bSetFeatures)
{
$arActiveFeatures = array_keys(CSocNetFeatures::GetActiveFeaturesNames(SONET_ENTITY_GROUP, $entityID));
foreach ($arActiveFeatures as $feature)
{
CSocNetEventUserView::SetFeature(SONET_ENTITY_GROUP, $entityID, $feature);
}
}
return true;
}
function SetFeature($entityType, $entityID, $feature, $op = false, $permX = false, $bCheckEmpty = false)
{
global $APPLICATION, $DB, $arSocNetAllowedEntityTypes;
$arSocNetFeaturesSettings = CSocNetAllowed::GetAllowedFeatures();
$arSocNetAllowedSubscribeEntityTypesDesc = CSocNetAllowed::GetAllowedEntityTypesDesc();
$CacheRelatedUsers = array();
$entityType = trim($entityType);
if (!in_array($entityType, $arSocNetAllowedEntityTypes))
{
$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_EUV_INCORRECT_ENTITY_TYPE"), "ERROR_INCORRECT_ENTITY_TYPE");
return false;
}
$entityID = IntVal($entityID);
if ($entityID <= 0)
{
$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_EUV_EMPTY_ENTITY_ID"), "ERROR_EMPTY_ENTITY_ID");
return false;
}
if (!$bCheckEmpty || !CSocNetEventUserView::IsEntityEmpty($entityType, $entityID))
{
$event_id = array();
if (!$op || !$permX)
{
if (
array_key_exists($feature, $arSocNetFeaturesSettings)
&& array_key_exists("subscribe_events", $arSocNetFeaturesSettings[$feature])
)
{
foreach ($arSocNetFeaturesSettings[$feature]["subscribe_events"] as $event_id_tmp => $arEventIDTmp)
{
if (
array_key_exists("NO_SET", $arEventIDTmp)
&& $arEventIDTmp["NO_SET"]
)
continue;
if (
!array_key_exists("ENTITIES", $arEventIDTmp)
|| !array_key_exists($entityType, $arEventIDTmp["ENTITIES"])
)
continue;
$event_id[$arEventIDTmp["OPERATION"]][] = $event_id_tmp;
if (
array_key_exists("COMMENT_EVENT", $arEventIDTmp)
&& is_array($arEventIDTmp["COMMENT_EVENT"])
&& array_key_exists("OPERATION", $arEventIDTmp["COMMENT_EVENT"])
&& strlen($arEventIDTmp["COMMENT_EVENT"]["OPERATION"]) > 0
)
$event_id[$arEventIDTmp["OPERATION"]][] = $arEventIDTmp["COMMENT_EVENT"]["EVENT_ID"];
}
if (is_array($event_id[$arEventIDTmp["OPERATION"]]))
$event_id[$arEventIDTmp["OPERATION"]] = array_unique($event_id[$arEventIDTmp["OPERATION"]]);
}
}
else
{
$arOpTmp = array();
if (
array_key_exists($feature, $arSocNetFeaturesSettings)
&& array_key_exists("subscribe_events", $arSocNetFeaturesSettings[$feature])
)
{
foreach ($arSocNetFeaturesSettings[$feature]["subscribe_events"] as $event_id_tmp => $arEventIDTmp)
{
if (
array_key_exists("NO_SET", $arEventIDTmp)
&& $arEventIDTmp["NO_SET"]
)
continue;
if (
!array_key_exists("ENTITIES", $arEventIDTmp)
|| !array_key_exists($entityType, $arEventIDTmp["ENTITIES"])
)
continue;
if (
!array_key_exists("OPERATION", $arEventIDTmp)
|| strlen($arEventIDTmp["OPERATION"]) <= 0
)
continue;
$arOpTmp[] = $arEventIDTmp["OPERATION"];
if (
array_key_exists("COMMENT_EVENT", $arEventIDTmp)
&& is_array($arEventIDTmp["COMMENT_EVENT"])
&& array_key_exists("OPERATION", $arEventIDTmp["COMMENT_EVENT"])
&& strlen($arEventIDTmp["COMMENT_EVENT"]["OPERATION"]) > 0
)
$arOpTmp[] = $arEventIDTmp["COMMENT_EVENT"]["OPERATION"];
}
}
if (is_array($arOpTmp))
$arOpTmp = array_unique($arOpTmp);
if (in_array($op, $arOpTmp))
{
foreach ($arSocNetFeaturesSettings[$feature]["subscribe_events"] as $event_id_tmp => $arEventIDTmp)
{
if ($arEventIDTmp["OPERATION"] == $op)
$event_id[$op][] = $event_id_tmp;
if (
array_key_exists("COMMENT_EVENT", $arEventIDTmp)
&& is_array($arEventIDTmp["COMMENT_EVENT"])
&& array_key_exists("OPERATION", $arEventIDTmp["COMMENT_EVENT"])
&& $arEventIDTmp["COMMENT_EVENT"]["OPERATION"] == $op
)
$event_id[$op][] = $arEventIDTmp["COMMENT_EVENT"]["EVENT_ID"];
}
if (is_array($event_id[$op]))
$event_id[$op] = array_unique($event_id[$op]);
}
else
return true;
}
if
(
intval($entityID) > 0
&& array_key_exists($entityType, $arSocNetAllowedSubscribeEntityTypesDesc)
&& array_key_exists("CLASS_DESC_GET", $arSocNetAllowedSubscribeEntityTypesDesc[$entityType])
&& array_key_exists("METHOD_DESC_GET", $arSocNetAllowedSubscribeEntityTypesDesc[$entityType])
)
$arEntityTmp = call_user_func(
array(
$arSocNetAllowedSubscribeEntityTypesDesc[$entityType]["CLASS_DESC_GET"],
$arSocNetAllowedSubscribeEntityTypesDesc[$entityType]["METHOD_DESC_GET"]
),
$entityID
);
foreach ($event_id as $op => $arEvent)
{
$arRelatedUsers = array();
if (is_array($arEvent))
{
foreach($arEvent as $event)
{
if (!CSocNetEventUserView::Delete($entityType, $entityID, $feature, $event))
{
$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_EUV_ERROR_DELETE"), "ERROR_DELETE");
return false;
}
if (!$feature || !$permX)
$perm = CSocNetFeaturesPerms::GetOperationPerm($entityType, $entityID, $feature, $op);
else
$perm = $permX;
if (
$entityType == SONET_SUBSCRIBE_ENTITY_GROUP
&& $arEntityTmp
&& $arEntityTmp["VISIBLE"] == "N"
&& $perm > SONET_ROLES_USER
)
$perm = SONET_ROLES_USER;
elseif ($entityType == SONET_SUBSCRIBE_ENTITY_USER)
{
$perm_profile = CSocNetUserPerms::GetOperationPerms($entityID, "viewprofile");
if ($perm < $perm_profile)
$perm = $perm_profile;
}
if (
array_key_exists($entityType, $CacheRelatedUsers)
&& array_key_exists($entityID, $CacheRelatedUsers[$entityType])
&& array_key_exists($perm, $CacheRelatedUsers[$entityType][$entityID])
)
$arRelatedUsers = $CacheRelatedUsers[$entityType][$entityID][$perm];
else
{
if ($entityType == SONET_SUBSCRIBE_ENTITY_USER)
{
switch($perm)
{
case SONET_RELATIONS_TYPE_FRIENDS:
$arRelatedUsers[] = array("entity_id" => $entityID, "user_id" => $entityID);
$dbFriends = CSocNetUserRelations::GetRelatedUsers($entityID, SONET_RELATIONS_FRIEND);
while ($arFriends = $dbFriends->Fetch())
{
$friendID = (($entityID == $arFriends["FIRST_USER_ID"]) ? $arFriends["SECOND_USER_ID"] : $arFriends["FIRST_USER_ID"]);
$arRelatedUsers[] = array("entity_id" => $entityID, "user_id" => $friendID);
}
break;
case SONET_RELATIONS_TYPE_FRIENDS2:
$arRelatedUsers[] = array("entity_id" => $entityID, "user_id" => $entityID);
$dbFriends = CSocNetUserRelations::GetRelatedUsers($entityID, SONET_RELATIONS_FRIEND);
while ($arFriends = $dbFriends->Fetch())
{
$friendID = (($entityID == $arFriends["FIRST_USER_ID"]) ? $arFriends["SECOND_USER_ID"] : $arFriends["FIRST_USER_ID"]);
$arRelatedUsers[] = array("entity_id" => $entityID, "user_id" => $friendID);
$dbFriends2 = CSocNetUserRelations::GetRelatedUsers($friendID, SONET_RELATIONS_FRIEND);
while ($arFriends2 = $dbFriends2->Fetch())
{
$friendID2 = (($friendID == $arFriends2["FIRST_USER_ID"]) ? $arFriends2["SECOND_USER_ID"] : $arFriends2["FIRST_USER_ID"]);
if ($friendID2 != $entityID)
$arRelatedUsers[] = array("entity_id" => $entityID, "user_id" => $friendID2, "user_im_id" => $friendID);
}
}
break;
case SONET_RELATIONS_TYPE_NONE:
$arRelatedUsers[] = array("entity_id" => $entityID, "user_id" => $entityID);
break;
case SONET_RELATIONS_TYPE_AUTHORIZED:
$arRelatedUsers[] = array("entity_id" => $entityID, "user_id" => 0);
break;
case SONET_RELATIONS_TYPE_ALL:
$arRelatedUsers = false;
break;
}
if (!empty($arRelatedUsers))
$arRelatedUsers = array_unique($arRelatedUsers);
$CacheRelatedUsers[SONET_ENTITY_USER][$entityID][$perm] = $arRelatedUsers;
}
elseif ($entityType == SONET_SUBSCRIBE_ENTITY_GROUP)
{
switch($perm)
{
case SONET_ROLES_USER:
$dbResult = CSocNetUserToGroup::GetList(
array(),
array(
"GROUP_ID" => $entityID,
"<=ROLE" => SONET_ROLES_USER,
"USER_ACTIVE" => "Y"
),
false,
false,
array("USER_ID")
);
while ($arResult = $dbResult->Fetch())
$arRelatedUsers[] = $arResult["USER_ID"];
break;
case SONET_ROLES_MODERATOR:
$dbResult = CSocNetUserToGroup::GetList(
array(),
array(
"GROUP_ID" => $entityID,
"<=ROLE" => SONET_ROLES_MODERATOR,
"USER_ACTIVE" => "Y"
),
false,
false,
array("USER_ID")
);
while ($arResult = $dbResult->Fetch())
$arRelatedUsers[] = $arResult["USER_ID"];
break;
case SONET_ROLES_OWNER:
$dbResult = CSocNetUserToGroup::GetList(
array(),
array(
"GROUP_ID" => $entityID,
"<=ROLE" => SONET_ROLES_OWNER,
"USER_ACTIVE" => "Y"
),
false,
false,
array("USER_ID")
);
while ($arResult = $dbResult->Fetch())
$arRelatedUsers[] = $arResult["USER_ID"];
break;
case SONET_ROLES_AUTHORIZED:
$arRelatedUsers[] = 0;
break;
case SONET_ROLES_ALL:
$arRelatedUsers = false;
break;
}
if ($arRelatedUsers && is_array($arRelatedUsers) && in_array(0, $arRelatedUsers))
$arRelatedUsers = array(0);
elseif ($arRelatedUsers && is_array($arRelatedUsers))
$arRelatedUsers = array_unique($arRelatedUsers);
$CacheRelatedUsers[SONET_ENTITY_GROUP][$entityID][$perm] = $arRelatedUsers;
}
}
if($arRelatedUsers && is_array($arRelatedUsers))
{
foreach($arRelatedUsers as $relatedUserID)
{
if (is_array($relatedUserID))
{
$arFields = array(
"ENTITY_TYPE" => $entityType,
"ENTITY_ID" => $relatedUserID["entity_id"],
"EVENT_ID" => $event,
"USER_ID" => $relatedUserID["user_id"],
"USER_ANONYMOUS" => "N"
);
if (array_key_exists("user_im_id", $relatedUserID))
$arFields["USER_IM_ID"] = $relatedUserID["user_im_id"];
if (!CSocNetEventUserView::Add($arFields))
{
$errorMessage = "";
if ($e = $APPLICATION->GetException())
$errorMessage = $e->GetString();
if (StrLen($errorMessage) <= 0)
$errorMessage = GetMessage("SONET_EUV_ERROR_SET");
$APPLICATION->ThrowException($errorMessage, "ERROR_SET");
return false;
}
}
else
{
$arFields = array(
"ENTITY_TYPE" => $entityType,
"ENTITY_ID" => $entityID,
"EVENT_ID" => $event,
"USER_ID" => $relatedUserID,
"USER_ANONYMOUS" => "N"
);
if (!CSocNetEventUserView::Add($arFields))
{
$errorMessage = "";
if ($e = $APPLICATION->GetException())
$errorMessage = $e->GetString();
if (StrLen($errorMessage) <= 0)
$errorMessage = GetMessage("SONET_EUV_ERROR_SET");
$APPLICATION->ThrowException($errorMessage, "ERROR_SET");
return false;
}
}
}
}
else
{
$arFields = array(
"ENTITY_TYPE" => $entityType,
"ENTITY_ID" => $entityID,
"EVENT_ID" => $event,
"USER_ID" => 0,
"USER_ANONYMOUS" => "Y"
);
if (!CSocNetEventUserView::Add($arFields))
{
$errorMessage = "";
if ($e = $APPLICATION->GetException())
$errorMessage = $e->GetString();
if (StrLen($errorMessage) <= 0)
$errorMessage = GetMessage("SONET_EUV_ERROR_SET");
$APPLICATION->ThrowException($errorMessage, "ERROR_SET");
return false;
}
}
}
}
}
}
elseif($entityType == SONET_ENTITY_GROUP)
CSocNetEventUserView::SetGroup($entityID, true);
elseif($entityType == SONET_ENTITY_USER)
CSocNetEventUserView::SetUser($entityID, false, false, true);
return true;
}
function Entity2UserAdd($entityType, $entityID, $userID, $role)
{
global $APPLICATION, $DB, $arSocNetAllowedEntityTypes;
$CacheRelatedUsers = array();
$entityType = trim($entityType);
if (!in_array($entityType, $arSocNetAllowedEntityTypes))
{
$APPLICATION->ThrowException(GetMessage("SONET_EUV_INCORRECT_ENTITY_TYPE"), "ERROR_INCORRECT_ENTITY_TYPE");
return false;
}
$entityID = IntVal($entityID);
if ($entityID <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_EUV_EMPTY_ENTITY_ID"), "ERROR_EMPTY_ENTITY_ID");
return false;
}
$userID = IntVal($userID);
if ($userID <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_EUV_EMPTY_USER_ID"), "ERROR_EMPTY_USER_ID");
return false;
}
if (is_array($role))
{
if (count($role) <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_EUV_EMPTY_ROLE"), "ERROR_EMPTY_ROLE");
return false;
}
}
else
{
$role = trim($role);
if (strlen($role) <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_EUV_EMPTY_ROLE"), "ERROR_EMPTY_ROLE");
return false;
}
$role = array($role);
}
if (!CSocNetEventUserView::IsEntityEmpty($entityType, $entityID))
{
$arEvents = array();
$arSocNetLogEvents = CSocNetAllowed::GetAllowedLogEvents();
foreach ($arSocNetLogEvents as $event_tmp_id => $arLogEventTmp)
{
if (
!array_key_exists("ENTITIES", $arLogEventTmp)
|| !array_key_exists($entityType, $arLogEventTmp["ENTITIES"])
)
continue;
if (
array_key_exists("NO_SET", $arLogEventTmp)
&& $arLogEventTmp["NO_SET"]
)
continue;
$arEvents[] = $event_tmp_id;
if (
array_key_exists("COMMENT_EVENT", $arLogEventTmp)
&& is_array($arLogEventTmp["COMMENT_EVENT"])
&& array_key_exists("EVENT_ID", $arLogEventTmp["COMMENT_EVENT"])
&& strlen($arLogEventTmp["COMMENT_EVENT"]["EVENT_ID"]) > 0
)
$arEvents[] = $arLogEventTmp["COMMENT_EVENT"]["EVENT_ID"];
}
$arSocNetFeaturesSettings = CSocNetAllowed::GetAllowedEntityTypes();
foreach ($arSocNetFeaturesSettings as $feature => $arFeature)
{
if (!array_key_exists("subscribe_events", $arFeature))
{
continue;
}
foreach ($arFeature["subscribe_events"] as $event_id_tmp => $arEventIDTmp)
{
if (
array_key_exists("NO_SET", $arEventIDTmp)
&& $arEventIDTmp["NO_SET"]
)
continue;
if (
!array_key_exists("OPERATION", $arEventIDTmp)
|| strlen($arEventIDTmp["OPERATION"]) <= 0
)
continue;
$featureOperationPerms = CSocNetFeaturesPerms::GetOperationPerm($entityType, $entityID, $feature, $arEventIDTmp["OPERATION"]);
if (in_array($featureOperationPerms, $role))
$arEvents[] = $event_id_tmp;
if (
array_key_exists("COMMENT_EVENT", $arEventIDTmp)
&& is_array($arEventIDTmp["COMMENT_EVENT"])
&& array_key_exists("EVENT_ID", $arEventIDTmp["COMMENT_EVENT"])
&& array_key_exists("OPERATION", $arEventIDTmp["COMMENT_EVENT"])
&& strlen($arEventIDTmp["COMMENT_EVENT"]["EVENT_ID"]) > 0
&& strlen($arEventIDTmp["COMMENT_EVENT"]["OPERATION"]) > 0
&& ($arEventIDTmp["COMMENT_EVENT"]["EVENT_ID"] != $event_id_tmp)
)
{
$featureOperationPerms = CSocNetFeaturesPerms::GetOperationPerm($entityType, $entityID, $feature, $arEventIDTmp["COMMENT_EVENT"]["OPERATION"]);
if (in_array($featureOperationPerms, $role))
$arEvents[] = $arEventIDTmp["COMMENT_EVENT"]["EVENT_ID"];
}
}
}
$arEvents = array_unique($arEvents);
foreach($arEvents as $event)
{
$arFieldsEUV = array(
"ENTITY_TYPE" => SONET_ENTITY_GROUP,
"ENTITY_ID" => $entityID,
"EVENT_ID" => $event,
"USER_ID" => $userID,
"USER_ANONYMOUS" => "N"
);
CSocNetEventUserView::Add($arFieldsEUV);
}
}
elseif($entityType == SONET_ENTITY_GROUP)
CSocNetEventUserView::SetGroup($entityID, true);
elseif($entityType == SONET_ENTITY_USER)
CSocNetEventUserView::SetUser($entityID, false, false, true);
}
function CheckFields($ACTION, &$arFields)
{
global $DB;
$arSocNetAllowedSubscribeEntityTypes = CSocNetAllowed::GetAllowedEntityTypes();
if (!array_key_exists("ENTITY_TYPE", $arFields))
{
$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_EUV_EMPTY_ENTITY_TYPE"), "ERROR_EMPTY_ENTITY_TYPE");
return false;
}
if (!in_array($arFields["ENTITY_TYPE"], CSocNetAllowed::GetAllowedEntityTypes()))
{
$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_EUV_INCORRECT_ENTITY_TYPE"), "ERROR_INCORRECT_ENTITY_TYPE");
return false;
}
if (!array_key_exists("ENTITY_ID", $arFields))
{
$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_EUV_EMPTY_ENTITY_ID"), "ERROR_EMPTY_ENTITY_ID");
return false;
}
// check primary key
if ($ACTION == "ADD")
{
$dbResult = CSocNetEventUserView::GetList(
Array("ENTITY_ID" => "DESC"),
Array(
"ENTITY_TYPE" => $arFields["ENTITY_TYPE"],
"ENTITY_ID" => intval($arFields["ENTITY_ID"]),
"EVENT_ID" => (array_key_exists("EVENT_ID", $arFields) ? $arFields["EVENT_ID"] : ""),
"USER_ID" => (array_key_exists("USER_ID", $arFields) ? intval($arFields["USER_ID"]) : 0),
"USER_IM_ID" => (array_key_exists("USER_IM_ID", $arFields) ? intval($arFields["USER_IM_ID"]) : 0)
)
);
if ($arRes = $dbResult->Fetch())
{
$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_EUV_RECORD_EXISTS"), "ERROR_RECORD_EXISTS");
return false;
}
}
return True;
}
function Delete($entityType, $entityID, $feature = false, $event = false)
{
global $DB;
$arSocNetAllowedSubscribeEntityTypes = CSocNetAllowed::GetAllowedEntityTypes();
$arSocNetFeaturesSettings = CSocNetAllowed::GetAllowedFeatures();
$arSocNetLogEvents = CSocNetAllowed::GetAllowedLogEvents();
$entityType = trim($entityType);
if (!in_array($entityType, CSocNetAllowed::GetAllowedEntityTypes()))
{
$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_EUV_INCORRECT_ENTITY_TYPE"), "ERROR_INCORRECT_ENTITY_TYPE");
return false;
}
$entityID = IntVal($entityID);
if ($entityID <= 0)
{
$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_EUV_EMPTY_ENTITY_ID"), "ERROR_EMPTY_ENTITY_ID");
return false;
}
$strWhere = " WHERE ENTITY_TYPE = '".$entityType."' AND ENTITY_ID = ".$entityID;
if ($feature)
{
if ($event)
$strWhere .= " AND EVENT_ID = '".$event."'";
else
{
$event_id = array();
if (
(
array_key_exists($feature, $arSocNetLogEvents)
&& array_key_exists("ENTITIES", $arSocNetLogEvents[$feature])
&& array_key_exists($entityType, $arSocNetLogEvents[$feature]["ENTITIES"])
)
||
(
array_key_exists($feature, $arSocNetFeaturesSettings)
&& array_key_exists("subscribe_events", $arSocNetFeaturesSettings[$feature])
&& count($arSocNetFeaturesSettings[$feature]["subscribe_events"]) > 0
)
)
{
if (array_key_exists($feature, $arSocNetLogEvents))
{
$event_id[] = $feature;
if (
array_key_exists("COMMENT_EVENT", $arSocNetLogEvents[$feature])
&& is_array($arSocNetLogEvents[$feature]["COMMENT_EVENT"])
&& array_key_exists("EVENT_ID", $arSocNetLogEvents[$feature]["COMMENT_EVENT"])
&& strlen($arSocNetLogEvents[$feature]["COMMENT_EVENT"]["EVENT_ID"]) > 0
)
$event_id[] = $arSocNetLogEvents[$feature]["COMMENT_EVENT"]["EVENT_ID"];
}
if (
array_key_exists($feature, $arSocNetFeaturesSettings)
&& array_key_exists("subscribe_events", $arSocNetFeaturesSettings[$feature])
&& count($arSocNetFeaturesSettings[$feature]["subscribe_events"]) > 0
)
{
foreach ($arSocNetFeaturesSettings[$feature]["subscribe_events"] as $event_id_tmp => $arEventIDTmp)
{
if (
array_key_exists("NO_SET", $arEventIDTmp)
&& $arEventIDTmp["NO_SET"]
)
{
continue;
}
$event_id[] = $event_id_tmp;
if (
array_key_exists("COMMENT_EVENT", $arEventIDTmp)
&& is_array($arEventIDTmp["COMMENT_EVENT"])
&& array_key_exists("EVENT_ID", $arEventIDTmp["COMMENT_EVENT"])
&& strlen($arEventIDTmp["COMMENT_EVENT"]["EVENT_ID"]) > 0
)
$event_id[] = $arEventIDTmp["COMMENT_EVENT"]["EVENT_ID"];
}
}
$event_id = array_unique($event_id);
$strWhere .= " AND (";
$i = 0;
foreach ($event_id as $ev)
{
if ($i > 0)
$strWhere .= " OR ";
$strWhere .= "EVENT_ID = '".$ev."'";
$i++;
}
$strWhere .= ")";
}
}
}
$bSuccess = $DB->Query("DELETE FROM b_sonet_event_user_view".$strWhere, true);
return $bSuccess;
}
function IsEntityEmpty($entityType, $entityID)
{
global $arSocNetAllowedEntityTypes;
$entityType = trim($entityType);
if (!in_array($entityType, $arSocNetAllowedEntityTypes))
{
$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_EUV_INCORRECT_ENTITY_TYPE"), "ERROR_INCORRECT_ENTITY_TYPE");
return false;
}
$entityID = IntVal($entityID);
if ($entityID <= 0)
{
$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_EUV_EMPTY_ENTITY_ID"), "ERROR_EMPTY_ENTITY_ID");
return false;
}
$iCnt = CSocNetEventUserView::GetList(array(), array("ENTITY_TYPE" => $entityType, "ENTITY_ID" => $entityID), array());
if (intval($iCnt) > 0)
return false;
else
return true;
}
function CheckPermissions($table, $user_id)
{
if ($user_id === false)
$strUser = " AND EUV.USER_ANONYMOUS = 'Y' AND EUV.USER_ID = 0";
else
$strUser = " AND EUV.USER_ID IN (".intval($user_id).", 0)";
return "INNER JOIN b_sonet_event_user_view EUV ".(strtolower($GLOBALS["DB"]->type) == "mysql" ? "USE INDEX (IX_SONET_EVENT_USER_VIEW_2)" : "")." ON
EUV.ENTITY_TYPE = ".$table.".ENTITY_TYPE
AND (
EUV.ENTITY_ID = ".$table.".ENTITY_ID
OR EUV.ENTITY_ID = 0
)
AND EUV.EVENT_ID = ".$table.".EVENT_ID ".$strUser;
}
function CheckPermissionsByEvent($entity_type, $entity_id, $event_id, $user_id)
{
global $DB;
$user_id = IntVal($user_id);
if ($user_id <= 0)
$user_id = $GLOBALS["USER"]->GetID();
if ($user_id <= 0)
return false;
$entity_id = IntVal($entity_id);
if ($entity_id <= 0)
return false;
$entity_type = trim($entity_type);
if (strlen($entity_type) <= 0)
return false;
$event_id = trim($event_id);
if (strlen($event_id) <= 0)
return false;
$strSQL = "SELECT USER_ID FROM b_sonet_event_user_view WHERE
ENTITY_TYPE = '".$DB->ForSQL($entity_type)."'
AND ENTITY_ID IN (0, ".$entity_id.")
AND EVENT_ID = '".$DB->ForSQL($event_id)."'
AND USER_ID IN (0, ".$user_id.")";
$dbRes = $GLOBALS["DB"]->Query($strSQL, false, "File: ".__FILE__."<br>Line: ".__LINE__);
if ($arRes = $dbRes->Fetch())
return true;
else
return false;
}
}
?>