BxDolBadgesQuery.php 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  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 $_sTableBadges;
  15. protected $_sTableCategories;
  16. public function __construct()
  17. {
  18. parent::__construct();
  19. $this->_sTableBadges = 'sys_badges';
  20. }
  21. public function getData($aParams = array(), &$aItems = false)
  22. {
  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`.`fontcolor`, `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`.`fontcolor`, `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`.`fontcolor`, `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 'by_module&badge':
  83. $aMethod['name'] = 'getColumn';
  84. $sSelectClause = "`soc`.`object_id`";
  85. $sJoinClause = "INNER JOIN `sys_badges2objects` `soc` ON `sc`.`id` = `soc`.`badge_id` ";
  86. $sWhereClause = " AND `sc`.`module` = :module AND `sc`.`id` = :badge_id";
  87. $aMethod['params'][1] = array(
  88. 'badge_id' => $aParams['badge_id'],
  89. 'module' => $aParams['module']
  90. );
  91. break;
  92. case 'id':
  93. $aMethod['name'] = 'getRow';
  94. $aMethod['params'][1] = array(
  95. 'id' => $aParams['id']
  96. );
  97. $sWhereClause = " AND `sc`.`id` = :id";
  98. break;
  99. case 'by_module':
  100. $aMethod['name'] = 'getAll';
  101. $sWhereClause = " AND `sc`.`module` = :module";
  102. $aMethod['params'][1] = array(
  103. 'module' => $aParams['module']
  104. );
  105. break;
  106. }
  107. if(!empty($sGroupClause))
  108. $sGroupClause = "GROUP BY " . $sGroupClause;
  109. if(!empty($sOrderClause))
  110. $sOrderClause = "ORDER BY " . $sOrderClause;
  111. $aMethod['params'][0] = "SELECT " . $sSelectClause . "
  112. FROM `" . $this->_sTableBadges . "` AS `sc`" . $sJoinClause . "
  113. WHERE 1" . $sWhereClause . " " . $sGroupClause . " " . $sOrderClause. " " . $sLimitClause;
  114. $oRv = call_user_func_array(array($this, $aMethod['name']), $aMethod['params']);
  115. if ($aItems === false)
  116. return $oRv;
  117. $aItems = $oRv;
  118. }
  119. function update($iId, $aFields)
  120. {
  121. $sSql = "UPDATE `sys_badges` SET `" . implode("`=?, `", array_keys($aFields)) . "`=? WHERE `id`=?";
  122. $sSql = call_user_func_array(array($this, 'prepare'), array_merge(array($sSql), array_values($aFields), array($iId)));
  123. return $this->query($sSql);
  124. }
  125. function add($iBadgeId, $iObjectId, $sModule)
  126. {
  127. $sSql = "INSERT `sys_badges2objects` (`badge_id`, `object_id`, `added`, `module`) VALUES (:badge_id, :object_id, :added, :module)";
  128. $aBindings = array(
  129. 'badge_id' => $iBadgeId,
  130. 'object_id' => $iObjectId,
  131. 'added' => time(),
  132. 'module' => $sModule,
  133. );
  134. return $this->query($sSql, $aBindings);
  135. }
  136. public function delete($aParams = array())
  137. {
  138. switch($aParams['type']) {
  139. case 'id':
  140. $sQuery = " WHERE `badge_id` = :badge_id";
  141. $aBindings = array(
  142. 'badge_id' => $aParams['id'],
  143. );
  144. break;
  145. case 'by_module&object':
  146. $sQuery = " WHERE `module` = :module AND object_id = :object_id";
  147. $aBindings = array(
  148. 'module' => $aParams['module'],
  149. 'object_id' => $aParams['object_id'],
  150. );
  151. break;
  152. case 'by_module':
  153. $sQuery = " WHERE `module` = :module";
  154. $aBindings = array(
  155. 'module' => $aParams['module'],
  156. );
  157. break;
  158. case 'by_module&object&badge':
  159. $sQuery = " WHERE `module` = :module AND object_id = :object_id AND badge_id = :badge_id";
  160. $aBindings = array(
  161. 'module' => $aParams['module'],
  162. 'object_id' => $aParams['object_id'],
  163. 'badge_id' => $aParams['badge_id'],
  164. );
  165. break;
  166. }
  167. if(!$sQuery)
  168. return;
  169. $this->query("DELETE FROM `sys_badges2objects`" . $sQuery, $aBindings);
  170. if($aParams['type'] == 'by_module')
  171. $this->query("DELETE FROM `sys_badges`" . $sQuery, $aBindings);
  172. }
  173. }
  174. /** @} */