Example #1
0
             break;
         case "F":
             $suffix = "female";
             break;
         default:
             $suffix = "unknown";
     }
     $arUser["PERSONAL_PHOTO"] = COption::GetOptionInt("socialnetwork", "default_user_picture_" . $suffix, false, SITE_ID);
 }
 $arImage = CSocNetTools::InitImage($arUser["PERSONAL_PHOTO"], $iSize, "/bitrix/images/socialnetwork/nopic_user_" . $iSize . ".gif", $iSize, $arUser["URL"], $arUser["SHOW_PROFILE_LINK"]);
 $arUser["IMAGE_FILE"] = $arImage["FILE"];
 $arUser["IMAGE_IMG"] = $arImage["IMG"];
 $arUser["NAME_FORMATED"] = CUser::FormatName($arParams['NAME_TEMPLATE'], $arUser, $bUseLogin);
 $arUser["IS_ONLINE"] = $arUser["IS_ONLINE"] == "Y";
 if ($GLOBALS["USER"]->IsAuthorized() && $GLOBALS["USER"]->GetID() != $arUser["ID"] && CSocNetUser::IsFriendsAllowed()) {
     $rel = CSocNetUserRelations::GetRelation($GLOBALS["USER"]->GetID(), $arUser["ID"]);
     $arUser["CAN_ADD2FRIENDS"] = !$rel && $arUser["ID"] != $GLOBALS["USER"]->GetID() ? true : false;
 } else {
     $arUser["CAN_ADD2FRIENDS"] = false;
 }
 $arUser["ADD_TO_FRIENDS_LINK"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_USER_FRIENDS_ADD"], array("user_id" => $arUser["ID"]));
 $arUser["MESSAGE_FORM_LINK"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_MESSAGE_FORM"], array("user_id" => $arUser["ID"]));
 $arUser["MESSAGE_LINK"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_MESSAGES_CHAT"], array("user_id" => $arUser["ID"]));
 $arUser["UserFieldsMain"] = array("SHOW" => "N", "DATA" => array());
 if (count($arParams["USER_FIELDS_LIST"]) > 0) {
     foreach ($arUser as $userFieldName => $userFieldValue) {
         if (in_array($userFieldName, $arParams["USER_FIELDS_LIST"])) {
             $val = $userFieldValue;
             switch ($userFieldName) {
                 case 'EMAIL':
                     if (StrLen($val) > 0) {
Example #2
0
}
$bUseLogin = $arParams['SHOW_LOGIN'] != "N" ? true : false;
if (!CSocNetUser::IsFriendsAllowed()) {
    $arResult["FatalError"] = GetMessage("SONET_C35_NO_FR_FUNC") . ". ";
} else {
    if (!$GLOBALS["USER"]->IsAuthorized()) {
        $arResult["NEED_AUTH"] = "Y";
    } else {
        $dbUser = CUser::GetByID($arParams["ID"]);
        $arResult["User"] = $dbUser->GetNext();
        if (!is_array($arResult["User"])) {
            $arResult["FatalError"] = GetMessage("SONET_P_USER_NO_USER") . ". ";
        } else {
            $arResult["CurrentUserPerms"] = CSocNetUserPerms::InitUserPerms($GLOBALS["USER"]->GetID(), $arResult["User"]["ID"], CSocNetUser::IsCurrentUserModuleAdmin());
            if (!$arResult["CurrentUserPerms"]["IsCurrentUser"]) {
                $arResult["CurrentUserRelation"] = CSocNetUserRelations::GetRelation($GLOBALS["USER"]->GetID(), $arResult["User"]["ID"]);
            }
            $arResult["Urls"]["User"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_USER"], array("user_id" => $arResult["User"]["ID"]));
            $arResult["User"]["NAME_FORMATTED"] = CUser::FormatName($arParams['NAME_TEMPLATE'], $arResult["User"], $bUseLogin);
            if ($arParams["SET_TITLE"] == "Y" || $arParams["SET_NAV_CHAIN"] != "N") {
                $arParams["TITLE_NAME_TEMPLATE"] = str_replace(array("#NOBR#", "#/NOBR#"), array("", ""), $arParams["NAME_TEMPLATE"]);
                $strTitleFormatted = CUser::FormatName($arParams['TITLE_NAME_TEMPLATE'], $arResult["User"], $bUseLogin);
            }
            if ($arParams["SET_TITLE"] == "Y") {
                $APPLICATION->SetTitle($strTitleFormatted . ": " . GetMessage("SONET_C35_PAGE_TITLE"));
            }
            if ($arParams["SET_NAV_CHAIN"] != "N") {
                $APPLICATION->AddChainItem($strTitleFormatted, $arResult["Urls"]["User"]);
                $APPLICATION->AddChainItem(GetMessage("SONET_C35_PAGE_TITLE"));
            }
            if ($arResult["CurrentUserPerms"]["IsCurrentUser"]) {
Example #3
0
 /**
  * <p>Метод инициализирует массив прав пользователя на операции над профайлом заданного пользователя.</p>
  *
  *
  * @param int $currentUserID  Код пользователя, права которого проверяются.
  *
  * @param int $userID  Код пользователя, к профайлу которого осуществляется доступ.
  *
  * @param bool $bCurrentUserIsAdmin  Флаг, является ли администратором пользователь, права которого
  * проверяются.
  *
  * @return array <p>Массив с ключами:<br><b>IsCurrentUser</b> - флаг, осуществляется ли доступ к
  * собственному профайлу,<br><b>Relation</b> - отношения между
  * пользователями,<br><b>Operations</b> - массив операций: <br> modifyuser - право на
  * изменение профайла, если в главном модуле разрешено
  * редактировать профиль,<br> modifyuser_main - право на изменение
  * профайла,<br> viewcontacts - право на просмотр контактной информации,<br>
  * invitegroup - приглашение в группу, <br> message - отправка персонального
  * сообщения, <br> viewfriends - просмотр друзей, <br> viewgroups - просмотр групп,
  * <br> viewprofile - просмотр профиля. </p> <a name="examples"></a>
  *
  * <h4>Example</h4> 
  * <pre>
  * Array 
  * ( 
  *  [Operations] =&gt; Array 
  * 	 ( 
  * 		 [modifyuser] =&gt; 1 
  * 		 [viewcontacts] =&gt; 1 
  * 		 [invitegroup] =&gt; 1 
  * 		 [message] =&gt; 1 
  * 		 [viewfriends] =&gt; 1 
  * 		 [viewgroups] =&gt; 1 
  * 		 [viewprofile] =&gt; 1 
  * 		 [modifyuser_main] =&gt; 
  * 	 ) 
  * 
  *  [IsCurrentUser] =&gt; 
  *  [Relation] =&gt; 
  * )
  * </pre>
  *
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/socialnetwork/classes/csocnetuserperms/inituserperms.php
  * @author Bitrix
  */
 public static function InitUserPerms($currentUserID, $userID, $bCurrentUserIsAdmin)
 {
     global $arSocNetUserOperations, $USER;
     $arReturn = array();
     $currentUserID = IntVal($currentUserID);
     $userID = IntVal($userID);
     if ($userID <= 0) {
         return false;
     }
     $arReturn["Operations"] = array();
     if ($currentUserID <= 0) {
         $arReturn["IsCurrentUser"] = false;
         $arReturn["Relation"] = false;
         $arReturn["Operations"]["modifyuser"] = false;
         $arReturn["Operations"]["viewcontacts"] = false;
         foreach ($arSocNetUserOperations as $operation => $defPerm) {
             $arReturn["Operations"][$operation] = CSocNetUserPerms::CanPerformOperation($currentUserID, $userID, $operation, false);
         }
     } else {
         $arReturn["IsCurrentUser"] = $currentUserID == $userID;
         if ($arReturn["IsCurrentUser"]) {
             $arReturn["Relation"] = false;
         } else {
             $arReturn["Relation"] = CSocNetUserRelations::GetRelation($currentUserID, $userID);
         }
         if ($bCurrentUserIsAdmin || $arReturn["IsCurrentUser"]) {
             $arReturn["Operations"]["modifyuser"] = true;
             $arReturn["Operations"]["viewcontacts"] = true;
             foreach ($arSocNetUserOperations as $operation => $defPerm) {
                 $arReturn["Operations"][$operation] = true;
             }
         } else {
             $arReturn["Operations"]["modifyuser"] = false;
             if (CSocNetUser::IsFriendsAllowed()) {
                 $arReturn["Operations"]["viewcontacts"] = $arReturn["Relation"] == SONET_RELATIONS_FRIEND;
             } else {
                 $arReturn["Operations"]["viewcontacts"] = true;
             }
             foreach ($arSocNetUserOperations as $operation => $defPerm) {
                 $arReturn["Operations"][$operation] = CSocNetUserPerms::CanPerformOperation($currentUserID, $userID, $operation, false);
             }
         }
         $arReturn["Operations"]["modifyuser_main"] = false;
         if ($arReturn["IsCurrentUser"]) {
             if ($USER->CanDoOperation('edit_own_profile')) {
                 $arReturn["Operations"]["modifyuser_main"] = true;
             }
         } elseif ($USER->CanDoOperation('edit_all_users') || $USER->CanDoOperation('edit_subordinate_users') && count(array_diff(CUser::GetUserGroup($userID), CSocNetTools::GetSubordinateGroups($currentUserID))) <= 0) {
             $arReturn["Operations"]["modifyuser_main"] = true;
         }
     }
     return $arReturn;
 }
Example #4
0
 function InitUserPerms($currentUserID, $userID, $bCurrentUserIsAdmin)
 {
     global $arSocNetUserOperations, $USER;
     $arReturn = array();
     $currentUserID = IntVal($currentUserID);
     $userID = IntVal($userID);
     if ($userID <= 0) {
         return false;
     }
     $arReturn["Operations"] = array();
     if ($currentUserID <= 0) {
         $arReturn["IsCurrentUser"] = false;
         $arReturn["Relation"] = false;
         $arReturn["Operations"]["modifyuser"] = false;
         $arReturn["Operations"]["viewcontacts"] = false;
         foreach ($arSocNetUserOperations as $operation => $defPerm) {
             $arReturn["Operations"][$operation] = CSocNetUserPerms::CanPerformOperation($currentUserID, $userID, $operation, false);
         }
     } else {
         $arReturn["IsCurrentUser"] = $currentUserID == $userID;
         if ($arReturn["IsCurrentUser"]) {
             $arReturn["Relation"] = false;
         } else {
             $arReturn["Relation"] = CSocNetUserRelations::GetRelation($currentUserID, $userID);
         }
         if ($bCurrentUserIsAdmin || $arReturn["IsCurrentUser"]) {
             $arReturn["Operations"]["modifyuser"] = true;
             $arReturn["Operations"]["viewcontacts"] = true;
             foreach ($arSocNetUserOperations as $operation => $defPerm) {
                 $arReturn["Operations"][$operation] = true;
             }
         } else {
             $arReturn["Operations"]["modifyuser"] = false;
             if (CSocNetUser::IsFriendsAllowed()) {
                 $arReturn["Operations"]["viewcontacts"] = $arReturn["Relation"] == SONET_RELATIONS_FRIEND;
             } else {
                 $arReturn["Operations"]["viewcontacts"] = true;
             }
             foreach ($arSocNetUserOperations as $operation => $defPerm) {
                 $arReturn["Operations"][$operation] = CSocNetUserPerms::CanPerformOperation($currentUserID, $userID, $operation, false);
             }
         }
         $arReturn["Operations"]["modifyuser_main"] = false;
         if ($arReturn["IsCurrentUser"]) {
             if ($USER->CanDoOperation('edit_own_profile')) {
                 $arReturn["Operations"]["modifyuser_main"] = true;
             }
         } elseif ($USER->CanDoOperation('edit_all_users')) {
             $arReturn["Operations"]["modifyuser_main"] = true;
         } elseif ($USER->CanDoOperation('edit_subordinate_users')) {
             $arUserGroups = CUser::GetUserGroup($userID);
             if (array_key_exists("SONET_SUBORD_GROUPS_BY_USER_ID", $GLOBALS) && !array_key_exists("SONET_ALLOW_FRIENDS_CACHE", $_REQUEST)) {
                 $arUserSubordinateGroups = $GLOBALS["SONET_SUBORD_GROUPS_BY_USER_ID"][$currentUserID];
             } else {
                 $arUserSubordinateGroups = array(2);
                 $arUserGroups_u = CUser::GetUserGroup($currentUserID);
                 for ($j = 0, $len = count($arUserGroups_u); $j < $len; $j++) {
                     $arSubordinateGroups = CGroup::GetSubordinateGroups($arUserGroups_u[$j]);
                     $arUserSubordinateGroups = array_merge($arUserSubordinateGroups, $arSubordinateGroups);
                 }
                 $arUserSubordinateGroups = array_unique($arUserSubordinateGroups);
                 if (!array_key_exists("SONET_SUBORD_GROUPS_BY_USER_ID", $GLOBALS)) {
                     $GLOBALS["SONET_SUBORD_GROUPS_BY_USER_ID"] = array();
                 }
                 $GLOBALS["SONET_SUBORD_GROUPS_BY_USER_ID"][$currentUserID] = $arUserSubordinateGroups;
             }
             if (count(array_diff($arUserGroups, $arUserSubordinateGroups)) <= 0) {
                 $arReturn["Operations"]["modifyuser_main"] = true;
             }
         }
     }
     return $arReturn;
 }
Example #5
0
 if ($arParams["SET_TITLE"] == "Y") {
     $APPLICATION->SetTitle(GetMessage("SONET_C30_PAGE_TITLE"));
 }
 if ($arParams["SET_NAV_CHAIN"] != "N") {
     $APPLICATION->AddChainItem(GetMessage("SONET_C30_PAGE_TITLE"));
 }
 $arResult["Events"] = false;
 $dbMessages = CSocNetMessages::GetMessagesUsers($GLOBALS["USER"]->GetID(), $arNavParams);
 while ($arMessages = $dbMessages->GetNext()) {
     if ($arResult["Events"] == false) {
         $arResult["Events"] = array();
     }
     $pu = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_USER"], array("user_id" => $arMessages["ID"]));
     $canViewProfile = CSocNetUserPerms::CanPerformOperation($GLOBALS["USER"]->GetID(), $arMessages["ID"], "viewprofile", CSocNetUser::IsCurrentUserModuleAdmin());
     $canAnsver = $arMessages["ACTIVE"] != "N" && (IsModuleInstalled("im") || CSocNetUserPerms::CanPerformOperation($GLOBALS["USER"]->GetID(), $arMessages["ID"], "message", CSocNetUser::IsCurrentUserModuleAdmin()));
     $relation = CSocNetUserRelations::GetRelation($GLOBALS["USER"]->GetID(), $arMessages["ID"]);
     if (intval($arMessages["PERSONAL_PHOTO"]) <= 0) {
         switch ($arMessages["PERSONAL_GENDER"]) {
             case "M":
                 $suffix = "male";
                 break;
             case "F":
                 $suffix = "female";
                 break;
             default:
                 $suffix = "unknown";
         }
         $arMessages["PERSONAL_PHOTO"] = COption::GetOptionInt("socialnetwork", "default_user_picture_" . $suffix, false, SITE_ID);
     }
     $arImage = CSocNetTools::InitImage($arMessages["PERSONAL_PHOTO"], 100, "/bitrix/images/socialnetwork/nopic_user_100.gif", 100, $pu, $canViewProfile);
     $arResult["Events"][] = array("USER_ID" => $arMessages["ID"], "USER_NAME" => $arMessages["NAME"], "USER_LAST_NAME" => $arMessages["LAST_NAME"], "USER_SECOND_NAME" => $arMessages["SECOND_NAME"], "USER_LOGIN" => $arMessages["LOGIN"], "USER_PERSONAL_PHOTO" => $arMessages["PERSONAL_PHOTO"], "USER_PERSONAL_PHOTO_FILE" => $arImage["FILE"], "USER_PERSONAL_PHOTO_IMG" => $arImage["IMG"], "USER_PROFILE_URL" => $pu, "SHOW_PROFILE_LINK" => $canViewProfile, "SHOW_ANSWER_LINK" => $canAnsver, "ANSWER_LINK" => CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_MESSAGE_FORM"], array("user_id" => $arMessages["ID"])), "CHAT_LINK" => CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_MESSAGES_CHAT"], array("user_id" => $arMessages["ID"])), "BAN_LINK" => htmlspecialcharsbx($APPLICATION->GetCurUri("userID=" . $arMessages["ID"] . "&action=ban&" . bitrix_sessid_get() . "")), "SHOW_BAN_LINK" => !CSocNetUser::IsUserModuleAdmin($arMessages["ID"]) && $arMessages["ID"] != $GLOBALS["USER"]->GetID() && (!$relation || $relation != SONET_RELATIONS_BAN), "IS_ONLINE" => $arMessages["IS_ONLINE"] == "Y", "TOTAL" => $arMessages["TOTAL"], "MAX_DATE" => $arMessages["MAX_DATE"], "MAX_DATE_FORMAT" => $arMessages["MAX_DATE_FORMAT"], "UNREAD" => $arMessages["UNREAD"], "USER_MESSAGES_LINK" => CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_MESSAGES_USERS_MESSAGES"], array("user_id" => $arMessages["ID"])));
Example #6
0
 if (!IsModuleInstalled("im")) {
     $arResult["Banned"] = false;
     $dbBan = CSocNetUserRelations::GetRelatedUsers($arResult["User"]["ID"], SONET_RELATIONS_BAN, $arNavParams, $bActiveOnly);
     if ($dbBan) {
         $arResult["Banned"] = array();
         $arResult["Banned"]["List"] = false;
         while ($arBan = $dbBan->GetNext()) {
             if ($arResult["Banned"]["List"] == false) {
                 $arResult["Banned"]["List"] = array();
             }
             $pref = IntVal($arResult["User"]["ID"]) == $arBan["FIRST_USER_ID"] ? "SECOND" : "FIRST";
             $pu = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_USER"], array("user_id" => $arBan[$pref . "_USER_ID"]));
             $canViewProfile = CSocNetUserPerms::CanPerformOperation($GLOBALS["USER"]->GetID(), $arBan[$pref . "_USER_ID"], "viewprofile", CSocNetUser::IsCurrentUserModuleAdmin());
             $bInitiated = $GLOBALS["USER"]->GetID() == $arBan["FIRST_USER_ID"] && $arBan["INITIATED_BY"] == "F" || $GLOBALS["USER"]->GetID() == $arBan["SECOND_USER_ID"] && $arBan["INITIATED_BY"] == "S";
             if (!$arResult["CurrentUserPerms"]["IsCurrentUser"]) {
                 $rel = CSocNetUserRelations::GetRelation($GLOBALS["USER"]->GetID(), $arBan[$pref . "_USER_ID"]);
             } else {
                 $rel = SONET_RELATIONS_FRIEND;
             }
             if (intval($arParams["THUMBNAIL_LIST_SIZE"]) > 0) {
                 if (intval($arBan[$pref . "_USER_PERSONAL_PHOTO"]) <= 0) {
                     switch ($arBan[$pref . "_USER_PERSONAL_GENDER"]) {
                         case "M":
                             $suffix = "male";
                             break;
                         case "F":
                             $suffix = "female";
                             break;
                         default:
                             $suffix = "unknown";
                     }
 function CanPerformOperation($userID, $type, $id, $feature, $operation, $bCurrentUserIsAdmin = false)
 {
     global $arSocNetAllowedEntityTypes;
     $arSocNetFeaturesSettings = CSocNetAllowed::GetAllowedFeatures();
     $userID = IntVal($userID);
     if (is_array($id) && count($id) <= 0 || !is_array($id) && $id <= 0) {
         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_GF_EMPTY_ENTITY_ID"), "ERROR_EMPTY_ENTITY_ID");
         return false;
     }
     $type = Trim($type);
     if (StrLen($type) <= 0 || !in_array($type, $arSocNetAllowedEntityTypes)) {
         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_GF_ERROR_NO_ENTITY_TYPE"), "ERROR_EMPTY_TYPE");
         return false;
     }
     $featureOperationPerms = CSocNetFeaturesPerms::GetOperationPerm($type, $id, $feature, $operation);
     if ($type == SONET_ENTITY_GROUP) {
         $bWorkWithClosedGroups = COption::GetOptionString("socialnetwork", "work_with_closed_groups", "N") == "Y";
         if (is_array($id)) {
             $arGroupToGet = array();
             foreach ($id as $group_id) {
                 if ($featureOperationPerms[$group_id] == false) {
                     $arReturn[$group_id] = false;
                 } else {
                     $arGroupToGet[] = $group_id;
                 }
             }
             $userRoleInGroup = CSocNetUserToGroup::GetUserRole($userID, $arGroupToGet);
             $arGroupToGet = array();
             if (is_array($userRoleInGroup)) {
                 foreach ($userRoleInGroup as $group_id => $role) {
                     if ($userRoleInGroup[$group_id] == SONET_ROLES_BAN) {
                         $arReturn[$group_id] = false;
                     } else {
                         $arGroupToGet[] = $group_id;
                     }
                 }
             }
             if (is_array($arGroupToGet) && count($arGroupToGet) <= 0 || !is_array($arGroupToGet) && intval($arGroupToGet) <= 0) {
                 $arReturn = array();
                 foreach ($id as $group_id) {
                     $arReturn[$group_id] = false;
                 }
                 return $arReturn;
             }
             $resGroupTmp = CSocNetGroup::GetList(array("ID" => "ASC"), array("ID" => $arGroupToGet));
             while ($arGroupTmp = $resGroupTmp->Fetch()) {
                 if ($arGroupTmp["CLOSED"] == "Y" && !in_array($operation, $arSocNetFeaturesSettings[$feature]["minoperation"])) {
                     if (!$bWorkWithClosedGroups) {
                         $arReturn[$arGroupTmp["ID"]] = false;
                         continue;
                     } else {
                         $featureOperationPerms[$arGroupTmp["ID"]] = SONET_ROLES_OWNER;
                     }
                 }
                 if ($bCurrentUserIsAdmin) {
                     $arReturn[$arGroupTmp["ID"]] = true;
                     continue;
                 }
                 if ($featureOperationPerms[$arGroupTmp["ID"]] == SONET_ROLES_ALL) {
                     if ($arGroupTmp["VISIBLE"] == "N") {
                         $featureOperationPerms[$arGroupTmp["ID"]] = SONET_ROLES_USER;
                     } else {
                         $arReturn[$arGroupTmp["ID"]] = true;
                         continue;
                     }
                 }
                 if ($featureOperationPerms[$arGroupTmp["ID"]] == SONET_ROLES_AUTHORIZED) {
                     if ($userID > 0) {
                         $arReturn[$arGroupTmp["ID"]] = true;
                         continue;
                     } else {
                         $arReturn[$arGroupTmp["ID"]] = false;
                         continue;
                     }
                 }
                 if ($userRoleInGroup[$arGroupTmp["ID"]] == false) {
                     $arReturn[$arGroupTmp["ID"]] = false;
                     continue;
                 }
                 if ($featureOperationPerms[$arGroupTmp["ID"]] == SONET_ROLES_MODERATOR) {
                     if ($userRoleInGroup[$arGroupTmp["ID"]] == SONET_ROLES_MODERATOR || $userRoleInGroup[$arGroupTmp["ID"]] == SONET_ROLES_OWNER) {
                         $arReturn[$arGroupTmp["ID"]] = true;
                         continue;
                     } else {
                         $arReturn[$arGroupTmp["ID"]] = false;
                         continue;
                     }
                 } elseif ($featureOperationPerms[$arGroupTmp["ID"]] == SONET_ROLES_USER) {
                     if ($userRoleInGroup[$arGroupTmp["ID"]] == SONET_ROLES_MODERATOR || $userRoleInGroup[$arGroupTmp["ID"]] == SONET_ROLES_OWNER || $userRoleInGroup[$arGroupTmp["ID"]] == SONET_ROLES_USER) {
                         $arReturn[$arGroupTmp["ID"]] = true;
                         continue;
                     } else {
                         $arReturn[$arGroupTmp["ID"]] = false;
                         continue;
                     }
                 } elseif ($featureOperationPerms[$arGroupTmp["ID"]] == SONET_ROLES_OWNER) {
                     if ($userRoleInGroup[$arGroupTmp["ID"]] == SONET_ROLES_OWNER) {
                         $arReturn[$arGroupTmp["ID"]] = true;
                         continue;
                     } else {
                         $arReturn[$arGroupTmp["ID"]] = false;
                         continue;
                     }
                 }
             }
             return $arReturn;
         } else {
             $id = IntVal($id);
             if ($featureOperationPerms == false) {
                 return false;
             }
             $userRoleInGroup = CSocNetUserToGroup::GetUserRole($userID, $id);
             if ($userRoleInGroup == SONET_ROLES_BAN) {
                 return false;
             }
             $arGroupTmp = CSocNetGroup::GetByID($id);
             if ($arGroupTmp["CLOSED"] == "Y" && !in_array($operation, $arSocNetFeaturesSettings[$feature]["minoperation"])) {
                 if (!$bWorkWithClosedGroups) {
                     return false;
                 } else {
                     $featureOperationPerms = SONET_ROLES_OWNER;
                 }
             }
             if ($bCurrentUserIsAdmin) {
                 return true;
             }
             if ($featureOperationPerms == SONET_ROLES_ALL) {
                 if ($arGroupTmp["VISIBLE"] == "N") {
                     $featureOperationPerms = SONET_ROLES_USER;
                 } else {
                     return true;
                 }
             }
             if ($featureOperationPerms == SONET_ROLES_AUTHORIZED) {
                 return $userID > 0;
             }
             if ($userRoleInGroup == false) {
                 return false;
             }
             if ($featureOperationPerms == SONET_ROLES_MODERATOR) {
                 return in_array($userRoleInGroup, array(SONET_ROLES_MODERATOR, SONET_ROLES_OWNER));
             } elseif ($featureOperationPerms == SONET_ROLES_USER) {
                 return in_array($userRoleInGroup, array(SONET_ROLES_MODERATOR, SONET_ROLES_OWNER, SONET_ROLES_USER));
             } elseif ($featureOperationPerms == SONET_ROLES_OWNER) {
                 return $userRoleInGroup == SONET_ROLES_OWNER;
             }
         }
     } else {
         if (is_array($id)) {
             foreach ($id as $entity_id) {
                 if ($featureOperationPerms[$entity_id] == false) {
                     $arReturn[$entity_id] = false;
                     continue;
                 }
                 $usersRelation = CSocNetUserRelations::GetRelation($userID, $entity_id);
                 if ($type == SONET_ENTITY_USER && $userID == $entity_id) {
                     $arReturn[$entity_id] = true;
                     continue;
                 }
                 if ($bCurrentUserIsAdmin) {
                     $arReturn[$entity_id] = true;
                     continue;
                 }
                 if ($userID == $entity_id) {
                     $arReturn[$entity_id] = true;
                     continue;
                 }
                 if ($usersRelation == SONET_RELATIONS_BAN) {
                     if (!IsModuleInstalled("im")) {
                         $arReturn[$entity_id] = false;
                         continue;
                     }
                 }
                 if ($featureOperationPerms[$entity_id] == SONET_RELATIONS_TYPE_NONE) {
                     $arReturn[$entity_id] = false;
                     continue;
                 }
                 if ($featureOperationPerms[$entity_id] == SONET_RELATIONS_TYPE_ALL) {
                     $arReturn[$entity_id] = true;
                     continue;
                 }
                 if ($featureOperationPerms[$entity_id] == SONET_RELATIONS_TYPE_AUTHORIZED) {
                     $arReturn[$entity_id] = $userID > 0;
                     continue;
                 }
                 if ($featureOperationPerms[$entity_id] == SONET_RELATIONS_TYPE_FRIENDS || $featureOperationPerms[$entity_id] == SONET_RELATIONS_TYPE_FRIENDS2) {
                     $arReturn[$entity_id] = CSocNetUserRelations::IsFriends($userID, $entity_id);
                     continue;
                 }
             }
             return $arReturn;
         } else {
             if ($featureOperationPerms == false) {
                 return false;
             }
             if ($type == SONET_ENTITY_USER && $userID == $id) {
                 return true;
             }
             if ($bCurrentUserIsAdmin) {
                 return true;
             }
             if ($userID == $id) {
                 return true;
             }
             $usersRelation = CSocNetUserRelations::GetRelation($userID, $id);
             if ($usersRelation == SONET_RELATIONS_BAN && !IsModuleInstalled("im")) {
                 return false;
             }
             if ($featureOperationPerms == SONET_RELATIONS_TYPE_NONE) {
                 return false;
             }
             if ($featureOperationPerms == SONET_RELATIONS_TYPE_ALL) {
                 return true;
             }
             if ($featureOperationPerms == SONET_RELATIONS_TYPE_AUTHORIZED) {
                 return $userID > 0;
             }
             if ($featureOperationPerms == SONET_RELATIONS_TYPE_FRIENDS || $featureOperationPerms == SONET_RELATIONS_TYPE_FRIENDS2) {
                 return CSocNetUserRelations::IsFriends($userID, $id);
             }
         }
     }
     return false;
 }