BxAlbumsDb.php 6.4 KB

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