<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die; } $arParams['NAME_TEMPLATE'] = $arParams['NAME_TEMPLATE'] ? $arParams['NAME_TEMPLATE'] : CSite::GetNameFormat(); $bUseLogin = $arParams['SHOW_LOGIN'] != "N" ? true : false; $arResult["bUseLogin"] = $bUseLogin; $arResult['CAN_EDIT_USER'] = $USER->CanDoOperation('edit_all_users') || $USER->CanDoOperation('edit_subordinate_users') && count(array_diff(CUser::GetUserGroup($arParams["USER"]['ID']), CSocNetTools::GetSubordinateGroups())) == 0; $arResult['CAN_EDIT_USER_SELF'] = $USER->CanDoOperation('edit_own_profile') && $arParams["USER"]['ID'] == $USER->GetID(); $arResult['USER_PROP'] = $GLOBALS["USER_FIELD_MANAGER"]->GetUserFields("USER", 0, LANGUAGE_ID); $arResult['CAN_MESSAGE'] = false; $arResult['CAN_VIDEO_CALL'] = false; $arResult['CAN_VIEW_PROFILE'] = false; if (CModule::IncludeModule('socialnetwork') && $GLOBALS["USER"]->IsAuthorized()) { $arResult["CurrentUserPerms"] = CSocNetUserPerms::InitUserPerms($GLOBALS["USER"]->GetID(), $arParams["USER"]["ID"], CSocNetUser::IsCurrentUserModuleAdmin()); if ($GLOBALS["USER"]->GetID() != $arParams["USER"]["ID"] && $arParams["USER"]["ACTIVE"] != "N" && CBXFeatures::IsFeatureEnabled("WebMessenger") && (IsModuleInstalled("im") || $arResult["CurrentUserPerms"]["Operations"]["message"])) { $arResult['CAN_MESSAGE'] = true; } if ($arResult["CurrentUserPerms"]["Operations"]["viewprofile"]) { $arResult['CAN_VIEW_PROFILE'] = true; } if ($GLOBALS["USER"]->GetID() != $arParams["USER"]["ID"] && $arResult["CurrentUserPerms"]["Operations"]["videocall"] && $arParams["USER"]["ACTIVE"] != "N") { $arResult['CAN_VIDEO_CALL'] = true; } if (!CModule::IncludeModule("video")) { $arResult['CAN_VIDEO_CALL'] = false; } elseif (!CVideo::CanUserMakeCall()) { $arResult['CAN_VIDEO_CALL'] = false; } }
/** * <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] => Array * ( * [modifyuser] => 1 * [viewcontacts] => 1 * [invitegroup] => 1 * [message] => 1 * [viewfriends] => 1 * [viewgroups] => 1 * [viewprofile] => 1 * [modifyuser_main] => * ) * * [IsCurrentUser] => * [Relation] => * ) * </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; }
} elseif (in_array('PASSWORD', $arParams['EDITABLE_FIELDS'])) { $arParams['EDITABLE_FIELDS'][] = 'CONFIRM_PASSWORD'; } if (!is_array($arResult["User"])) { $arResult["FATAL_ERROR"] = GetMessage("SONET_P_USER_NO_USER"); } else { $arResult["GROUPS_CAN_EDIT"] = array(); if ($USER->CanDoOperation('edit_all_users') || $USER->CanDoOperation('edit_subordinate_users')) { if ($USER->CanDoOperation('edit_all_users')) { $dbGroup = CGroup::GetList($by = "c_sort", $order = "asc", array("ACTIVE" => "Y")); while ($arGroup = $dbGroup->Fetch()) { $arResult["GROUPS_CAN_EDIT"][$arGroup["ID"]] = $arGroup; $arGroupsCanEditID[] = $arGroup["ID"]; } } elseif ($USER->CanDoOperation('edit_subordinate_users')) { $arGroupsCanEditID = CSocNetTools::GetSubordinateGroups(); if (is_array($arGroupsCanEditID) && count($arGroupsCanEditID) > 0) { $dbGroup = CGroup::GetList($by = "c_sort", $order = "asc", array("ID" => implode(" | ", $arGroupsCanEditID), "ACTIVE" => "Y")); while ($arGroup = $dbGroup->Fetch()) { $arResult["GROUPS_CAN_EDIT"][$arGroup["ID"]] = $arGroup; } } } } else { foreach ($arParams['EDITABLE_FIELDS'] as $key => $value) { if ($value == 'GROUP_ID' || $value == 'ACTIVE') { unset($arParams['EDITABLE_FIELDS'][$key]); } } } if ($arParams['IS_FORUM'] == 'Y') {