BxDolBadgesQuery.php 7.1 KB

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