Exemple #1
0
 public static function AddByUsers($userIds, $arMessage, $channelType = 'private')
 {
     if (!is_array($userIds)) {
         return false;
     }
     $arPush = array();
     if (isset($arMessage['push'])) {
         $arPush = $arMessage['push'];
         unset($arMessage['push']);
     }
     $channels = array();
     foreach ($userIds as $userId) {
         $userId = intval($userId);
         if ($userId > 0) {
             $arChannel = CPullChannel::GetChannel($userId, $channelType);
             $channels[$userId] = $arChannel['CHANNEL_ID'];
         }
     }
     if (empty($channels)) {
         return false;
     }
     $result = self::AddByChannel($channels, $arMessage);
     if ($result && !empty($arPush) && (isset($arPush['advanced_params']) || isset($arPush['message']) && strlen($arPush['message']) > 0)) {
         $CPushManager = new CPushManager();
         $pushUsers = array();
         foreach ($channels as $userId => $channelId) {
             if (isset($arPush['skip_users']) && in_array($userId, $arPush['skip_users'])) {
                 continue;
             }
             $pushUsers[] = $userId;
         }
         $CPushManager->AddQueue(array('USER_ID' => $pushUsers, 'MESSAGE' => str_replace("\n", " ", $arPush['message']), 'PARAMS' => $arPush['params'], 'ADVANCED_PARAMS' => isset($arPush['advanced_params']) ? $arPush['advanced_params'] : array(), 'BADGE' => isset($arPush['badge']) ? intval($arPush['badge']) : '', 'SOUND' => isset($arPush['sound']) ? $arPush['sound'] : '', 'TAG' => isset($arPush['tag']) ? $arPush['tag'] : '', 'SUB_TAG' => isset($arPush['sub_tag']) ? $arPush['sub_tag'] : '', 'APP_ID' => isset($arPush['app_id']) ? $arPush['app_id'] : '', 'SEND_IMMEDIATELY' => isset($arPush['send_immediately']) && $arPush['send_immediately'] == 'Y' ? 'Y' : 'N'));
     }
     return $result;
 }
Exemple #2
0
 public static function AddByUser($userId, $arMessage, $channelType = 'private')
 {
     if (intval($userId) <= 0) {
         return false;
     }
     $arChannel = CPullChannel::GetChannel($userId, $channelType);
     $arMessage['push_user'] = $userId;
     return self::AddByChannel($arChannel['CHANNEL_ID'], $arMessage);
 }
	public static function OnAfterUserLogout($arParams)
	{
		if (!CPullOptions::GetQueueServerStatus())
			return false;

		if ($arParams['USER_ID'] <= 0)
			return false;

		$arParams['USER_ID'] = intval($arParams['USER_ID']);

		if (isset($_SESSION['USER_LAST_LOGOUT_'.$arParams['USER_ID']])
			&& intval($_SESSION['USER_LAST_LOGOUT_'.$arParams['USER_ID']])+100 > time())
			return false;

		$_SESSION['USER_LAST_LOGOUT_'.$arParams['USER_ID']] = time();
		unset($_SESSION['USER_LAST_AUTH_'.$arParams['USER_ID']]);

		$arChannel = CPullChannel::GetChannel($arParams['USER_ID']);
		$result = CPullChannel::Send($arChannel['CHANNEL_ID'], 'ping', 'GET', 5, false);
		if (is_object($result) && isset($result->infos[0]))
		{
			$sendOffline = $result->infos[0]->subscribers > 0? false: true;
		}
		else
		{
			$sendOffline = true;
		}

		if ($sendOffline)
		{
			CPullStack::AddShared(Array(
				'module_id' => 'online',
				'command' => 'user_offline',
				'params' => Array(
					'USER_ID' => $arParams['USER_ID']
				),
			));
		}

		return true;
	}