Ejemplo n.º 1
0
 function OnSearchCheckPermissions($FIELD)
 {
     global $DB, $USER;
     $user_id = intval($USER->GetID());
     $arResult = array();
     if ($user_id > 0) {
         $arResult[] = "SU" . $user_id . "_Z";
         $rsFriends = CSocNetUserRelations::GetList(array(), array("USER_ID" => $user_id, "RELATION" => SONET_RELATIONS_FRIEND), false, false, array("ID", "FIRST_USER_ID", "SECOND_USER_ID", "DATE_CREATE", "DATE_UPDATE", "INITIATED_BY"));
         while ($arFriend = $rsFriends->Fetch()) {
             if ($arFriend["FIRST_USER_ID"] != $user_id) {
                 $arResult[] = "SU" . $arFriend["FIRST_USER_ID"] . "_M";
             }
             if ($arFriend["SECOND_USER_ID"] != $user_id) {
                 $arResult[] = "SU" . $arFriend["SECOND_USER_ID"] . "_M";
             }
         }
     }
     $rsGroups = CSocNetUserToGroup::GetList(array(), array("USER_ID" => $user_id), false, false, array("GROUP_ID", "ROLE"));
     while ($arGroup = $rsGroups->Fetch()) {
         $arResult[] = "SG" . $arGroup["GROUP_ID"] . "_" . $arGroup["ROLE"];
     }
     return $arResult;
 }
Ejemplo n.º 2
0
     }
     if (count($arResult["UserPropertiesContact"]["DATA"]) > 0) {
         $arResult["UserPropertiesContact"]["SHOW"] = "Y";
     }
     if (count($arResult["UserPropertiesPersonal"]["DATA"]) > 0) {
         $arResult["UserPropertiesPersonal"]["SHOW"] = "Y";
     }
 }
 if (!$arParams["SHORT_FORM"]) {
     // USER FRIENDS
     $arResult["Friends"] = false;
     if (CSocNetUser::IsFriendsAllowed() && $arResult["CurrentUserPerms"]["Operations"]["viewfriends"]) {
         $dbFriends = CSocNetUserRelations::GetRelatedUsers($arResult["User"]["ID"], SONET_RELATIONS_FRIEND, array("nTopCount" => $arParams["ITEMS_COUNT"]));
         if ($dbFriends) {
             $arResult["Friends"] = array();
             $arResult["Friends"]["Count"] = CSocNetUserRelations::GetList(array(), array("USER_ID" => $arResult["User"]["ID"], "RELATION" => SONET_RELATIONS_FRIEND), array());
             $arResult["Friends"]["List"] = false;
             while ($arFriends = $dbFriends->GetNext()) {
                 if ($arResult["Friends"]["List"] == false) {
                     $arResult["Friends"]["List"] = array();
                 }
                 $pref = IntVal($arResult["User"]["ID"]) == $arFriends["FIRST_USER_ID"] ? "SECOND" : "FIRST";
                 $pu = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_USER"], array("user_id" => $arFriends[$pref . "_USER_ID"]));
                 $canViewProfile = CSocNetUserPerms::CanPerformOperation($GLOBALS["USER"]->GetID(), $arFriends[$pref . "_USER_ID"], "viewprofile", CSocNetUser::IsCurrentUserModuleAdmin());
                 if (intval($arParams["THUMBNAIL_LIST_SIZE"]) > 0) {
                     if (intval($arFriends[$pref . "_USER_PERSONAL_PHOTO"]) <= 0) {
                         switch ($arFriends[$pref . "_USER_PERSONAL_GENDER"]) {
                             case "M":
                                 $suffix = "male";
                                 break;
                             case "F":
Ejemplo n.º 3
0
 public function AddUser($chatId, $userId)
 {
     global $DB;
     $chatId = intval($chatId);
     if ($chatId <= 0) {
         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_EMPTY_CHAT_ID"), "EMPTY_CHAT_ID");
         return false;
     }
     $arUserId = array();
     if (is_array($userId)) {
         $arUserId = \CIMContactList::PrepareUserIds($userId);
     } else {
         if (intval($userId) > 0) {
             $arUserId[intval($userId)] = intval($userId);
         }
     }
     if ($this->user_id > 0) {
         $arUserId[$this->user_id] = $this->user_id;
     }
     if (count($arUserId) <= 0) {
         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_EMPTY_USER_ID"), "EMPTY_USER_ID");
         return false;
     }
     if ($this->user_id > 0 && !IsModuleInstalled('intranet') && CModule::IncludeModule('socialnetwork') && CSocNetUser::IsFriendsAllowed()) {
         $arFriendUsers = array();
         $dbFriends = CSocNetUserRelations::GetList(array(), array("USER_ID" => $this->user_id, "RELATION" => SONET_RELATIONS_FRIEND), false, false, array("ID", "FIRST_USER_ID", "SECOND_USER_ID", "DATE_CREATE", "DATE_UPDATE", "INITIATED_BY"));
         while ($arFriends = $dbFriends->Fetch()) {
             $friendId = $this->user_id == $arFriends["FIRST_USER_ID"] ? $arFriends["SECOND_USER_ID"] : $arFriends["FIRST_USER_ID"];
             $arFriendUsers[$friendId] = $friendId;
         }
         foreach ($arUserId as $id => $userId) {
             if ($userId == $this->user_id) {
                 continue;
             }
             if (!isset($arFriendUsers[$userId]) && CIMSettings::GetPrivacy(CIMSettings::PRIVACY_CHAT, $userId) == CIMSettings::PRIVACY_RESULT_CONTACT) {
                 unset($arUserId[$id]);
             }
         }
         if (count($arUserId) <= 0) {
             $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_EMPTY_USER_ID_BY_PRIVACY"), "EMPTY_USER_ID_BY_PRIVACY");
             return false;
         }
     }
     $strSql = "\n\t\t\tSELECT\n\t\t\t\tR.CHAT_ID, C.TITLE CHAT_TITLE, C.AUTHOR_ID CHAT_AUTHOR_ID, C.EXTRANET CHAT_EXTRANET, C.TYPE CHAT_TYPE\n\t\t\tFROM b_im_relation R\n\t\t\tLEFT JOIN b_im_chat C ON R.CHAT_ID = C.ID\n\t\t\tWHERE\n\t\t\t\t" . ($this->user_id > 0 ? "R.USER_ID = " . $this->user_id . " AND " : "") . "\n\t\t\t\tR.MESSAGE_TYPE IN ('" . IM_MESSAGE_OPEN . "','" . IM_MESSAGE_CHAT . "')\n\t\t\t\tAND R.CHAT_ID = " . $chatId . "\n\t\t";
     $dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     if ($arRes = $dbRes->Fetch()) {
         $extranetFlag = $arRes["CHAT_EXTRANET"] == "" ? "" : ($arRes["CHAT_EXTRANET"] == "Y" ? true : false);
         $chatTitle = $arRes['CHAT_TITLE'];
         $chatAuthorId = intval($arRes['CHAT_AUTHOR_ID']);
         $chatType = intval($arRes['CHAT_TYPE']);
         $arRelation = self::GetRelationById($chatId);
         $arExistUser = array();
         foreach ($arRelation as $relation) {
             $arExistUser[] = $relation['USER_ID'];
         }
         if (count($arRelation) + count($arUserId) > 500) {
             $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_MAX_USER", array('#COUNT#' => 500)), "MAX_USER");
             return false;
         }
         $arUserId = array_diff($arUserId, $arExistUser);
         if (empty($arUserId)) {
             $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_NOTHING_TO_ADD"), "NOTHING_TO_ADD");
             return false;
         }
         $arUserSelect = $arUserId;
         if ($this->user_id > 0) {
             $arUserSelect[] = $this->user_id;
         }
         $arUsers = CIMContactList::GetUserData(array('ID' => array_values($arUserSelect), 'DEPARTMENT' => 'N', 'USE_CACHE' => 'N'));
         $arUsers = $arUsers['users'];
         if ($extranetFlag !== true) {
             $isExtranet = false;
             foreach ($arUsers as $userData) {
                 if ($userData['extranet']) {
                     $isExtranet = true;
                     break;
                 }
             }
             if ($isExtranet || $extranetFlag === "") {
                 IM\ChatTable::update($chatId, array('EXTRANET' => $isExtranet ? "Y" : "N"));
             }
             $extranetFlag = $isExtranet;
         }
         $arUsersName = array();
         foreach ($arUserId as $userId) {
             $arUsersName[] = htmlspecialcharsback($arUsers[$userId]['name']);
         }
         if ($this->user_id > 0) {
             $message = GetMessage("IM_CHAT_JOIN_" . $arUsers[$this->user_id]['gender'], array('#USER_1_NAME#' => htmlspecialcharsback($arUsers[$this->user_id]['name']), '#USER_2_NAME#' => implode(', ', $arUsersName)));
         } else {
             if (count($arUsersName) > 1) {
                 $message = GetMessage("IM_CHAT_SELF_JOIN", array('#USERS_NAME#' => implode(', ', $arUsersName)));
             } else {
                 $arUserList = array_values($arUserId);
                 $message = GetMessage("IM_CHAT_SELF_JOIN_" . $arUsers[$arUserList[0]]['gender'], array('#USER_NAME#' => implode(', ', $arUsersName)));
             }
         }
         $fileMaxId = CIMDisk::GetMaxFileId($chatId);
         $maxId = 0;
         $strSql = "SELECT MAX(ID) ID FROM b_im_message WHERE CHAT_ID = " . $chatId . " GROUP BY CHAT_ID";
         $dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         if ($arMax = $dbRes->Fetch()) {
             $maxId = $arMax['ID'];
         }
         $update = array();
         $publicPullWatch = false;
         if ($chatType == IM_MESSAGE_OPEN && CModule::IncludeModule("pull")) {
             $publicPullWatch = true;
         }
         foreach ($arUserId as $userId) {
             if ($publicPullWatch) {
                 CPullWatch::Delete($userId, 'IM_PUBLIC_' . $chatId);
             }
             CIMContactList::SetRecent(array('ENTITY_ID' => $chatId, 'MESSAGE_ID' => $maxId, 'CHAT_TYPE' => $arRes['CHAT_TYPE'], 'USER_ID' => $userId));
             $hideHistory = CIMSettings::GetStartChatMessage() == CIMSettings::START_MESSAGE_LAST && $arRes['CHAT_TYPE'] == IM_MESSAGE_CHAT;
             if ($arRes['CHAT_TYPE'] != IM_MESSAGE_PRIVATE && $arUsers[$userId]['extranet']) {
                 $hideHistory = true;
             }
             $orm = IM\RelationTable::add(array("CHAT_ID" => $chatId, "MESSAGE_TYPE" => $arRes['CHAT_TYPE'], "USER_ID" => $userId, "START_ID" => $hideHistory ? $maxId + 1 : 0, "LAST_ID" => $maxId, "LAST_SEND_ID" => $maxId, "LAST_FILE_ID" => $hideHistory ? $fileMaxId : 0));
             $update[] = $orm->getId();
             CIMContactList::CleanChatCache($userId);
         }
         CIMDisk::ChangeFolderMembers($chatId, $arUserId);
         if (CModule::IncludeModule("pull")) {
             foreach ($arRelation as $ar) {
                 CPullStack::AddByUser($ar['USER_ID'], array('module_id' => 'im', 'command' => 'chatUserAdd', 'params' => array('chatId' => $chatId, 'chatTitle' => $chatTitle, 'chatOwner' => $chatAuthorId, 'chatExtranet' => $extranetFlag, 'users' => $arUsers, 'newUsers' => $arUserId)));
             }
         }
         $lastId = self::AddMessage(array("TO_CHAT_ID" => $chatId, "MESSAGE" => $message, "FROM_USER_ID" => $this->user_id, "SYSTEM" => 'Y'));
         if (IsModuleInstalled('replica')) {
             if ($lastId && CIMSettings::GetStartChatMessage() == CIMSettings::START_MESSAGE_LAST && $arRes['CHAT_TYPE'] == IM_MESSAGE_CHAT) {
                 foreach ($update as $relId) {
                     IM\RelationTable::update($relId, array('START_ID' => $lastId));
                 }
             }
         }
         return true;
     }
     $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_AUTHORIZE_ERROR"), "AUTHORIZE_ERROR");
     return false;
 }
Ejemplo n.º 4
0
<?php

if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) {
    die;
}
$arResult["ITEMS_TOTAL"] = 0;
$arResult["ITEMS_MESSAGES"] = 0;
$arResult["ITEMS_REQUESTS_USER"] = 0;
$arResult["ITEMS_REQUESTS_GROUP"] = 0;
/* friends requests */
$arFilter = array("SECOND_USER_ID" => $GLOBALS["USER"]->GetID(), "RELATION" => SONET_RELATIONS_REQUEST);
$dbUserRequests = CSocNetUserRelations::GetList(array(), $arFilter, array("SECOND_USER_ID"), false, array("COUNT" => "ID"));
if ($arUserRequests = $dbUserRequests->Fetch()) {
    $arResult["ITEMS_TOTAL"] += intval($arUserRequests["CNT"]);
    $arResult["ITEMS_REQUESTS_USER"] += intval($arUserRequests["CNT"]);
}
/* group requests */
$arFilter = array("USER_ID" => $GLOBALS["USER"]->GetID(), "ROLE" => SONET_ROLES_REQUEST, "INITIATED_BY_TYPE" => SONET_INITIATED_BY_GROUP);
$dbUserRequests = CSocNetUserToGroup::GetList(array(), $arFilter, array("USER_ID"), false, array("COUNT" => "ID"));
if ($arUserRequests = $dbUserRequests->Fetch()) {
    $arResult["ITEMS_TOTAL"] += intval($arUserRequests["CNT"]);
    $arResult["ITEMS_REQUESTS_GROUP"] += intval($arUserRequests["CNT"]);
}
/* messages */
$arFilter = array("TO_USER_ID" => $GLOBALS["USER"]->GetID(), "DATE_VIEW" => "", "TO_DELETED" => "N", "IS_LOG_ALL" => "Y");
$dbUserRequests = CSocNetMessages::GetList(array(), $arFilter, array("TO_USER_ID"), false, array("COUNT" => "ID"));
if ($arUserRequests = $dbUserRequests->Fetch()) {
    $arResult["ITEMS_TOTAL"] += intval($arUserRequests["CNT"]);
    $arResult["ITEMS_MESSAGES"] += intval($arUserRequests["CNT"]);
}
Ejemplo n.º 5
0
	public static function GetStatus($arParams = Array())
	{
		if (!is_array($arParams))
			$arParams = Array();

		$arID = Array();
		if (isset($arParams['ID']) && is_array($arParams['ID']) && !empty($arParams['ID']))
		{
			foreach ($arParams['ID'] as $key => $value)
				$arID[] = intval($value);
		}
		else if (isset($arParams['ID']) && intval($arParams['ID']) > 0)
		{
			$arID[] = intval($arParams['ID']);
		}

		global $USER;
		if(!isset($arParams['ID']) && !IsModuleInstalled('intranet') && is_object($USER))
		{
			$arID[] = $USER->GetID();
			if (CModule::IncludeModule('socialnetwork') && CSocNetUser::IsFriendsAllowed())
			{
				$dbFriends = CSocNetUserRelations::GetList(array(),array("USER_ID" => $USER->GetID(), "RELATION" => SONET_RELATIONS_FRIEND), false, false, array("ID", "FIRST_USER_ID", "SECOND_USER_ID"));
				if ($dbFriends)
				{
					while ($arFriends = $dbFriends->GetNext(true, false))
					{
						$friendId = $pref = (IntVal($USER->GetID()) == $arFriends["FIRST_USER_ID"]) ? $arFriends["SECOND_USER_ID"] : $arFriends["FIRST_USER_ID"];
						$arID[] = $friendId;
					}
				}
			}
		}

		$arUsers = Array();
		$dbUsers = CUser::GetList(($sort_by = 'ID'), ($sort_dir = 'asc'), array('LAST_ACTIVITY' => '180'), array('FIELDS' => array("ID")));
		while ($arUser = $dbUsers->GetNext(false, false))
		{
			if (!empty($arID) && !in_array($arUser["ID"], $arID))
				continue;

			$arUsers[$arUser["ID"]] = Array(
				'id' => $arUser["ID"],
				'status' => 'online',
			);
		}

		return Array('users' => $arUsers);
	}
Ejemplo n.º 6
0
	function RejectRequestToBeFriend($senderUserID, $relationID)
	{
		global $APPLICATION;

		$senderUserID = IntVal($senderUserID);
		if ($senderUserID <= 0)
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_UR_EMPTY_SENDER_USER_ID"), "ERROR_SENDER_USER_ID");
			return false;
		}

		$relationID = IntVal($relationID);
		if ($relationID <= 0)
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_UR_EMPTY_TARGET_USER_ID"), "ERROR_RELATION_ID");
			return false;
		}

		$dbResult = CSocNetUserRelations::GetList(
			array(),
			array(
				"ID" => $relationID,
				"SECOND_USER_ID" => $senderUserID,
				"RELATION" => SONET_RELATIONS_REQUEST
			),
			false,
			false,
			array("ID", "FIRST_USER_ID")
		);

		if ($arResult = $dbResult->Fetch())
		{
			if (CSocNetUserRelations::Delete($arResult["ID"]))
			{
				if (CModule::IncludeModule("im"))
				{
					CIMNotify::DeleteByTag("SOCNET|INVITE_USER|".intval($senderUserID)."|".intval($arResult["ID"]));
					$arMessageFields = array(
						"MESSAGE_TYPE" => IM_MESSAGE_SYSTEM,
						"TO_USER_ID" => $arResult["FIRST_USER_ID"],
						"FROM_USER_ID" => $senderUserID,
						"NOTIFY_TYPE" => IM_NOTIFY_FROM,
						"NOTIFY_MODULE" => "socialnetwork",
						"NOTIFY_EVENT" => "invite_user",
						"NOTIFY_TAG" => "SOCNET|INVITE_USER_REJECT",
						"NOTIFY_MESSAGE" => GetMessage("SONET_UR_REJECT_FRIEND_MESSAGE"),
					);
					CIMNotify::Add($arMessageFields);
				}
				else
				{
					$arMessageFields = array(
						"FROM_USER_ID" => $senderUserID,
						"TO_USER_ID" => $arResult["FIRST_USER_ID"],
						"MESSAGE" => GetMessage("SONET_UR_REJECT_FRIEND_MESSAGE"),
						"=DATE_CREATE" => $GLOBALS["DB"]->CurrentTimeFunction(),
						"MESSAGE_TYPE" => SONET_MESSAGE_SYSTEM
					);
					CSocNetMessages::Add($arMessageFields);
				}
			}
			else
			{
				$errorMessage = "";
				if ($e = $APPLICATION->GetException())
					$errorMessage = $e->GetString();
				if (StrLen($errorMessage) <= 0)
					$errorMessage = GetMessage("SONET_UR_RELATION_DELETE_ERROR");

				$GLOBALS["APPLICATION"]->ThrowException($errorMessage, "ERROR_DELETE_RELATION");
				return false;
			}
		}
		else
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_UR_NO_FRIEND_REQUEST"), "ERROR_NO_FRIEND_REQUEST");
			return false;
		}

		CSocNetUserRelations::__SpeedFileCheckMessages($senderUserID);

		return true;
	}
Ejemplo n.º 7
0
 public function AddUser($chatId, $userId)
 {
     global $DB;
     $chatId = intval($chatId);
     if ($chatId <= 0) {
         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_EMPTY_CHAT_ID"), "EMPTY_CHAT_ID");
         return false;
     }
     $arUserId = array();
     if (is_array($userId)) {
         foreach ($userId as $value) {
             $arUserId[] = intval($value);
         }
     } else {
         $arUserId[] = intval($userId);
     }
     if (count($arUserId) <= 0) {
         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_EMPTY_USER_ID"), "EMPTY_USER_ID");
         return false;
     }
     if (!IsModuleInstalled('intranet') && CModule::IncludeModule('socialnetwork') && CSocNetUser::IsFriendsAllowed()) {
         global $USER;
         $arFriendUsers = array();
         $dbFriends = CSocNetUserRelations::GetList(array(), array("USER_ID" => $USER->GetID(), "RELATION" => SONET_RELATIONS_FRIEND), false, false, array("ID", "FIRST_USER_ID", "SECOND_USER_ID", "DATE_CREATE", "DATE_UPDATE", "INITIATED_BY"));
         while ($arFriends = $dbFriends->Fetch()) {
             $friendId = $USER->GetID() == $arFriends["FIRST_USER_ID"] ? $arFriends["SECOND_USER_ID"] : $arFriends["FIRST_USER_ID"];
             $arFriendUsers[$friendId] = $friendId;
         }
         foreach ($arUserId as $id => $userId) {
             if ($userId == $USER->GetID()) {
                 continue;
             }
             if (!isset($arFriendUsers[$userId]) && CIMSettings::GetPrivacy(CIMSettings::PRIVACY_CHAT, $userId) == CIMSettings::PRIVACY_RESULT_CONTACT) {
                 unset($arUserId[$id]);
             }
         }
         if (count($arUserId) <= 0) {
             $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_EMPTY_USER_ID_BY_PRIVACY"), "EMPTY_USER_ID_BY_PRIVACY");
             return false;
         }
     }
     $strSql = "\n\t\t\tSELECT R.CHAT_ID, C.TITLE CHAT_TITLE, C.AUTHOR_ID CHAT_AUTHOR_ID\n\t\t\tFROM b_im_relation R LEFT JOIN b_im_chat C ON R.CHAT_ID = C.ID\n\t\t\tWHERE R.USER_ID = " . $this->user_id . " AND R.MESSAGE_TYPE = '" . IM_MESSAGE_GROUP . "' AND R.CHAT_ID = " . $chatId;
     $dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     if ($arRes = $dbRes->Fetch()) {
         $chatTitle = $arRes['CHAT_TITLE'];
         $chatAuthorId = intval($arRes['CHAT_AUTHOR_ID']);
         $arRelation = self::GetRelationById($chatId);
         $arExistUser = array();
         foreach ($arRelation as $relation) {
             $arExistUser[] = $relation['USER_ID'];
         }
         if (count($arRelation) + count($arUserId) > 100) {
             $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_MAX_USER", array('#COUNT#' => 100)), "MAX_USER");
             return false;
         }
         $arUserId = array_diff($arUserId, $arExistUser);
         if (empty($arUserId)) {
             $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_NOTHING_TO_ADD"), "NOTHING_TO_ADD");
             return false;
         }
         $arUserSelect = $arUserId;
         $arUserSelect[] = $this->user_id;
         $arUsers = CIMContactList::GetUserData(array('ID' => array_values($arUserSelect), 'DEPARTMENT' => 'N', 'USE_CACHE' => 'N'));
         $arUsers = $arUsers['users'];
         $maxId = 0;
         $strSql = "SELECT MAX(ID) ID FROM b_im_message WHERE CHAT_ID = " . $chatId . " GROUP BY CHAT_ID";
         $dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         if ($arRes = $dbRes->Fetch()) {
             $maxId = $arRes['ID'];
         }
         $fileMaxId = CIMDisk::GetMaxFileId($chatId);
         $arUsersName = array();
         foreach ($arUserId as $userId) {
             $arUsersName[] = htmlspecialcharsback($arUsers[$userId]['name']);
             CIMContactList::SetRecent($chatId, $maxId, true, $userId);
             $strSql = "INSERT INTO b_im_relation (CHAT_ID, MESSAGE_TYPE, USER_ID, START_ID, LAST_ID, LAST_SEND_ID, LAST_FILE_ID) VALUES (" . $chatId . ",'" . IM_MESSAGE_GROUP . "'," . $userId . "," . ($maxId + 1) . "," . $maxId . "," . $maxId . ", " . $fileMaxId . ")";
             $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
             CIMContactList::CleanChatCache($userId);
         }
         CIMDisk::ChangeFolderMembers($chatId, $arUserId);
         $message = GetMessage("IM_CHAT_JOIN_" . $arUsers[$this->user_id]['gender'], array('#USER_1_NAME#' => htmlspecialcharsback($arUsers[$this->user_id]['name']), '#USER_2_NAME#' => implode(', ', $arUsersName)));
         if (CModule::IncludeModule("pull")) {
             foreach ($arRelation as $ar) {
                 CPullStack::AddByUser($ar['USER_ID'], array('module_id' => 'im', 'command' => 'chatUserAdd', 'params' => array('chatId' => $chatId, 'chatTitle' => $chatTitle, 'chatOwner' => $chatAuthorId, 'users' => $arUsers, 'newUsers' => $arUserId)));
             }
         }
         self::AddMessage(array("TO_CHAT_ID" => $chatId, "MESSAGE" => $message, "FROM_USER_ID" => $this->user_id, "SYSTEM" => 'Y'));
         return true;
     }
     $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_AUTHORIZE_ERROR"), "AUTHORIZE_ERROR");
     return false;
 }
Ejemplo n.º 8
0
 public static function GetList($arParams = array())
 {
     if (!is_array($arParams)) {
         $arParams = array();
     }
     $arID = array();
     if (isset($arParams['ID']) && is_array($arParams['ID']) && !empty($arParams['ID'])) {
         foreach ($arParams['ID'] as $key => $value) {
             $arID[] = intval($value);
         }
     } else {
         if (isset($arParams['ID']) && intval($arParams['ID']) > 0) {
             $arID[] = intval($arParams['ID']);
         }
     }
     global $USER;
     if (!isset($arParams['ID']) && !IsModuleInstalled('intranet') && is_object($USER)) {
         $arID[] = $USER->GetID();
         if (CModule::IncludeModule('socialnetwork') && CSocNetUser::IsFriendsAllowed()) {
             $dbFriends = CSocNetUserRelations::GetList(array(), array("USER_ID" => $USER->GetID(), "RELATION" => SONET_RELATIONS_FRIEND), false, false, array("ID", "FIRST_USER_ID", "SECOND_USER_ID"));
             if ($dbFriends) {
                 while ($arFriends = $dbFriends->GetNext(true, false)) {
                     $friendId = $pref = IntVal($USER->GetID()) == $arFriends["FIRST_USER_ID"] ? $arFriends["SECOND_USER_ID"] : $arFriends["FIRST_USER_ID"];
                     $arID[] = $friendId;
                 }
             }
         }
     }
     $enable = self::Enable();
     $arUsers = array();
     $query = new \Bitrix\Main\Entity\Query(\Bitrix\Main\UserTable::getEntity());
     if ($enable) {
         $query->registerRuntimeField('', new \Bitrix\Main\Entity\ReferenceField('ref', 'Bitrix\\Im\\StatusTable', array('=this.ID' => 'ref.USER_ID')));
     }
     $query->addSelect('ID');
     if ($enable) {
         $query->addSelect('ref.STATUS', 'STATUS')->addSelect('ref.IDLE', 'IDLE');
     }
     $query->addFilter('>LAST_ACTIVITY_DATE', new \Bitrix\Main\DB\SqlExpression(Bitrix\Main\Application::getConnection()->getSqlHelper()->addSecondsToDateTime('-180')));
     $result = $query->exec();
     while ($arUser = $result->fetch()) {
         if (!empty($arID) && !in_array($arUser["ID"], $arID)) {
             continue;
         }
         $arUsers[$arUser["ID"]] = array('id' => $arUser["ID"], 'status' => $enable && in_array($arUser['STATUS'], self::$AVAILABLE_STATUSES) ? $arUser['STATUS'] : 'online', 'idle' => $enable && is_object($arUser['IDLE']) ? $arUser['IDLE']->getTimestamp() : 0);
     }
     return array('users' => $arUsers);
 }
Ejemplo n.º 9
0
 public static function GetList($arParams = array())
 {
     global $USER, $CACHE_MANAGER;
     $bLoadUsers = isset($arParams['LOAD_USERS']) && $arParams['LOAD_USERS'] == 'N' ? false : true;
     $bLoadChats = isset($arParams['LOAD_CHATS']) && $arParams['LOAD_CHATS'] == 'N' ? false : true;
     $arGroups = array();
     if (defined("BX_COMP_MANAGED_CACHE")) {
         $ttl = 2592000;
     } else {
         $ttl = 600;
     }
     $bVoximplantEnable = IsModuleInstalled('voximplant');
     $bBusShowAll = !IsModuleInstalled('intranet') && COption::GetOptionInt('im', 'contact_list_show_all_bus');
     $bIntranetEnable = false;
     $arGroupStatus = CUserOptions::GetOption('IM', 'groupStatus');
     if (CModule::IncludeModule('intranet') && CModule::IncludeModule('iblock')) {
         $bIntranetEnable = true;
         if (!(CModule::IncludeModule('extranet') && !CExtranet::IsIntranetUser())) {
             if (($iblock_id = COption::GetOptionInt('intranet', 'iblock_structure', 0)) > 0) {
                 $cache_id = 'im_structure_' . $iblock_id;
                 $obIMCache = new CPHPCache();
                 $cache_dir = '/bx/imc/structure';
                 if ($obIMCache->InitCache($ttl, $cache_id, $cache_dir)) {
                     $tmpVal = $obIMCache->GetVars();
                     $arStructureName = $tmpVal['STRUCTURE_NAME'];
                     unset($tmpVal);
                 } else {
                     if (defined("BX_COMP_MANAGED_CACHE")) {
                         $CACHE_MANAGER->StartTagCache($cache_dir);
                     }
                     $arResult["Structure"] = array();
                     $sec = CIBlockSection::GetList(array("left_margin" => "asc", "SORT" => "ASC"), array("ACTIVE" => "Y", "IBLOCK_ID" => $iblock_id), false, array('ID', 'NAME', 'DEPTH_LEVEL', 'IBLOCK_SECTION_ID'));
                     $arStructureName = array();
                     while ($ar = $sec->GetNext(true, false)) {
                         if ($ar['DEPTH_LEVEL'] > 1) {
                             $ar['NAME'] .= ' / ' . $arStructureName[$ar['IBLOCK_SECTION_ID']];
                         }
                         $arStructureName[$ar['ID']] = $ar['NAME'];
                     }
                     if (defined("BX_COMP_MANAGED_CACHE")) {
                         $CACHE_MANAGER->RegisterTag('iblock_id_' . $iblock_id);
                         $CACHE_MANAGER->EndTagCache();
                     }
                     if ($obIMCache->StartDataCache()) {
                         $obIMCache->EndDataCache(array('STRUCTURE_NAME' => $arStructureName));
                     }
                 }
                 unset($obIMCache);
                 foreach ($arStructureName as $key => $value) {
                     if (strlen($value) > 0) {
                         $arGroups[$key] = array('id' => $key, 'status' => isset($arGroupStatus[$key]) && $arGroupStatus[$key] == 'open' ? 'open' : 'close', 'name' => $value);
                     }
                 }
             }
         }
     } else {
         if ($bBusShowAll) {
             $arGroups['all'] = array('id' => 'all', 'status' => isset($arGroupStatus['all']) && $arGroupStatus['all'] == 'close' ? 'close' : 'open', 'name' => GetMessage('IM_CL_GROUP_ALL'));
         }
     }
     $arGroups['chat'] = array('id' => 'chat', 'status' => isset($arGroupStatus['chat']) && $arGroupStatus['chat'] == 'open' ? 'open' : 'close', 'name' => GetMessage('IM_CL_GROUP_CHATS'));
     $arGroups['other'] = array('id' => 'other', 'status' => isset($arGroupStatus['other']) && $arGroupStatus['other'] == 'open' ? 'open' : 'close', 'name' => GetMessage('IM_CL_GROUP_OTHER_2'));
     $arGroups['search'] = array('id' => 'search', 'status' => isset($arGroupStatus['search']) && $arGroupStatus['search'] == 'open' ? 'open' : 'close', 'name' => GetMessage('IM_CL_GROUP_SEARCH'));
     $arWoGroups = array('all' => array('id' => 'all', 'status' => isset($arGroupStatus['all']) && $arGroupStatus['all'] == 'close' ? 'close' : 'open', 'name' => GetMessage('IM_CL_GROUP_ALL')), 'chat' => array('id' => 'chat', 'status' => isset($arGroupStatus['chat']) && $arGroupStatus['chat'] == 'open' ? 'open' : 'close', 'name' => GetMessage('IM_CL_GROUP_CHATS')), 'other' => array('id' => 'other', 'status' => isset($arGroupStatus['other']) && $arGroupStatus['other'] == 'open' ? 'open' : 'close', 'name' => $bIntranetEnable ? GetMessage('IM_CL_GROUP_OTHER') : GetMessage('IM_CL_GROUP_OTHER_2')), 'search' => array('id' => 'search', 'status' => isset($arGroupStatus['search']) && $arGroupStatus['search'] == 'open' ? 'open' : 'close', 'name' => GetMessage('IM_CL_GROUP_SEARCH')));
     $arUserSG = array();
     $arUsers = array();
     $arUserInGroup = array();
     $arWoUserInGroup = array();
     $arExtranetUsers = array();
     if (CModule::IncludeModule('extranet') && CModule::IncludeModule("socialnetwork")) {
         $cache_id = 'im_user_sg_' . $USER->GetID();
         $obSGCache = new CPHPCache();
         $cache_dir = '/bx/imc/sonet';
         if ($obSGCache->InitCache($ttl, $cache_id, $cache_dir)) {
             $tmpVal = $obSGCache->GetVars();
             $arUserSG = $tmpVal['USER_SG'];
             $arExtranetUsers = $tmpVal['EXTRANET_USERS'];
             $arUserInGroup = $tmpVal['USER_IN_GROUP'];
             $arWoUserInGroup = $tmpVal['WO_USER_IN_GROUP'];
             unset($tmpVal);
         } else {
             if (defined("BX_COMP_MANAGED_CACHE")) {
                 $CACHE_MANAGER->StartTagCache($cache_dir);
             }
             $dbUsersInGroup = CSocNetUserToGroup::GetList(array(), array("USER_ID" => $USER->GetID(), "<=ROLE" => SONET_ROLES_USER, "GROUP_SITE_ID" => CExtranet::GetExtranetSiteID(), "GROUP_ACTIVE" => "Y", "GROUP_CLOSED" => "N"), false, false, array("ID", "GROUP_ID", "GROUP_NAME"));
             $arUserSocNetGroups = array();
             while ($ar = $dbUsersInGroup->GetNext(true, false)) {
                 $arUserSocNetGroups[] = $ar["GROUP_ID"];
                 $arUserSG['SG' . $ar['GROUP_ID']] = array('id' => 'SG' . $ar['GROUP_ID'], 'status' => isset($arGroupStatus['SG' . $ar['GROUP_ID']]) && $arGroupStatus['SG' . $ar['GROUP_ID']] == 'open' ? 'open' : 'close', 'name' => GetMessage('IM_CL_GROUP_SG') . $ar['GROUP_NAME']);
                 if (defined("BX_COMP_MANAGED_CACHE")) {
                     $CACHE_MANAGER->RegisterTag('sonet_group_' . $ar['GROUP_ID']);
                     $CACHE_MANAGER->RegisterTag('sonet_user2group_G' . $ar['GROUP_ID']);
                 }
             }
             if (count($arUserSocNetGroups) > 0) {
                 $dbUsersInGroup = CSocNetUserToGroup::GetList(array(), array("GROUP_ID" => $arUserSocNetGroups, "<=ROLE" => SONET_ROLES_USER, "USER_ACTIVE" => "Y", "USER_CONFIRM_CODE" => false), false, false, array("ID", "USER_ID", "GROUP_ID"));
                 while ($ar = $dbUsersInGroup->GetNext(true, false)) {
                     if ($ar["USER_ID"] == $USER->GetID()) {
                         continue;
                     }
                     $arExtranetUsers[$ar["USER_ID"]] = $ar["USER_ID"];
                     if (isset($arUserInGroup["SG" . $ar["GROUP_ID"]])) {
                         $arUserInGroup["SG" . $ar["GROUP_ID"]]['users'][] = $ar["USER_ID"];
                     } else {
                         $arUserInGroup["SG" . $ar["GROUP_ID"]] = array('id' => "SG" . $ar["GROUP_ID"], 'users' => array($ar["USER_ID"]));
                     }
                     if (isset($arWoUserInGroup["extranet"])) {
                         $arWoUserInGroup["extranet"]['users'][] = $ar["USER_ID"];
                     } else {
                         $arWoUserInGroup["extranet"] = array('id' => "extranet", 'users' => array($ar["USER_ID"]));
                     }
                 }
                 if (isset($arWoUserInGroup['extranet']) && isset($arWoUserInGroup['extranet']['users'])) {
                     $arWoUserInGroup['extranet']['users'] = array_values(array_unique($arWoUserInGroup['extranet']['users']));
                 }
             }
             if (defined("BX_COMP_MANAGED_CACHE")) {
                 $CACHE_MANAGER->EndTagCache();
             }
             if ($obSGCache->StartDataCache()) {
                 $obSGCache->EndDataCache(array('USER_SG' => $arUserSG, 'EXTRANET_USERS' => $arExtranetUsers, 'USER_IN_GROUP' => $arUserInGroup, 'WO_USER_IN_GROUP' => $arWoUserInGroup));
             }
         }
         unset($obSGCache);
         if (is_array($arUserSG)) {
             $arGroups = $arGroups + $arUserSG;
         }
     }
     $bFriendEnable = false;
     if ((!CModule::IncludeModule('extranet') || !CExtranet::IsExtranetSite()) && CModule::IncludeModule('socialnetwork') && CSocNetUser::IsFriendsAllowed()) {
         $bFriendEnable = true;
         $dbFriends = CSocNetUserRelations::GetList(array(), array("USER_ID" => $USER->GetID(), "RELATION" => SONET_RELATIONS_FRIEND), false, false, array("ID", "FIRST_USER_ID", "SECOND_USER_ID", "DATE_CREATE", "DATE_UPDATE", "INITIATED_BY"));
         if ($dbFriends) {
             while ($arFriends = $dbFriends->GetNext(true, false)) {
                 $friendId = $pref = IntVal($USER->GetID()) == $arFriends["FIRST_USER_ID"] ? $arFriends["SECOND_USER_ID"] : $arFriends["FIRST_USER_ID"];
                 $arFriendUsers[$friendId] = $friendId;
                 if (isset($arUserInGroup["friends"])) {
                     $arUserInGroup["friends"]['users'][] = $friendId;
                 } else {
                     $arUserInGroup["friends"] = array('id' => "friends", 'users' => array($friendId));
                 }
                 if (isset($arWoUserInGroup["all"])) {
                     $arWoUserInGroup["all"]['users'][] = $friendId;
                 } else {
                     $arWoUserInGroup["all"] = array('id' => "all", 'users' => array($friendId));
                 }
             }
         }
         $arGroups['friends'] = array('id' => 'friends', 'status' => isset($arGroupStatus['friends']) && $arGroupStatus['friends'] == 'close' ? 'close' : 'open', 'name' => GetMessage('IM_CL_GROUP_FRIENDS'));
     }
     $arFilter = array('=ACTIVE' => 'Y', '=CONFIRM_CODE' => false);
     if (CModule::IncludeModule('extranet')) {
         if (!CExtranet::IsIntranetUser()) {
             $arFilter['=ID'] = array_merge(array($USER->GetId()), $arExtranetUsers);
         }
         $arWoGroups['extranet'] = array('id' => 'extranet', 'status' => isset($arGroupStatus['extranet']) && $arGroupStatus['extranet'] == 'open' ? 'open' : 'close', 'name' => GetMessage('IM_CL_GROUP_EXTRANET'));
     }
     if ($bLoadUsers) {
         if ($bFriendEnable) {
             if (!$bIntranetEnable && !$bBusShowAll) {
                 $arFilter['=ID'][] = $USER->GetId();
                 if (!empty($arFriendUsers)) {
                     $arFilter['=ID'] = array_merge($arFilter['=ID'], $arFriendUsers);
                 }
                 if (!empty($arExtranetUsers)) {
                     $arFilter['=ID'] = array_merge($arFilter['=ID'], $arExtranetUsers);
                 }
             }
         }
         $bCLCacheEnable = false;
         if ($bIntranetEnable && (!$bFriendEnable || $bBusShowAll)) {
             $bCLCacheEnable = true;
         }
         if ($bCLCacheEnable && CModule::IncludeModule('extranet') && !CExtranet::IsIntranetUser()) {
             $bCLCacheEnable = false;
         }
         $bVoximplantEnable = IsModuleInstalled('voximplant');
         $bColorEnabled = IM\Color::isEnabled();
         $nameTemplate = self::GetUserNameTemplate(SITE_ID);
         $nameTemplateSite = CSite::GetNameFormat(false);
         $cache_id = 'im_contact_list_v11_' . $nameTemplate . '_' . $nameTemplateSite . (!empty($arExtranetUsers) ? '_' . $USER->GetID() : '') . $bVoximplantEnable . $bColorEnabled;
         $obCLCache = new CPHPCache();
         $cache_dir = '/bx/imc/contact';
         $arUsersToGroup = array();
         $arUserInGroupStructure = array();
         if ($bCLCacheEnable && $obCLCache->InitCache($ttl, $cache_id, $cache_dir)) {
             $tmpVal = $obCLCache->GetVars();
             $arUsers = $tmpVal['USERS'];
             $arWoUserInGroup['all'] = $tmpVal['WO_USER_IN_GROUP_ALL'];
             $arUsersToGroup = $tmpVal['USER_TO_GROUP'];
             $arUserInGroupStructure = $tmpVal['USER_IN_GROUP'];
             unset($tmpVal);
             $arOnline = CIMStatus::GetList();
             foreach ($arUsers as $userId => $value) {
                 $arUsers[$userId]['birthday'] = $bIntranetEnable ? CIntranetUtils::IsToday($arUsers[$userId]['birthday']) : false;
                 $arUsers[$userId]['status'] = isset($arOnline['users'][$userId]) ? $arOnline['users'][$userId]['status'] : 'offline';
                 $arUsers[$userId]['idle'] = isset($arOnline['users'][$userId]) ? $arOnline['users'][$userId]['idle'] : 0;
                 $arUsers[$userId]['mobileLastDate'] = isset($arOnline['users'][$userId]) ? $arOnline['users'][$userId]['mobileLastDate'] : 0;
                 if ($arOnline['users'][$userId]['color']) {
                     $arUsers[$userId]['color'] = $arOnline['users'][$userId]['color'];
                 }
             }
         } else {
             $arSelect = array("ID", "LAST_NAME", "NAME", "LOGIN", "PERSONAL_PHOTO", "SECOND_NAME", "PERSONAL_BIRTHDAY", "WORK_POSITION", "PERSONAL_GENDER", "EXTERNAL_AUTH_ID");
             if ($bIntranetEnable) {
                 $arSelect[] = 'UF_DEPARTMENT';
             }
             if ($bVoximplantEnable) {
                 $arSelect[] = 'UF_VI_PHONE';
             }
             $query = new \Bitrix\Main\Entity\Query(\Bitrix\Main\UserTable::getEntity());
             $query->registerRuntimeField('', new \Bitrix\Main\Entity\ReferenceField('ref', 'Bitrix\\Im\\StatusTable', array('=this.ID' => 'ref.USER_ID')));
             $query->addSelect('ref.COLOR', 'COLOR')->addSelect('ref.STATUS', 'STATUS')->addSelect('ref.IDLE', 'IDLE')->addSelect('ref.MOBILE_LAST_DATE', 'MOBILE_LAST_DATE');
             $sago = Bitrix\Main\Application::getConnection()->getSqlHelper()->addSecondsToDateTime('-180');
             $query->registerRuntimeField('', new \Bitrix\Main\Entity\ExpressionField('IS_ONLINE_CUSTOM', 'CASE WHEN LAST_ACTIVITY_DATE > ' . $sago . ' THEN \'Y\' ELSE \'N\' END'));
             $query->addSelect('IS_ONLINE_CUSTOM');
             foreach ($arSelect as $value) {
                 $query->addSelect($value);
             }
             foreach ($arFilter as $key => $value) {
                 $query->addFilter($key, $value);
             }
             $resultQuery = $query->exec();
             $arExtraUser = array();
             while ($arUser = $resultQuery->fetch()) {
                 $skipUser = false;
                 if (is_array($arUser["UF_DEPARTMENT"]) && !empty($arUser["UF_DEPARTMENT"])) {
                     foreach ($arUser["UF_DEPARTMENT"] as $dep_id) {
                         if (isset($arUserInGroupStructure[$dep_id])) {
                             $arUserInGroupStructure[$dep_id]['users'][] = $arUser["ID"];
                         } else {
                             $arUserInGroupStructure[$dep_id] = array('id' => $dep_id, 'users' => array($arUser["ID"]));
                         }
                     }
                     if (isset($arWoUserInGroup['all'])) {
                         $arWoUserInGroup['all']['users'][] = $arUser["ID"];
                     } else {
                         $arWoUserInGroup['all'] = array('id' => 'all', 'users' => array($arUser["ID"]));
                     }
                 } else {
                     if ($bBusShowAll) {
                         $skipUser = false;
                         if (isset($arWoUserInGroup['all'])) {
                             $arWoUserInGroup['all']['users'][] = $arUser["ID"];
                         } else {
                             $arWoUserInGroup['all'] = array('id' => 'all', 'users' => array($arUser["ID"]));
                         }
                         if (isset($arUserInGroup['all'])) {
                             $arUserInGroup['all']['users'][] = $arUser["ID"];
                         } else {
                             $arUserInGroup['all'] = array('id' => 'all', 'users' => array($arUser["ID"]));
                         }
                     } else {
                         $skipUser = true;
                         if (isset($arExtranetUsers[$arUser["ID"]])) {
                             $skipUser = false;
                         } elseif (isset($arFriendUsers[$arUser["ID"]])) {
                             $skipUser = false;
                         } elseif ($arUser["ID"] == $USER->GetID()) {
                             $skipUser = false;
                         }
                     }
                 }
                 if (!$skipUser) {
                     foreach ($arUser as $key => $value) {
                         $arUser[$key] = !is_array($value) && !is_object($value) ? htmlspecialcharsEx($value) : $value;
                     }
                     $arExtraUser[$arUser["ID"]] = $arUser;
                     $arFileTmp = CFile::ResizeImageGet($arUser["PERSONAL_PHOTO"], array('width' => 58, 'height' => 58), BX_RESIZE_IMAGE_EXACT, false, false, true);
                     $color = self::GetUserColor($arUser["ID"], $arUser['PERSONAL_GENDER'] == 'M' ? 'M' : 'F');
                     if (isset($arUser['COLOR']) && strlen($arUser['COLOR']) > 0) {
                         $color = IM\Color::getColor($arUser['COLOR']);
                     }
                     if (!$color) {
                         $color = self::GetUserColor($arUser["ID"], $arUser['PERSONAL_GENDER'] == 'M' ? 'M' : 'F');
                     }
                     $arUsersToGroup[$arUser['ID']] = $arUser["UF_DEPARTMENT"];
                     $arUsers[$arUser["ID"]] = array('id' => $arUser["ID"], 'name' => CUser::FormatName($nameTemplateSite, $arUser, true, false), 'nameList' => CUser::FormatName($nameTemplate, $arUser, true, false), 'workPosition' => $arUser['WORK_POSITION'], 'color' => $color, 'avatar' => empty($arFileTmp['src']) ? '/bitrix/js/im/images/blank.gif' : $arFileTmp['src'], 'status' => 'offline', 'birthday' => $arUser['PERSONAL_BIRTHDAY'], 'gender' => $arUser['PERSONAL_GENDER'] == 'F' ? 'F' : 'M', 'phoneDevice' => $bVoximplantEnable && $arUser['UF_VI_PHONE'] == 'Y', 'extranet' => self::IsExtranet($arUser), 'network' => $arUser['EXTERNAL_AUTH_ID'] == self::NETWORK_AUTH_ID, 'profile' => CIMContactList::GetUserPath($arUser["ID"]));
                 }
             }
             if (isset($arWoUserInGroup['all']) && isset($arWoUserInGroup['all']['users'])) {
                 $arWoUserInGroup['all']['users'] = array_values(array_unique($arWoUserInGroup['all']['users']));
             }
             if ($bCLCacheEnable) {
                 if (defined("BX_COMP_MANAGED_CACHE")) {
                     $CACHE_MANAGER->StartTagCache($cache_dir);
                     $CACHE_MANAGER->RegisterTag("IM_CONTACT_LIST");
                     $CACHE_MANAGER->RegisterTag($bVoximplantEnable ? "USER_CARD" : "USER_NAME");
                     $CACHE_MANAGER->EndTagCache();
                 }
                 if ($obCLCache->StartDataCache()) {
                     $obCLCache->EndDataCache(array('USERS' => $arUsers, 'WO_USER_IN_GROUP_ALL' => $arWoUserInGroup['all'], 'USER_TO_GROUP' => $arUsersToGroup, 'USER_IN_GROUP' => $arUserInGroupStructure));
                 }
             }
             foreach ($arUsers as $userId => $arUser) {
                 $arUsers[$userId]['birthday'] = $bIntranetEnable ? CIntranetUtils::IsToday($arUsers[$userId]['birthday']) : false;
                 $arUsers[$userId]['status'] = $arExtraUser[$userId]['IS_ONLINE_CUSTOM'] == 'Y' ? $arExtraUser[$userId]['STATUS'] : 'offline';
                 $arUsers[$userId]['idle'] = $arExtraUser[$userId]['IS_ONLINE_CUSTOM'] == 'Y' && is_object($arExtraUser[$userId]['IDLE']) ? $arExtraUser[$userId]['IDLE']->getTimestamp() : 0;
                 $arUsers[$userId]['mobileLastDate'] = $arExtraUser[$userId]['IS_ONLINE_CUSTOM'] == 'Y' && is_object($arExtraUser[$userId]['MOBILE_LAST_DATE']) ? $arExtraUser[$userId]['MOBILE_LAST_DATE']->getTimestamp() : 0;
             }
         }
         //uasort($ar, create_function('$a, $b', 'if($a["stamp"] < $b["stamp"]) return 1; elseif($a["stamp"] > $b["stamp"]) return -1; else return 0;'));
         if (is_array($arUsersToGroup[$USER->GetID()])) {
             foreach ($arUsersToGroup[$USER->GetID()] as $dep_id) {
                 if (isset($arGroups[$dep_id])) {
                     $arGroups[$dep_id]['status'] = isset($arGroupStatus[$dep_id]) && $arGroupStatus[$dep_id] == 'close' ? 'close' : 'open';
                 }
             }
         }
         foreach ($arUserInGroupStructure as $key => $val) {
             $arUserInGroup[$key] = $val;
         }
         unset($arUsersToGroup, $arUserInGroupStructure);
     }
     $arChats = array();
     if ($bLoadChats) {
         $bColorEnabled = IM\Color::isEnabled();
         $cache_id = 'im_chats_v4_' . $USER->GetID() . '_' . $bColorEnabled;
         $obCLCache = new CPHPCache();
         $cache_dir = '/bx/imc/chats';
         $arUsersToGroup = array();
         $arUserInGroupStructure = array();
         if ($obCLCache->InitCache($ttl, $cache_id, $cache_dir)) {
             $tmpVal = $obCLCache->GetVars();
             $arChats = $tmpVal['CHATS'];
             unset($tmpVal);
         } else {
             $chats = CIMChat::GetChatData(array('SKIP_PRIVATE' => 'Y', 'GET_LIST' => 'Y', 'USER_ID' => $USER->GetID()));
             $arChats = $chats['chat'];
             if ($obCLCache->StartDataCache()) {
                 $obCLCache->EndDataCache(array('CHATS' => $arChats));
             }
         }
     }
     $arContactList = array('users' => $arUsers, 'groups' => $arGroups, 'chats' => $arChats, 'woGroups' => $arWoGroups, 'userInGroup' => $arUserInGroup, 'woUserInGroup' => $arWoUserInGroup);
     foreach (GetModuleEvents("im", "OnAfterContactListGetList", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array(&$arContactList));
     }
     return $arContactList;
 }
Ejemplo n.º 10
0
         }
     }
     if (!$bGet) {
         $arFilter = array("TO_USER_ID" => $GLOBALS["USER"]->GetID(), "DATE_VIEW" => "", "TO_DELETED" => "N", ">DATE_CREATE" => ConvertTimeStamp($last_message_ts, "FULL", $site));
         if ($log == "Y") {
             $arFilter["IS_LOG_ALL"] = "Y";
         }
         $dbUserRequests = CSocNetMessages::GetList(array(), $arFilter, false, array("nTopCount" => 1), array("ID"));
         if ($arUserRequests = $dbUserRequests->Fetch()) {
             $bGet = true;
         }
     }
 }
 if ($bGet) {
     $arFilter = array("SECOND_USER_ID" => $GLOBALS["USER"]->GetID(), "RELATION" => SONET_RELATIONS_REQUEST);
     $dbUserRequests = CSocNetUserRelations::GetList(array("DATE_UPDATE" => "ASC"), $arFilter, false, array("nTopCount" => 50), array("ID", "FIRST_USER_ID", "MESSAGE", "FIRST_USER_NAME", "DATE_CREATE", "DATE_UPDATE", "FIRST_USER_LAST_NAME", "FIRST_USER_SECOND_NAME", "FIRST_USER_LOGIN", "FIRST_USER_PERSONAL_PHOTO", "FIRST_USER_PERSONAL_GENDER", "FIRST_USER_IS_ONLINE"));
     while ($arUserRequests = $dbUserRequests->GetNext()) {
         $arTmpData = array();
         $arTmpData["TYPE"] = "FR";
         $pu = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_USER"], array("user_id" => $arUserRequests["FIRST_USER_ID"]));
         $canViewProfile = CSocNetUserPerms::CanPerformOperation($GLOBALS["USER"]->GetID(), $arUserRequests["FIRST_USER_ID"], "viewprofile", CSocNetUser::IsCurrentUserModuleAdmin($site));
         $arTmpData["IMAGE_USER"] = "******";
         if (intval($arUserRequests["FIRST_USER_PERSONAL_PHOTO"]) <= 0) {
             switch ($arUserRequests["FIRST_USER_PERSONAL_GENDER"]) {
                 case "M":
                     $suffix = "male";
                     break;
                 case "F":
                     $suffix = "female";
                     break;
                 default:
Ejemplo n.º 11
0
         }
         $arEventTmp = array("EVENT_TYPE" => "INVITE_GROUP", "ID" => $arRequest["ID"], "USER_ID" => $arRequest["USER_ID"], "GROUP_ID" => $arRequest["GROUP_ID"], "GROUP_URL" => $gu, "GROUP_NAME" => $arGroup["NAME"], "GROUP_IMG" => $arImage, "DATE_CREATE" => $arRequest["DATE_CREATE"], "MESSAGE" => $parser->convert($arRequest["~MESSAGE"], false, array(), array("HTML" => "N", "ANCHOR" => "Y", "BIU" => "Y", "IMG" => "Y", "LIST" => "Y", "QUOTE" => "Y", "CODE" => "Y", "FONT" => "Y", "SMILES" => "Y", "UPLOAD" => "N", "NL2BR" => "N")));
         $arTmpResult["RequestsIn"][] = $arEventTmp;
     }
 }
 $rsRequestsIn = new CDBResult();
 $rsRequestsIn->InitFromArray($arTmpResult["RequestsIn"]);
 $rsRequestsIn->NavStart();
 while ($arRecord = $rsRequestsIn->GetNext()) {
     $arResult["RequestsIn"]["List"][] = $arRecord;
 }
 $arResult["RequestsIn"]["NAV_STRING"] = $rsRequestsIn->GetPageNavStringEx($navComponentObject, GetMessage("SONET_URE_NAV"), "", false);
 /*********************  Outogoing Requests  ***********************/
 /* Friends Outgoing */
 $arResult["RequestsOut"] = array();
 $dbUserRequests = CSocNetUserRelations::GetList(array("DATE_UPDATE" => "ASC"), array("FIRST_USER_ID" => $arParams["USER_ID"], "RELATION" => SONET_RELATIONS_REQUEST), false, false, array("ID", "FIRST_USER_ID", "SECOND_USER_ID", "MESSAGE", "SECOND_USER_NAME", "DATE_UPDATE", "SECOND_USER_LAST_NAME", "SECOND_USER_SECOND_NAME", "SECOND_USER_LOGIN", "SECOND_USER_PERSONAL_PHOTO", "SECOND_USER_PERSONAL_GENDER", "SECOND_USER_IS_ONLINE"));
 while ($arUserRequest = $dbUserRequests->GetNext()) {
     $pu = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_USER"], array("user_id" => $arUserRequest["SECOND_USER_ID"]));
     $canViewProfile = CSocNetUserPerms::CanPerformOperation($arParams["USER_ID"], $arUserRequest["SECOND_USER_ID"], "viewprofile", CSocNetUser::IsCurrentUserModuleAdmin());
     if (intval($arParams["THUMBNAIL_LIST_SIZE"]) > 0) {
         if (intval($arUserRequest["SECOND_USER_PERSONAL_PHOTO"]) <= 0) {
             switch ($arUserRequest["SECOND_USER_PERSONAL_GENDER"]) {
                 case "M":
                     $suffix = "male";
                     break;
                 case "F":
                     $suffix = "female";
                     break;
                 default:
                     $suffix = "unknown";
             }
Ejemplo n.º 12
0
 public static function GetList($arParams = array())
 {
     if (!is_array($arParams)) {
         $arParams = array();
     }
     $arID = array();
     if (isset($arParams['ID']) && is_array($arParams['ID']) && !empty($arParams['ID'])) {
         foreach ($arParams['ID'] as $key => $value) {
             $arID[] = intval($value);
         }
     } else {
         if (isset($arParams['ID']) && intval($arParams['ID']) > 0) {
             $arID[] = intval($arParams['ID']);
         }
     }
     $arParams['GET_OFFLINE'] = !empty($arID) && isset($arParams['GET_OFFLINE']) && $arParams['GET_OFFLINE'] == 'Y' ? 'Y' : 'N';
     global $USER;
     $userId = is_object($USER) ? intval($USER->GetID()) : 0;
     $bBusShowAll = !IsModuleInstalled('intranet') && COption::GetOptionInt('im', 'contact_list_show_all_bus');
     if (!$bBusShowAll && !isset($arParams['ID']) && $userId > 0 && !isset($arParams['SKIP_CHECK'])) {
         if (isset(self::$FRIENDS_USERS[$userId])) {
             $arID = self::$FRIENDS_USERS[$userId];
         } else {
             if (CModule::IncludeModule('socialnetwork') && CSocNetUser::IsFriendsAllowed()) {
                 $arID = array($userId);
                 $dbFriends = CSocNetUserRelations::GetList(array(), array("USER_ID" => $userId, "RELATION" => SONET_RELATIONS_FRIEND), false, false, array("ID", "FIRST_USER_ID", "SECOND_USER_ID"));
                 if ($dbFriends) {
                     while ($arFriends = $dbFriends->Fetch()) {
                         $arID[] = $userId == $arFriends["FIRST_USER_ID"] ? $arFriends["SECOND_USER_ID"] : $arFriends["FIRST_USER_ID"];
                     }
                 }
                 self::$FRIENDS_USERS[$userId] = $arID;
             }
         }
     }
     $arUsers = array();
     if (self::$ONLINE_USERS && $arParams['GET_OFFLINE'] == 'N') {
         $arUsers = self::$ONLINE_USERS;
     } else {
         if (!self::$ONLINE_USERS || $arParams['GET_OFFLINE'] == 'Y') {
             $enable = self::Enable();
             $arUsers = array();
             $query = new \Bitrix\Main\Entity\Query(\Bitrix\Main\UserTable::getEntity());
             $query->registerRuntimeField('', new \Bitrix\Main\Entity\ReferenceField('ref', 'Bitrix\\Im\\StatusTable', array('=this.ID' => 'ref.USER_ID')));
             $query->addSelect('ID')->addSelect('ref.COLOR', 'COLOR')->addSelect('PERSONAL_GENDER');
             if ($enable) {
                 $query->addSelect('ref.STATUS', 'STATUS')->addSelect('ref.IDLE', 'IDLE')->addSelect('ref.MOBILE_LAST_DATE', 'MOBILE_LAST_DATE');
             }
             if ($arParams['GET_OFFLINE'] == 'N') {
                 $query->addFilter('>LAST_ACTIVITY_DATE', new \Bitrix\Main\DB\SqlExpression(Bitrix\Main\Application::getConnection()->getSqlHelper()->addSecondsToDateTime('-180')));
             } else {
                 $sago = Bitrix\Main\Application::getConnection()->getSqlHelper()->addSecondsToDateTime('-180');
                 $query->registerRuntimeField('', new \Bitrix\Main\Entity\ExpressionField('IS_ONLINE_CUSTOM', 'CASE WHEN LAST_ACTIVITY_DATE > ' . $sago . ' THEN \'Y\' ELSE \'N\' END'));
                 $query->addSelect('IS_ONLINE_CUSTOM');
                 $query->addFilter('=ID', $arID);
             }
             $result = $query->exec();
             while ($arUser = $result->fetch()) {
                 $color = null;
                 if (isset($arUser['COLOR']) && strlen($arUser['COLOR']) > 0) {
                     $color = IM\Color::getColor($arUser['COLOR']);
                 }
                 if (!$color) {
                     $color = \CIMContactList::GetUserColor($arUser["ID"], $arUser['PERSONAL_GENDER'] == 'M' ? 'M' : 'F');
                 }
                 $arUsers[$arUser["ID"]] = array('id' => $arUser["ID"], 'status' => $enable && in_array($arUser['STATUS'], self::$AVAILABLE_STATUSES) ? $arUser['STATUS'] : 'online', 'color' => $color, 'idle' => $enable && is_object($arUser['IDLE']) ? $arUser['IDLE']->getTimestamp() : 0, 'mobileLastDate' => $enable && is_object($arUser['MOBILE_LAST_DATE']) ? $arUser['MOBILE_LAST_DATE']->getTimestamp() : 0);
                 if ($arParams['GET_OFFLINE'] == 'Y' && $arUser['IS_ONLINE_CUSTOM'] == 'N') {
                     $arUsers[$arUser["ID"]]['status'] = 'offline';
                     $arUsers[$arUser["ID"]]['idle'] = 0;
                     $arUsers[$arUser["ID"]]['mobileLastDate'] = 0;
                 }
             }
             if ($arParams['GET_OFFLINE'] == 'N') {
                 self::$ONLINE_USERS = $arUsers;
             }
         }
     }
     $arResult = array();
     if (empty($arID)) {
         $arResult = $arUsers;
     } else {
         foreach ($arID as $userId) {
             if (isset($arUsers[$userId])) {
                 $arResult[$userId] = $arUsers[$userId];
             }
         }
     }
     return array('users' => $arResult);
 }
Ejemplo n.º 13
0
	function GetList($arParams = Array())
	{
		global $USER, $CACHE_MANAGER;

		$bLoadUsers = isset($arParams['LOAD_USERS']) && $arParams['LOAD_USERS'] == 'N'? false: true;

		$arGroups = array();
		if(defined("BX_COMP_MANAGED_CACHE"))
			$ttl = 2592000;
		else
			$ttl = 600;

		$bIntranetEnable = false;
		if(IsModuleInstalled('intranet') && CModule::IncludeModule('intranet') && CModule::IncludeModule('iblock'))
		{
			$bIntranetEnable = true;
			if (!(CModule::IncludeModule('extranet') && !CExtranet::IsIntranetUser()))
			{
				$arGroupStatus = CUserOptions::GetOption('IM', 'groupStatus');
				if(($iblock_id = COption::GetOptionInt('intranet', 'iblock_structure', 0)) > 0)
				{
					$cache_id = 'im_structure_'.$iblock_id;
					$obIMCache = new CPHPCache;
					$cache_dir = '/bx/imc/structure';

					if($obIMCache->InitCache($ttl, $cache_id, $cache_dir))
					{
						$tmpVal = $obIMCache->GetVars();
						$arStructureName = $tmpVal['STRUCTURE_NAME'];
						unset($tmpVal);
					}
					else
					{
						if(defined("BX_COMP_MANAGED_CACHE"))
							$CACHE_MANAGER->StartTagCache($cache_dir);

						$arResult["Structure"] = array();
						$sec = CIBlockSection::GetList(
							Array("left_margin"=>"asc","SORT"=>"ASC"),
							Array("ACTIVE"=>"Y","IBLOCK_ID"=>$iblock_id),
							false,
							Array('ID', 'NAME', 'DEPTH_LEVEL', 'IBLOCK_SECTION_ID')
						);
						$arStructureName = Array();
						while($ar = $sec->GetNext(true, false))
						{
							if ($ar['DEPTH_LEVEL'] > 1)
								$ar['NAME'] .= ' / '.$arStructureName[$ar['IBLOCK_SECTION_ID']];
							$arStructureName[$ar['ID']] = $ar['NAME'];
						}

						if(defined("BX_COMP_MANAGED_CACHE"))
						{
							$CACHE_MANAGER->RegisterTag('iblock_id_'.$iblock_id);
							$CACHE_MANAGER->EndTagCache();
						}

						if($obIMCache->StartDataCache())
						{
							$obIMCache->EndDataCache(array(
								'STRUCTURE_NAME' => $arStructureName
							));
						}
					}

					unset($obIMCache);

					foreach ($arStructureName as $key => $value)
					{
						$arGroups[$key] = Array('id' => $key, 'status' => (isset($arGroupStatus[$key]) && $arGroupStatus[$key] == 'open'? 'open': 'close'), 'name' => $value);
					}
				}
				$arGroups['other'] = Array('id' => 'other', 'status' => (isset($arGroupStatus['other']) && $arGroupStatus['other'] == 'open'? 'open': 'close'), 'name' => GetMessage('IM_CL_GROUP_OTHER'));
			}
		}
		else
		{
			$arGroups['other'] = Array('id' => 'other', 'status' => (isset($arGroupStatus['other']) && $arGroupStatus['other'] == 'open'? 'open': 'close'), 'name' => GetMessage('IM_CL_GROUP_OTHER_2'));
		}

		$arWoGroups = array(
			'all' => array(
				'id' => 'all',
				'status' => (isset($arGroupStatus['all']) && $arGroupStatus['all'] == 'close'? 'close': 'open'),
				'name' => GetMessage('IM_CL_GROUP_ALL')
			),
			'other' => array(
				'id' => 'other',
				'status' => (isset($arGroupStatus['other']) && $arGroupStatus['other'] == 'open'? 'open': 'close'),
				'name' => $bIntranetEnable? GetMessage('IM_CL_GROUP_OTHER'): GetMessage('IM_CL_GROUP_OTHER_2')
			)
		);

		$arUserSG = array();
		$arUsers = array();
		$arUserInGroup = array();
		$arWoUserInGroup = array();
		$arExtranetUsers = array();

		if (CModule::IncludeModule('extranet') && CModule::IncludeModule("socialnetwork"))
		{
			$cache_id = 'im_user_sg_'.$USER->GetID();
			$obSGCache = new CPHPCache;
			$cache_dir = '/bx/imc/sonet';

			if($obSGCache->InitCache($ttl, $cache_id, $cache_dir))
			{
				$tmpVal = $obSGCache->GetVars();
				$arUserSG = $tmpVal['USER_SG'];
				$arExtranetUsers = $tmpVal['EXTRANET_USERS'];
				$arUserInGroup = $tmpVal['USER_IN_GROUP'];
				$arWoUserInGroup = $tmpVal['WO_USER_IN_GROUP'];
				unset($tmpVal);
			}
			else
			{
				if(defined("BX_COMP_MANAGED_CACHE"))
					$CACHE_MANAGER->StartTagCache($cache_dir);

				$dbUsersInGroup = CSocNetUserToGroup::GetList(
					array(),
					array(
						"USER_ID" => $USER->GetID(),
						"<=ROLE" => SONET_ROLES_USER,
						"GROUP_SITE_ID" => CExtranet::GetExtranetSiteID(),
						"GROUP_ACTIVE" => "Y",
						"GROUP_CLOSED" => "N"
					),
					false,
					false,
					array("ID", "GROUP_ID", "GROUP_NAME")
				);

				$arUserSocNetGroups = Array();
				while ($ar = $dbUsersInGroup->GetNext(true, false))
				{
					$arUserSocNetGroups[] = $ar["GROUP_ID"];
					$arUserSG['SG'.$ar['GROUP_ID']] = array(
						'id' => 'SG'.$ar['GROUP_ID'],
						'status' => (isset($arGroupStatus['SG'.$ar['GROUP_ID']]) && $arGroupStatus['SG'.$ar['GROUP_ID']] == 'open'? 'open': 'close'),
						'name' => GetMessage('IM_CL_GROUP_SG').$ar['GROUP_NAME']
					);
					if(defined("BX_COMP_MANAGED_CACHE"))
					{
						$CACHE_MANAGER->RegisterTag('sonet_group_'.$ar['GROUP_ID']);
						$CACHE_MANAGER->RegisterTag('sonet_user2group_G'.$ar['GROUP_ID']);
					}
				}

				if (count($arUserSocNetGroups) > 0)
				{
					$dbUsersInGroup = CSocNetUserToGroup::GetList(
						array(),
						array(
							"GROUP_ID" => $arUserSocNetGroups,
							"<=ROLE" => SONET_ROLES_USER,
							"USER_ACTIVE" => "Y"
						),
						false,
						false,
						array("ID", "USER_ID", "GROUP_ID")
					);

					while ($ar = $dbUsersInGroup->GetNext(true, false))
					{
						if($USER->GetID() != $ar["USER_ID"])
						{
							$arExtranetUsers[$ar["USER_ID"]] = $ar["USER_ID"];

							if (isset($arUserInGroup["SG".$ar["GROUP_ID"]]))
								$arUserInGroup["SG".$ar["GROUP_ID"]]['users'][] = $ar["USER_ID"];
							else
								$arUserInGroup["SG".$ar["GROUP_ID"]] = Array('id' => "SG".$ar["GROUP_ID"], 'users' => Array($ar["USER_ID"]));

							if (isset($arWoUserInGroup["extranet"]))
								$arWoUserInGroup["extranet"]['users'][] = $ar["USER_ID"];
							else
								$arWoUserInGroup["extranet"] = Array('id' => "extranet", 'users' => Array($ar["USER_ID"]));
						}
					}
					if (isset($arWoUserInGroup['extranet']) && isset($arWoUserInGroup['extranet']['users']))
						$arWoUserInGroup['extranet']['users'] = array_values(array_unique($arWoUserInGroup['extranet']['users']));
				}
				if(defined("BX_COMP_MANAGED_CACHE"))
					$CACHE_MANAGER->EndTagCache();
				if($obSGCache->StartDataCache())
				{
					$obSGCache->EndDataCache(array(
							'USER_SG' => $arUserSG,
							'EXTRANET_USERS' => $arExtranetUsers,
							'USER_IN_GROUP' => $arUserInGroup,
							'WO_USER_IN_GROUP' => $arWoUserInGroup
						)
					);
				}
			}
			unset($obSGCache);
			if(is_array($arUserSG))
				$arGroups = $arGroups+$arUserSG;
		}

		$bFriendEnable = false;
		if ((!CModule::IncludeModule('extranet') || !CExtranet::IsExtranetSite()) && CModule::IncludeModule('socialnetwork') && CSocNetUser::IsFriendsAllowed())
		{
			$bFriendEnable = true;
			$dbFriends = CSocNetUserRelations::GetList(array(),array("USER_ID" => $USER->GetID(), "RELATION" => SONET_RELATIONS_FRIEND), false, false, array("ID", "FIRST_USER_ID", "SECOND_USER_ID", "DATE_CREATE", "DATE_UPDATE", "INITIATED_BY"));
			if ($dbFriends)
			{
				while ($arFriends = $dbFriends->GetNext(true, false))
				{
					$friendId = $pref = (IntVal($USER->GetID()) == $arFriends["FIRST_USER_ID"]) ? $arFriends["SECOND_USER_ID"] : $arFriends["FIRST_USER_ID"];
					$arFriendUsers[$friendId] = $friendId;

					if (isset($arUserInGroup["friends"]))
						$arUserInGroup["friends"]['users'][] = $friendId;
					else
						$arUserInGroup["friends"] = Array('id' => "friends", 'users' => Array($friendId));

					if (isset($arWoUserInGroup["all"]))
						$arWoUserInGroup["all"]['users'][] = $friendId;
					else
						$arWoUserInGroup["all"] = Array('id' => "all", 'users' => Array($friendId));
				}
			}
			$arGroups['friends'] = array(
				'id' => 'friends',
				'status' => (isset($arGroupStatus['friends']) && $arGroupStatus['friends'] == 'close'? 'close': 'open'),
				'name' => GetMessage('IM_CL_GROUP_FRIENDS')
			);
		}

		$arFilter = array('ACTIVE' => 'Y');
		if (CModule::IncludeModule('extranet'))
		{
			if(!CExtranet::IsIntranetUser())
				$arFilter['ID'] = $USER->GetID()."|".implode('|', $arExtranetUsers);

			$arWoGroups['extranet'] = array(
				'id' => 'extranet',
				'status' => (isset($arGroupStatus['extranet']) && $arGroupStatus['extranet'] == 'open'? 'open': 'close'),
				'name' => GetMessage('IM_CL_GROUP_EXTRANET')
			);
		}
		if ($bLoadUsers)
		{
			if ($bFriendEnable)
			{
				if (!$bIntranetEnable)
				{
					$arFilter['ID'] = $USER->GetID();
					if (!empty($arFriendUsers))
						$arFilter['ID'] .= "|".implode('|', $arFriendUsers);
					if (!empty($arExtranetUsers))
						$arFilter['ID'] .= "|".implode('|', $arExtranetUsers);
				}
			}

			$bCLCacheEnable = false;
			if ($bIntranetEnable && !$bFriendEnable)
				$bCLCacheEnable = true;

			if ($bCLCacheEnable && CModule::IncludeModule('extranet') && !CExtranet::IsIntranetUser())
				$bCLCacheEnable = false;

			$nameTemplate = self::GetUserNameTemplate(SITE_ID);
			$nameTemplateSite = CSite::GetNameFormat(false);
			$cache_id = 'im_contact_list_'.$nameTemplate.'_'.$nameTemplateSite.(!empty($arExtranetUsers)? '_'.$USER->GetID(): '').'_v3';
			$obCLCache = new CPHPCache;
			$cache_dir = '/bx/imc/contact';

			$arUsersToGroup = array();
			$arUserInGroupStructure = array();

			if($bCLCacheEnable && $obCLCache->InitCache($ttl, $cache_id, $cache_dir))
			{
				$tmpVal = $obCLCache->GetVars();
				$arUsers = $tmpVal['USERS'];
				$arWoUserInGroup['all'] = $tmpVal['WO_USER_IN_GROUP_ALL'];
				$arUsersToGroup = $tmpVal['USER_TO_GROUP'];
				$arUserInGroupStructure = $tmpVal['USER_IN_GROUP'];
				unset($tmpVal);
			}
			else
			{
				$arExtParams = Array('FIELDS' => Array("ID", "LAST_NAME", "NAME", "SECOND_NAME", "LOGIN", "PERSONAL_PHOTO", "PERSONAL_BIRTHDAY", "PERSONAL_GENDER", "WORK_POSITION"));
				if ($bIntranetEnable)
					$arExtParams['SELECT'] = array('UF_DEPARTMENT');

				$dbUsers = CUser::GetList(($sort_by = Array('last_name'=>'asc')), ($dummy=''), $arFilter, $arExtParams);
				while ($arUser = $dbUsers->GetNext(true, false))
				{
					$skipUser = false;
					if(is_array($arUser["UF_DEPARTMENT"]) && !empty($arUser["UF_DEPARTMENT"]))
					{
						foreach($arUser["UF_DEPARTMENT"] as $dep_id)
						{
							if (isset($arUserInGroupStructure[$dep_id]))
								$arUserInGroupStructure[$dep_id]['users'][] = $arUser["ID"];
							else
								$arUserInGroupStructure[$dep_id] = Array('id' => $dep_id, 'users' => Array($arUser["ID"]));
						}
						if (isset($arWoUserInGroup['all']))
							$arWoUserInGroup['all']['users'][] = $arUser["ID"];
						else
							$arWoUserInGroup['all'] = Array('id' => 'all', 'users' => Array($arUser["ID"]));
					}
					else
					{
						$skipUser = true;
						if (isset($arExtranetUsers[$arUser["ID"]]))
							$skipUser = false;
						elseif (isset($arFriendUsers[$arUser["ID"]]))
							$skipUser = false;
						elseif ($arUser["ID"] == $USER->GetID())
							$skipUser = false;
					}

					if (!$skipUser)
					{
						$arFileTmp = CFile::ResizeImageGet(
							$arUser["PERSONAL_PHOTO"],
							array('width' => 58, 'height' => 58),
							BX_RESIZE_IMAGE_EXACT,
							false,
							false,
							true
						);

						$arUsersToGroup[$arUser['ID']] = $arUser["UF_DEPARTMENT"];
						$arUsers[$arUser["ID"]] = Array(
							'id' => $arUser["ID"],
							'name' => CUser::FormatName($nameTemplateSite, $arUser, true, false),
							'nameList' => CUser::FormatName($nameTemplate, $arUser, true, false),
							'workPosition' => $arUser['WORK_POSITION'],
							'avatar' => empty($arFileTmp['src'])? '/bitrix/js/im/images/blank.gif': $arFileTmp['src'],
							'status' => 'offline',
							'birthday' => $arUser['PERSONAL_BIRTHDAY'],
							'gender' => $arUser['PERSONAL_GENDER'] == 'F'? 'F': 'M',
							'extranet' => self::IsExtranet($arUser),
							'profile' => CIMContactList::GetUserPath($arUser["ID"])
						);
					}
				}
				if (isset($arWoUserInGroup['all']) && isset($arWoUserInGroup['all']['users']))
					$arWoUserInGroup['all']['users'] = array_values(array_unique($arWoUserInGroup['all']['users']));

				if ($bCLCacheEnable)
				{
					if(defined("BX_COMP_MANAGED_CACHE"))
					{
						$CACHE_MANAGER->StartTagCache($cache_dir);
						$CACHE_MANAGER->RegisterTag("USER_NAME");
						$CACHE_MANAGER->EndTagCache();
					}
					if($obCLCache->StartDataCache())
					{
						$obCLCache->EndDataCache(array(
								'USERS' => $arUsers,
								'WO_USER_IN_GROUP_ALL' => $arWoUserInGroup['all'],
								'USER_TO_GROUP' => $arUsersToGroup,
								'USER_IN_GROUP' => $arUserInGroupStructure
							)
						);
					}
				}
			}

			$arOnline = CIMStatus::GetList();
			foreach ($arUsers as $userId => $value)
			{
				$arUsers[$userId]['birthday'] = $bIntranetEnable? CIntranetUtils::IsToday($arUsers[$userId]['birthday']): false;
				$arUsers[$userId]['status'] = isset($arOnline['users'][$userId])? $arOnline['users'][$userId]['status']: 'offline';
				$arUsers[$userId]['idle'] = isset($arOnline['users'][$userId])? $arOnline['users'][$userId]['idle']: 0;
			}

			//uasort($ar, create_function('$a, $b', 'if($a["stamp"] < $b["stamp"]) return 1; elseif($a["stamp"] > $b["stamp"]) return -1; else return 0;'));
			if (is_array($arUsersToGroup[$USER->GetID()]))
			{
				foreach($arUsersToGroup[$USER->GetID()] as $dep_id)
				{
					$arGroups[$dep_id]['status'] = (isset($arGroupStatus[$dep_id]) && $arGroupStatus[$dep_id] == 'close'? 'close': 'open');
				}
			}
			foreach ($arUserInGroupStructure as $key => $val)
			{
				$arUserInGroup[$key] = $val;
			}
			unset($arUsersToGroup, $arUserInGroupStructure);
		}

		$arContactList = Array('users' => $arUsers, 'groups' => $arGroups, 'woGroups' => $arWoGroups, 'userInGroup' => $arUserInGroup, 'woUserInGroup' => $arWoUserInGroup );

		foreach(GetModuleEvents("im", "OnAfterContactListGetList", true) as $arEvent)
			ExecuteModuleEventEx($arEvent, array(&$arContactList));

		return $arContactList;
	}
Ejemplo n.º 14
0
     if ($_REQUEST["action"] == "ban") {
         if (!CSocNetUserRelations::BanUser($GLOBALS["USER"]->GetID(), IntVal($_REQUEST["userID"]))) {
             if ($e = $APPLICATION->GetException()) {
                 $errorMessage .= $e->GetString();
             }
         }
     }
     if (strlen($errorMessage) > 0) {
         $arResult["ErrorMessage"] = $errorMessage;
     }
 }
 /*********************  END ACTIONS  *****************************/
 $parser = new CSocNetTextParser(LANGUAGE_ID, $arParams["PATH_TO_SMILE"]);
 $bFound = false;
 if (!$bFound) {
     $dbUserRequests = CSocNetUserRelations::GetList(array("DATE_UPDATE" => "ASC"), array("SECOND_USER_ID" => $GLOBALS["USER"]->GetID(), "RELATION" => SONET_RELATIONS_REQUEST), false, array("nTopCount" => 1), array("ID", "FIRST_USER_ID", "MESSAGE", "FIRST_USER_NAME", "DATE_UPDATE", "FIRST_USER_LAST_NAME", "FIRST_USER_SECOND_NAME", "FIRST_USER_LOGIN", "FIRST_USER_PERSONAL_PHOTO", "FIRST_USER_PERSONAL_GENDER", "FIRST_USER_IS_ONLINE"));
     if ($arUserRequests = $dbUserRequests->GetNext()) {
         $bFound = true;
         $arResult["EventType"] = "FriendRequest";
         $pu = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_USER"], array("user_id" => $arUserRequests["FIRST_USER_ID"]));
         $canViewProfile = CSocNetUserPerms::CanPerformOperation($GLOBALS["USER"]->GetID(), $arUserRequests["FIRST_USER_ID"], "viewprofile", CSocNetUser::IsCurrentUserModuleAdmin());
         if (intval($arUserRequests["FIRST_USER_PERSONAL_PHOTO"]) <= 0) {
             switch ($arUserRequests["FIRST_USER_PERSONAL_GENDER"]) {
                 case "M":
                     $suffix = "male";
                     break;
                 case "F":
                     $suffix = "female";
                     break;
                 default:
                     $suffix = "unknown";