BxStoriesDb.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  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 Stories Stories
  7. * @ingroup UnaModules
  8. *
  9. * @{
  10. */
  11. /*
  12. * Module database queries
  13. */
  14. class BxStoriesDb extends BxBaseModTextDb
  15. {
  16. function __construct(&$oConfig)
  17. {
  18. parent::__construct($oConfig);
  19. }
  20. public function associateFileWithContent($iContentId, $iFileId, $iProfileId, $sTitle, $sData = '')
  21. {
  22. $CNF = &$this->_oConfig->CNF;
  23. $iOrder = 1 + (int)$this->getOne("SELECT MAX(`order`) FROM `" . $CNF['TABLE_ENTRIES_MEDIA'] . "` WHERE `content_id` = :content_id", [
  24. 'content_id' => $iContentId
  25. ]);
  26. return $this->query("INSERT INTO `" . $CNF['TABLE_ENTRIES_MEDIA'] . "` SET `content_id` = :content_id, `file_id` = :file_id, `author` = :author, `title` = :title, `data` = :data, `order` = :order ON DUPLICATE KEY UPDATE `title` = :title, `data` = :data", [
  27. 'content_id' => $iContentId,
  28. 'file_id' => $iFileId,
  29. 'author' => $iProfileId,
  30. 'title' => $sTitle,
  31. 'data' => $sData,
  32. 'order' => $iOrder
  33. ]);
  34. }
  35. public function deassociateFileWithContent($iContentId, $iFileId)
  36. {
  37. $aBindings = array();
  38. $sWhere = '';
  39. if ($iContentId) {
  40. $aBindings['content_id'] = $iContentId;
  41. $sWhere .= " AND `content_id` = :content_id";
  42. }
  43. if ($iFileId) {
  44. $aBindings['file_id'] = $iFileId;
  45. $sWhere .= " AND `file_id` = :file_id";
  46. }
  47. $sQuery = "DELETE FROM `" . $this->_oConfig->CNF['TABLE_ENTRIES_MEDIA'] . "` WHERE 1 " . $sWhere;
  48. return $this->query($sQuery, $aBindings);
  49. }
  50. public function getFileTitle($iFileId)
  51. {
  52. $sQuery = $this->prepare ("SELECT `title` FROM `" . $this->_oConfig->CNF['TABLE_ENTRIES_MEDIA'] . "` WHERE `file_id` = ?", $iFileId);
  53. return $this->getOne($sQuery);
  54. }
  55. public function getMediaInfoById($iMediaId)
  56. {
  57. $CNF = &$this->_oConfig->CNF;
  58. $sSelectClause = "`f2e`.*, `f`.`added`";
  59. $sJoinClause = "INNER JOIN `" . $CNF['TABLE_FILES'] . "` AS `f` ON (`f`.`id` = `f2e`.`file_id`) INNER JOIN `" . $CNF['TABLE_ENTRIES'] . "` AS `e` ON (`e`.`id` = `f2e`.`content_id`)";
  60. if($CNF['PARAM_ORDER_BY_GHOSTS']) {
  61. $sSelectClause .= ", `g`.`order` as `gorder`";
  62. $sJoinClause .= $this->prepareAsString("INNER JOIN `sys_storage_ghosts` AS `g` ON `g`.`id`=`f2e`.`file_id` AND `g`.`content_id`=`f2e`.`content_id` AND `g`.`object`=?", $CNF['OBJECT_STORAGE']);
  63. }
  64. $sQuery = $this->prepare("SELECT " . $sSelectClause . " FROM `" . $CNF['TABLE_ENTRIES_MEDIA'] . "` AS `f2e` " . $sJoinClause . " WHERE `f2e`.`id` = ?", $iMediaId);
  65. return $this->getRow($sQuery);
  66. }
  67. public function getMediaInfoSimpleByFileId($iFileId)
  68. {
  69. $sQuery = $this->prepare ("SELECT * FROM `" . $this->_oConfig->CNF['TABLE_ENTRIES_MEDIA'] . "` WHERE `file_id` = ?", $iFileId);
  70. return $this->getRow($sQuery);
  71. }
  72. public function getMediaCountByContentId($iContentId)
  73. {
  74. $sQuery = $this->prepare ("SELECT COUNT(*) FROM `" . $this->_oConfig->CNF['TABLE_ENTRIES_MEDIA'] . "` WHERE `content_id` = ? LIMIT 1", $iContentId);
  75. return $this->getOne($sQuery);
  76. }
  77. public function getMediaListByContentId($iContentId, $iLimit = false)
  78. {
  79. $CNF = &$this->_oConfig->CNF;
  80. $aBindings = ['id' => $iContentId];
  81. $sSelectClause = "`f2e`.*";
  82. $sJoinClause = "";
  83. $sOrderClause = "`f2e`.`order`";
  84. if($CNF['PARAM_ORDER_BY_GHOSTS']) {
  85. $sSelectClause .= ", `g`.`order` as `gorder`";
  86. $sJoinClause .= $this->prepareAsString("INNER JOIN `sys_storage_ghosts` AS `g` ON `g`.`id`=`f2e`.`file_id` AND `g`.`content_id`=`f2e`.`content_id` AND `g`.`object`=?", $CNF['OBJECT_STORAGE']);
  87. $sOrderClause = "`gorder` ASC";
  88. }
  89. if($sOrderClause)
  90. $sOrderClause = "ORDER BY " . $sOrderClause;
  91. $sLimitQuery = '';
  92. if((int)$iLimit) {
  93. $aBindings['limit'] = (int)$iLimit;
  94. $sLimitQuery = ' LIMIT :limit';
  95. }
  96. return $this->getAll("SELECT " . $sSelectClause . " FROM `" . $CNF['TABLE_ENTRIES_MEDIA'] . "` AS `f2e` " . $sJoinClause . " WHERE `f2e`.`content_id` = :id " . $sOrderClause . " " . $sLimitQuery, $aBindings);
  97. }
  98. public function getMediaBy($aParams = [])
  99. {
  100. $CNF = &$this->_oConfig->CNF;
  101. $aMethod = ['name' => 'getAll', 'params' => [0 => 'query', 1 => []]];
  102. $sSelectClause = $sJoinClause = $sWhereClause = $sOrderClause = $sLimitClause = "";
  103. $sSelectClause = "`{$CNF['TABLE_ENTRIES_MEDIA']}`.*";
  104. switch($aParams['type']) {
  105. case 'id':
  106. $aMethod['name'] = 'getRow';
  107. $aMethod['params'][1]['id'] = (int)$aParams['id'];
  108. $sWhereClause .= " AND `{$CNF['TABLE_ENTRIES_MEDIA']}`.`id` = :id";
  109. break;
  110. case 'all':
  111. $sOrderClause .= "`{$CNF['TABLE_ENTRIES_MEDIA']}`.`id` ASC";
  112. break;
  113. }
  114. if(!empty($sOrderClause))
  115. $sOrderClause = 'ORDER BY ' . $sOrderClause;
  116. if(!empty($sLimitClause))
  117. $sLimitClause = 'LIMIT ' . $sLimitClause;
  118. $aMethod['params'][0] = "SELECT " . $sSelectClause . " FROM `{$CNF['TABLE_ENTRIES_MEDIA']}` " . $sJoinClause . " WHERE 1 " . $sWhereClause . " " . $sOrderClause . " " . $sLimitClause;
  119. return call_user_func_array([$this, $aMethod['name']], $aMethod['params']);
  120. }
  121. public function updateMedia($aParamsSet, $aParamsWhere)
  122. {
  123. $CNF = &$this->_oConfig->CNF;
  124. if(empty($aParamsSet) || empty($aParamsWhere))
  125. return false;
  126. $sSql = "UPDATE `" . $CNF['TABLE_FILES'] . "` SET " . $this->arrayToSQL($aParamsSet) . " WHERE " . $this->arrayToSQL($aParamsWhere, " AND ");
  127. return $this->query($sSql);
  128. }
  129. }
  130. /** @} */