12 require_once(
'ChSimpleMessengerPrivacy.php');
96 $this->sHomeUrl = $this->_oConfig->_sHomeUrl;
98 $this->sModuleName =
'ch_' .
$aModule[
'uri'];
104 $this->aCoreSettings = array(
106 'update_time' => $this->_oConfig->iUpdateTime,
109 'number_visible_messages' => $this->_oConfig->iVisibleMessages,
112 'limit_returning_messages' => $this->_oConfig->iCountRetMessages,
115 'number_of_allowed_chat_boxes' => $this->_oConfig->iCountAllowedChatBoxes,
118 'output_block' => $this->_oConfig->sOutputBlock,
121 'page_receiver' => CH_WSB_URL_ROOT .
'modules/?r=' . $this->aModuleInfo[
'uri'] .
'/get_operation',
124 'history_block_prefix' => $this->_oConfig->sOutputBlockPrefix,
127 'save_chat_history' => $this->_oConfig->bSaveChatHistory,
130 'language_keys' => array(
132 'empty_message' =>
_t(
'_simple_messenger_empty_message'),
136 'blink_counter' => $this->_oConfig->iBlinkCounter,
138 'message_date_format' => $this->_oConfig->sMessageDateFormat,
141 $this->sMemberMenuPosition = (isset($_COOKIE[
'menu_position']))
142 ? $_COOKIE[
'menu_position']
143 :
getParam(
'ext_nav_menu_top_position');
157 $iRecipientId = (int)$iRecipientId;
168 function _addMessage(&$oObject, $iRecipientId,
$sMessage)
170 $iRecipientId = (int)$iRecipientId;
174 && (
getProfileInfo($iRecipientId) && $iRecipientId != $oObject->iLoggedMemberId)
180 $iMessage = $oObject->_oDb->createMessage($oObject->iLoggedMemberId, $iRecipientId,
$sMessage);
181 if($iMessage !==
false) {
182 $oAlert =
new ChWsbAlerts($oObject->sModuleName,
'add', $iMessage, $oObject->iLoggedMemberId, array(
'RecipientId' => $iRecipientId,
'Message' =>
$sMessage));
187 if (!$oObject->aCoreSettings[
'save_chat_history']) {
188 $oObject->_oDb->deleteMessagesHistory($oObject->iLoggedMemberId,
189 $iRecipientId, $oObject->aCoreSettings[
'number_visible_messages']);
201 function _checkAllowedAddMessage(&$aChatBoxes,
$iMemberId)
204 foreach ($aChatBoxes
as $iKey => $iCurMemberId) {
213 if (!$this->iLoggedMemberId) {
217 $iRecipientId = (int)$iRecipientId;
219 switch ($sActionName) {
222 case 'send_message' :
225 ? urldecode($_POST[
'message'])
228 if ($this->oPrivacy->check(
'contact', $iRecipientId, $this->iLoggedMemberId)) {
230 $aActiveSenderChatBoxes = $this->_oDb->getChatBoxesCount($this->iLoggedMemberId);
231 $bSenderSendAllow =
false;
234 if (is_array($aActiveSenderChatBoxes) && $aActiveSenderChatBoxes) {
235 if (count($aActiveSenderChatBoxes) < $this->aCoreSettings[
'number_of_allowed_chat_boxes']) {
236 $bSenderSendAllow =
true;
239 if (_checkAllowedAddMessage($aActiveSenderChatBoxes, $iRecipientId)) {
240 $bSenderSendAllow =
true;
244 $bSenderSendAllow =
true;
248 $aActiveRecipientChatBoxes = $this->_oDb->getChatBoxesCount($iRecipientId);
249 $bRecipientSendAllow =
false;
252 if (is_array($aActiveRecipientChatBoxes) && $aActiveRecipientChatBoxes) {
253 if (count($aActiveRecipientChatBoxes) < $this->aCoreSettings[
'number_of_allowed_chat_boxes']) {
254 $bRecipientSendAllow =
true;
257 if (_checkAllowedAddMessage($aActiveRecipientChatBoxes, $this->iLoggedMemberId)) {
258 $bRecipientSendAllow =
true;
262 $bRecipientSendAllow =
true;
265 if ($bSenderSendAllow && $bRecipientSendAllow) {
267 _addMessage($this, $iRecipientId,
$sMessage);
269 header(
'Content-Type: text/html; charset=utf-8');
270 echo(!$bSenderSendAllow ?
_t(
'_simple_messenger_max_allowed_windows') :
_t(
'_simple_messenger_recipient_max_allowed_windows'));
273 header(
'Content-Type: text/html; charset=utf-8');
274 echo
_t(
'_simple_messenger_privacy_disallow');
278 case 'get_chat_box' :
283 $sChatBox = $aChatBox[
'chat_box'];
288 $aRet[
'senders'][] = array(
290 'sender_id' => $iRecipientId,
293 'chat_box' => $sChatBox,
296 'messages_list' =>
'',
299 'status_update_time' =>
$aSenderInfo[
'UserStatusMessageWhen'],
305 'last_message' => $aChatBox[
'last_message'],
308 'count_messages' => $aChatBox[
'count_messages'],
313 header(
'Content-Type: application/json; charset=utf-8');
314 echo json_encode($aRet);
319 case 'new_messages' :
323 $sRegisteredBoxes =
false !=
ch_get(
'registered_chat_boxes')
324 ?
ch_get(
'registered_chat_boxes')
327 $aAllBoxes = $sRegisteredBoxes ? explode(
',', $sRegisteredBoxes) :
'';
329 if ($aAllBoxes && is_array($aAllBoxes)) {
330 $aRegBoxes = array();
333 foreach ($aAllBoxes
as $sValue) {
335 $aTemp = explode(
':', $sValue);
337 if (is_numeric($aTemp[0]) && $aTemp[0]) {
340 $aRegBoxes[$aTemp[0]] = array(
341 'last_message' => (
int)$aTemp[1],
345 'status_change' =>
$aSenderInfo[
'UserStatusMessageWhen'],
357 $aNewSenders = $this->_oDb->getNewChatBoxes($this->iLoggedMemberId, $aRegBoxes);
361 foreach ($aNewSenders
as $iKey => $iSenderId) {
362 $iSenderId = (int)$iSenderId;
366 $aRegBoxes[$iSenderId] = array(
371 'status_change' =>
$aSenderInfo[
'UserStatusMessageWhen'],
383 foreach ($aRegBoxes
as $iSenderId => $aItems) {
384 $iSenderId = (int)$iSenderId;
386 $iLastMessagesId = 0;
392 if (!$aItems[
'registered']) {
394 $sChatBox = $aChatBox[
'chat_box'];
396 $iLastMessagesId = $aChatBox[
'last_message'];
397 $iCountMessages = $aChatBox[
'count_messages'];
403 $iSenderId, $aItems[
'last_message']);
405 $iLastMessagesId = $aMessagesList[
'last_message'];
406 $iCountMessages = $aMessagesList[
'count_messages'];
412 $aRet[
'senders'][] = array(
414 'sender_id' => $iSenderId,
417 'chat_box' => (!$aItems[
'registered']) ? $sChatBox :
'',
423 'status_update_time' => $aItems[
'status_change'],
426 'sender_status' => $aItems[
'sender_status'],
429 'last_message' => $iLastMessagesId,
432 'count_messages' => $iCountMessages,
439 header(
'Content-Type: application/json; charset=utf-8');
440 echo json_encode($aRet);
444 case 'close_window' :
445 if ($this->_oDb->closeChatWindow($this->iLoggedMemberId, $iRecipientId)) {
450 case 'get_status_text' :
452 header(
'Content-Type: text/html; charset=utf-8');
461 case 'get_sender_thumb' :
462 header(
'Content-Type: text/html; charset=utf-8');
463 echo
$GLOBALS[
'oFunctions']->getMemberThumbnail($iRecipientId,
'none');
478 $sActionResult =
null;
480 if ($this->iLoggedMemberId) {
483 if (!
empty($_POST[
'allow_contact_to'])) {
484 $sActionResult =
MsgBox(
_t(
'_simple_messenger_privacy_page_group_created'), 3);
485 $this->_oDb->createPrivacyGroup($this->iLoggedMemberId, (
int)$_POST[
'allow_contact_to']);
488 $aPrivacyGroups = $this->oPrivacy->getGroupChooser($this->iLoggedMemberId, $this->aModuleInfo[
'uri'],
489 'contact', array(),
_t(
'_simple_messenger_privacy_page_select_group'));
492 'form_attrs' => array(
495 'name' =>
'simple_messenger',
499 'allow_contact_to' => $aPrivacyGroups,
503 'value' =>
_t(
'_simple_messenger_privacy_page_submit_value'),
508 $mixedValue = $this->_oDb->getPrivacyGroupValue($this->iLoggedMemberId);
509 if ((
int)$mixedValue > 0) {
510 $aForm[
'inputs'][
'allow_contact_to'][
'value'] = (int)$mixedValue;
514 $sOutputCode =
$oForm->getCode();
517 return $sActionResult . $sOutputCode;
530 $iSender = (int)$iSender;
535 $sMemberThumb =
$oFunctions->getMemberThumbnail($iSender,
'none');
536 $sMemberIcon =
$oFunctions->getMemberIcon($iSender,
'none',
false,
'_plain');
544 $aLanguageKeys = array(
545 'minimize' =>
_t(
'_simple_messenger_minimize_button'),
546 'close' =>
_t(
'_simple_messenger_close_button'),
547 'video_mess' =>
_t(
'_simple_messenger_switch_to_video'),
551 $aSenderBlock = array(
552 'sender_thumb' => $sMemberThumb,
553 'sender_link' => $sSenderLink,
557 'reduce_title' => $aLanguageKeys[
'minimize'],
558 'close_title' => $aLanguageKeys[
'close'],
560 'history_window_id' => $this->aCoreSettings[
'history_block_prefix'] . $iSender,
561 'sender_id' => $iSender,
563 'ch_if:video_messenger' => array(
564 'condition' => (
$oModuleDb->isModule(
'messenger')),
566 'sender_id' => $this->iLoggedMemberId,
567 'sender_passw' =>
getPassword($this->iLoggedMemberId),
568 'recipient_id' => $iSender,
569 'video_messenger' => $aLanguageKeys[
'video_mess'],
574 $aMessagesList = $this->
getMessagesHistory($this->iLoggedMemberId, $iSender, 0,
false);
578 if (mb_strlen($sNickName) > $this->iMaxNickLength) {
579 $sNickName = mb_substr($sNickName, 0, $this->iMaxNickLength) .
'...';
582 $aTemplateKeys = array(
584 'block_indent' => ($this->sMemberMenuPosition ==
'bottom') ?
'bottom_indent' :
'top_indent',
585 'chat_block_position' => ($this->sMemberMenuPosition ==
'bottom') ?
'chat_block_bottom_position' :
'chat_block_top_position',
586 'sender_nick' => $sNickName,
587 'sender_icon' => $sMemberIcon,
589 'member_status' => $sStatusIcon,
590 'history_window_id' => $this->aCoreSettings[
'history_block_prefix'] . $iSender,
592 'history_block_position' => ($this->sMemberMenuPosition ==
'bottom') ?
'history_bottom_position' :
'history_top_position',
593 'recipient_id' => $iSender,
595 'ch_if:menu_pos_top' => array(
596 'condition' => ($this->sMemberMenuPosition ==
'bottom'),
597 'content' => $aSenderBlock,
600 'ch_if:menu_pos_bottom' => array(
601 'condition' => ($this->sMemberMenuPosition !=
'bottom'),
602 'content' => $aSenderBlock,
606 'messages' => $aMessagesList[
'messages_list'],
610 $sOutputCode = $this->_oTemplate->parseHtmlByName(
'chat_block.html', $aTemplateKeys);
613 'chat_box' => $sOutputCode,
614 'last_message' => $aMessagesList[
'last_message'],
615 'count_messages' => $aMessagesList[
'count_messages'],
635 $sOutputMessages =
'';
638 $aMessages = $this->_oDb->getHistoryList($this->aCoreSettings, $iRecipient, $iSender,
639 $iLastMessageId, $this->aCoreSettings[
'limit_returning_messages']);
641 $aMessages = $this->_oDb->getHistoryList($this->aCoreSettings, $iRecipient,
642 $iSender, $iLastMessageId);
649 if ($aMessages && is_array($aMessages)) {
650 foreach ($aMessages
as $iKey => $aItems) {
654 $iLastMessageId = $aMessages[$iKey][
'ID'];
656 $aTemplateKeys = array(
657 'message' => $aMessages[$iKey][
'Message'],
658 'sender_nickname' => $aMessages[$iKey][
'SenderID'] == $this->iLoggedMemberId ?
_t(
'_simple_messenger_me') :
getNickName($aMessages[$iKey][
'SenderID']),
661 'owner_nick_extra' => ($aMessages[$iKey][
'SenderID'] == $this->iLoggedMemberId)
666 $sOutputMessages .= $this->_oTemplate
667 ->parseHtmlByName(
'message.html', $aTemplateKeys);
671 if (!$iLastMessageId) {
672 $iLastMessageId = $this->_oDb->getLastMessagesId($iRecipient, $iSender);
676 'messages_list' => $sOutputMessages,
677 'last_message' => $iLastMessageId,
678 'count_messages' => $iCountMessages,
693 if (!$this->iLoggedMemberId) {
697 $this->_oTemplate->addJs(array(
698 'emoji-picker/js/jquery.emojipicker.js',
699 'emoji-picker/js/jquery.emojipicker.tw.js',
702 $this->_oTemplate->addCss(array(
703 'plugins/emoji-picker/css/|jquery.emojipicker.css',
704 'simple_messenger.css',
705 'simple_messenger_phone.css',
708 $this->_oTemplate->addCssAsync(
'plugins/emoji-picker/css|jquery.emojipicker.tw.css');
710 $sEmptyMessage =
ch_js_string(
_t(
'_simple_messenger_empty_message'));
715 <script type=\"text/javascript\">
716 $(document).ready(function () {
717 var sMemberMenuOutputBlock = '{$this -> aCoreSettings['output_block']}';
719 // if member menu was defined;
720 $('#' + sMemberMenuOutputBlock).each(
722 oSimpleMessenger.chatBoxSettings =
724 // the page which will process all AJAX queries ;
725 sPageReceiver : '{$this -> aCoreSettings['page_receiver']}',
727 // contain block's id where the list of messages will be generated ;
728 sOutputBlockId : sMemberMenuOutputBlock,
730 // time (in seconds) script checks for new messages ;
731 updateTime : {$this -> aCoreSettings['update_time']},
733 // contain descriptor of the created timeout ;
734 updateTimeNotifyHandler : '',
736 // the number of visible messages into chat box ;
737 iNumberVisibleMessages : {$this -> aCoreSettings['number_visible_messages']},
739 // contains history block's prefix (block's name where will add the new messages);
740 sHistoryBlockPrefix : '{$this -> aCoreSettings['history_block_prefix']}',
742 iParentContainerHeight : 0,
744 // current member's menu position ;
745 sMemberMenuPosition : '{$this -> sMemberMenuPosition}',
747 // wrapper for chat boxes;
748 sChatBox : 'simple_messenger_chat_block',
750 // flashing signals amount of the non-active window ;
751 iMaxBlinkCounter : '{$this -> aCoreSettings['blink_counter']}'
754 oSimpleMessenger.systemMessages.emptyMessage = '{$sEmptyMessage}';
755 oSimpleMessenger.systemMessages.waitMessage = '{$sWaitMessage}';
757 var oMenuContainer = $(this).parents('div:first');
758 var iContainerHeight = parseInt( oMenuContainer.height() );
760 oSimpleMessenger.chatBoxSettings.iParentContainerHeight = (iContainerHeight) ? iContainerHeight + 5 : 0;
761 oSimpleMessenger.oDefinedChatBoxes.boxes = Array();
762 oSimpleMessenger.messageNotification();
782 || $this->iLoggedMemberId == $iViewedMemberId
783 ||
isBlocked($iViewedMemberId, $this->iLoggedMemberId)
793 $aTemplateKeys = array(
794 'message' =>
_t(
'_simple_messenger_chat_now') .
'...',
795 'res_id' => $iViewedMemberId,
798 $sOutputCode = $this->_oTemplate->parseHtmlByName(
'send_message_field.html', $aTemplateKeys);