function SetFeaturePermissions($entity_type, $entity_id, $feature, $operation, $new_perm) { if (substr($operation, 0, 4) == "view") { if (CModule::IncludeModule('search')) { global $arSonetFeaturesPermsCache; unset($arSonetFeaturesPermsCache[$entity_type . "_" . $entity_id]); $arGroups = CSocNetSearch::GetSearchGroups($entity_type, $entity_id, $feature, $operation); $arParams = CSocNetSearch::GetSearchParams($entity_type, $entity_id, $feature, $operation); CSearch::ChangePermission(false, $arGroups, false, false, false, false, $arParams); } } if ($feature == "blog" && in_array($operation, array("view_post", "view_comment")) && CModule::IncludeModule('blog')) { if ($operation == "view_post") { CBlogPost::ChangeSocNetPermission($entity_type, $entity_id, $operation); } if ($operation == "view_post") { $arPost = CBlogPost::GetSocNetPostsPerms($entity_type, $entity_id); foreach ($arPost as $id => $perms) { CSearch::ChangePermission("blog", $perms["PERMS"], "P" . $id); } } else { $arTmpCache = array(); $arPost = CBlogPost::GetSocNetPostsPerms($entity_type, $entity_id); $dbComment = CBlogComment::GetSocNetPostsPerms($entity_type, $entity_id); while ($arComment = $dbComment->Fetch()) { if (!empty($arPost[$arComment["POST_ID"]])) { if (empty($arPost[$arComment["POST_ID"]]["PERMS_CALC"])) { $arPost[$arComment["POST_ID"]]["PERMS_CALC"] = array(); if (is_array($arPost[$arComment["POST_ID"]]["PERMS_FULL"]) && !empty($arPost[$arComment["POST_ID"]]["PERMS_FULL"])) { foreach ($arPost[$arComment["POST_ID"]]["PERMS_FULL"] as $e => $v) { if (in_array($v["TYPE"], array("SG", "U"))) { $type = $v["TYPE"] == "SG" ? "G" : "U"; if (array_key_exists($type . $v["ID"], $arTmpCache)) { $spt = $arTmpCache[$type . $v["ID"]]; } else { $spt = CBlogPost::GetSocnetGroups($type, $v["ID"], "view_comment"); $arTmpCache[$type . $v["ID"]] = $spt; } foreach ($spt as $vv) { if (!in_array($vv, $arPost[$arComment["POST_ID"]]["PERMS_CALC"])) { $arPost[$arComment["POST_ID"]]["PERMS_CALC"][] = $vv; } } } else { $arPost[$arComment["POST_ID"]]["PERMS_CALC"][] = $e; } } } } CSearch::ChangePermission("blog", $arPost[$arComment["POST_ID"]]["PERMS_CALC"], "C" . $arComment["ID"]); } } } } }
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]); } global $arSocNetUserInRoleCache; $arSocNetUserInRoleCache = array(); CSocNetUserToGroup::__SpeedFileDelete($userID); CSocNetSearch::OnUserRelationsChange($userID); return $bSuccess; }
function Update($ID, $arFields) { global $DB; if (!CSocNetGroup::__ValidateID($ID)) { return false; } $ID = IntVal($ID); $arFields1 = array(); foreach ($arFields as $key => $value) { if (substr($key, 0, 1) == "=") { $arFields1[substr($key, 1)] = $value; unset($arFields[$key]); } } if (!CSocNetUserRelations::CheckFields("UPDATE", $arFields, $ID)) { return false; } $db_events = GetModuleEvents("socialnetwork", "OnBeforeSocNetUserRelationsUpdate"); while ($arEvent = $db_events->Fetch()) { if (ExecuteModuleEventEx($arEvent, array($ID, $arFields)) === false) { return false; } } $arUserRelationOld = CSocNetUserRelations::GetByID($ID); $strUpdate = $DB->PrepareUpdate("b_sonet_user_relations", $arFields); foreach ($arFields1 as $key => $value) { if (strlen($strUpdate) > 0) { $strUpdate .= ", "; } $strUpdate .= $key . "=" . $value . " "; } if (strlen($strUpdate) > 0) { $strSql = "UPDATE b_sonet_user_relations SET " . "\t" . $strUpdate . " " . "WHERE ID = " . $ID . " "; $DB->Query($strSql, False, "File: " . __FILE__ . "<br>Line: " . __LINE__); $events = GetModuleEvents("socialnetwork", "OnSocNetUserRelationsUpdate"); while ($arEvent = $events->Fetch()) { ExecuteModuleEventEx($arEvent, array($ID, $arFields)); } if ((!array_key_exists("SEND_MAIL", $arFields) || $arFields["SEND_MAIL"] != "N") && !IsModuleInstalled("im")) { $mailType = ""; if ($arUserRelationOld["RELATION"] != SONET_RELATIONS_FRIEND && $arFields["RELATION"] == SONET_RELATIONS_FRIEND) { $mailType = "AGREE_FRIEND"; } elseif ($arUserRelationOld["RELATION"] != SONET_RELATIONS_BAN && $arFields["RELATION"] == SONET_RELATIONS_BAN) { $mailType = "BAN_FRIEND"; } elseif ($arUserRelationOld["RELATION"] != SONET_RELATIONS_REQUEST && $arFields["RELATION"] == SONET_RELATIONS_REQUEST) { $mailType = "INVITE_FRIEND"; } if (StrLen($mailType) > 0) { CSocNetUserRelations::SendEvent($ID, $mailType); } } CSocNetSearch::OnUserRelationsChange($arUserRelationOld["FIRST_USER_ID"]); CSocNetSearch::OnUserRelationsChange($arUserRelationOld["SECOND_USER_ID"]); } else { $ID = False; } return $ID; }
function Update($ID, $arFields) { global $DB; if (!CSocNetGroup::__ValidateID($ID)) { return false; } $ID = IntVal($ID); $arUser2GroupOld = CSocNetUserToGroup::GetByID($ID); if (!$arUser2GroupOld) { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_NO_USER2GROUP"), "ERROR_NO_USER2GROUP"); return false; } $arFields1 = array(); foreach ($arFields as $key => $value) { if (substr($key, 0, 1) == "=") { $arFields1[substr($key, 1)] = $value; unset($arFields[$key]); } } if (!CSocNetUserToGroup::CheckFields("UPDATE", $arFields, $ID)) { return false; } $db_events = GetModuleEvents("socialnetwork", "OnBeforeSocNetUserToGroupUpdate"); while ($arEvent = $db_events->Fetch()) { if (ExecuteModuleEventEx($arEvent, array($ID, $arFields)) === false) { return false; } } $strUpdate = $DB->PrepareUpdate("b_sonet_user2group", $arFields); foreach ($arFields1 as $key => $value) { if (strlen($strUpdate) > 0) { $strUpdate .= ", "; } $strUpdate .= $key . "=" . $value . " "; } if (strlen($strUpdate) > 0) { $strSql = "UPDATE b_sonet_user2group SET " . "\t" . $strUpdate . " " . "WHERE ID = " . $ID . " "; $DB->Query($strSql, False, "File: " . __FILE__ . "<br>Line: " . __LINE__); CSocNetGroup::SetStat($arUser2GroupOld["GROUP_ID"]); CSocNetSearch::OnUserRelationsChange($arUser2GroupOld["USER_ID"]); if (array_key_exists("GROUP_ID", $arFields) && $arUser2GroupOld["GROUP_ID"] != $arFields["GROUP_ID"]) { CSocNetGroup::SetStat($arFields["GROUP_ID"]); } $events = GetModuleEvents("socialnetwork", "OnSocNetUserToGroupUpdate"); while ($arEvent = $events->Fetch()) { ExecuteModuleEventEx($arEvent, array($ID, $arFields)); } global $arSocNetUserInRoleCache; if (!isset($arSocNetUserInRoleCache) || !is_array($arSocNetUserInRoleCache)) { $arSocNetUserInRoleCache = array(); } if (array_key_exists($arUser2GroupOld["USER_ID"] . "_" . $arUser2GroupOld["GROUP_ID"], $arSocNetUserInRoleCache)) { unset($arSocNetUserInRoleCache[$arUser2GroupOld["USER_ID"] . "_" . $arUser2GroupOld["GROUP_ID"]]); } if (defined("BX_COMP_MANAGED_CACHE")) { $GLOBALS["CACHE_MANAGER"]->ClearByTag("sonet_user2group_G" . $arUser2GroupOld["GROUP_ID"]); $GLOBALS["CACHE_MANAGER"]->ClearByTag("sonet_user2group_U" . $arUser2GroupOld["USER_ID"]); $GLOBALS["CACHE_MANAGER"]->ClearByTag("sonet_user2group"); } } else { $ID = False; } return $ID; }
function DeleteNoDemand($userID) { global $DB; if (!CSocNetGroup::__ValidateID($userID)) return false; $userID = IntVal($userID); $bSuccess = True; $rsUser2UserOld = $DB->Query("SELECT * FROM b_sonet_user_relations WHERE FIRST_USER_ID = ".$userID." OR SECOND_USER_ID = ".$userID.""); while($arUser2UserOld = $rsUser2UserOld->Fetch()) { CSocNetSearch::OnUserRelationsChange($arUser2UserOld["FIRST_USER_ID"]); CSocNetSearch::OnUserRelationsChange($arUser2UserOld["SECOND_USER_ID"]); } if ($bSuccess) $bSuccess = $DB->Query("DELETE FROM b_sonet_user_relations WHERE FIRST_USER_ID = ".$userID." OR SECOND_USER_ID = ".$userID."", true); if ($bSuccess) $DB->Query("DELETE FROM b_sonet_event_user_view WHERE ENTITY_TYPE = '".SONET_ENTITY_USER."' AND ( USER_ID = ".$userID." OR ENTITY_ID = ".$userID." OR USER_IM_ID = ".$userID." )", true); CSocNetUserRelations::__SpeedFileDelete($userID); return $bSuccess; }
/** * Метод снимает документ с публикации. То есть делает его недоступным в публичной части сайта. * * @param string $documentId - код документа. */ public function UnpublishDocument($documentId) { global $DB; $documentId = intval($documentId); if ($documentId <= 0) { return; } $diskId = self::processGetDiskIdByDocId((int) $documentId); if ($diskId !== null) { self::proxyToDisk(__FUNCTION__, array($diskId)); } CIBlockElement::WF_CleanUpHistoryCopies($documentId, 0); $strSql = "update b_iblock_element set WF_STATUS_ID='2', WF_NEW='Y' WHERE ID=" . intval($documentId) . " AND WF_PARENT_ELEMENT_ID IS NULL"; $z = $DB->Query($strSql, false, "FILE: " . __FILE__ . "<br>LINE: " . __LINE__); CSocNetSearch::IBlockElementDelete(array("ID" => $documentId)); }
function SetPerm($featureID, $operation, $perm) { $arSocNetFeaturesSettings = CSocNetAllowed::GetAllowedFeatures(); $featureID = IntVal($featureID); $operation = Trim($operation); $perm = Trim($perm); $dbResult = CSocNetFeaturesPerms::GetList(array(), array("FEATURE_ID" => $featureID, "OPERATION_ID" => $operation), false, false, array("ID", "FEATURE_ENTITY_TYPE", "FEATURE_ENTITY_ID", "FEATURE_FEATURE", "OPERATION_ID", "ROLE")); if ($arResult = $dbResult->Fetch()) { $r = CSocNetFeaturesPerms::Update($arResult["ID"], array("ROLE" => $perm)); } else { $r = CSocNetFeaturesPerms::Add(array("FEATURE_ID" => $featureID, "OPERATION_ID" => $operation, "ROLE" => $perm)); } if (!$r) { $errorMessage = ""; if ($e = $GLOBALS["APPLICATION"]->GetException()) { $errorMessage = $e->GetString(); } if (StrLen($errorMessage) <= 0) { $errorMessage = GetMessage("SONET_GF_ERROR_SET") . "."; } $GLOBALS["APPLICATION"]->ThrowException($errorMessage, "ERROR_SET_RECORD"); return false; } else { if (!$arResult) { $arFeature = CSocNetFeatures::GetByID($featureID); $entity_type = $arFeature["ENTITY_TYPE"]; $entity_id = $arFeature["ENTITY_ID"]; $feature = $arFeature["FEATURE"]; } else { $entity_type = $arResult["FEATURE_ENTITY_TYPE"]; $entity_id = $arResult["FEATURE_ENTITY_ID"]; $feature = $arResult["FEATURE_FEATURE"]; } if (empty($arResult) || $arResult["ROLE"] != $perm) { if ($arResult && $arResult["ROLE"] != $perm) { CSocNetSearch::SetFeaturePermissions($entity_type, $entity_id, $feature, $arResult["OPERATION_ID"], $perm); } else { CSocNetSearch::SetFeaturePermissions($entity_type, $entity_id, $feature, $operation, $perm); } } if (!in_array($feature, array("tasks", "files", "blog")) && is_array($arSocNetFeaturesSettings[$feature]["subscribe_events"])) { $arEventsTmp = array_keys($arSocNetFeaturesSettings[$feature]["subscribe_events"]); $rsLog = CSocNetLog::GetList(array(), array("ENTITY_TYPE" => $entity_type, "ENTITY_ID" => $entity_id, "EVENT_ID" => $arEventsTmp), false, false, array("ID", "EVENT_ID")); while ($arLog = $rsLog->Fetch()) { CSocNetLogRights::DeleteByLogID($arLog["ID"]); CSocNetLogRights::SetForSonet($arLog["ID"], $entity_type, $entity_id, $feature, $arSocNetFeaturesSettings[$feature]["subscribe_events"][$arLog["EVENT_ID"]]["OPERATION"]); } } } return $r; }