Cheetah
ChSimpleMessengerDb.php
Go to the documentation of this file.
1 <?php
2 
8 require_once(CH_DIRECTORY_PATH_CLASSES . 'ChWsbModuleDb.php');
9 
11 {
12  var $_oConfig;
13 
15 
19  function __construct(&$oConfig)
20  {
21  parent::__construct();
22 
23  $this->_oConfig = $oConfig;
24  $this->sTablePrefix = $oConfig->getDbPrefix();
25  }
26 
35  function createMessage($iSenderId, $iRecipientId, $sMessage)
36  {
37  // procces vars
38  $iSenderId = (int)$iSenderId;
39  $iRecipientId = (int)$iRecipientId;
41 
42  $sQuery =
43  "
44  INSERT INTO
45  `{$this -> sTablePrefix}messages`
46  SET
47  `SenderID` = {$iSenderId},
48  `RecipientID` = {$iRecipientId},
49  `Message` = '{$sMessage}'
50  ";
51 
52  return (int)$this->query($sQuery) > 0 ? $this->lastId() : false;
53  }
54 
62  function closeChatWindow($iRecipientId, $iLoggedMember)
63  {
64  $iRecipientId = (int)$iRecipientId;
65  $iLoggedMember = (int)$iLoggedMember;
66 
67  // define the sender's id;
68  $sQuery =
69  "
70  SELECT
71  `SenderID`
72  FROM
73  `{$this -> sTablePrefix}messages`
74  WHERE
75  (
76  `SenderID` = {$iLoggedMember}
77  AND
78  `RecipientID` = {$iRecipientId}
79  )
80  OR
81  (
82  `SenderID` = {$iRecipientId}
83  AND
84  `RecipientID` = {$iLoggedMember}
85  )
86  ORDER BY
87  `Date` DESC
88  LIMIT 1
89  ";
90 
91  $iSenderId = $this->getOne($sQuery);
92  $sFieldId = ($iSenderId == $iLoggedMember) ? 'SenderStatus' : 'RecipientStatus';
93 
94  $sQuery =
95  "
96  UPDATE
97  `{$this -> sTablePrefix}messages`
98  SET
99  `{$sFieldId}` = 'close'
100  WHERE
101  (
102  `SenderID` = {$iLoggedMember}
103  AND
104  `RecipientID` = {$iRecipientId}
105  )
106  OR
107  (
108  `SenderID` = {$iRecipientId}
109  AND
110  `RecipientID` = {$iLoggedMember}
111  )
112  ORDER BY
113  `Date` DESC
114  LIMIT 1
115  ";
116 
117  return $this->query($sQuery);
118  }
119 
127  {
128  $iProfileId = (int)$iProfileId;
129 
130  $sQuery =
131  "
132  DELETE FROM
133  `{$this -> sTablePrefix}messages`
134  WHERE
135  `SenderID` = {$iProfileId}
136  OR
137  `RecipientID` = {$iProfileId}
138  ";
139 
140  $this->query($sQuery);
141  }
142 
151  function deleteMessagesHistory($iSender, $iRecipient, $iAllowCountMessages)
152  {
153  $iSender = (int)$iSender;
154  $iRecipient = (int)$iRecipient;
155  $iAllowCountMessages = (int)$iAllowCountMessages;
156 
157  $sQuery =
158  "
159  SELECT
160  COUNT(*)
161  FROM
162  `{$this -> sTablePrefix}messages`
163  WHERE
164  (
165  `SenderID` = {$iSender}
166  AND
167  `RecipientID` = {$iRecipient}
168  )
169  OR
170  (
171  `SenderID` = {$iRecipient}
172  AND
173  `RecipientID` = {$iSender}
174  )
175  ";
176 
177  $iMessageCount = (int)$this->getOne($sQuery);
178  if ($iMessageCount > $iAllowCountMessages) {
179  // delete all unnecessary messages ;
180  $iRowsDelete = $iMessageCount - $iAllowCountMessages;
181 
182  $sQuery =
183  "
184  DELETE FROM
185  `{$this -> sTablePrefix}messages`
186  WHERE
187  (
188  `SenderID` = {$iSender}
189  AND
190  `RecipientID` = {$iRecipient}
191  )
192  OR
193  (
194  `SenderID` = {$iRecipient}
195  AND
196  `RecipientID` = {$iSender}
197  )
198  ORDER BY `ID`
199  LIMIT {$iRowsDelete}
200  ";
201 
202  $this->query($sQuery);
203  }
204  }
205 
213  function getLastMessagesId($iRecipient, $iSender)
214  {
215  $iRecipient = (int)$iRecipient;
216  $iSender = (int)$iSender;
217 
218  $sQuery =
219  "
220  SELECT
221  `ID`
222  FROM
223  `{$this -> sTablePrefix}messages`
224  WHERE
225  (
226  `SenderID` = {$iSender}
227  AND
228  `RecipientID` = {$iRecipient}
229  OR
230  `SenderID` = {$iRecipient}
231  AND
232  `RecipientID` = {$iSender}
233  )
234  ORDER BY
235  `ID` DESC
236  LIMIT 1
237  ";
238 
239  return $this->getOne($sQuery);
240  }
241 
249  function getChatBoxesCount($iSender)
250  {
251  $iSender = (int)$iSender;
252 
253  $sQuery =
254  "
255  SELECT
256  DISTINCT IF(`{$this -> sTablePrefix}messages`.`SenderID` = {$iSender}, `{$this -> sTablePrefix}messages`.`RecipientID`, `{$this -> sTablePrefix}messages`.`SenderID`) AS `RecipientID`
257  FROM
258  `{$this -> sTablePrefix}messages`
259  INNER JOIN
260  `Profiles`
261  ON
262  `Profiles`.`ID` = {$iSender}
263  WHERE
264  `{$this -> sTablePrefix}messages`.`RecipientID` = {$iSender}
265  OR
266  `{$this -> sTablePrefix}messages`.`SenderID` = {$iSender}
267  ";
268 
269  $aSenders = $this->getAll($sQuery);
270  $aProcessedSenders = array();
271 
272  // procces all recived id;
273  foreach ($aSenders as $iKey => $aItems) {
274  $aItems['RecipientID'] = (int)$aItems['RecipientID'];
275 
276  $sQuery =
277  "
278  SELECT
279  IF(`SenderID` = {$aItems['RecipientID']}, `SenderStatus`, `RecipientStatus`) AS `Status`
280  FROM
281  `{$this -> sTablePrefix}messages`
282  WHERE
283  (
284  `RecipientID` = {$aItems['RecipientID']}
285  AND
286  `SenderID` = {$iSender}
287  )
288  OR
289  (
290  `RecipientID` = {$iSender}
291  AND
292  `SenderID` = {$aItems['RecipientID']}
293  )
294  ORDER BY
295  `Date` DESC
296  LIMIT 1
297  ";
298 
299  if ($this->getOne($sQuery) != 'close') {
300  $aProcessedSenders[] = $aItems['RecipientID'];
301  }
302  }
303 
304  return $aProcessedSenders;
305  }
306 
314  function getMessagesCount($iRecipient, $iSender)
315  {
316  $iRecipient = (int)$iRecipient;
317  $iSender = (int)$iSender;
318 
319  $sQuery =
320  "
321  SELECT
322  COUNT(*)
323  FROM
324  `{$this -> sTablePrefix}messages`
325  WHERE
326  (
327  `SenderID` = {$iSender}
328  AND
329  `RecipientID` = {$iRecipient}
330  )
331  OR
332  (
333  `SenderID` = {$iRecipient}
334  AND
335  `RecipientID` = {$iSender}
336  )
337  ";
338 
339  return $this->getOne($sQuery);
340  }
341 
357  function getHistoryList(&$aCoreSettings, $iRecipient, $iSender, $iLastMessageId = 0, $iMessageLimit = 0)
358  {
359  $iRecipient = (int)$iRecipient;
360  $iSender = (int)$iSender;
361  $iLastMessageId = (int)$iLastMessageId;
362  $iMessageLimit = (int)$iMessageLimit;
363 
364  // define the rows limit ;
365  $sRowsLimit = ($iMessageLimit) ? " LIMIT {$iMessageLimit}" : null;
366 
367  // check if chat history is enabled now;
368  if ($aCoreSettings['save_chat_history'] && !$sRowsLimit) {
369 
370  $iMessagesCount = $this->getMessagesCount($iRecipient, $iSender);
371  $iLimitFrom = $iMessagesCount - $aCoreSettings['number_visible_messages'];
372  $sRowsLimit = " LIMIT {$iLimitFrom}, 18446744073709551615";
373  }
374 
375  $sQuery =
376  "
377  SELECT
378  `ID`, `Message`, `SenderID`,
379  `RecipientID`, UNIX_TIMESTAMP(`Date`) AS `DateTS`
380  FROM
381  `{$this -> sTablePrefix}messages`
382  WHERE
383  (
384  (
385  `SenderID` = {$iSender}
386  AND
387  `RecipientID` = {$iRecipient}
388  )
389  OR
390  (
391  `SenderID` = {$iRecipient}
392  AND
393  `RecipientID` = {$iSender}
394  )
395  )
396  AND
397  (
398  `ID` > {$iLastMessageId}
399  )
400  ORDER BY
401  `ID`
402  {$sRowsLimit}
403  ";
404 
405  return $this->getAll($sQuery);
406  }
407 
416  function getNewChatBoxes($iRecipientId, $aRegBoxes = array())
417  {
418  $iRecipientId = (int)$iRecipientId;
419 
420  // define registered chat boxes;
421  $sFilter = '';
422  if ($aRegBoxes && is_array($aRegBoxes)) {
423  foreach ($aRegBoxes as $iKey => $aItem) {
424  $iKey = (int)$iKey;
425  $sFilter .= " AND (`{$this -> sTablePrefix}messages`.`SenderID` <> {$iKey} AND `{$this -> sTablePrefix}messages`.`RecipientID` <> {$iKey})";
426  }
427  }
428 
429  $sQuery =
430  "
431  SELECT
432  DISTINCT IF(`{$this -> sTablePrefix}messages`.`SenderID` = {$iRecipientId}, `{$this -> sTablePrefix}messages`.`RecipientID`, `{$this -> sTablePrefix}messages`.`SenderID`) AS `RecipientID`
433  FROM
434  `{$this -> sTablePrefix}messages`
435  INNER JOIN
436  `Profiles`
437  ON
438  `Profiles`.`ID` = `RecipientID`
439  WHERE
440  (
441  `{$this -> sTablePrefix}messages`.`RecipientID` = {$iRecipientId}
442  OR
443  `{$this -> sTablePrefix}messages`.`SenderID` = {$iRecipientId}
444  )
445  {$sFilter}
446  ";
447 
448  $aSenders = $this->getAll($sQuery);
449  $aProcessedSenders = array();
450 
451  // procces all recived id;
452  foreach ($aSenders as $iKey => $aItems) {
453  $aItems['RecipientID'] = (int)$aItems['RecipientID'];
454 
455  $sQuery =
456  "
457  SELECT
458  IF(`SenderID` = {$aItems['RecipientID']}, `SenderStatus`, `RecipientStatus`) AS `Status`
459  FROM
460  `{$this -> sTablePrefix}messages`
461  WHERE
462  (
463  `RecipientID` = {$aItems['RecipientID']}
464  AND
465  `SenderID` = {$iRecipientId}
466  )
467  OR
468  (
469  `RecipientID` = {$iRecipientId}
470  AND
471  `SenderID` = {$aItems['RecipientID']}
472  )
473  ORDER BY
474  `Date` DESC
475  LIMIT 1
476  ";
477 
478  if ($this->getOne($sQuery) != 'close') {
479  $aProcessedSenders[] = $aItems['RecipientID'];
480  }
481  }
482 
483  return $aProcessedSenders;
484  }
485 
492  function createPrivacyGroup($iMemberId, $iGroupValue = 0)
493  {
494  $iMemberId = (int)$iMemberId;
495  $iGroupValue = (int)$iGroupValue;
496 
497  $sQuery = "SELECT COUNT(*) FROM `{$this -> sTablePrefix}privacy` WHERE `author_id` = {$iMemberId}";
498  if ($this->getOne($sQuery)) {
499  // update existeng';
500  $sQuery = "UPDATE `{$this -> sTablePrefix}privacy` SET `allow_contact_to` = {$iGroupValue} WHERE `author_id` = {$iMemberId}";
501  $this->query($sQuery);
502  } else {
503  // create new;
504  $sQuery = "INSERT INTO `{$this -> sTablePrefix}privacy` SET `allow_contact_to` = {$iGroupValue}, `author_id` = {$iMemberId}";
505  $this->query($sQuery);
506  }
507  }
508 
516  {
517  $iMemberId = (int)$iMemberId;
518 
519  $sQuery = "SELECT `allow_contact_to` FROM `{$this -> sTablePrefix}privacy` WHERE `author_id` = {$iMemberId}";
520 
521  return $this->getOne($sQuery);
522  }
523 
530  function shieldData($sData)
531  {
532  return process_db_input($sData, CH_TAGS_NO_ACTION);
533  }
534 }
process_db_input
process_db_input($sText, $iStripTags=0)
Definition: utils.inc.php:256
ChSimpleMessengerDb
Definition: ChSimpleMessengerDb.php:11
ChSimpleMessengerDb\__construct
__construct(&$oConfig)
Definition: ChSimpleMessengerDb.php:19
$sMessage
$sMessage
Definition: actions.inc.php:17
$iMemberId
$iMemberId
Definition: profile.php:91
ChSimpleMessengerDb\$sTablePrefix
$sTablePrefix
Definition: ChSimpleMessengerDb.php:14
ChSimpleMessengerDb\getPrivacyGroupValue
getPrivacyGroupValue($iMemberId)
Definition: ChSimpleMessengerDb.php:515
ChSimpleMessengerDb\getMessagesCount
getMessagesCount($iRecipient, $iSender)
Definition: ChSimpleMessengerDb.php:314
ChSimpleMessengerDb\shieldData
shieldData($sData)
Definition: ChSimpleMessengerDb.php:530
php
ChWsbModuleDb
Definition: ChWsbModuleDb.php:12
ChWsbDb\getAll
getAll($sQuery, $aBindings=[], $iFetchType=PDO::FETCH_ASSOC)
Definition: ChWsbDb.php:206
ChSimpleMessengerDb\getLastMessagesId
getLastMessagesId($iRecipient, $iSender)
Definition: ChSimpleMessengerDb.php:213
ChSimpleMessengerDb\$_oConfig
$_oConfig
Definition: ChSimpleMessengerDb.php:12
ChSimpleMessengerDb\deleteAllMessagesHistory
deleteAllMessagesHistory($iProfileId)
Definition: ChSimpleMessengerDb.php:126
ChSimpleMessengerDb\getChatBoxesCount
getChatBoxesCount($iSender)
Definition: ChSimpleMessengerDb.php:249
ChSimpleMessengerDb\closeChatWindow
closeChatWindow($iRecipientId, $iLoggedMember)
Definition: ChSimpleMessengerDb.php:62
ChWsbDb\query
query($sQuery, $aBindings=[])
Definition: ChWsbDb.php:386
CH_TAGS_NO_ACTION
const CH_TAGS_NO_ACTION
Definition: utils.inc.php:21
ChWsbDb\getOne
getOne($sQuery, $aBindings=[], $iIndex=0)
Definition: ChWsbDb.php:263
ChSimpleMessengerDb\deleteMessagesHistory
deleteMessagesHistory($iSender, $iRecipient, $iAllowCountMessages)
Definition: ChSimpleMessengerDb.php:151
ChSimpleMessengerDb\createMessage
createMessage($iSenderId, $iRecipientId, $sMessage)
Definition: ChSimpleMessengerDb.php:35
ChWsbDb\lastId
lastId()
Definition: ChWsbDb.php:449
as
as
Definition: Filter.ExtractStyleBlocks.Escaping.txt:10
ChSimpleMessengerDb\getNewChatBoxes
getNewChatBoxes($iRecipientId, $aRegBoxes=array())
Definition: ChSimpleMessengerDb.php:416
$iProfileId
if( $sMembersList) $iProfileId
Definition: communicator.php:29
ChSimpleMessengerDb\getHistoryList
getHistoryList(&$aCoreSettings, $iRecipient, $iSender, $iLastMessageId=0, $iMessageLimit=0)
Definition: ChSimpleMessengerDb.php:357
ChSimpleMessengerDb\createPrivacyGroup
createPrivacyGroup($iMemberId, $iGroupValue=0)
Definition: ChSimpleMessengerDb.php:492