%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/socialnetwork/classes/general/ |
Current File : //home/bitrix/www/bitrix/modules/socialnetwork/classes/general/user.php |
<? IncludeModuleLangFile(__FILE__); class CAllSocNetUser { public static function OnUserDelete($ID) { global $APPLICATION; if (!CSocNetGroup::__ValidateID($ID)) { return false; } $ID = IntVal($ID); $bSuccess = True; if (!CSocNetGroup::DeleteNoDemand($ID)) { if($ex = $APPLICATION->GetException()) { $APPLICATION->ThrowException($ex->GetString()); } $bSuccess = false; } if ($bSuccess) { CSocNetUserRelations::DeleteNoDemand($ID); CSocNetUserPerms::DeleteNoDemand($ID); CSocNetUserEvents::DeleteNoDemand($ID); CSocNetMessages::DeleteNoDemand($ID); CSocNetUserToGroup::DeleteNoDemand($ID); CSocNetLogEvents::DeleteNoDemand($ID); CSocNetLog::DeleteNoDemand($ID); CSocNetLogComments::DeleteNoDemand($ID); CSocNetFeatures::DeleteNoDemand($ID); CSocNetSubscription::DeleteEx($ID); \Bitrix\Socialnetwork\Item\UserContentView::deleteNoDemand($ID); CUserOptions::DeleteOption("socialnetwork", "~menu_".SONET_ENTITY_USER."_".$ID, false, 0); } return $bSuccess; } public static function OnBeforeUserUpdate(&$arFields) { $rsUser = CUser::GetByID($arFields["ID"]); if ($arUser = $rsUser->Fetch()) { define("GLOBAL_ACTIVE_VALUE", $arUser["ACTIVE"]); } } public static function OnAfterUserAdd(&$arFields) { return; } public static function OnAfterUserLogout(&$arParams) { if (array_key_exists("SONET_ADMIN", $_SESSION)) { unset($_SESSION["SONET_ADMIN"]); } } public static function OnAfterUserUpdate(&$arFields) { if ( array_key_exists("ACTIVE", $arFields) && defined("GLOBAL_ACTIVE_VALUE") && GLOBAL_ACTIVE_VALUE != $arFields["ACTIVE"] ) { $arGroups = array(); $dbResult = CSocNetUserToGroup::GetList( array(), array( "USER_ID" => $arFields["ID"] ), false, false, array("GROUP_ID") ); while ($arResult = $dbResult->Fetch()) { $arGroups[] = $arResult["GROUP_ID"]; } $cnt = count($arGroups); for ($i = 0; $i < $cnt; $i++) { CSocNetGroup::SetStat($arGroups[$i]); } } } public static function OnBeforeProlog() { global $USER; if (!$USER->IsAuthorized()) return; CUser::SetLastActivityDate($USER->GetID(), true); } public static function OnUserInitialize($user_id, $arFields = array()) { global $CACHE_MANAGER; if (intval($user_id) <= 0) { return false; } $bIM = CModule::IncludeModule("im"); $dbRelation = CSocNetUserToGroup::GetList( array(), array( "USER_ID" => $user_id, "ROLE" => SONET_ROLES_REQUEST, "INITIATED_BY_TYPE" => SONET_INITIATED_BY_GROUP ), false, false, array("ID", "GROUP_ID") ); while ($arRelation = $dbRelation->Fetch()) { if ( CSocNetUserToGroup::UserConfirmRequestToBeMember($user_id, $arRelation["ID"], false) && defined("BX_COMP_MANAGED_CACHE") ) { $CACHE_MANAGER->ClearByTag("sonet_user2group_G".$arRelation["GROUP_ID"]); $CACHE_MANAGER->ClearByTag("sonet_user2group_U".$user_id); $CACHE_MANAGER->ClearByTag("sonet_user2group"); if ($bIM) { CIMNotify::DeleteByTag("SOCNET|INVITE_GROUP|".$user_id."|".intval($arRelation["ID"])); } } } } public static function IsOnLine($userID) { $userID = IntVal($userID); if ($userID <= 0) return false; return CUser::IsOnLine($userID); // TODO change to use CUser::GetOnlineStatus see more in docs.bx } public static function IsFriendsAllowed() { return (COption::GetOptionString("socialnetwork", "allow_frields", "Y") == "Y"); } public static function IsFriendsFriendsAllowed() { return (COption::GetOptionString("socialnetwork", "allow_frields_friends", "Y") == "Y"); } public static function IsCurrentUserModuleAdmin($site_id = SITE_ID, $bUseSession = true) { global $APPLICATION, $USER; if (!is_object($USER) || !$USER->IsAuthorized()) return false; if ($bUseSession && !isset($_SESSION["SONET_ADMIN"])) return false; if ($USER->isAdmin()) return true; if (is_array($site_id)) { foreach ($site_id as $site_id_tmp) { $modulePerms = $APPLICATION->GetGroupRight("socialnetwork", false, "Y", "Y", array($site_id_tmp, false)); if ($modulePerms >= "W") return true; } return false; } else { $modulePerms = $APPLICATION->GetGroupRight("socialnetwork", false, "Y", "Y", ($site_id ? array($site_id, false) : false)); return ($modulePerms >= "W"); } } public static function IsUserModuleAdmin($userID, $site_id = SITE_ID) { if ($userID <= 0) { return false; } if ($site_id && !is_array($site_id)) { $site_id = array($site_id, false); } elseif ($site_id && is_array($site_id)) { $site_id = array_merge($site_id, array(false)); } $arModuleAdmin = \Bitrix\Socialnetwork\User::getModuleAdminList($site_id); return (array_key_exists($userID, $arModuleAdmin)); } public static function DeleteUserAdminCache() { BXClearCache(true, "/sonet/user_admin/"); } public static function FormatName($name, $lastName, $login) { $name = Trim($name); $lastName = Trim($lastName); $login = Trim($login); $formatName = $name; if (StrLen($formatName) > 0 && StrLen($lastName) > 0) $formatName .= " "; $formatName .= $lastName; if (StrLen($formatName) <= 0) $formatName = $login; return $formatName; } public static function FormatNameEx($name, $secondName, $lastName, $login, $email, $id) { $name = Trim($name); $lastName = Trim($lastName); $secondName = Trim($secondName); $login = Trim($login); $email = Trim($email); $id = IntVal($id); $formatName = $name; if (StrLen($formatName) > 0 && StrLen($secondName) > 0) $formatName .= " "; $formatName .= $secondName; if (StrLen($formatName) > 0 && StrLen($lastName) > 0) $formatName .= " "; $formatName .= $lastName; if (StrLen($formatName) <= 0) $formatName = $login; if (StrLen($email) > 0) $formatName .= " <".$email.">"; $formatName .= " [".$id."]"; return $formatName; } public static function SearchUser($user, $bIntranet = false) { $user = Trim($user); if (StrLen($user) <= 0) return false; $userID = 0; if ($user."|" == IntVal($user)."|") $userID = IntVal($user); if ($userID <= 0) { $arMatches = array(); if (preg_match("#\[(\d+)\]#i", $user, $arMatches)) $userID = IntVal($arMatches[1]); } $dbUsers = false; if ($userID > 0) { $arFilter = array("ID_EQUAL_EXACT" => $userID); $dbUsers = CUser::GetList( ($by = "LAST_NAME"), ($order = "asc"), $arFilter, array( "NAV_PARAMS" => false, ) ); } else { $email = ""; $arMatches = array(); if (preg_match("#<(.+?)>#i", $user, $arMatches)) { if (check_email($arMatches[1])) { $email = $arMatches[1]; $user = Trim(Str_Replace("<".$email.">", "", $user)); } } $arUser = array(); $arUserTmp = Explode(" ", $user); foreach ($arUserTmp as $s) { $s = Trim($s); if (StrLen($s) > 0) $arUser[] = $s; } if ( count($arUser) <= 0 && strlen($email) > 0 ) { $arFilter = array( "ACTIVE" => "Y", "EMAIL" => $email, ); $dbUsers = CUser::GetList(($by="id"), ($order="asc"), $arFilter); } else { $dbUsers = CUser::SearchUserByName($arUser, $email); } } if ($dbUsers) { $arResult = array(); while ($arUsers = $dbUsers->GetNext()) { $arResult[$arUsers["ID"]] = CSocNetUser::FormatNameEx( $arUsers["NAME"], $arUsers["SECOND_NAME"], $arUsers["LAST_NAME"], $arUsers["LOGIN"], ($bIntranet ? $arUsers["EMAIL"] : ""), $arUsers["ID"] ); } return $arResult; } return false; } public static function GetByID($ID) { $ID = IntVal($ID); $dbUser = CUser::GetByID($ID); if ($arUser = $dbUser->GetNext()) { $arUser["NAME_FORMATTED"] = CUser::FormatName(CSite::GetNameFormat(false), $arUser); $arUser["~NAME_FORMATTED"] = htmlspecialcharsback($arUser["NAME_FORMATTED"]); return $arUser; } else return false; } public static function GetFields($bAdditional = false) { $arRes = array( "ID" => GetMessage("SONET_UP1_ID"), "LOGIN" => GetMessage("SONET_UP1_LOGIN"), "NAME" => GetMessage("SONET_UP1_NAME"), "SECOND_NAME" => GetMessage("SONET_UP1_SECOND_NAME"), "LAST_NAME" => GetMessage("SONET_UP1_LAST_NAME"), "EMAIL" => GetMessage("SONET_UP1_EMAIL"), "TIME_ZONE" => GetMessage("SONET_UP1_TIME_ZONE"), "LAST_LOGIN" => GetMessage("SONET_UP1_LAST_LOGIN"), "LAST_ACTIVITY_DATE" => GetMessage("SONET_UP1_LAST_ACTIVITY_DATE"), "DATE_REGISTER" => GetMessage("SONET_UP1_DATE_REGISTER"), "LID" => GetMessage("SONET_UP1_LID"), "PASSWORD" => GetMessage("SONET_UP1_PASSWORD"), "PERSONAL_BIRTHDAY" => GetMessage("SONET_UP1_PERSONAL_BIRTHDAY"), "PERSONAL_BIRTHDAY_YEAR" => GetMessage("SONET_UP1_PERSONAL_BIRTHDAY_YEAR"), "PERSONAL_BIRTHDAY_DAY" => GetMessage("SONET_UP1_PERSONAL_BIRTHDAY_DAY"), "PERSONAL_PROFESSION" => GetMessage("SONET_UP1_PERSONAL_PROFESSION"), "PERSONAL_WWW" => GetMessage("SONET_UP1_PERSONAL_WWW"), "PERSONAL_ICQ" => GetMessage("SONET_UP1_PERSONAL_ICQ"), "PERSONAL_GENDER" => GetMessage("SONET_UP1_PERSONAL_GENDER"), "PERSONAL_PHOTO" => GetMessage("SONET_UP1_PERSONAL_PHOTO"), "PERSONAL_NOTES" => GetMessage("SONET_UP1_PERSONAL_NOTES"), "PERSONAL_PHONE" => GetMessage("SONET_UP1_PERSONAL_PHONE"), "PERSONAL_FAX" => GetMessage("SONET_UP1_PERSONAL_FAX"), "PERSONAL_MOBILE" => GetMessage("SONET_UP1_PERSONAL_MOBILE"), "PERSONAL_PAGER" => GetMessage("SONET_UP1_PERSONAL_PAGER"), "PERSONAL_COUNTRY" => GetMessage("SONET_UP1_PERSONAL_COUNTRY"), "PERSONAL_STATE" => GetMessage("SONET_UP1_PERSONAL_STATE"), "PERSONAL_CITY" => GetMessage("SONET_UP1_PERSONAL_CITY"), "PERSONAL_ZIP" => GetMessage("SONET_UP1_PERSONAL_ZIP"), "PERSONAL_STREET" => GetMessage("SONET_UP1_PERSONAL_STREET"), "PERSONAL_MAILBOX" => GetMessage("SONET_UP1_PERSONAL_MAILBOX"), "WORK_COMPANY" => GetMessage("SONET_UP1_WORK_COMPANY"), "WORK_DEPARTMENT" => GetMessage("SONET_UP1_WORK_DEPARTMENT"), "WORK_POSITION" => GetMessage("SONET_UP1_WORK_POSITION"), "WORK_WWW" => GetMessage("SONET_UP1_WORK_WWW"), "WORK_PROFILE" => GetMessage("SONET_UP1_WORK_PROFILE"), "WORK_LOGO" => GetMessage("SONET_UP1_WORK_LOGO"), "WORK_NOTES" => GetMessage("SONET_UP1_WORK_NOTES"), "WORK_PHONE" => GetMessage("SONET_UP1_WORK_PHONE"), "WORK_FAX" => GetMessage("SONET_UP1_WORK_FAX"), "WORK_PAGER" => GetMessage("SONET_UP1_WORK_PAGER"), "WORK_COUNTRY" => GetMessage("SONET_UP1_WORK_COUNTRY"), "WORK_STATE" => GetMessage("SONET_UP1_WORK_STATE"), "WORK_CITY" => GetMessage("SONET_UP1_WORK_CITY"), "WORK_ZIP" => GetMessage("SONET_UP1_WORK_ZIP"), "WORK_STREET" => GetMessage("SONET_UP1_WORK_STREET"), "WORK_MAILBOX" => GetMessage("SONET_UP1_WORK_MAILBOX"), ); if (IsModuleInstalled("forum")) { $arRes["FORUM_SHOW_NAME"] = GetMessage("SONET_UP1_FORUM_PREFIX").GetMessage("SONET_UP1_FORUM_SHOW_NAME"); $arRes["FORUM_DESCRIPTION"] = GetMessage("SONET_UP1_FORUM_PREFIX").GetMessage("SONET_UP1_FORUM_DESCRIPTION"); $arRes["FORUM_INTERESTS"] = GetMessage("SONET_UP1_FORUM_PREFIX").GetMessage("SONET_UP1_FORUM_INTERESTS"); $arRes["FORUM_SIGNATURE"] = GetMessage("SONET_UP1_FORUM_PREFIX").GetMessage("SONET_UP1_FORUM_SIGNATURE"); $arRes["FORUM_AVATAR"] = GetMessage("SONET_UP1_FORUM_PREFIX").GetMessage("SONET_UP1_FORUM_AVATAR"); $arRes["FORUM_HIDE_FROM_ONLINE"] = GetMessage("SONET_UP1_FORUM_PREFIX").GetMessage("SONET_UP1_FORUM_HIDE_FROM_ONLINE"); $arRes["FORUM_SUBSC_GET_MY_MESSAGE"] = GetMessage("SONET_UP1_FORUM_PREFIX").GetMessage("SONET_UP1_FORUM_SUBSC_GET_MY_MESSAGE"); } if (IsModuleInstalled("blog")) { $arRes["BLOG_ALIAS"] = GetMessage("SONET_UP1_BLOG_PREFIX").GetMessage("SONET_UP1_BLOG_ALIAS"); $arRes["BLOG_DESCRIPTION"] = GetMessage("SONET_UP1_BLOG_PREFIX").GetMessage("SONET_UP1_BLOG_DESCRIPTION"); $arRes["BLOG_INTERESTS"] = GetMessage("SONET_UP1_BLOG_PREFIX").GetMessage("SONET_UP1_BLOG_INTERESTS"); $arRes["BLOG_AVATAR"] = GetMessage("SONET_UP1_BLOG_PREFIX").GetMessage("SONET_UP1_BLOG_AVATAR"); } return $arRes; } public static function GetFieldsMap($bAdditional = false) { $arUserFields = CSocNetUser::GetFields($bAdditional); return array_keys($arUserFields); } public static function CanProfileView($currentUserId, $arUser, $siteId = SITE_ID, $arContext = array()) { global $USER; if ( !is_array($arUser) && intval($arUser) > 0 ) { $dbUser = CUser::GetByID(intval($arUser)); $arUser = $dbUser->Fetch(); } if ( !is_array($arUser) || !isset($arUser["ID"]) || intval($arUser["ID"]) <= 0 ) { return false; } if ( $currentUserId == $USER->GetId() && self::IsCurrentUserModuleAdmin() ) { return true; } if (self::OnGetProfileView($currentUserId, $arUser, $siteId, $arContext)) // only for email users { return true; } $bFound = false; foreach(GetModuleEvents("socialnetwork", "OnGetProfileView", true) as $arEvent) { if (IsModuleInstalled($arEvent["TO_MODULE_ID"])) { $bFound = true; if (ExecuteModuleEventEx($arEvent, Array($currentUserId, $arUser, $siteId, $arContext, false)) === true) { return true; } } } return (!$bFound); } public static function OnGetProfileView($currentUserId, $arUser, $siteId, $arContext) { if (!IsModuleInstalled('mail')) { return false; } if ( intval($currentUserId) <= 0 || !isset($arContext) || !isset($arContext["ENTITY_TYPE"]) || !in_array($arContext["ENTITY_TYPE"], array("LOG_ENTRY")) || !isset($arContext["ENTITY_ID"]) || intval($arContext["ENTITY_ID"]) <= 0 || !is_array($arUser) || !isset($arUser["ID"]) || intval($arUser["ID"]) <= 0 ) { return false; } if ( ( isset($arUser["EXTERNAL_AUTH_ID"]) && $arUser["EXTERNAL_AUTH_ID"] == 'email' ) // -> email user || ( ($rsCurrentUser = CUser::GetByID(intval($currentUserId))) && ($arCurrentUser = $rsCurrentUser->Fetch()) && ($arCurrentUser["EXTERNAL_AUTH_ID"] == 'email') ) // email user -> ) { return self::CheckContext($currentUserId, $arUser["ID"], $arContext); } return false; } public static function CheckContext($currentUserId = false, $userId = false, $arContext = array()) { if ( intval($currentUserId) <= 0 || intval($userId) <= 0 || !is_array($arContext) || empty($arContext["ENTITY_TYPE"]) || empty($arContext["ENTITY_ID"]) ) { return false; } if ($arContext["ENTITY_TYPE"] == "LOG_ENTRY") { $dbRes = CSocNetLogRights::GetList( array(), array( "LOG_ID" => intval($arContext["ENTITY_ID"]) ) ); $arLogEntryUserId = $arSonetGroupId = $arDepartmentId = array(); $bIntranetInstalled = IsModuleInstalled('intranet'); while ($arRes = $dbRes->Fetch()) { if (preg_match('/^U(\d+)$/', $arRes["GROUP_CODE"], $matches)) { $arLogEntryUserId[] = $matches[1]; } elseif ( preg_match('/^SG(\d+)$/', $arRes["GROUP_CODE"], $matches) || preg_match('/^SG(\d+)_'.SONET_ROLES_USER.'$/', $arRes["GROUP_CODE"], $matches) && !in_array($matches[1], $arSonetGroupId) ) { $arSonetGroupId[] = $matches[1]; } elseif ( $bIntranetInstalled && preg_match('/^DR(\d+)$/', $arRes["GROUP_CODE"], $matches) && !in_array($matches[1], $arDepartmentId) ) { $arDepartmentId[] = $matches[1]; } elseif ($arRes["GROUP_CODE"] == 'G2') { if (!empty($arContext['SITE_ID'])) { $arLogSite = array(); $rsSite = CSocNetLog::GetSite(intval($arContext["ENTITY_ID"])); while ($arSite = $rsSite->Fetch()) { $arLogSite[] = $arSite["SITE_ID"]; } return in_array($arContext['SITE_ID'], $arLogSite); } } } if ( in_array($currentUserId, $arLogEntryUserId) && in_array($userId, $arLogEntryUserId) ) { return true; } else // check by log USER_ID field / author { if (in_array($userId, $arLogEntryUserId)) { if (!empty($arSonetGroupId)) { foreach($arSonetGroupId as $groupId) { if (CSocNetUserToGroup::GetUserRole($currentUserId, $groupId) <= SONET_ROLES_USER) { return true; } } } if ( !empty($arDepartmentId) && CModule::IncludeModule('intranet') ) { $arDepartmentUserId = array(); $rsDepartmentUserId = \Bitrix\Intranet\Util::getDepartmentEmployees(array( 'DEPARTMENTS' => $arDepartmentId, 'RECURSIVE' => 'Y', 'ACTIVE' => 'Y', 'CONFIRMED' => 'Y', 'SELECT' => array('ID') )); while ($arUser = $rsDepartmentUserId->Fetch()) { $arDepartmentUserId[] = $arUser["ID"]; } if (in_array($currentUserId, $arDepartmentUserId)) { return true; } } } $rsLog = CSocNetLog::GetList( array(), array( "ID" => intval($arContext["ENTITY_ID"]) ), false, false, array( "USER_ID" ) ); if ($arLog = $rsLog->Fetch()) { return ( ( in_array($currentUserId, $arLogEntryUserId) && ($userId == $arLog["USER_ID"]) ) || ( in_array($userId, $arLogEntryUserId) && ($currentUserId == $arLog["USER_ID"]) ) ); } } } return false; } } ?>