BxDolCategoriesQuery.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  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. $CNF = &$this->_oConfig->CNF;
  23. $aMethod = array('name' => 'getAll', 'params' => array(0 => 'query'));
  24. $sSelectClause = "`sc`.*";
  25. $sJoinClause = $sWhereClause = $sGroupClause = "";
  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 'by_module':
  33. $aMethod['name'] = 'getAllWithKey';
  34. $aMethod['params'][1] = 'value';
  35. $aMethod['params'][2] = array(
  36. 'module' => $aParams['module']
  37. );
  38. $sSelectClause = "`sc`.*, `sc`.`value` as `key`, `sc`.`Value` as `value`";
  39. $sWhereClause = " AND `sc`.`module` = :module AND (`sc`.`status` = 'active')";
  40. $sOrderClause = "`sc`.`Value` ASC";
  41. break;
  42. case 'by_module_and_author':
  43. $aMethod['name'] = 'getAllWithKey';
  44. $aMethod['params'][1] = 'value';
  45. $aMethod['params'][2] = array(
  46. 'module' => $aParams['module'],
  47. 'author' => $aParams['author'],
  48. );
  49. $sSelectClause = "`sc`.*, `sc`.`value` as `key`, `sc`.`Value` as `value`";
  50. $sWhereClause = " AND `sc`.`module` = :module AND (`sc`.`author` = 0 OR `sc`.`author` = :author) AND (`sc`.`status` = 'active')";
  51. $sOrderClause = "`sc`.`Value` ASC";
  52. break;
  53. case 'by_module_with_num':
  54. $aMethod['name'] = 'getAll';
  55. $aMethod['params'][1] = array(
  56. 'module' => $aParams['module'],
  57. );
  58. $sSelectClause = "`sc`.`value`, COUNT(`sc`.`id`) as `num`";
  59. $sJoinClause = "INNER JOIN `sys_categories2objects` `soc` ON `sc`.`id` = `soc`.`category_id`";
  60. $sWhereClause = " AND `sc`.`status` = 'active' AND `soc`.`module` = :module";
  61. $sGroupClause = "`sc`.`id`";
  62. $sOrderClause = "`num` DESC";
  63. break;
  64. case 'by_module_and_object':
  65. $aMethod['name'] = 'getColumn';
  66. $aMethod['params'][1] = array(
  67. 'module' => $aParams['module'],
  68. 'object_id' => $aParams['object_id']
  69. );
  70. $sSelectClause = "`sc`.`value`";
  71. $sJoinClause = "INNER JOIN `sys_categories2objects` `soc` ON `sc`.`id` = `soc`.`category_id`";
  72. $sWhereClause = " AND `sc`.`status` = 'active' AND `soc`.`module` = :module AND `soc`.`object_id` = :object_id";
  73. $sOrderClause = "`added` DESC";
  74. break;
  75. case 'value_and_module':
  76. $aMethod['name'] = 'getRow';
  77. $aMethod['params'][1] = array(
  78. 'value' => $aParams['value'],
  79. 'module' => $aParams['module'],
  80. );
  81. $sWhereClause = " AND `sc`.`value` = :value AND `sc`.`module` = :module";
  82. break;
  83. case 'id':
  84. $aMethod['name'] = 'getRow';
  85. $aMethod['params'][1] = array(
  86. 'id' => $aParams['id']
  87. );
  88. $sWhereClause = " AND `sc`.`id` = :id";
  89. break;
  90. }
  91. if(!empty($sGroupClause))
  92. $sGroupClause = "GROUP BY " . $sGroupClause;
  93. if(!empty($sOrderClause))
  94. $sOrderClause = "ORDER BY " . $sOrderClause;
  95. $aMethod['params'][0] = "SELECT " . $sSelectClause . "
  96. FROM `" . $this->_sTableCategories . "` AS `sc`" . $sJoinClause . "
  97. WHERE 1" . $sWhereClause . " " . $sGroupClause . " " . $sOrderClause;
  98. return call_user_func_array(array($this, $aMethod['name']), $aMethod['params']);
  99. }
  100. public function delete($sModule, $iObject)
  101. {
  102. $sQuery = "DELETE FROM `sys_categories2objects` WHERE `module` = :module AND `object_id` = :object_id";
  103. $aBindings = array(
  104. 'module' => $sModule,
  105. 'object_id' => $iObject,
  106. );
  107. $this->query($sQuery, $aBindings);
  108. }
  109. public function add($sModule, $iProfileId, $sValue, $iObject, $bAutoActivation)
  110. {
  111. $sStatus = $bAutoActivation ? 'active' : 'hidden';
  112. $aBindings = array(
  113. 'value' => $sValue,
  114. 'module' => $sModule,
  115. 'author' => $iProfileId
  116. );
  117. $sQuery = "SELECT id FROM `sys_categories` WHERE `value` = :value AND `module` = :module AND (`author` = 0 OR `author` = :author)";
  118. $iCategoryId = (int)$this->getOne($sQuery, $aBindings);
  119. if($iCategoryId == 0){
  120. $aBindings['status'] = $sStatus;
  121. $aBindings['added'] = time();
  122. $sQuery = "INSERT INTO `sys_categories` (`value`, `module`, `status`, `added`, `author`) VALUES(:value, :module, :status, :added, :author)";
  123. $this->query($sQuery, $aBindings);
  124. $iCategoryId = $this->lastId();
  125. }
  126. $sQuery = "INSERT INTO `sys_categories2objects` (`module`, `object_id`, `category_id`) VALUES(:module, :object_id, :category_id)";
  127. $aBindings = array(
  128. 'module' => $sModule,
  129. 'object_id' => $iObject,
  130. 'category_id' => $iCategoryId,
  131. );
  132. $this->query($sQuery, $aBindings);
  133. return $iCategoryId;
  134. }
  135. }
  136. /** @} */