Cheetah
ChWsbMailBox.php
Go to the documentation of this file.
1 <?php
2 
8  require_once( CH_DIRECTORY_PATH_INC . 'profiles.inc.php' );
9  require_once( CH_DIRECTORY_PATH_CLASSES . 'ChWsbPageView.php');
10 
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);
18 
20  {
21  // send message error code
23 
24  // contain count of all messages ;
26 
27  // contain count of all contacts ;
29 
30  // number of contacts rows for per page;
32 
33  // contain some necessary data ;
34  var $aMailBoxSettings = array();
35 
36  // contain all available sorting parameters ;
37  var $aSortCriterias = array();
38 
39  // contain all messag types ;
40  var $aRegisteredMessageTypes = array();
41 
42  // contain all available types of contact;
43  var $aRegisteredContactTypes = array();
44 
45  // define all available types of history list ;
47 
48  // contain all needed types of messages ;
49  var $aReceivedMessagesTypes = array();
50 
51  // can write another message (in minuts)!
52  var $iWaitMinutes = 1;
53 
71  {
73 
74  $aMailBoxSettings['member_id'] = (int) $aMailBoxSettings['member_id'];
75  $aMailBoxSettings['recipient_id'] = (int) $aMailBoxSettings['recipient_id'];
76  $aMailBoxSettings['page'] = (int) $aMailBoxSettings['page'];
77 
78  $aMailBoxSettings['per_page'] = (int) $aMailBoxSettings['per_page'];
79  $aMailBoxSettings['contacts_page'] = (int) $aMailBoxSettings['contacts_page'];
80  $aMailBoxSettings['messageID'] = (int) $aMailBoxSettings['messageID'];
81 
82  $aMailBoxSettings['mailbox_mode'] = process_db_input($aMailBoxSettings['mailbox_mode'], CH_TAGS_STRIP);
83  $aMailBoxSettings['contacts_mode'] = process_db_input($aMailBoxSettings['contacts_mode'], CH_TAGS_STRIP);
85 
86  if($aMailBoxSettings['messages_types']) {
87  $aMailBoxSettings['messages_types'] = process_db_input($aMailBoxSettings['messages_types'],CH_TAGS_STRIP);
88  }
89 
90  parent::__construct($sPageName);
91 
92  $this -> aMailBoxSettings = $aMailBoxSettings;
93 
94  if ( $this -> aMailBoxSettings['per_page'] < 1 )
95  $this -> aMailBoxSettings['per_page'] = 10 ;
96 
97  if ($this -> aMailBoxSettings['per_page'] > 100 )
98  $this -> aMailBoxSettings['per_page'] = 100;
99 
100  $this -> aSortCriterias = array
101  (
102  'date' => '`sys_messages`.`Date` ASC',
103  'date_desc' => '`sys_messages`.`Date` DESC',
104 
105  'subject' => '`sys_messages`.`Subject` ASC',
106  'subject_desc' => '`sys_messages`.`Subject` DESC',
107 
108  'type' => '`sys_messages`.`Type` ASC',
109  'type_desc' => '`sys_messages`.`Type` DESC',
110 
111  'author' => '`Profiles`.`NickName` ASC',
112  'author_desc' => '`Profiles`.`NickName` DESC',
113  );
114 
115  $oCache = $GLOBALS['MySQL']->getDbCacheObject();
116  $this -> aRegisteredMessageTypes = $oCache->getData($GLOBALS['MySQL']->genDbCacheKey('sys_messages_types'));
117  if (null === $this -> aRegisteredMessageTypes) {
118 
119  // generate types from DB ;
120  $sQuery = "SHOW COLUMNS FROM `sys_messages` LIKE 'Type'";
121  $rResult = db_res($sQuery);
122 
123  $aMatches = array();
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;
129  }
130  }
131  }
132 
133  // write data into cache file
134  $oCache = $GLOBALS['MySQL']->getDbCacheObject();
135  $oCache->setData ($GLOBALS['MySQL']->genDbCacheKey('sys_messages_types'), $this -> aRegisteredMessageTypes);
136  }
137 
138  // get all needed messages types (need for SQL queries);
139  if ( $this -> aMailBoxSettings['messages_types'] and !empty($this -> aMailBoxSettings['messages_types']) ) {
140  // try to define type of messages ;
141  $aTypes = explode(',', $this -> aMailBoxSettings['messages_types']);
142  if ( is_array($aTypes) and !empty($aTypes) ) {
143  foreach($aTypes AS $sKey) {
144  $this -> aReceivedMessagesTypes[] = $sKey;
145  }
146  }
147  } elseif ( !isset($this -> aMailBoxSettings['messages_types']) ) {
148  // set all types by default ;
149  $sMessageTypes = null;
150  foreach($this -> aRegisteredMessageTypes AS $sKey) {
151  $this -> aReceivedMessagesTypes[] = process_db_input($sKey);
152  $sMessageTypes .= $sKey . ',';
153  }
154  $this -> aMailBoxSettings['messages_types'] = $sMessageTypes;
155  }
156 
157  // define all available types of contacts ;
158  $this -> aRegisteredContactTypes = array
159  (
160  'Friends' => 'getFriendsList',
161  'Faves' => 'getFavesList',
162  'Contacted' => 'getContactedList',
163  );
164 
165  // define all available types of history list ;
166  $this -> aRegisteredArchivesTypes = array
167  (
168  'From' => 'getArchivesList',
169  'To' => 'getArchivesList',
170  );
171 
172  // if the viewer is the owner of this message;
173  // Set message's status as read ;
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']}");
178  }
179  }
180  }
181 
188  function getArchivesList($sSqlLimit)
189  {
190  $sSqlLimit = process_db_input($sSqlLimit);
191 
192  // init some needed variables ;
193 
194  $aMessages = array();
195  $iSecondPersonID = 0;
196 
197  if ( $this -> aMailBoxSettings['messageID'] ) {
198  // try to define message's owner ;
199  $iSecondPersonID = (int) db_value
200  (
201  "
202  SELECT
203  IF (`Sender` = {$this -> aMailBoxSettings['member_id']}, `Recipient`, `Sender` ) AS `iSecondPerson`
204  FROM
205  `sys_messages`
206  WHERE
207  `ID` = {$this -> aMailBoxSettings['messageID']}
208  AND
209  (
210  `Sender` = {$this -> aMailBoxSettings['member_id']}
211  OR
212  `Recipient` = {$this -> aMailBoxSettings['member_id']}
213  )
214  "
215  );
216 
217  // generate all messages ;
218  if ( $iSecondPersonID ) {
219  $iSenderID = ($this -> aMailBoxSettings['contacts_mode'] == 'To')
220  ? $this -> aMailBoxSettings['member_id']
221  : $iSecondPersonID ;
222 
223  $iRecipientID = ($this -> aMailBoxSettings['contacts_mode'] == 'To')
224  ? $iSecondPersonID
225  : $this -> aMailBoxSettings['member_id'];
226 
227  $sFieldName = ($this -> aMailBoxSettings['contacts_mode'] == 'To')
228  ? 'sender'
229  : 'recipient';
230 
231  $this -> iTotalContactsCount = db_value
232  (
233  "
234  SELECT
235  COUNT(*)
236  FROM
237  `sys_messages`
238  WHERE
239  `Sender` = {$iSenderID}
240  AND
241  `Recipient` = {$iRecipientID}
242  AND
243  NOT FIND_IN_SET('{$sFieldName}', `Trash`)
244  "
245  );
246 
247  $sQuery =
248  "
249  SELECT
250  DATE_FORMAT(`Date`, '" . getLocaleFormat(CH_WSB_LOCALE_DATE_SHORT, CH_WSB_LOCALE_DB) . "') AS `When`,
251  `Sender`, `Text`, `Subject`, `New`, `ID`
252  FROM
253  `sys_messages`
254  WHERE
255  `Sender` = {$iSenderID}
256  AND
257  `Recipient` = {$iRecipientID}
258  AND
259  NOT FIND_IN_SET('{$sFieldName}', `Trash`)
260  ORDER BY
261  `Date` DESC
262  {$sSqlLimit}
263  ";
264 
265  $rResult = db_res($sQuery);
266  while( true == ($aRow = $rResult->fetch()) ) {
267  $aMessages[] = $aRow;
268  }
269  }
270  }
271 
272  return $aMessages;
273  }
274 
281  function getFriendsList( $sSqlLimit )
282  {
283  $sSqlLimit = process_db_input($sSqlLimit);
284 
285  // init some needed variables ;
286 
287  $aFriendsList = array();
288 
289  $this -> iTotalContactsCount = getFriendNumber($this -> aMailBoxSettings['member_id']);
290 
291  $sQuery =
292  "
293  SELECT p.*,
294  DATE_FORMAT(f.`When`, '" . getLocaleFormat(CH_WSB_LOCALE_DATE_SHORT, CH_WSB_LOCALE_DB) . "' ) AS 'When'
295  FROM (
296  SELECT `ID` AS `ID`, `When` FROM `sys_friend_list` WHERE `Profile`='{$this->aMailBoxSettings['member_id']}' AND `Check` =1
297  UNION
298  SELECT `Profile` AS `ID`, `When` FROM `sys_friend_list` WHERE `ID` = '{$this->aMailBoxSettings['member_id']}' AND `Check` =1
299 ) AS `f`
300  INNER JOIN `Profiles` AS `p` ON (`p`.`ID` = `f`.`ID`)
301  ORDER BY f.`When` DESC
302  {$sSqlLimit}
303  ";
304  $rResult = db_res($sQuery);
305  while( true == ($aRow = $rResult->fetch()) ) {
306  $aFriendsList[] = $aRow;
307  }
308  return $aFriendsList;
309  }
310 
317  function getFavesList( $sSqlLimit )
318  {
319  $sSqlLimit = process_db_input($sSqlLimit);
320 
321  // init some needed variables ;
322 
323  $aFavesList = array();
324 
325  $this -> iTotalContactsCount = db_value
326  (
327  "
328  SELECT
329  COUNT(*)
330  FROM
331  `sys_fave_list`
332  WHERE
333  `sys_fave_list`.`Profile` = {$this -> aMailBoxSettings['member_id']}
334  OR
335  `sys_fave_list`.`ID` = {$this -> aMailBoxSettings['member_id']}
336  "
337  );
338 
339  $sQuery =
340  "
341  SELECT
342  `Profiles`.*,
343  DATE_FORMAT(`sys_fave_list`.`When`, '" . getLocaleFormat(CH_WSB_LOCALE_DATE_SHORT, CH_WSB_LOCALE_DB) . "') AS `When`
344  FROM
345  `sys_fave_list`
346  INNER JOIN
347  `Profiles`
348  ON
349  `Profiles`.`ID` = `sys_fave_list`.`Profile` AND `sys_fave_list`.`ID` = {$this -> aMailBoxSettings['member_id']}
350  OR
351  `Profiles`.`ID` = `sys_fave_list`.`ID` AND `sys_fave_list`.`Profile` = {$this -> aMailBoxSettings['member_id']}
352  WHERE
353  `sys_fave_list`.`Profile` = {$this -> aMailBoxSettings['member_id']}
354  OR
355  `sys_fave_list`.`ID` = {$this -> aMailBoxSettings['member_id']}
356  ORDER BY
357  `sys_fave_list`.`When` DESC
358  {$sSqlLimit}
359  ";
360 
361  $rResult = db_res($sQuery);
362  while( true == ($aRow = $rResult->fetch()) ) {
363  $aFavesList[] = $aRow;
364  }
365 
366  return $aFavesList;
367  }
368 
375  function getContactedList( $sSqlLimit )
376  {
377  $sSqlLimit = process_db_input($sSqlLimit);
378 
379  // init some needed variables ;
380  $aContactedList = array();
381 
382  $sQuery =
383  "
384  SELECT
385  COUNT( DISTINCT if(`Recipient` = {$this -> aMailBoxSettings['member_id']}, `Sender`, `Recipient`) ) AS `Contacts`
386  FROM
387  `sys_messages`
388  WHERE
389  (`Sender` = {$this -> aMailBoxSettings['member_id']}
390  OR
391  `Recipient` = {$this -> aMailBoxSettings['member_id']})
392  ";
393 
394  // number of contacts ;
395  $this -> iTotalContactsCount = db_value($sQuery);
396 
397  $sQuery =
398  "
399  SELECT
400  DISTINCT `Profiles`.*,
401  DATE_FORMAT(`sys_messages`.`Date`, '" . getLocaleFormat(CH_WSB_LOCALE_DATE_SHORT, CH_WSB_LOCALE_DB) . "') AS `When`
402  FROM
403  `sys_messages`
404  INNER JOIN
405  `Profiles`
406  ON
407  `Profiles`.`ID` = IF (`sys_messages`.`Recipient` = {$this -> aMailBoxSettings['member_id']}, `sys_messages`.`Sender`, `sys_messages`.`Recipient`)
408  WHERE
409  `Sender` = {$this -> aMailBoxSettings['member_id']}
410  OR
411  `Recipient` = {$this -> aMailBoxSettings['member_id']}
412  GROUP BY
413  `Profiles`.`NickName`
414  ORDER BY
415  `sys_messages`.`Date` DESC
416  {$sSqlLimit}
417  ";
418 
419  $rResult = db_res($sQuery);
420  while( true == ($aRow = $rResult->fetch()) ) {
421  $aContactedList[] = $aRow;
422  }
423 
424  return $aContactedList;
425  }
426 
432  {
433  return db_value
434  ("
435  SELECT
436  COUNT(*)
437  FROM
438  `sys_messages`
439  WHERE
440  (
441  `Recipient` = {$this -> aMailBoxSettings['member_id']}
442  AND
443  NOT FIND_IN_SET('Recipient', `Trash`)
444  )
445  AND
446  `New` = '1'
447  ");
448  }
449 
455  function getMessages()
456  {
457  // init some needed variables ;
458  $sWhereParameter = null;
459  $sTypeMessages = null;
460 
461  // define the sort parameter ;
462  $sSortParameter = ( array_key_exists($this -> aMailBoxSettings['sort_mode'], $this -> aSortCriterias) )
463  ? $this -> aSortCriterias[$this -> aMailBoxSettings['sort_mode']]
464  : $this -> aSortCriterias['date_desc'];
465 
466  // define mailbox mode ;
467  switch ($this -> aMailBoxSettings['mailbox_mode']) {
468  case 'inbox' :
469  $sWhereParameter = " AND `sys_messages`.`Recipient` = {$this -> aMailBoxSettings['member_id']} AND NOT FIND_IN_SET('Recipient', `sys_messages`.`Trash`) ";
470  break;
471 
472  case 'inbox_new' :
473  $sWhereParameter = " AND `sys_messages`.`Recipient`={$this -> aMailBoxSettings['member_id']} AND NOT FIND_IN_SET('Recipient', `sys_messages`.`Trash`) AND `New`='1' ";
474  break;
475 
476  case 'outbox' :
477  $sWhereParameter = " AND `sys_messages`.`Sender` = {$this -> aMailBoxSettings['member_id']} AND NOT FIND_IN_SET('Sender', `sys_messages`.`Trash`)";
478  break;
479 
480  case 'trash' :
481  $sWhereParameter =
482  "
483  AND
484  (
485  (
486  `sys_messages`.`Sender` = {$this -> aMailBoxSettings['member_id']}
487  AND
488  FIND_IN_SET('Sender', `sys_messages`.`Trash`)
489  )
490  OR
491  (
492  `sys_messages`.`Recipient` = {$this -> aMailBoxSettings['member_id']}
493  AND
494  FIND_IN_SET('Recipient', `sys_messages`.`Trash`)
495  )
496  )
497  AND
498  (
499  (
500  `sys_messages`.`Sender` = {$this -> aMailBoxSettings['member_id']}
501  AND
502  NOT FIND_IN_SET('Sender', `sys_messages`.`TrashNotView`)
503  )
504  OR
505  (
506  `sys_messages`.`Recipient` = {$this -> aMailBoxSettings['member_id']}
507  AND
508  NOT FIND_IN_SET('Recipient', `sys_messages`.`TrashNotView`)
509  )
510  )
511  ";
512  break;
513  }
514 
515  // define messages types
516  if (is_array($this -> aReceivedMessagesTypes) and !empty($this -> aReceivedMessagesTypes)) {
517  foreach( $this -> aReceivedMessagesTypes AS $sKey ) {
518  if ($sKey)
519  $sTypeMessages .= "`sys_messages`.`Type` = '{$sKey}' OR";
520  }
521  $sTypeMessages = 'AND (' . preg_replace("/OR$/", '', $sTypeMessages). ')';
522  } else
523  return;
524 
525  // if defined all needed parameters ;
526  if ( $sWhereParameter ) {
527  // count of all messages ;
528  $this -> iTotalMessageCount = db_value
529  ("
530  SELECT
531  COUNT(`sys_messages`.`ID`)
532  FROM
533  `sys_messages`
534  WHERE
535  1
536  {$sWhereParameter}
537  {$sTypeMessages}
538  ");
539 
540  if ( $this -> iTotalMessageCount ) {
541  // define number of maximum message for per page ;
542  if( $this -> aMailBoxSettings['page'] < 1 )
543  $this -> aMailBoxSettings['page'] = 1;
544 
545  $sLimitFrom = ( $this -> aMailBoxSettings['page'] - 1 ) * $this -> aMailBoxSettings['per_page'];
546  $sSqlLimit = "LIMIT {$sLimitFrom}, {$this -> aMailBoxSettings['per_page']}";
547 
548  $sFieldName = $this -> aMailBoxSettings['mailbox_mode'] == 'outbox'
549  ? 'Recipient'
550  : 'Sender';
551 
552  $sQuery =
553  "
554  SELECT
555  `sys_messages`.`ID`, DATE_FORMAT(`sys_messages`.`Date`, '" . getLocaleFormat(CH_WSB_LOCALE_DATE, CH_WSB_LOCALE_DB) . "') AS `Date`,
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`
560  FROM
561  `sys_messages`
562  INNER JOIN
563  `Profiles`
564  ON
565  `Profiles`.`ID` = `sys_messages`.`{$sFieldName}`
566  WHERE
567  1
568  {$sWhereParameter}
569  {$sTypeMessages}
570  ORDER BY {$sSortParameter}
571  {$sSqlLimit}
572  ";
573 
574  $aMessages = array();
575  $rResult = db_res($sQuery);
576 
577  // generate array with messages ;
578  while( true == ($aRow = $rResult->fetch()) ) {
579  $aMessages[] = $aRow;
580  }
581 
582  // return generated array ;
583  return $aMessages;
584  }
585  }
586  }
587 
595  function setMarkMessage( $iMessageID, $iMarkMode )
596  {
597  $iMessageID = (int) $iMessageID;
598  $iMarkMode = (int) $iMarkMode;
599 
600  $sQuery =
601  "
602  UPDATE
603  `sys_messages`
604  SET
605  `New` = '{$iMarkMode}'
606  WHERE
607  `ID` = {$iMessageID}
608  AND
609  `Recipient` = {$this -> aMailBoxSettings['member_id']}
610  ";
611  $res = db_res($sQuery);
612 
613  return db_affected_rows($res);
614  }
615 
623  function setTrashedMessage($iMessageID, $sField = 'Trash')
624  {
625  $iMessageID = (int) $iMessageID;
627 
628  // try to define mailbox mode and trash mode;
629  $sQuery = "SELECT `Sender`, `Recipient`, `{$sField}` FROM `sys_messages` WHERE `ID` = {$iMessageID}";
630  $rResult = db_res($sQuery);
631 
632  while( true == ($aRow = $rResult->fetch()) ) {
633  $sTrashValue = $sFieldName = ( $aRow['Sender'] == $this -> aMailBoxSettings['member_id'] )
634  ? 'Sender'
635  : 'Recipient' ;
636 
637  if ( $aRow['Recipient'] == $aRow['Sender'] ) {
638  $sTrashValue = 'sender,recipient';
639  } else if ( $aRow[$sField] ) {
640  $sTrashValue = $sTrashValue . ',' . $aRow[$sField];
641  }
642  }
643 
644  // set trashed ;
645  $sQuery =
646  "
647  UPDATE
648  `sys_messages`
649  SET
650  `{$sField}` = '" . strtolower($sTrashValue) . "'
651  WHERE
652  `ID` = {$iMessageID}
653  AND
654  `{$sFieldName}` = {$this -> aMailBoxSettings['member_id']}
655  ";
656 
657  $res = db_res($sQuery);
658 
659  return db_affected_rows($res);
660  }
661 
669  {
670  $iMessageID = (int) $iMessageID;
671 
672  // init some needed variables ;
673  $iMessageOwner = 0;
674 
675  $sQuery = "SELECT `Sender`, `Recipient`, `Trash` FROM `sys_messages` WHERE `ID` = {$iMessageID}";
676  $rResult = db_res($sQuery);
677 
678  while( true == ($aRow = $rResult->fetch()) ) {
679  if ( $aRow['Recipient'] == $aRow['Sender'] ) {
680  $sTrashMode = null;
681  $iMessageOwner = (int) $aRow['Sender'];
682  break;
683  } else if ( $aRow['Sender'] == $this -> aMailBoxSettings['member_id'] ) {
684  $iMessageOwner = (int) $aRow['Sender'];
685  $sTrashMode = preg_replace("/sender|\,/", '', $aRow['Trash']);
686  break;
687  } else if ( $aRow['Recipient'] == $this -> aMailBoxSettings['member_id'] ) {
688  $iMessageOwner = (int) $aRow['Recipient'];
689  $sTrashMode = preg_replace("/recipient|\,/", '', $aRow['Trash']);
690  break;
691  }
692  }
693 
694  // get restore message ;
695  if ( $iMessageOwner ) {
696  $sQuery =
697  "
698  UPDATE
699  `sys_messages`
700  SET
701  `Trash` = '{$sTrashMode}'
702  WHERE
703  `ID` = {$iMessageID}
704  AND
705  (
706  `Sender` = {$iMessageOwner}
707  OR
708  `Recipient` = {$iMessageOwner}
709  )
710  ";
711  $res = db_res($sQuery);
712 
713  return db_affected_rows($res);
714  }
715  }
716 
729  function sendMessage( $sMessageSubject, $sMessageBody, $vRecipientID, &$aComposeSettings, $isSimulateSending = false )
730  {
732  $sMessageSubjectCopy = $GLOBALS['MySQL']->unescape ($sMessageSubject);
733 
735  $sCopyMessage = $GLOBALS['MySQL']->unescape ($sMessageBody);
736 
737  if(!$isSimulateSending && (!$sMessageSubject || !$sMessageBody)) {
738  $this -> iSendMessageStatusCode = CH_MAILBOX_SEND_FAILED;
739  return MsgBox( _t('_please_fill_next_fields_first') );
740  }
741 
742  // init some needed variables ;
743  $sReturnMessage = null;
744  $sComposeUrl = CH_WSB_URL_ROOT . 'mail.php?mode=compose';
745 
746  // try to define member's ID ;
747  $iRecipientID = (int) getId($vRecipientID);
748  if(!$iRecipientID) {
749  $this -> iSendMessageStatusCode = CH_MAILBOX_SEND_UNKNOWN_RECIPIENT;
750  return MsgBox ( _t('_Profile not found') );
751  }
752 
753  $aRecipientInfo = getProfileInfo($iRecipientID);
754  $oEmailTemplate = new ChWsbEmailTemplates();
755  $bAllowToSend = true;
756 
757  $this -> iSendMessageStatusCode = CH_MAILBOX_SEND_FAILED;
758 
759  // ** check permission for recipient member ;
760 
761  // Check if member is blocked ;
762  $sQuery =
763  "
764  SELECT
765  `ID`, `Profile`
766  FROM
767  `sys_block_list`
768  WHERE
769  `Profile` = {$this -> aMailBoxSettings['member_id']}
770  AND
771  `ID` = '{$iRecipientID}'
772  " ;
773 
774  if (!isAdmin($this -> aMailBoxSettings['member_id']) && db_arr($sQuery)) {
775  $sReturnMessage = MsgBox( _t('_FAILED_TO_SEND_MESSAGE_BLOCK') );
776  $this -> iSendMessageStatusCode = CH_MAILBOX_SEND_BLOCKED;
777  $bAllowToSend = false;
778  }
779 
780  // antispam check ;
781  $sQuery =
782  "
783  SELECT
784  `ID`
785  FROM
786  `sys_messages`
787  WHERE
788  `Sender` = {$this -> aMailBoxSettings['member_id']}
789  AND
790  date_add(`Date`, INTERVAL {$this -> iWaitMinutes} MINUTE) > Now()
791  ";
792 
793  if ( db_arr($sQuery) ) {
794  $sReturnMessage = MsgBox( _t('_You have to wait for PERIOD minutes before you can write another message!', $this -> iWaitMinutes, $sComposeUrl) );
795  $this -> iSendMessageStatusCode = CH_MAILBOX_SEND_WAIT;
796  $bAllowToSend = false;
797  }
798 
799  // additional antispam check ;
800  if (ch_is_spam($sCopyMessage)) {
801  $sReturnMessage = MsgBox( sprintf(_t("_sys_spam_detected"), CH_WSB_URL_ROOT . 'contact.php') );
802  $this -> iSendMessageStatusCode = CH_MAILBOX_SEND_FAILED;
803  $bAllowToSend = false;
804  }
805 
806  // check if member not active ;
807  if ( $aRecipientInfo['Status'] != 'Active' ) {
808  $sReturnMessage = MsgBox( _t('_FAILED_TO_SEND_MESSAGE_NOT_ACTIVE', $sComposeUrl) );
809  $this -> iSendMessageStatusCode = CH_MAILBOX_SEND_RECIPIENT_NOT_ACTIVE;
810  $bAllowToSend = false;
811  }
812 
813  // chek membership level;
814  if(!$this -> isSendMessageAlowed($this -> aMailBoxSettings['member_id'], $isSimulateSending ? false : true) ) {
815  $sReturnMessage = MsgBox( _t('_FAILED_TO_SEND_MESSAGE_MEMBERSHIP_DISALLOW') );
816  $this -> iSendMessageStatusCode = CH_MAILBOX_SEND_FAILED_MEMBERSHIP_DISALLOW;
817  $bAllowToSend = false;
818  }
819 
820  // ** allow to send message ;
821  if ( !$isSimulateSending && $bAllowToSend ) {
822  $sQuery =
823  "
824  INSERT INTO
825  `sys_messages`
826  SET
827  `Sender` = {$this -> aMailBoxSettings['member_id']},
828  `Recipient` = {$iRecipientID},
829  `Subject` = '{$sMessageSubject}',
830  `Text` = '{$sMessageBody}',
831  `Date` = NOW(),
832  `New` = '1',
833  `Type` = 'letter'
834  ";
835 
836  if ( db_res($sQuery ) ) {
837  $sReturnMessage = MsgBox( _t('_MESSAGE_SENT', $sComposeUrl, getProfileLink($iRecipientID), $aRecipientInfo['NickName']));
838  $this -> iSendMessageStatusCode = CH_MAILBOX_SEND_SUCCESS;
839 
840  //--- create system event
841  ch_import('ChWsbAlerts');
842  $aAlertData = array(
843  'msg_id' => db_last_id(),
844  'subject' => $sMessageSubjectCopy,
845  'body' => $sCopyMessage,
846  'send_copy' => $aComposeSettings['send_copy'], //boolean
847  'notification' => $aComposeSettings['notification'], //boolean
848  'send_copy_to_me' => $aComposeSettings['send_copy_to_me'], //boolean
849  );
850 
851  $oZ = new ChWsbAlerts('profile', 'send_mail_internal'
852  , $this -> aMailBoxSettings['member_id'], $iRecipientID, $aAlertData);
853  $oZ -> alert();
854 
855  // ** check the additional parameters ;
856 
857  // send message to phisical recipient's email ;
858  if ( $aComposeSettings['send_copy'] ) {
859  $aTemplate = $oEmailTemplate -> getTemplate( 't_Message', $iRecipientID ) ;
860  $aPlus = array();
861  $aPlus['MessageText'] = replace_full_uris( $sCopyMessage );
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 );
865  }
866 
867  // send notification to the recipient's email ;
868  if ( $aComposeSettings['notification'] ) {
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 );
873  }
874 
875  // allow to send message to phisical sender's email;
876  if ( $aComposeSettings['send_copy_to_me'] ) {
877  $aSenderInfo = getProfileInfo($this -> aMailBoxSettings['member_id']);
878  $aTemplate = $oEmailTemplate -> getTemplate( 't_MessageCopy', $this -> aMailBoxSettings['member_id'] ) ;
879 
880  $aPlus['your subject here'] = $sMessageSubjectCopy;
881  $aPlus['your message here'] = replace_full_uris( $sCopyMessage );
882 
883  sendMail( $aSenderInfo['Email'], $aTemplate['Subject']
884  , $aTemplate['Body'], $this -> aMailBoxSettings['member_id'], $aPlus );
885  }
886  } else {
887  $sReturnMessage = MsgBox( _t('_FAILED_TO_SEND_MESSAGE') );
888  $this->iSendMessageStatusCode = CH_MAILBOX_SEND_FAILED;
889  }
890  }
891 
892  return $sReturnMessage;
893  }
894 
902  static function getCountSentMessages($iMemberId, $sMessageStatus = null)
903  {
904  $iMemberId = (int) $iMemberId;
905  $sMessageStatus = process_db_input($sMessageStatus);
906 
907  $sExtraQuery = ( $sMessageStatus ) ? " AND `New` = '{$sMessageStatus}'" : null;
908 
909  $sQuery =
910  "
911  SELECT
912  COUNT(*)
913  FROM
914  `sys_messages`
915  WHERE
916  `Sender` = {$iMemberId}
917  AND
918  NOT FIND_IN_SET('Sender', `Trash`)
919  {$sExtraQuery}
920  ";
921 
922  return db_value($sQuery);
923  }
924 
932  static function getCountInboxMessages($iMemberId, $sMessageStatus = null)
933  {
934  $iMemberId = (int) $iMemberId;
935  $sMessageStatus = process_db_input($sMessageStatus);
936 
937  $sExtraQuery = ( $sMessageStatus ) ? " AND `New` = '{$sMessageStatus}'" : null;
938 
939  $sQuery =
940  "
941  SELECT
942  COUNT(*)
943  FROM
944  `sys_messages`
945  WHERE
946  `Recipient` = {$iMemberId}
947  AND
948  NOT FIND_IN_SET('Recipient', `Trash`)
949  {$sExtraQuery}
950  ";
951 
952  return db_value($sQuery);
953  }
954 
962  static function getCountTrashedMessages($iMemberId, $sMessageStatus = null)
963  {
964  $iMemberId = (int) $iMemberId;
965  $sMessageStatus = process_db_input($sMessageStatus);
966 
967  $sExtraQuery = ( $sMessageStatus ) ? " AND `New` = '{$sMessageStatus}'" : null;
968 
969  $sQuery =
970  "
971  SELECT
972  COUNT(*)
973  FROM
974  `sys_messages`
975  WHERE
976  (
977  (
978  `Sender` = {$iMemberId}
979  AND
980  FIND_IN_SET('Sender', `Trash`)
981  )
982  OR
983  (
984  `Recipient` = {$iMemberId}
985  AND
986  FIND_IN_SET('Recipient', `Trash`)
987  )
988  )
989  AND
990  (
991  (
992  `sys_messages`.`Sender` = {$iMemberId}
993  AND
994  NOT FIND_IN_SET('Sender', `sys_messages`.`TrashNotView`)
995  )
996  OR
997  (
998  `sys_messages`.`Recipient` = {$iMemberId}
999  AND
1000  NOT FIND_IN_SET('Recipient', `sys_messages`.`TrashNotView`)
1001  )
1002  )
1003  {$sExtraQuery}
1004  ";
1005 
1006  return db_value($sQuery);
1007  }
1008 
1015  function isSendMessageAlowed($iMemberId, $isPerformAction = false)
1016  {
1017  $iMemberId = (int) $iMemberId;
1018 
1019  $this -> _defineActions();
1020  $aCheck = checkAction($iMemberId, CH_SEND_MESSAGES, $isPerformAction);
1022  }
1023 
1024  function _defineActions()
1025  {
1026  defineMembershipActions( array('send messages') );
1027  }
1028  }
ChWsbMailBox\$iContactsPerPage
$iContactsPerPage
Definition: ChWsbMailBox.php:31
process_db_input
process_db_input($sText, $iStripTags=0)
Definition: utils.inc.php:256
CH_WSB_LOCALE_DATE
const CH_WSB_LOCALE_DATE
Definition: utils.inc.php:16
$aSenderInfo
$aSenderInfo
Definition: tellfriend.php:34
$iMemberId
$iMemberId
Definition: profile.php:91
MsgBox
MsgBox($sText, $iTimer=0)
Definition: design.inc.php:175
$sLimitFrom
$sLimitFrom
Definition: post_mod_crss.php:49
ChWsbPageView
Definition: ChWsbPageView.php:99
$aComposeSettings
$aComposeSettings
Definition: mail.php:115
ChWsbMailBox\getArchivesList
getArchivesList($sSqlLimit)
Definition: ChWsbMailBox.php:188
CHECK_ACTION_RESULT_ALLOWED
const CHECK_ACTION_RESULT_ALLOWED
Definition: membership_levels.inc.php:60
CH_TAGS_VALIDATE
const CH_TAGS_VALIDATE
Definition: utils.inc.php:24
ChWsbMailBox\_defineActions
_defineActions()
Definition: ChWsbMailBox.php:1024
ChWsbEmailTemplates
Definition: ChWsbEmailTemplates.php:11
ch_import
ch_import($sClassName, $aModule=array())
Definition: utils.inc.php:1218
CHECK_ACTION_RESULT
const CHECK_ACTION_RESULT
Definition: membership_levels.inc.php:54
sendMail
sendMail( $sRecipientEmail, $sMailSubject, $sMailBody, $iRecipientID=0, $aPlus=array(), $sEmailFlag='html', $isDisableAlert=false, $bForceSend=false)
Definition: utils.inc.php:461
ChWsbMailBox\$aMailBoxSettings
$aMailBoxSettings
Definition: ChWsbMailBox.php:34
ChWsbMailBox\$aRegisteredMessageTypes
$aRegisteredMessageTypes
Definition: ChWsbMailBox.php:40
php
CH_MAILBOX_SEND_UNKNOWN_RECIPIENT
const CH_MAILBOX_SEND_UNKNOWN_RECIPIENT
Definition: ChWsbMailBox.php:16
$oZ
$oZ
Definition: db.php:20
$vRecipientID
$vRecipientID
Definition: mail.php:32
ChWsbMailBox\isSendMessageAlowed
isSendMessageAlowed($iMemberId, $isPerformAction=false)
Definition: ChWsbMailBox.php:1015
ChWsbMailBox\getMessages
getMessages()
Definition: ChWsbMailBox.php:455
ChWsbMailBox\$aSortCriterias
$aSortCriterias
Definition: ChWsbMailBox.php:37
ChWsbMailBox\getFavesList
getFavesList( $sSqlLimit)
Definition: ChWsbMailBox.php:317
isAdmin
isAdmin()
Definition: index.php:649
$oCache
$oCache
Definition: prof.inc.php:10
CH_SLASHES_NO_ACTION
const CH_SLASHES_NO_ACTION
Definition: utils.inc.php:30
CH_MAILBOX_SEND_WAIT
const CH_MAILBOX_SEND_WAIT
Definition: ChWsbMailBox.php:13
CH_MAILBOX_SEND_SUCCESS
const CH_MAILBOX_SEND_SUCCESS
Definition: ChWsbMailBox.php:11
ChWsbAlerts
Definition: ChWsbAlerts.php:39
db_arr
db_arr($query, $bindings=[])
Definition: db.inc.php:76
$sMessageBody
$sMessageBody
Definition: mail.php:42
and
and
Definition: license.txt:18
CH_MAILBOX_SEND_FAILED_MEMBERSHIP_DISALLOW
const CH_MAILBOX_SEND_FAILED_MEMBERSHIP_DISALLOW
Definition: ChWsbMailBox.php:17
getNickName
getNickName( $ID='')
Definition: profiles.inc.php:461
CH_MAILBOX_SEND_RECIPIENT_NOT_ACTIVE
const CH_MAILBOX_SEND_RECIPIENT_NOT_ACTIVE
Definition: ChWsbMailBox.php:15
db_last_id
db_last_id()
Definition: db.inc.php:47
ChWsbMailBox\getFriendsList
getFriendsList( $sSqlLimit)
Definition: ChWsbMailBox.php:281
$iMessageID
$iMessageID
Definition: mail.php:22
ChWsbMailBox\$aRegisteredArchivesTypes
$aRegisteredArchivesTypes
Definition: ChWsbMailBox.php:46
ChWsbMailBox\setRestoredMessage
setRestoredMessage( $iMessageID)
Definition: ChWsbMailBox.php:668
ChWsbMailBox\$iWaitMinutes
$iWaitMinutes
Definition: ChWsbMailBox.php:52
ChWsbMailBox\$aRegisteredContactTypes
$aRegisteredContactTypes
Definition: ChWsbMailBox.php:43
_t
_t($key, $arg0="", $arg1="", $arg2="")
Definition: languages.inc.php:509
ChWsbMailBox\getCountTrashedMessages
static getCountTrashedMessages($iMemberId, $sMessageStatus=null)
Definition: ChWsbMailBox.php:962
ChWsbMailBox\getCountSentMessages
static getCountSentMessages($iMemberId, $sMessageStatus=null)
Definition: ChWsbMailBox.php:902
getProfileLink
getProfileLink( $iID, $sLinkAdd='')
Definition: profiles.inc.php:484
db_affected_rows
db_affected_rows($oStmt=null)
Definition: db.inc.php:56
CH_WSB_LOCALE_DATE_SHORT
const CH_WSB_LOCALE_DATE_SHORT
Definition: utils.inc.php:15
checkAction
checkAction($iMemberId, $actionID, $performAction=false, $iForcedProfID=0, $isCheckMemberStatus=true)
Definition: membership_levels.inc.php:313
CH_TAGS_STRIP
const CH_TAGS_STRIP
Definition: utils.inc.php:22
ChWsbMailBox\setTrashedMessage
setTrashedMessage($iMessageID, $sField='Trash')
Definition: ChWsbMailBox.php:623
ChWsbPageView\$sPageName
$sPageName
Definition: ChWsbPageView.php:100
ChWsbMailBox\getContactedList
getContactedList( $sSqlLimit)
Definition: ChWsbMailBox.php:375
defineMembershipActions
defineMembershipActions($aActionsAll, $sPrefix='CH_')
Definition: membership_levels.inc.php:744
CH_WSB_LOCALE_DB
const CH_WSB_LOCALE_DB
Definition: utils.inc.php:19
ChWsbMailBox
Definition: ChWsbMailBox.php:20
ChWsbMailBox\sendMessage
sendMessage( $sMessageSubject, $sMessageBody, $vRecipientID, &$aComposeSettings, $isSimulateSending=false)
Definition: ChWsbMailBox.php:729
$sMessageSubject
$sMessageSubject
Definition: mail.php:37
CH_MAILBOX_SEND_BLOCKED
const CH_MAILBOX_SEND_BLOCKED
Definition: ChWsbMailBox.php:14
db_res
db_res($query, $bindings=[])
Definition: db.inc.php:39
db_value
db_value($query, $bindings=[], $error_checking=true, $index=0)
Definition: db.inc.php:98
CH_MAILBOX_SEND_FAILED
const CH_MAILBOX_SEND_FAILED
Definition: ChWsbMailBox.php:12
getProfileInfo
getProfileInfo($iProfileID=0, $checkActiveStatus=false, $forceCache=false)
Definition: profiles.inc.php:249
ChWsbMailBox\$aReceivedMessagesTypes
$aReceivedMessagesTypes
Definition: ChWsbMailBox.php:49
ChWsbMailBox\$iSendMessageStatusCode
$iSendMessageStatusCode
Definition: ChWsbMailBox.php:22
getLocaleFormat
getLocaleFormat($iCode=CH_WSB_LOCALE_DATE_SHORT, $iType=CH_WSB_LOCALE_PHP)
Definition: utils.inc.php:89
ChWsbMailBox\setMarkMessage
setMarkMessage( $iMessageID, $iMarkMode)
Definition: ChWsbMailBox.php:595
ChWsbMailBox\getCountInboxMessages
static getCountInboxMessages($iMemberId, $sMessageStatus=null)
Definition: ChWsbMailBox.php:932
ChWsbMailBox\$iTotalMessageCount
$iTotalMessageCount
Definition: ChWsbMailBox.php:25
replace_full_uris
replace_full_uris($text)
Definition: utils.inc.php:880
ChWsbMailBox\__construct
__construct( $sPageName, &$aMailBoxSettings)
Definition: ChWsbMailBox.php:70
ChWsbMailBox\getInboxMessagesCount
getInboxMessagesCount()
Definition: ChWsbMailBox.php:431
empty
Attr AllowedRel this is empty
Definition: Attr.AllowedRel.txt:7
getFriendNumber
getFriendNumber($iID, $iFrStatus=1, $iOnline=0, $sqlWhere='')
Definition: profiles.inc.php:301
ChWsbMailBox\$iTotalContactsCount
$iTotalContactsCount
Definition: ChWsbMailBox.php:28
$GLOBALS
$GLOBALS['iAdminPage']
Definition: advanced_settings.php:10
ch_is_spam
ch_is_spam($val)
Definition: utils.inc.php:1080