BxNtfsDb.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <?php defined('BX_DOL') or die('hack attempt');
  2. /**
  3. * Copyright (c) UNA, Inc - https://una.io
  4. * MIT License - https://opensource.org/licenses/MIT
  5. *
  6. * @defgroup Notifications Notifications
  7. * @ingroup UnaModules
  8. *
  9. * @{
  10. */
  11. class BxNtfsDb extends BxBaseModNotificationsDb
  12. {
  13. protected $_sTableEvt2Usr;
  14. /*
  15. * Constructor.
  16. */
  17. function __construct(&$oConfig)
  18. {
  19. parent::__construct($oConfig);
  20. $this->_sTableEvt2Usr = $this->_sPrefix . 'events2users';
  21. }
  22. public function markAsRead($iUserId, $iEventId)
  23. {
  24. $sSql = $this->prepare("REPLACE `" . $this->_sTableEvt2Usr . "` SET `user_id`=?, `event_id`=?", $iUserId, $iEventId);
  25. return (int)$this->query($sSql) > 0;
  26. }
  27. protected function _getSqlPartsEventsList($aParams)
  28. {
  29. $sJoinClause = $sWhereClause = "";
  30. if(isset($aParams['active']))
  31. $sWhereClause .= $this->prepareAsString("AND `{$this->_sTable}`.`active`=? ", (int)$aParams['active']);
  32. //--- Apply modules or handlers filter
  33. $sWhereModuleFilter = '';
  34. if(!empty($aParams['modules']) && is_array($aParams['modules']))
  35. $sWhereModuleFilter = "AND `" . $this->_sTable . "`.`type` IN (" . $this->implode_escape($aParams['modules']) . ") ";
  36. if($sWhereModuleFilter == '') {
  37. $aHidden = $this->_oConfig->getHandlersHidden();
  38. $sWhereModuleFilter = !empty($aHidden) && is_array($aHidden) ? "AND `" . $this->_sTableHandlers . "`.`id` NOT IN (" . $this->implode_escape($aHidden) . ") " : "";
  39. }
  40. if($sWhereModuleFilter != '')
  41. $sWhereClause .= $sWhereModuleFilter;
  42. //--- Check flag 'New'
  43. if(!empty($aParams['new']) && !empty($aParams['owner_id'])) {
  44. $sSql = $this->prepare("SELECT `event_id` FROM `" . $this->_sTableEvt2Usr . "` WHERE `user_id`=? LIMIT 1", (int)$aParams['owner_id']);
  45. $iId = (int)$this->getOne($sSql);
  46. $sWhereClause .= $this->prepareAsString("AND `{$this->_sTable}`.`id`>? ", $iId);
  47. }
  48. //--- Apply privacy filter
  49. $aPrivacy = array(BX_DOL_PG_ALL);
  50. if(isLogged())
  51. $aPrivacy[] = BX_DOL_PG_MEMBERS;
  52. $oPrivacy = BxDolPrivacy::getObjectInstance($this->_oConfig->getObject('privacy_view'));
  53. $aQueryParts = $oPrivacy->getContentByGroupAsSQLPart($aPrivacy);
  54. $sWhereClause .= $aQueryParts['where'] . " ";
  55. //--- Check type
  56. if(!empty($aParams['owner_id']))
  57. switch($aParams['type']) {
  58. case BX_BASE_MOD_NTFS_TYPE_OWNER:
  59. $sWhereClause .= $this->prepareAsString("AND `{$this->_sTable}`.`owner_id`=? ", $aParams['owner_id']);
  60. break;
  61. case BX_BASE_MOD_NTFS_TYPE_OBJECT_OWNER:
  62. $sWhereClause .= $this->prepareAsString("AND `{$this->_sTable}`.`owner_id`<>`{$this->_sTable}`.`object_owner_id` AND `{$this->_sTable}`.`object_owner_id`=? ", $aParams['owner_id']);
  63. break;
  64. case BX_BASE_MOD_NTFS_TYPE_CONNECTIONS:
  65. $oConnection = BxDolConnection::getObjectInstance($this->_oConfig->getObject('conn_subscriptions'));
  66. $aQueryParts = $oConnection->getConnectedContentAsSQLParts($this->_sPrefix . "events", 'owner_id', $aParams['owner_id']);
  67. if(!empty($aQueryParts['join']))
  68. $sJoinClause .= ' ' . $aQueryParts['join'];
  69. if(!empty($aQueryParts['fields']['added']))
  70. $sWhereClause .= "AND `{$this->_sTable}`.`date` > " . $aQueryParts['fields']['added'];
  71. $sWhereClause .= "AND `{$this->_sTable}`.`action` <> 'replyPost' ";
  72. break;
  73. case BX_NTFS_TYPE_OBJECT_OWNER_AND_CONNECTIONS:
  74. $oConnection = BxDolConnection::getObjectInstance($this->_oConfig->getObject('conn_subscriptions'));
  75. $aQueryParts = $oConnection->getConnectedContentAsSQLParts($this->_sPrefix . "events", 'owner_id', $aParams['owner_id']);
  76. if(!empty($aQueryParts['join']))
  77. $sJoinClause .= ' ' . str_replace('INNER', 'LEFT', $aQueryParts['join']);
  78. $sWhereClause .= $this->prepareAsString("AND ((NOT ISNULL(`c`.`content`)" . (!empty($aQueryParts['fields']['added']) ? " AND `{$this->_sTable}`.`date` > " . $aQueryParts['fields']['added'] : "") . " AND `{$this->_sTable}`.`action` <> 'replyPost') || (`{$this->_sTable}`.`owner_id` <> `{$this->_sTable}`.`object_owner_id` AND `{$this->_sTable}`.`object_owner_id`=?)) ", $aParams['owner_id']);
  79. break;
  80. }
  81. return array($sJoinClause, $sWhereClause);
  82. }
  83. }
  84. /** @} */