public static function Like($id, $action = 'auto')
	{
		global $USER;
		if (!CModule::IncludeModule('pull'))
			return false;

		$action = in_array($action, Array('plus', 'minus'))? $action: 'auto';

		$message = self::GetById($id, Array('WITH_FILES' => 'Y'));
		if (!$message)
			return false;

		$relations = CIMMessenger::GetRelationById($id);
		if (!isset($relations[$USER->GetId()]))
			return false;

		$isLike = false;
		if (isset($message['PARAMS']['LIKE']))
		{
			$isLike = in_array($USER->GetId(), $message['PARAMS']['LIKE']);
		}

		if ($isLike && $action == 'plus')
		{
			return false;
		}
		else if (!$isLike && $action == 'minus')
		{
			return false;
		}

		$isLike = true;
		if (isset($message['PARAMS']['LIKE']))
		{
			$like = $message['PARAMS']['LIKE'];
			$selfLike = array_search($USER->GetId(), $like);
			if ($selfLike !== false)
			{
				$isLike = false;
				unset($like[$selfLike]);
			}
			else
			{
				$like[] = $USER->GetId();
			}
		}
		else
		{
			$like = Array($USER->GetId());
		}

		sort($like);
		CIMMessageParam::Set($id, Array('LIKE' => $like));

		$result = IM\ChatTable::getList(Array(
			'filter'=>Array(
				'=ID' => $message['CHAT_ID']
			)
		));
		$chat = $result->fetch();

		if ($message['AUTHOR_ID'] > 0 && $message['AUTHOR_ID'] != $USER->GetId() && $isLike)
		{
			$CCTP = new CTextParser();
			$CCTP->MaxStringLen = 200;
			$CCTP->allow = array("HTML" => "N", "ANCHOR" => "N", "BIU" => "N", "IMG" => "N", "QUOTE" => "N", "CODE" => "N", "FONT" => "N", "LIST" => "N", "SMILES" => "N", "NL2BR" => "Y", "VIDEO" => "N", "TABLE" => "N", "CUT_ANCHOR" => "N", "ALIGN" => "N");

			$message['MESSAGE'] = str_replace('<br />', ' ', $CCTP->convertText($message['MESSAGE']));

			if (count($message['FILES']) > 0 && strlen($message['MESSAGE']) < 200)
			{
				foreach ($message['FILES'] as $file)
				{
					$file = " [".GetMessage('IM_MESSAGE_FILE').": ".$file['name']."]";
					if (strlen($message['MESSAGE'].$file) > 200)
						break;

					$message['MESSAGE'] .= $file;
				}
				$message['MESSAGE'] = trim($message['MESSAGE']);
			}

			$isChat = $chat && strlen($chat['TITLE']) > 0;

			$arMessageFields = array(
				"MESSAGE_TYPE" => IM_MESSAGE_SYSTEM,
				"TO_USER_ID" => $message['AUTHOR_ID'],
				"FROM_USER_ID" => $USER->GetId(),
				"NOTIFY_TYPE" => IM_NOTIFY_FROM,
				"NOTIFY_MODULE" => "main",
				"NOTIFY_EVENT" => "rating_vote",
				"NOTIFY_TAG" => "RATING|IM|".($isChat? 'G':'P')."|".($isChat? $chat['ID']: $USER->GetId())."|".$id,
				"NOTIFY_MESSAGE" => GetMessage($isChat? 'IM_MESSAGE_LIKE': 'IM_MESSAGE_LIKE_PRIVATE', Array(
					'#MESSAGE#' => $message['MESSAGE'],
					'#TITLE#' => $chat['TITLE']
				))
			);
			CIMNotify::Add($arMessageFields);
		}

		$arPullMessage = Array(
			'id' => $id,
			'chatId' => $relations[$USER->GetId()]['CHAT_ID'],
			'senderId' => $USER->GetId(),
			'users' => $like
		);

		foreach ($relations as $rel)
		{
			CPullStack::AddByUser($rel['USER_ID'], Array(
				'module_id' => 'im',
				'command' => 'messageLike',
				'params' => $arPullMessage
			));
		}

		return $like;
	}
Esempio n. 2
0
 public static function Like($id, $action = 'auto')
 {
     global $USER;
     if (!CModule::IncludeModule('pull')) {
         return false;
     }
     $action = in_array($action, array('plus', 'minus')) ? $action : 'auto';
     $message = self::GetById($id, array('WITH_FILES' => 'Y'));
     if (!$message) {
         return false;
     }
     $relations = CIMMessenger::GetRelationById($id);
     if (!isset($relations[$USER->GetId()])) {
         return false;
     }
     $isLike = false;
     if (isset($message['PARAMS']['LIKE'])) {
         $isLike = in_array($USER->GetId(), $message['PARAMS']['LIKE']);
     }
     if ($isLike && $action == 'plus') {
         return false;
     } else {
         if (!$isLike && $action == 'minus') {
             return false;
         }
     }
     $isLike = true;
     if (isset($message['PARAMS']['LIKE'])) {
         $like = $message['PARAMS']['LIKE'];
         $selfLike = array_search($USER->GetId(), $like);
         if ($selfLike !== false) {
             $isLike = false;
             unset($like[$selfLike]);
         } else {
             $like[] = $USER->GetId();
         }
     } else {
         $like = array($USER->GetId());
     }
     sort($like);
     CIMMessageParam::Set($id, array('LIKE' => $like));
     $result = IM\ChatTable::getList(array('filter' => array('=ID' => $message['CHAT_ID'])));
     $chat = $result->fetch();
     if ($message['AUTHOR_ID'] > 0 && $message['AUTHOR_ID'] != $USER->GetId() && $isLike) {
         $CCTP = new CTextParser();
         $CCTP->MaxStringLen = 200;
         $CCTP->allow = array("HTML" => "N", "ANCHOR" => "N", "BIU" => "N", "IMG" => "N", "QUOTE" => "N", "CODE" => "N", "FONT" => "N", "LIST" => "N", "SMILES" => "N", "NL2BR" => "Y", "VIDEO" => "N", "TABLE" => "N", "CUT_ANCHOR" => "N", "ALIGN" => "N");
         $message['MESSAGE'] = str_replace('<br />', ' ', $CCTP->convertText($message['MESSAGE']));
         $message['MESSAGE'] = preg_replace("/\\[s\\].*?\\[\\/s\\]/i", "", $message['MESSAGE']);
         $message['MESSAGE'] = preg_replace("/\\[[bui]\\](.*?)\\[\\/[bui]\\]/i", "\$1", $message['MESSAGE']);
         $message['MESSAGE'] = preg_replace("/\\[USER=([0-9]{1,})\\](.*?)\\[\\/USER\\]/i", "\$2", $message['MESSAGE']);
         $message['MESSAGE'] = preg_replace('#\\-{54}.+?\\-{54}#s', " [" . GetMessage('IM_QUOTE') . "] ", str_replace(array("#BR#"), array(" "), $message['MESSAGE']));
         if (count($message['FILES']) > 0 && strlen($message['MESSAGE']) < 200) {
             foreach ($message['FILES'] as $file) {
                 $file = " [" . GetMessage('IM_MESSAGE_FILE') . ": " . $file['name'] . "]";
                 if (strlen($message['MESSAGE'] . $file) > 200) {
                     break;
                 }
                 $message['MESSAGE'] .= $file;
             }
             $message['MESSAGE'] = trim($message['MESSAGE']);
         }
         $isChat = $chat && strlen($chat['TITLE']) > 0;
         $dot = strlen($message['MESSAGE']) >= 200 ? '...' : '';
         $message['MESSAGE'] = substr($message['MESSAGE'], 0, 199) . $dot;
         $message['MESSAGE'] = strlen($message['MESSAGE']) > 0 ? $message['MESSAGE'] : '-';
         $arMessageFields = array("MESSAGE_TYPE" => IM_MESSAGE_SYSTEM, "TO_USER_ID" => $message['AUTHOR_ID'], "FROM_USER_ID" => $USER->GetId(), "NOTIFY_TYPE" => IM_NOTIFY_FROM, "NOTIFY_MODULE" => "im", "NOTIFY_EVENT" => "like", "NOTIFY_TAG" => "RATING|IM|" . ($isChat ? 'G' : 'P') . "|" . ($isChat ? $chat['ID'] : $USER->GetId()) . "|" . $id, "NOTIFY_MESSAGE" => GetMessage($isChat ? 'IM_MESSAGE_LIKE' : 'IM_MESSAGE_LIKE_PRIVATE', array('#MESSAGE#' => $message['MESSAGE'], '#TITLE#' => $isChat ? '[CHAT=' . $chat['ID'] . ']' . $chat['TITLE'] . '[/CHAT]' : $chat['TITLE'])), "NOTIFY_MESSAGE_OUT" => GetMessage($isChat ? 'IM_MESSAGE_LIKE' : 'IM_MESSAGE_LIKE_PRIVATE', array('#MESSAGE#' => $message['MESSAGE'], '#TITLE#' => $chat['TITLE'])));
         CIMNotify::Add($arMessageFields);
     }
     $arPullMessage = array('id' => $id, 'chatId' => $chat['ID'], 'senderId' => $USER->GetId(), 'users' => $like);
     foreach ($relations as $rel) {
         CPullStack::AddByUser($rel['USER_ID'], array('module_id' => 'im', 'command' => 'messageLike', 'params' => $arPullMessage));
     }
     if ($chat['TYPE'] == IM_MESSAGE_OPEN) {
         CPullWatch::AddToStack('IM_PUBLIC_' . $chat['ID'], array('module_id' => 'im', 'command' => 'messageLike', 'params' => $arPullMessage));
     }
     return $like;
 }