BxDolBadgesQuery.php 8.0 KB

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