BxDolCategoriesQuery.php 8.4 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 BxDolCategoriesQuery extends BxDolDb
  13. {
  14. protected $_sTableCategories;
  15. public function __construct()
  16. {
  17. parent::__construct();
  18. $this->_sTableCategories = 'sys_categories';
  19. }
  20. public function getData($aParams = array())
  21. {
  22. $aMethod = array('name' => 'getAll', 'params' => array(0 => 'query'));
  23. $sSelectClause = "`sc`.*";
  24. $sJoinClause = $sWhereClause = $sGroupClause = "";
  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 'by_module':
  32. $aMethod['name'] = 'getAllWithKey';
  33. $aMethod['params'][1] = 'value';
  34. $aMethod['params'][2] = array(
  35. 'module' => $aParams['module']
  36. );
  37. $sSelectClause = "`sc`.*, `sc`.`value` as `key`, `sc`.`Value` as `value`";
  38. $sWhereClause = " AND `sc`.`module` = :module AND (`sc`.`status` = 'active')";
  39. $sOrderClause = "`sc`.`Value` ASC";
  40. break;
  41. case 'by_module_and_author':
  42. $aMethod['name'] = 'getAllWithKey';
  43. $aMethod['params'][1] = 'value';
  44. $aMethod['params'][2] = array(
  45. 'module' => $aParams['module'],
  46. 'author' => $aParams['author'],
  47. );
  48. $sSelectClause = "`sc`.*, `sc`.`value` as `key`, `sc`.`Value` as `value`";
  49. $sWhereClause = " AND `sc`.`module` = :module AND (`sc`.`author` = 0 OR `sc`.`author` = :author) AND (`sc`.`status` = 'active')";
  50. $sOrderClause = "`sc`.`Value` ASC";
  51. break;
  52. case 'by_module_with_num':
  53. $aMethod['name'] = 'getAll';
  54. $aMethod['params'][1] = array(
  55. 'module' => $aParams['module']
  56. );
  57. $oModule = BxDolModule::getInstance($aParams['module']);
  58. $CNF = $oModule->_oConfig->CNF;
  59. $sSelectClause = "`sc`.`value`, `sc`.`icon_type`, `sc`.`icon`, COUNT(`sc`.`id`) as `num`";
  60. $sJoinClause = "INNER JOIN `sys_categories2objects` `soc` ON `sc`.`id` = `soc`.`category_id`";
  61. if (isset($CNF['FIELD_STATUS']))
  62. $sJoinClause .= "INNER JOIN `" . $CNF['TABLE_ENTRIES'] . "` `data` ON `soc`.`object_id` = `data`.`id` AND `data`.`" . $CNF['FIELD_STATUS'] . "` = 'active'";
  63. $sWhereClause = " AND `sc`.`status` = 'active' AND `soc`.`module` = :module";
  64. $sGroupClause = "`sc`.`id`";
  65. $sOrderClause = "`sc`.`added` ASC";
  66. if(isset($aParams['order_by']))
  67. switch($aParams['order_by']) {
  68. case 'num_asc':
  69. $sOrderClause = "`num` ASC";
  70. break;
  71. case 'num_desc':
  72. $sOrderClause = "`num` DESC";
  73. break;
  74. }
  75. break;
  76. case 'by_module&context_with_num':
  77. $aMethod['name'] = 'getAll';
  78. $aMethod['params'][1] = array(
  79. 'module' => $aParams['module'],
  80. 'context_id' => -$aParams['context_id'],
  81. );
  82. $oModule = BxDolModule::getInstance($aParams['module']);
  83. $CNF = $oModule->_oConfig->CNF;
  84. $sSelectClause = "`sc`.`value`, `sc`.`icon_type`, `sc`.`icon`, COUNT(`sc`.`id`) as `num`";
  85. $sJoinClause = " INNER JOIN `sys_categories2objects` `soc` ON `sc`.`id` = `soc`.`category_id`";
  86. $sJoinClause .= " INNER JOIN `" . $CNF['TABLE_ENTRIES'] . "` `data` ON `soc`.`object_id` = `data`.`id` AND `data`.`" . $CNF['FIELD_ALLOW_VIEW_TO'] . "` = :context_id";
  87. if (isset($CNF['FIELD_STATUS']))
  88. $sJoinClause .= " AND `data`.`" . $CNF['FIELD_STATUS'] . "` = 'active' ";
  89. $sWhereClause = " AND `sc`.`status` = 'active' AND `soc`.`module` = :module";
  90. $sGroupClause = "`sc`.`id`";
  91. $sOrderClause = "`sc`.`added` ASC";
  92. if(isset($aParams['order_by']))
  93. switch($aParams['order_by']) {
  94. case 'num_asc':
  95. $sOrderClause = "`num` ASC";
  96. break;
  97. case 'num_desc':
  98. $sOrderClause = "`num` DESC";
  99. break;
  100. }
  101. break;
  102. case 'by_module_and_object':
  103. $aMethod['name'] = 'getColumn';
  104. $aMethod['params'][1] = array(
  105. 'module' => $aParams['module'],
  106. 'object_id' => $aParams['object_id']
  107. );
  108. $sSelectClause = "`sc`.`value`";
  109. $sJoinClause = "INNER JOIN `sys_categories2objects` `soc` ON `sc`.`id` = `soc`.`category_id`";
  110. $sWhereClause = " AND `sc`.`status` = 'active' AND `soc`.`module` = :module AND `soc`.`object_id` = :object_id";
  111. $sOrderClause = "`added` DESC";
  112. break;
  113. case 'value_and_module':
  114. $aMethod['name'] = 'getRow';
  115. $aMethod['params'][1] = array(
  116. 'value' => $aParams['value'],
  117. 'module' => $aParams['module'],
  118. );
  119. $sWhereClause = " AND `sc`.`value` = :value AND `sc`.`module` = :module";
  120. break;
  121. case 'id':
  122. $aMethod['name'] = 'getRow';
  123. $aMethod['params'][1] = array(
  124. 'id' => $aParams['id']
  125. );
  126. $sWhereClause = " AND `sc`.`id` = :id";
  127. break;
  128. }
  129. if(!empty($sGroupClause))
  130. $sGroupClause = "GROUP BY " . $sGroupClause;
  131. if(!empty($sOrderClause))
  132. $sOrderClause = "ORDER BY " . $sOrderClause;
  133. $aMethod['params'][0] = "SELECT " . $sSelectClause . "
  134. FROM `" . $this->_sTableCategories . "` AS `sc`" . $sJoinClause . "
  135. WHERE 1" . $sWhereClause . " " . $sGroupClause . " " . $sOrderClause;
  136. return call_user_func_array(array($this, $aMethod['name']), $aMethod['params']);
  137. }
  138. public function delete($sModule, $iObject)
  139. {
  140. $sQuery = "DELETE FROM `sys_categories2objects` WHERE `module` = :module AND `object_id` = :object_id";
  141. $aBindings = array(
  142. 'module' => $sModule,
  143. 'object_id' => $iObject,
  144. );
  145. $this->query($sQuery, $aBindings);
  146. }
  147. public function add($sModule, $iProfileId, $sValue, $iObject, $bAutoActivation)
  148. {
  149. $aBindings = [
  150. 'value' => $sValue,
  151. 'module' => $sModule,
  152. 'author' => $iProfileId
  153. ];
  154. $iCategoryId = (int)$this->getOne("SELECT `tc`.`id` FROM `sys_categories` AS `tc` LEFT JOIN `sys_localization_keys` AS `tlk` ON `tc`.`value`=`tlk`.`Key` LEFT JOIN `sys_localization_strings` AS `tls` ON `tlk`.`ID`=`tls`.`IDKey` WHERE (`tc`.`value` = :value OR `tls`.`String`=:value) AND `tc`.`module` = :module AND (`tc`.`author` = 0 OR `tc`.`author` = :author)", $aBindings);
  155. if($iCategoryId == 0) {
  156. $this->query("INSERT INTO `sys_categories` (`value`, `module`, `status`, `added`, `author`) VALUES(:value, :module, :status, :added, :author)", array_merge($aBindings, [
  157. 'status' => $bAutoActivation ? 'active' : 'hidden',
  158. 'added' => time()
  159. ]));
  160. $iCategoryId = $this->lastId();
  161. }
  162. $this->query("INSERT INTO `sys_categories2objects` (`module`, `object_id`, `category_id`) VALUES(:module, :object_id, :category_id)", [
  163. 'module' => $sModule,
  164. 'object_id' => $iObject,
  165. 'category_id' => $iCategoryId,
  166. ]);
  167. return $iCategoryId;
  168. }
  169. }
  170. /** @} */