8 require_once( CH_DIRECTORY_PATH_INC .
'profiles.inc.php' );
9 require_once( CH_DIRECTORY_PATH_CLASSES .
'ChWsbPageView.php');
11 define (
'CH_MAILBOX_SEND_SUCCESS', 0);
12 define (
'CH_MAILBOX_SEND_FAILED', 1);
13 define (
'CH_MAILBOX_SEND_WAIT', 3);
14 define (
'CH_MAILBOX_SEND_BLOCKED', 5);
15 define (
'CH_MAILBOX_SEND_RECIPIENT_NOT_ACTIVE', 10);
16 define (
'CH_MAILBOX_SEND_UNKNOWN_RECIPIENT', 1000);
17 define (
'CH_MAILBOX_SEND_FAILED_MEMBERSHIP_DISALLOW', 1001);
94 if ( $this -> aMailBoxSettings[
'per_page'] < 1 )
95 $this -> aMailBoxSettings[
'per_page'] = 10 ;
97 if ($this -> aMailBoxSettings[
'per_page'] > 100 )
98 $this -> aMailBoxSettings[
'per_page'] = 100;
100 $this -> aSortCriterias = array
102 'date' =>
'`sys_messages`.`Date` ASC',
103 'date_desc' =>
'`sys_messages`.`Date` DESC',
105 'subject' =>
'`sys_messages`.`Subject` ASC',
106 'subject_desc' =>
'`sys_messages`.`Subject` DESC',
108 'type' =>
'`sys_messages`.`Type` ASC',
109 'type_desc' =>
'`sys_messages`.`Type` DESC',
111 'author' =>
'`Profiles`.`NickName` ASC',
112 'author_desc' =>
'`Profiles`.`NickName` DESC',
116 $this -> aRegisteredMessageTypes =
$oCache->getData(
$GLOBALS[
'MySQL']->genDbCacheKey(
'sys_messages_types'));
117 if (
null === $this -> aRegisteredMessageTypes) {
120 $sQuery =
"SHOW COLUMNS FROM `sys_messages` LIKE 'Type'";
121 $rResult =
db_res($sQuery);
124 while(
true == ($aRow = $rResult->fetch()) ) {
125 preg_match_all(
"/\'([^\']*)\'/", $aRow[
'Type'], $aMatches);
126 if ( is_array($aMatches[1])
and !
empty($aMatches[1]) ) {
127 foreach($aMatches[1] AS $sKey ) {
128 $this -> aRegisteredMessageTypes[] = $sKey;
135 $oCache->setData (
$GLOBALS[
'MySQL']->genDbCacheKey(
'sys_messages_types'), $this -> aRegisteredMessageTypes);
139 if ( $this -> aMailBoxSettings[
'messages_types']
and !
empty($this -> aMailBoxSettings[
'messages_types']) ) {
141 $aTypes = explode(
',', $this -> aMailBoxSettings[
'messages_types']);
142 if ( is_array($aTypes)
and !
empty($aTypes) ) {
143 foreach($aTypes AS $sKey) {
144 $this -> aReceivedMessagesTypes[] = $sKey;
147 } elseif ( !isset($this -> aMailBoxSettings[
'messages_types']) ) {
149 $sMessageTypes =
null;
150 foreach($this -> aRegisteredMessageTypes AS $sKey) {
152 $sMessageTypes .= $sKey .
',';
154 $this -> aMailBoxSettings[
'messages_types'] = $sMessageTypes;
158 $this -> aRegisteredContactTypes = array
160 'Friends' =>
'getFriendsList',
161 'Faves' =>
'getFavesList',
162 'Contacted' =>
'getContactedList',
166 $this -> aRegisteredArchivesTypes = array
168 'From' =>
'getArchivesList',
169 'To' =>
'getArchivesList',
174 if ( $this -> aMailBoxSettings[
'messageID'] ) {
175 $aMessageInfo =
db_arr(
"SELECT `Recipient`, `New` FROM `sys_messages` WHERE `ID` = {$this -> aMailBoxSettings['messageID']}");
176 if ( $aMessageInfo[
'Recipient'] == $this -> aMailBoxSettings[
'member_id']
and $aMessageInfo[
'New'] ==
'1' ) {
177 db_res(
"UPDATE `sys_messages` SET `New` = '0' WHERE `ID` = {$this -> aMailBoxSettings['messageID']}");
194 $aMessages = array();
195 $iSecondPersonID = 0;
197 if ( $this -> aMailBoxSettings[
'messageID'] ) {
203 IF (`Sender` = {$this -> aMailBoxSettings['member_id']}, `Recipient`, `Sender` ) AS `iSecondPerson`
207 `ID` = {$this -> aMailBoxSettings['messageID']}
210 `Sender` = {$this -> aMailBoxSettings['member_id']}
212 `Recipient` = {$this -> aMailBoxSettings['member_id']}
218 if ( $iSecondPersonID ) {
219 $iSenderID = ($this -> aMailBoxSettings[
'contacts_mode'] ==
'To')
220 ? $this -> aMailBoxSettings[
'member_id']
223 $iRecipientID = ($this -> aMailBoxSettings[
'contacts_mode'] ==
'To')
225 : $this -> aMailBoxSettings[
'member_id'];
227 $sFieldName = ($this -> aMailBoxSettings[
'contacts_mode'] ==
'To')
231 $this -> iTotalContactsCount =
db_value
239 `Sender` = {$iSenderID}
241 `Recipient` = {$iRecipientID}
243 NOT FIND_IN_SET('{$sFieldName}', `Trash`)
251 `Sender`, `Text`, `Subject`, `New`, `ID`
255 `Sender` = {$iSenderID}
257 `Recipient` = {$iRecipientID}
259 NOT FIND_IN_SET('{$sFieldName}', `Trash`)
265 $rResult =
db_res($sQuery);
266 while(
true == ($aRow = $rResult->fetch()) ) {
267 $aMessages[] = $aRow;
287 $aFriendsList = array();
289 $this -> iTotalContactsCount =
getFriendNumber($this -> aMailBoxSettings[
'member_id']);
296 SELECT `ID` AS `ID`, `When` FROM `sys_friend_list` WHERE `Profile`='{$this->aMailBoxSettings['member_id']}' AND `Check` =1
298 SELECT `Profile` AS `ID`, `When` FROM `sys_friend_list` WHERE `ID` = '{$this->aMailBoxSettings['member_id']}' AND `Check` =1
300 INNER JOIN `Profiles` AS `p` ON (`p`.`ID` = `f`.`ID`)
301 ORDER BY f.`When` DESC
304 $rResult =
db_res($sQuery);
305 while(
true == ($aRow = $rResult->fetch()) ) {
306 $aFriendsList[] = $aRow;
308 return $aFriendsList;
323 $aFavesList = array();
325 $this -> iTotalContactsCount =
db_value
333 `sys_fave_list`.`Profile` = {$this -> aMailBoxSettings['member_id']}
335 `sys_fave_list`.`ID` = {$this -> aMailBoxSettings['member_id']}
349 `Profiles`.`ID` = `sys_fave_list`.`Profile` AND `sys_fave_list`.`ID` = {$this -> aMailBoxSettings['member_id']}
351 `Profiles`.`ID` = `sys_fave_list`.`ID` AND `sys_fave_list`.`Profile` = {$this -> aMailBoxSettings['member_id']}
353 `sys_fave_list`.`Profile` = {$this -> aMailBoxSettings['member_id']}
355 `sys_fave_list`.`ID` = {$this -> aMailBoxSettings['member_id']}
357 `sys_fave_list`.`When` DESC
361 $rResult =
db_res($sQuery);
362 while(
true == ($aRow = $rResult->fetch()) ) {
363 $aFavesList[] = $aRow;
380 $aContactedList = array();
385 COUNT( DISTINCT if(`Recipient` = {$this -> aMailBoxSettings['member_id']}, `Sender`, `Recipient`) ) AS `Contacts`
389 (`Sender` = {$this -> aMailBoxSettings['member_id']}
391 `Recipient` = {$this -> aMailBoxSettings['member_id']})
395 $this -> iTotalContactsCount =
db_value($sQuery);
400 DISTINCT `Profiles`.*,
407 `Profiles`.`ID` = IF (`sys_messages`.`Recipient` = {$this -> aMailBoxSettings['member_id']}, `sys_messages`.`Sender`, `sys_messages`.`Recipient`)
409 `Sender` = {$this -> aMailBoxSettings['member_id']}
411 `Recipient` = {$this -> aMailBoxSettings['member_id']}
413 `Profiles`.`NickName`
415 `sys_messages`.`Date` DESC
419 $rResult =
db_res($sQuery);
420 while(
true == ($aRow = $rResult->fetch()) ) {
421 $aContactedList[] = $aRow;
424 return $aContactedList;
441 `Recipient` = {$this -> aMailBoxSettings['member_id']}
443 NOT FIND_IN_SET('Recipient', `Trash`)
458 $sWhereParameter =
null;
459 $sTypeMessages =
null;
462 $sSortParameter = ( array_key_exists($this -> aMailBoxSettings[
'sort_mode'], $this -> aSortCriterias) )
463 ? $this -> aSortCriterias[$this -> aMailBoxSettings[
'sort_mode']]
464 : $this -> aSortCriterias[
'date_desc'];
467 switch ($this -> aMailBoxSettings[
'mailbox_mode']) {
469 $sWhereParameter =
" AND `sys_messages`.`Recipient` = {$this -> aMailBoxSettings['member_id']} AND NOT FIND_IN_SET('Recipient', `sys_messages`.`Trash`) ";
473 $sWhereParameter =
" AND `sys_messages`.`Recipient`={$this -> aMailBoxSettings['member_id']} AND NOT FIND_IN_SET('Recipient', `sys_messages`.`Trash`) AND `New`='1' ";
477 $sWhereParameter =
" AND `sys_messages`.`Sender` = {$this -> aMailBoxSettings['member_id']} AND NOT FIND_IN_SET('Sender', `sys_messages`.`Trash`)";
486 `sys_messages`.`Sender` = {$this -> aMailBoxSettings['member_id']}
488 FIND_IN_SET('Sender', `sys_messages`.`Trash`)
492 `sys_messages`.`Recipient` = {$this -> aMailBoxSettings['member_id']}
494 FIND_IN_SET('Recipient', `sys_messages`.`Trash`)
500 `sys_messages`.`Sender` = {$this -> aMailBoxSettings['member_id']}
502 NOT FIND_IN_SET('Sender', `sys_messages`.`TrashNotView`)
506 `sys_messages`.`Recipient` = {$this -> aMailBoxSettings['member_id']}
508 NOT FIND_IN_SET('Recipient', `sys_messages`.`TrashNotView`)
516 if (is_array($this -> aReceivedMessagesTypes)
and !
empty($this -> aReceivedMessagesTypes)) {
517 foreach( $this -> aReceivedMessagesTypes AS $sKey ) {
519 $sTypeMessages .=
"`sys_messages`.`Type` = '{$sKey}' OR";
521 $sTypeMessages =
'AND (' . preg_replace(
"/OR$/",
'', $sTypeMessages).
')';
526 if ( $sWhereParameter ) {
528 $this -> iTotalMessageCount =
db_value
531 COUNT(`sys_messages`.`ID`)
540 if ( $this -> iTotalMessageCount ) {
542 if( $this -> aMailBoxSettings[
'page'] < 1 )
543 $this -> aMailBoxSettings[
'page'] = 1;
545 $sLimitFrom = ( $this -> aMailBoxSettings[
'page'] - 1 ) * $this -> aMailBoxSettings[
'per_page'];
546 $sSqlLimit =
"LIMIT {$sLimitFrom}, {$this -> aMailBoxSettings['per_page']}";
548 $sFieldName = $this -> aMailBoxSettings[
'mailbox_mode'] ==
'outbox'
556 UNIX_TIMESTAMP() - UNIX_TIMESTAMP(`sys_messages`.`Date`) AS `DateUTS`,
557 UNIX_TIMESTAMP(`sys_messages`.`Date`) AS `DateTS`,
558 `sys_messages`.`Sender`, `sys_messages`.`Recipient`, `sys_messages`.`Text`,
559 `sys_messages`.`Subject`, `sys_messages`.`New`, `sys_messages`.`Type`
565 `Profiles`.`ID` = `sys_messages`.`{$sFieldName}`
570 ORDER BY {$sSortParameter}
574 $aMessages = array();
575 $rResult =
db_res($sQuery);
578 while(
true == ($aRow = $rResult->fetch()) ) {
579 $aMessages[] = $aRow;
598 $iMarkMode = (int) $iMarkMode;
605 `New` = '{$iMarkMode}'
609 `Recipient` = {$this -> aMailBoxSettings['member_id']}
629 $sQuery =
"SELECT `Sender`, `Recipient`, `{$sField}` FROM `sys_messages` WHERE `ID` = {$iMessageID}";
630 $rResult =
db_res($sQuery);
632 while(
true == ($aRow = $rResult->fetch()) ) {
633 $sTrashValue = $sFieldName = ( $aRow[
'Sender'] == $this -> aMailBoxSettings[
'member_id'] )
637 if ( $aRow[
'Recipient'] == $aRow[
'Sender'] ) {
638 $sTrashValue =
'sender,recipient';
639 }
else if ( $aRow[$sField] ) {
640 $sTrashValue = $sTrashValue .
',' . $aRow[$sField];
650 `{$sField}` = '" . strtolower($sTrashValue) .
"'
654 `{$sFieldName}` = {$this -> aMailBoxSettings['member_id']}
675 $sQuery =
"SELECT `Sender`, `Recipient`, `Trash` FROM `sys_messages` WHERE `ID` = {$iMessageID}";
676 $rResult =
db_res($sQuery);
678 while(
true == ($aRow = $rResult->fetch()) ) {
679 if ( $aRow[
'Recipient'] == $aRow[
'Sender'] ) {
681 $iMessageOwner = (int) $aRow[
'Sender'];
683 }
else if ( $aRow[
'Sender'] == $this -> aMailBoxSettings[
'member_id'] ) {
684 $iMessageOwner = (int) $aRow[
'Sender'];
685 $sTrashMode = preg_replace(
"/sender|\,/",
'', $aRow[
'Trash']);
687 }
else if ( $aRow[
'Recipient'] == $this -> aMailBoxSettings[
'member_id'] ) {
688 $iMessageOwner = (int) $aRow[
'Recipient'];
689 $sTrashMode = preg_replace(
"/recipient|\,/",
'', $aRow[
'Trash']);
695 if ( $iMessageOwner ) {
701 `Trash` = '{$sTrashMode}'
706 `Sender` = {$iMessageOwner}
708 `Recipient` = {$iMessageOwner}
739 return MsgBox(
_t(
'_please_fill_next_fields_first') );
743 $sReturnMessage =
null;
744 $sComposeUrl = CH_WSB_URL_ROOT .
'mail.php?mode=compose';
750 return MsgBox (
_t(
'_Profile not found') );
755 $bAllowToSend =
true;
769 `Profile` = {$this -> aMailBoxSettings['member_id']}
771 `ID` = '{$iRecipientID}'
774 if (!
isAdmin($this -> aMailBoxSettings[
'member_id']) &&
db_arr($sQuery)) {
775 $sReturnMessage =
MsgBox(
_t(
'_FAILED_TO_SEND_MESSAGE_BLOCK') );
777 $bAllowToSend =
false;
788 `Sender` = {$this -> aMailBoxSettings['member_id']}
790 date_add(`Date`, INTERVAL {$this -> iWaitMinutes} MINUTE) > Now()
794 $sReturnMessage =
MsgBox(
_t(
'_You have to wait for PERIOD minutes before you can write another message!', $this -> iWaitMinutes, $sComposeUrl) );
796 $bAllowToSend =
false;
801 $sReturnMessage =
MsgBox( sprintf(
_t(
"_sys_spam_detected"), CH_WSB_URL_ROOT .
'contact.php') );
803 $bAllowToSend =
false;
807 if ( $aRecipientInfo[
'Status'] !=
'Active' ) {
808 $sReturnMessage =
MsgBox(
_t(
'_FAILED_TO_SEND_MESSAGE_NOT_ACTIVE', $sComposeUrl) );
810 $bAllowToSend =
false;
814 if(!$this ->
isSendMessageAlowed($this -> aMailBoxSettings[
'member_id'], $isSimulateSending ?
false :
true) ) {
815 $sReturnMessage =
MsgBox(
_t(
'_FAILED_TO_SEND_MESSAGE_MEMBERSHIP_DISALLOW') );
817 $bAllowToSend =
false;
821 if ( !$isSimulateSending && $bAllowToSend ) {
827 `Sender` = {$this -> aMailBoxSettings['member_id']},
828 `Recipient` = {$iRecipientID},
829 `Subject` = '{$sMessageSubject}',
830 `Text` = '{$sMessageBody}',
837 $sReturnMessage =
MsgBox(
_t(
'_MESSAGE_SENT', $sComposeUrl,
getProfileLink($iRecipientID), $aRecipientInfo[
'NickName']));
844 'subject' => $sMessageSubjectCopy,
845 'body' => $sCopyMessage,
852 , $this -> aMailBoxSettings[
'member_id'], $iRecipientID, $aAlertData);
859 $aTemplate = $oEmailTemplate -> getTemplate(
't_Message', $iRecipientID ) ;
862 $aPlus[
'ProfileReference'] =
getNickName($this -> aMailBoxSettings[
'member_id']);
863 $aPlus[
'ProfileUrl'] =
getProfileLink($this -> aMailBoxSettings[
'member_id']);
864 sendMail( $aRecipientInfo[
'Email'], $sMessageSubjectCopy, $aTemplate[
'Body'], $iRecipientID, $aPlus );
869 $aTemplate = $oEmailTemplate -> getTemplate(
't_Compose', $iRecipientID ) ;
870 $aPlus[
'ProfileReference'] =
getNickName($this -> aMailBoxSettings[
'member_id']);
871 $aPlus[
'ProfileUrl'] =
getProfileLink($this -> aMailBoxSettings[
'member_id']);
872 sendMail( $aRecipientInfo[
'Email'], $aTemplate[
'Subject'], $aTemplate[
'Body'], $iRecipientID, $aPlus );
878 $aTemplate = $oEmailTemplate -> getTemplate(
't_MessageCopy', $this -> aMailBoxSettings[
'member_id'] ) ;
880 $aPlus[
'your subject here'] = $sMessageSubjectCopy;
884 , $aTemplate[
'Body'], $this -> aMailBoxSettings[
'member_id'], $aPlus );
887 $sReturnMessage =
MsgBox(
_t(
'_FAILED_TO_SEND_MESSAGE') );
892 return $sReturnMessage;
907 $sExtraQuery = ( $sMessageStatus ) ?
" AND `New` = '{$sMessageStatus}'" :
null;
916 `Sender` = {$iMemberId}
918 NOT FIND_IN_SET('Sender', `Trash`)
937 $sExtraQuery = ( $sMessageStatus ) ?
" AND `New` = '{$sMessageStatus}'" :
null;
946 `Recipient` = {$iMemberId}
948 NOT FIND_IN_SET('Recipient', `Trash`)
967 $sExtraQuery = ( $sMessageStatus ) ?
" AND `New` = '{$sMessageStatus}'" :
null;
978 `Sender` = {$iMemberId}
980 FIND_IN_SET('Sender', `Trash`)
984 `Recipient` = {$iMemberId}
986 FIND_IN_SET('Recipient', `Trash`)
992 `sys_messages`.`Sender` = {$iMemberId}
994 NOT FIND_IN_SET('Sender', `sys_messages`.`TrashNotView`)
998 `sys_messages`.`Recipient` = {$iMemberId}
1000 NOT FIND_IN_SET('Recipient', `sys_messages`.`TrashNotView`)