BxDolBadgesQuery.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  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 UnaCore UNA Core
  7. * @{
  8. */
  9. /**
  10. * @see BxDolCategories
  11. */
  12. class BxDolBadgesQuery extends BxDolDb
  13. {
  14. protected $_sTableCategories;
  15. public function __construct()
  16. {
  17. parent::__construct();
  18. $this->_sTableBadges = 'sys_badges';
  19. }
  20. public function getData($aParams = array(), &$aItems = false)
  21. {
  22. $CNF = &$this->_oConfig->CNF;
  23. $aMethod = array('name' => 'getAll', 'params' => array(0 => 'query'));
  24. $sSelectClause = "`sc`.*";
  25. $sJoinClause = $sWhereClause = $sGroupClause = $sLimitClause = "";
  26. $sOrderClause = "`sc`.`added` ASC";
  27. if(isset($aParams['count_only']) && $aParams['count_only'] === true) {
  28. $aMethod['name'] = 'getOne';
  29. $sSelectClause = "COUNT(`sc`.`id`)";
  30. }
  31. switch($aParams['type']) {
  32. case 'counter_by_modules':
  33. $aMethod['name'] = 'getPairs';
  34. $aMethod['params'][1] = 'module';
  35. $aMethod['params'][2] = 'counter';
  36. $sSelectClause = "`sc`.`module` AS `module`, COUNT(`sc`.`id`) AS `counter`";
  37. $sJoinClause = "LEFT JOIN `sys_badges2objects` `soc` ON `sc`.`id` = `soc`.`badge_id`";
  38. $sGroupClause = "`sc`.`module`";
  39. break;
  40. case 'by_module&object':
  41. $aMethod['name'] = 'getAll';
  42. $sSelectClause = "`sc`.`id`, `sc`.`id`, `sc`.`text`, `sc`.`color`, `sc`.`is_icon_only`, `sc`.`icon`, `soc`.`id` AS `badge_id`";
  43. $sJoinClause = "LEFT JOIN `sys_badges2objects` `soc` ON `sc`.`id` = `soc`.`badge_id` AND `soc`.`object_id` = :object_id";
  44. $sWhereClause = " AND `sc`.`module` = :module";
  45. $aMethod['params'][1] = array(
  46. 'object_id' => $aParams['object_id'],
  47. 'module' => $aParams['module']
  48. );
  49. break;
  50. case 'by_module&object2':
  51. $aMethod['name'] = 'getAll';
  52. $sSelectClause = "`sc`.`id`, `sc`.`id`, `sc`.`text`, `sc`.`color`, `sc`.`is_icon_only`, `sc`.`icon`, `soc`.`id` AS `badge_id`";
  53. $sJoinClause = "INNER JOIN `sys_badges2objects` `soc` ON `sc`.`id` = `soc`.`badge_id` AND `soc`.`object_id` = :object_id";
  54. $sWhereClause = " AND `sc`.`module` = :module";
  55. $aMethod['params'][1] = array(
  56. 'object_id' => $aParams['object_id'],
  57. 'module' => $aParams['module']
  58. );
  59. break;
  60. case 'by_module&object2_single':
  61. $aMethod['name'] = 'getAll';
  62. $sSelectClause = "`sc`.`id`, `sc`.`id`, `sc`.`text`, `sc`.`color`, `sc`.`is_icon_only`, `sc`.`icon`, `soc`.`id` AS `badge_id`";
  63. $sJoinClause = "INNER JOIN `sys_badges2objects` `soc` ON `sc`.`id` = `soc`.`badge_id` AND `soc`.`object_id` = :object_id";
  64. $sWhereClause = " AND `sc`.`module` = :module";
  65. $sLimitClause = "LIMIT 0, 1";
  66. $aMethod['params'][1] = array(
  67. 'object_id' => $aParams['object_id'],
  68. 'module' => $aParams['module']
  69. );
  70. break;
  71. case 'by_module&object&badge':
  72. $aMethod['name'] = 'getAll';
  73. $sSelectClause = "`sc`.`id`, `sc`.`id`, `sc`.`text`, `sc`.`icon`, `soc`.`id` AS `badge_id`";
  74. $sJoinClause = "INNER JOIN `sys_badges2objects` `soc` ON `sc`.`id` = `soc`.`badge_id` AND `soc`.`object_id` = :object_id";
  75. $sWhereClause = " AND `sc`.`module` = :module AND `sc`.`id` = :badge_id";
  76. $aMethod['params'][1] = array(
  77. 'object_id' => $aParams['object_id'],
  78. 'badge_id' => $aParams['badge_id'],
  79. 'module' => $aParams['module']
  80. );
  81. break;
  82. case 'id':
  83. $aMethod['name'] = 'getRow';
  84. $aMethod['params'][1] = array(
  85. 'id' => $aParams['id']
  86. );
  87. $sWhereClause = " AND `sc`.`id` = :id";
  88. break;
  89. }
  90. if(!empty($sGroupClause))
  91. $sGroupClause = "GROUP BY " . $sGroupClause;
  92. if(!empty($sOrderClause))
  93. $sOrderClause = "ORDER BY " . $sOrderClause;
  94. $aMethod['params'][0] = "SELECT " . $sSelectClause . "
  95. FROM `" . $this->_sTableBadges . "` AS `sc`" . $sJoinClause . "
  96. WHERE 1" . $sWhereClause . " " . $sGroupClause . " " . $sOrderClause. " " . $sLimitClause;
  97. $oRv = call_user_func_array(array($this, $aMethod['name']), $aMethod['params']);
  98. if ($aItems === false)
  99. return $oRv;
  100. $aItems = $oRv;
  101. }
  102. function update($iId, $aFields)
  103. {
  104. $sSql = "UPDATE `sys_badges` SET `" . implode("`=?, `", array_keys($aFields)) . "`=? WHERE `id`=?";
  105. $sSql = call_user_func_array(array($this, 'prepare'), array_merge(array($sSql), array_values($aFields), array($iId)));
  106. return $this->query($sSql);
  107. }
  108. function add($iBadgeId, $iObjectId, $sModule)
  109. {
  110. $sSql = "INSERT `sys_badges2objects` (`badge_id`, `object_id`, `added`, `module`) VALUES (:badge_id, :object_id, :added, :module)";
  111. $aBindings = array(
  112. 'badge_id' => $iBadgeId,
  113. 'object_id' => $iObjectId,
  114. 'added' => time(),
  115. 'module' => $sModule,
  116. );
  117. return $this->query($sSql, $aBindings);
  118. }
  119. public function delete($aParams = array())
  120. {
  121. switch($aParams['type']) {
  122. case 'id':
  123. $sQuery = " WHERE `badge_id` = :badge_id";
  124. $aBindings = array(
  125. 'badge_id' => $aParams['id'],
  126. );
  127. break;
  128. case 'by_module&object':
  129. $sQuery = " WHERE `module` = :module AND object_id = :object_id";
  130. $aBindings = array(
  131. 'module' => $aParams['module'],
  132. 'object_id' => $aParams['object_id'],
  133. );
  134. break;
  135. case 'by_module&object&badge':
  136. $sQuery = " WHERE `module` = :module AND object_id = :object_id AND badge_id = :badge_id";
  137. $aBindings = array(
  138. 'module' => $aParams['module'],
  139. 'object_id' => $aParams['object_id'],
  140. 'badge_id' => $aParams['badge_id'],
  141. );
  142. break;
  143. }
  144. $sQuery = "DELETE FROM `sys_badges2objects`" . $sQuery;
  145. $this->query($sQuery, $aBindings);
  146. }
  147. }
  148. /** @} */