1
0

BxDolStudioFormsQuery.php 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829
  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 UnaStudio UNA Studio
  7. * @{
  8. */
  9. class BxDolStudioFormsQuery extends BxDolDb
  10. {
  11. function __construct()
  12. {
  13. parent::__construct();
  14. }
  15. function getForms($aParams, &$aItems, $bReturnCount = true)
  16. {
  17. $aMethod = array('name' => 'getAll', 'params' => array(0 => 'query'));
  18. $sSelectClause = $sJoinClause = $sWhereClause = $sGroupClause = $sOrderClause = $sLimitClause = "";
  19. if(!isset($aParams['order']) || empty($aParams['order']))
  20. $sOrderClause = "ORDER BY `tf`.`title` ASC";
  21. switch($aParams['type']) {
  22. case 'by_id':
  23. $aMethod['name'] = 'getRow';
  24. $aMethod['params'][1] = array(
  25. 'id' => $aParams['value']
  26. );
  27. $sWhereClause = " AND `tf`.`id`=:id ";
  28. break;
  29. case 'by_object_display':
  30. $aMethod['name'] = 'getRow';
  31. $aMethod['params'][1] = array(
  32. 'object' => $aParams['object'],
  33. 'display_name' => $aParams['display']
  34. );
  35. $sJoinClause = "LEFT JOIN `sys_form_displays` AS `td` ON `tf`.`object`=`td`.`object` ";
  36. $sWhereClause = "AND `td`.`object`=:object AND `td`.`display_name`=:display_name ";
  37. break;
  38. case 'by_module':
  39. $aMethod['params'][1] = array(
  40. 'module' => $aParams['value']
  41. );
  42. $sWhereClause = "AND `tf`.`module`=:module";
  43. break;
  44. case 'counter_by_modules':
  45. $aMethod['name'] = 'getPairs';
  46. $aMethod['params'][1] = 'module';
  47. $aMethod['params'][2] = 'counter';
  48. $sSelectClause = ", COUNT(*) AS `counter`";
  49. $sGroupClause = "GROUP BY `tf`.`module`";
  50. break;
  51. case 'nested':
  52. $aMethod['name'] = 'getPairs';
  53. $aMethod['params'][1] = 'object';
  54. $aMethod['params'][2] = 'title';
  55. $aMethod['params'][3] = array(
  56. 'parent_form' => $aParams['parent_form']
  57. );
  58. $sSubQuery = "SELECT `value` FROM `sys_form_inputs` sfi WHERE `type`='nested_form' AND `object` = :parent_form ";
  59. if (!@empty($aParams['ids'])){
  60. $sSubQuery = "SELECT `value` FROM `sys_form_inputs` sfi WHERE `type`='nested_form' AND `object` = :parent_form AND `name` NOT IN (SELECT `input_name` FROM `sys_form_display_inputs` WHERE `id` IN(" . $aParams['ids'] . "))";
  61. }
  62. $sWhereClause = "AND `tf`.`parent_form`=:parent_form AND `object` NOT IN (" . $sSubQuery . ")";
  63. break;
  64. case 'all':
  65. break;
  66. }
  67. $aMethod['params'][0] = "SELECT " . ($bReturnCount ? "SQL_CALC_FOUND_ROWS" : "") . "
  68. `tf`.`id` AS `id`,
  69. `tf`.`object` AS `object`,
  70. `tf`.`module` AS `module`,
  71. `tf`.`title` AS `title`,
  72. `tf`.`action` AS `action`,
  73. `tf`.`form_attrs` AS `form_attrs`,
  74. `tf`.`table` AS `table`,
  75. `tf`.`key` AS `key`,
  76. `tf`.`uri` AS `uri`,
  77. `tf`.`uri_title` AS `uri_title`,
  78. `tf`.`submit_name` AS `submit_name`,
  79. `tf`.`params` AS `params`,
  80. `tf`.`deletable` AS `deletable`,
  81. `tf`.`active` AS `active`,
  82. `tf`.`override_class_name` AS `override_class_name`,
  83. `tf`.`override_class_file` AS `override_class_file`" . $sSelectClause . "
  84. FROM `sys_objects_form` AS `tf` " . $sJoinClause . "
  85. WHERE 1 " . $sWhereClause . " " . $sGroupClause . " " . $sOrderClause . " " . $sLimitClause;
  86. $aItems = call_user_func_array(array($this, $aMethod['name']), $aMethod['params']);
  87. if(!$bReturnCount)
  88. return !empty($aItems);
  89. return (int)$this->getOne("SELECT FOUND_ROWS()");
  90. }
  91. function getDisplays($aParams, &$aItems, $bReturnCount = true)
  92. {
  93. $aMethod = array('name' => 'getAll', 'params' => array(0 => 'query'));
  94. $sSelectClause = $sJoinClause = $sWhereClause = $sGroupClause = $sOrderClause = $sLimitClause = "";
  95. if(!isset($aParams['order']) || empty($aParams['order']))
  96. $sOrderClause = "ORDER BY `td`.`title` ASC";
  97. switch($aParams['type']) {
  98. case 'by_id':
  99. $aMethod['name'] = 'getRow';
  100. $aMethod['params'][1] = array(
  101. 'id' => $aParams['value']
  102. );
  103. $sWhereClause = " AND `td`.`id`=:id ";
  104. $sLimitClause = "LIMIT 1";
  105. break;
  106. case 'by_object_display':
  107. $aMethod['name'] = 'getRow';
  108. $aMethod['params'][1] = array(
  109. 'object' => $aParams['object'],
  110. 'display_name' => $aParams['display']
  111. );
  112. $sWhereClause = " AND `td`.`object`=:object AND `td`.`display_name`=:display_name ";
  113. $sLimitClause = "LIMIT 1";
  114. break;
  115. case 'by_name':
  116. $aMethod['params'][1] = array(
  117. 'display_name' => $aParams['value']
  118. );
  119. $sWhereClause = " AND `td`.`display_name`=:display_name ";
  120. $sLimitClause = "LIMIT 1";
  121. break;
  122. case 'by_module':
  123. $aMethod['params'][1] = array(
  124. 'module' => $aParams['value']
  125. );
  126. $sWhereClause = " AND `td`.`module`=:module ";
  127. break;
  128. case 'by_module_with_forms':
  129. $aMethod['params'][1] = array(
  130. 'module' => $aParams['value']
  131. );
  132. $sSelectClause = ", `tf`.`title` AS `form_title`";
  133. $sJoinClause = "LEFT JOIN `sys_objects_form` AS `tf` ON `td`.`object`=`tf`.`object` ";
  134. $sWhereClause = " AND `td`.`module`=:module ";
  135. $sOrderClause = "ORDER BY `td`.`object` ASC, `td`.`title` ASC";
  136. break;
  137. case 'by_object':
  138. $aMethod['params'][1] = array(
  139. 'object' => $aParams['value']
  140. );
  141. $sWhereClause = " AND `td`.`object`=:object ";
  142. break;
  143. case 'counter_by_forms':
  144. $aMethod['name'] = 'getPairs';
  145. $aMethod['params'][1] = 'object';
  146. $aMethod['params'][2] = 'counter';
  147. $sSelectClause = ", COUNT(*) AS `counter`";
  148. $sGroupClause = "GROUP BY `td`.`object`";
  149. break;
  150. case 'counter_by_modules':
  151. $aMethod['name'] = 'getPairs';
  152. $aMethod['params'][1] = 'module';
  153. $aMethod['params'][2] = 'counter';
  154. $sSelectClause = ", COUNT(*) AS `counter`";
  155. $sGroupClause = "GROUP BY `td`.`module`";
  156. break;
  157. case 'all':
  158. break;
  159. case 'all_with_forms':
  160. $sSelectClause = ", `tf`.`title` AS `form_title`";
  161. $sJoinClause = "LEFT JOIN `sys_objects_form` AS `tf` ON `td`.`object`=`tf`.`object` ";
  162. $sOrderClause = "ORDER BY `td`.`object` ASC, `td`.`title` ASC";
  163. break;
  164. }
  165. $aMethod['params'][0] = "SELECT " . ($bReturnCount ? "SQL_CALC_FOUND_ROWS" : "") . "
  166. `td`.`id` AS `id`,
  167. `td`.`object` AS `object`,
  168. `td`.`display_name` AS `name`,
  169. `td`.`display_name` AS `display_name`,
  170. `td`.`module` AS `module`,
  171. `td`.`view_mode` AS `view_mode`,
  172. `td`.`title` AS `title`" . $sSelectClause . "
  173. FROM `sys_form_displays` AS `td` " . $sJoinClause . "
  174. WHERE 1 " . $sWhereClause . " " . $sGroupClause . " " . $sOrderClause . " " . $sLimitClause;
  175. $aItems = call_user_func_array(array($this, $aMethod['name']), $aMethod['params']);
  176. if(!$bReturnCount)
  177. return !empty($aItems);
  178. return (int)$this->getOne("SELECT FOUND_ROWS()");
  179. }
  180. function isInput($sObject, $sName)
  181. {
  182. $sSql = $this->prepare("SELECT `id` FROM `sys_form_inputs` WHERE `object`=? AND `name`=? LIMIT 1", $sObject, $sName);
  183. return (int)$this->getOne($sSql) > 0;
  184. }
  185. function getInputs($aParams, &$aItems, $bReturnCount = true)
  186. {
  187. $aMethod = array('name' => 'getAll', 'params' => array(0 => 'query'));
  188. $sSelectClause = $sFromClause = $sJoinClause = $sWhereClause = $sGroupClause = $sOrderClause = $sLimitClause = "";
  189. $sSelectClause = "
  190. `tdi`.`id` AS `id`,
  191. `ti`.`name` AS `name`,
  192. `ti`.`type` AS `type`,
  193. `ti`.`caption_system` AS `caption_system`,
  194. `ti`.`caption` AS `caption`,
  195. `tdi`.`visible_for_levels` AS `visible_for_levels`,
  196. `tdi`.`active` AS `active`,
  197. `tdi`.`order` AS `order`";
  198. $sFromClause = "`sys_form_display_inputs` AS `tdi`";
  199. $sJoinClause = "LEFT JOIN `sys_form_inputs` AS `ti` ON `tdi`.`input_name`=`ti`.`name` ";
  200. if(!isset($aParams['order']) || empty($aParams['order']))
  201. $sOrderClause = "ORDER BY `tdi`.`order` ASC";
  202. switch($aParams['type']) {
  203. case 'by_id':
  204. $aMethod['name'] = 'getRow';
  205. $aMethod['params'][1] = array(
  206. 'id' => $aParams['value']
  207. );
  208. $sWhereClause = " AND `tdi`.`id`=:id ";
  209. break;
  210. case 'by_object_id':
  211. $aMethod['name'] = 'getRow';
  212. $aMethod['params'][1] = array(
  213. 'object' => $aParams['object'],
  214. 'id' => $aParams['id']
  215. );
  216. $sSelectClause = "`ti`.*, `tdi`.`id` AS `di_id`, `tdi`.`display_name` AS `display_name`, `tdi`.`visible_for_levels` AS `visible_for_levels`";
  217. $sWhereClause = " AND `ti`.`object`=:object AND `tdi`.`id`=:id ";
  218. break;
  219. case 'by_object_display':
  220. $aMethod['params'][1] = array(
  221. 'object' => $aParams['object'],
  222. 'display_name' => $aParams['display']
  223. );
  224. $sWhereClause = " AND `ti`.`object`=:object AND `tdi`.`display_name`=:display_name ";
  225. if(isset($aParams['active'])) {
  226. $aMethod['params'][1]['active'] = (int)$aParams['active'];
  227. $sWhereClause .= " AND `tdi`.`active`=:active ";
  228. }
  229. break;
  230. case 'by_object_name_filter':
  231. $aMethod['name'] = 'getColumn';
  232. $aMethod['params'][1] = array(
  233. 'object' => $aParams['object'],
  234. 'name_filter' => $aParams['name_filter']
  235. );
  236. $sSelectClause = "DISTINCT `ti`.`name` AS `name`";
  237. $sWhereClause = " AND `ti`.`object`=:object AND `ti`.`name` LIKE (:name_filter) ";
  238. $sOrderClause = "ORDER BY LENGTH(`ti`.`name`) ASC, `ti`.`name` ASC";
  239. break;
  240. case 'dump_inputs':
  241. $aMethod['params'][1] = array(
  242. 'object' => $aParams['value']
  243. );
  244. $sSelectClause = "`ti`.*";
  245. $sFromClause = "`sys_form_inputs` AS `ti`";
  246. $sJoinClause = "";
  247. $sWhereClause = " AND `ti`.`object`=:object ";
  248. $sOrderClause = "";
  249. break;
  250. case 'dump_connections':
  251. $aMethod['params'][1] = array(
  252. 'object' => $aParams['value']
  253. );
  254. $sSelectClause = "`tdi`.*";
  255. $sJoinClause .= "LEFT JOIN `sys_form_displays` AS `td` ON `tdi`.`display_name`=`td`.`display_name` ";
  256. $sWhereClause = " AND `td`.`object`=:object AND `ti`.`object`=:object ";
  257. $sOrderClause = "ORDER BY `tdi`.`display_name` ASC, `tdi`.`order` ASC";
  258. break;
  259. case 'counter_by_displays':
  260. $aMethod['name'] = 'getPairs';
  261. $aMethod['params'][1] = 'display_name';
  262. $aMethod['params'][2] = 'counter';
  263. $sSelectClause = "`tdi`.`display_name` AS `display_name`, COUNT(`tdi`.`display_name`) AS `counter`";
  264. $sJoinClause = "";
  265. $sGroupClause = "GROUP BY `tdi`.`display_name`";
  266. break;
  267. case 'counter_by_modules':
  268. $aMethod['name'] = 'getPairs';
  269. $aMethod['params'][1] = 'module';
  270. $aMethod['params'][2] = 'counter';
  271. $sSelectClause = "`ti`.`module` AS `module`, COUNT(*) AS `counter`";
  272. $sFromClause = "`sys_form_inputs` AS `ti`";
  273. $sJoinClause = "";
  274. $sGroupClause = "GROUP BY `ti`.`module`";
  275. $sOrderClause = "";
  276. break;
  277. case 'all':
  278. break;
  279. }
  280. $aMethod['params'][0] = "SELECT " . ($bReturnCount ? "SQL_CALC_FOUND_ROWS" : "") . " " . $sSelectClause . "
  281. FROM " . $sFromClause . " " . $sJoinClause . "
  282. WHERE 1 " . $sWhereClause . " " . $sGroupClause . " " . $sOrderClause . " " . $sLimitClause;
  283. $aItems = call_user_func_array(array($this, $aMethod['name']), $aMethod['params']);
  284. if(!$bReturnCount)
  285. return !empty($aItems);
  286. return (int)$this->getOne("SELECT FOUND_ROWS()");
  287. }
  288. function deleteInputs($aParams)
  289. {
  290. $aBindings = array();
  291. $sWhereClause = $sLimitClause = "";
  292. switch($aParams['type']) {
  293. case 'by_id':
  294. if(isset($aParams['object'], $aParams['name'])) {
  295. $sSql = $this->prepare("DELETE FROM `tdi` USING `sys_form_display_inputs` AS `tdi` LEFT JOIN `sys_form_displays` AS `td` ON `tdi`.`display_name`=`td`.`display_name` WHERE `td`.`object`=? AND `tdi`.`input_name`=?", $aParams['object'], $aParams['name']);
  296. $this->query($sSql);
  297. }
  298. $aBindings['id'] = $aParams['value'];
  299. $sWhereClause = " AND `ti`.`id`=:id ";
  300. break;
  301. case 'all':
  302. break;
  303. }
  304. $sSql = "DELETE FROM `ti` USING `sys_form_inputs` AS `ti` WHERE 1 " . $sWhereClause . " " . $sLimitClause;
  305. return (int)$this->query($sSql, $aBindings) > 0;
  306. }
  307. function checkInputsInDisplays($sObject, $sDisplayName)
  308. {
  309. $aDisplay = array();
  310. $this->getDisplays(array('type' => 'by_object_display', 'object' => $sObject, 'display' => $sDisplayName), $aDisplay, false);
  311. if(empty($aDisplay) || !is_array($aDisplay))
  312. return false;
  313. $sSql = $this->prepare("DELETE FROM `tdi` USING `sys_form_display_inputs` AS `tdi` LEFT JOIN `sys_form_inputs` AS `ti` ON `tdi`.`input_name`=`ti`.`name` WHERE 1 AND `tdi`.`display_name`=? AND `ti`.`id` IS NULL", $sDisplayName);
  314. $this->query($sSql);
  315. $sSql = $this->prepare("INSERT INTO `sys_form_display_inputs`(`display_name`, `input_name`) SELECT ? AS `display_name`,`ti`.`name` AS `input_name` FROM `sys_form_inputs` AS `ti` LEFT JOIN `sys_form_display_inputs` AS `tdi` ON `ti`.`name`=`tdi`.`input_name` AND `tdi`.`display_name`=? WHERE 1 AND `ti`.`object`=? AND `tdi`.`id` IS NULL", $sDisplayName, $sDisplayName, $sObject);
  316. return (int)$this->query($sSql) > 0;
  317. }
  318. function getInputOrderMax($sDisplayName)
  319. {
  320. $sSql = $this->prepare("SELECT MAX(`order`) FROM `sys_form_display_inputs` WHERE `display_name`=? LIMIT 1", $sDisplayName);
  321. return (int)$this->getOne($sSql);
  322. }
  323. function getLists($aParams, &$aItems, $bReturnCount = true)
  324. {
  325. $aMethod = array('name' => 'getAll', 'params' => array(0 => 'query'));
  326. $sSelectClause = $sJoinClause = $sWhereClause = $sGroupClause = $sOrderClause = $sLimitClause = "";
  327. if(!isset($aParams['order']) || empty($aParams['order']))
  328. $sOrderClause = "ORDER BY `tl`.`key` ASC";
  329. switch($aParams['type']) {
  330. case 'by_id':
  331. $aMethod['name'] = 'getRow';
  332. $aMethod['params'][1] = array(
  333. 'id' => $aParams['value']
  334. );
  335. $sWhereClause = " AND `tl`.`id`=:id ";
  336. break;
  337. case 'by_key':
  338. $aMethod['name'] = 'getRow';
  339. $aMethod['params'][1] = array(
  340. 'key' => $aParams['value']
  341. );
  342. $sWhereClause = " AND `tl`.`key`=:key ";
  343. break;
  344. case 'by_module':
  345. $aMethod['params'][1] = array(
  346. 'module' => $aParams['value']
  347. );
  348. $sWhereClause = " AND `tl`.`module`=:module ";
  349. break;
  350. case 'pairs_list_values':
  351. $aMethod['name'] = 'getPairs';
  352. $aMethod['params'][1] = 'key';
  353. $aMethod['params'][2] = 'values';
  354. $sSelectClause = ",COUNT( `tv`.`id`) AS `values`";
  355. $sJoinClause = "LEFT JOIN `sys_form_pre_values` AS `tv` ON `tl`.`key`=`tv`.`Key`";
  356. $sGroupClause = "GROUP BY `tl`.`id`";
  357. break;
  358. case 'counter_by_modules':
  359. $aMethod['name'] = 'getPairs';
  360. $aMethod['params'][1] = 'module';
  361. $aMethod['params'][2] = 'counter';
  362. $sSelectClause = ", COUNT(*) AS `counter`";
  363. $sGroupClause = "GROUP BY `tl`.`module`";
  364. break;
  365. case 'all_for_sets':
  366. $sWhereClause = "AND `tl`.`use_for_sets`='1'";
  367. break;
  368. case 'all':
  369. break;
  370. }
  371. $aMethod['params'][0] = "SELECT " . ($bReturnCount ? "SQL_CALC_FOUND_ROWS" : "") . "
  372. `tl`.`id` AS `id`,
  373. `tl`.`module` AS `module`,
  374. `tl`.`key` AS `key`,
  375. `tl`.`title` AS `title`,
  376. `tl`.`use_for_sets` AS `use_for_sets`,
  377. `tl`.`extendable` AS `extendable`" . $sSelectClause . "
  378. FROM `sys_form_pre_lists` AS `tl` " . $sJoinClause . "
  379. WHERE 1 " . $sWhereClause . " " . $sGroupClause . " " . $sOrderClause . " " . $sLimitClause;
  380. $aItems = call_user_func_array(array($this, $aMethod['name']), $aMethod['params']);
  381. if(!$bReturnCount)
  382. return !empty($aItems);
  383. return (int)$this->getOne("SELECT FOUND_ROWS()");
  384. }
  385. function updateList($iId, $aFields)
  386. {
  387. $sSql = "UPDATE `sys_form_pre_lists` SET `" . implode("`=?, `", array_keys($aFields)) . "`=? WHERE `id`=?";
  388. $sSql = call_user_func_array(array($this, 'prepare'), array_merge(array($sSql), array_values($aFields), array($iId)));
  389. return $this->query($sSql);
  390. }
  391. function isListUsedInSet($sKey)
  392. {
  393. bx_import('BxDolForm');
  394. $sSql = $this->prepare("SELECT
  395. COUNT( DISTINCT `ti`.`id`) AS `id`
  396. FROM `sys_form_pre_lists` AS `tl`
  397. LEFT JOIN `sys_form_inputs` AS `ti` ON CONCAT('" . BX_DATA_LISTS_KEY_PREFIX . "', `tl`.`key`)=`ti`.`values` AND `ti`.`type` IN ('select_multiple', 'checkbox_set')
  398. WHERE 1 AND `tl`.`key`=?", $sKey);
  399. return (int)$this->getOne($sSql) > 0;
  400. }
  401. function getCategories($aParams, &$aItems, $bReturnCount = true)
  402. {
  403. $aMethod = array('name' => 'getAll', 'params' => array(0 => 'query'));
  404. $sSelectClause = $sJoinClause = $sWhereClause = $sGroupClause = $sOrderClause = $sLimitClause = "";
  405. if(!isset($aParams['order']) || empty($aParams['order']))
  406. $sOrderClause = "ORDER BY `tv`.`module` ASC";
  407. switch($aParams['type']) {
  408. case 'by_id':
  409. $aMethod['name'] = 'getRow';
  410. $aMethod['params'][1] = array(
  411. 'id' => $aParams['value']
  412. );
  413. $sWhereClause = " AND `tv`.`id`=:id ";
  414. break;
  415. case 'counter_by_modules':
  416. $aMethod['name'] = 'getPairs';
  417. $aMethod['params'][1] = 'module';
  418. $aMethod['params'][2] = 'counter';
  419. $sSelectClause = ", `tv`.`module` AS `module`, COUNT(`tv`.`id`) AS `counter`";
  420. $sGroupClause = "GROUP BY `tv`.`module`";
  421. break;
  422. case 'all':
  423. break;
  424. }
  425. $aMethod['params'][0] = "SELECT " . ($bReturnCount ? "SQL_CALC_FOUND_ROWS" : "") . "
  426. `tv`.`id` AS `id`,
  427. `tv`.`Value` AS `value`,
  428. `tv`.`Value` AS `Value` " . $sSelectClause . "
  429. FROM `sys_categories` AS `tv` " . $sJoinClause . "
  430. WHERE 1 " . $sWhereClause . " " . $sGroupClause . " " . $sOrderClause . " " . $sLimitClause;
  431. $aItems = call_user_func_array(array($this, $aMethod['name']), $aMethod['params']);
  432. if(!$bReturnCount)
  433. return !empty($aItems);
  434. return (int)$this->getOne("SELECT FOUND_ROWS()");
  435. }
  436. function deleteCategories($CategoryId)
  437. {
  438. $sSql = "DELETE FROM `sys_categories2objects` WHERE `category_id` = :category_id";
  439. $aBindings = array(
  440. 'category_id' => $CategoryId
  441. );
  442. return $this->query($sSql, $aBindings);
  443. }
  444. function getValues($aParams, &$aItems, $bReturnCount = true)
  445. {
  446. $aMethod = array('name' => 'getAll', 'params' => array(0 => 'query'));
  447. $sSelectClause = $sJoinClause = $sWhereClause = $sGroupClause = $sOrderClause = $sLimitClause = "";
  448. if(!isset($aParams['order']) || empty($aParams['order']))
  449. $sOrderClause = "ORDER BY `tv`.`Order` ASC";
  450. switch($aParams['type']) {
  451. case 'by_id':
  452. $aMethod['name'] = 'getRow';
  453. $aMethod['params'][1] = array(
  454. 'id' => $aParams['value']
  455. );
  456. $sWhereClause = " AND `tv`.`id`=:id ";
  457. break;
  458. case 'by_key':
  459. $aMethod['params'][1] = array(
  460. 'key' => $aParams['value']
  461. );
  462. $sWhereClause = " AND `tv`.`Key`=:key ";
  463. break;
  464. case 'by_key_key_value':
  465. $aMethod['name'] = 'getAllWithKey';
  466. $aMethod['params'][1] = 'value';
  467. $aMethod['params'][2] = array(
  468. 'key' => $aParams['value']
  469. );
  470. $sWhereClause = " AND `tv`.`Key`=:key ";
  471. break;
  472. case 'counter_by_lists':
  473. $aMethod['name'] = 'getPairs';
  474. $aMethod['params'][1] = 'key';
  475. $aMethod['params'][2] = 'counter';
  476. $sSelectClause = ", COUNT(*) AS `counter`";
  477. $sGroupClause = "GROUP BY `tv`.`Key`";
  478. break;
  479. case 'counter_by_modules':
  480. $aMethod['name'] = 'getPairs';
  481. $aMethod['params'][1] = 'module';
  482. $aMethod['params'][2] = 'counter';
  483. $sSelectClause = ", `tl`.`module` AS `module`, COUNT(`tv`.`id`) AS `counter`";
  484. $sJoinClause = "LEFT JOIN `sys_form_pre_lists` AS `tl` ON `tv`.`Key`=`tl`.`key`";
  485. $sGroupClause = "GROUP BY `tl`.`module`";
  486. break;
  487. case 'all':
  488. break;
  489. }
  490. $aMethod['params'][0] = "SELECT " . ($bReturnCount ? "SQL_CALC_FOUND_ROWS" : "") . "
  491. `tv`.`id` AS `id`,
  492. `tv`.`Key` AS `key`,
  493. `tv`.`Key` AS `Key`,
  494. `tv`.`Value` AS `value`,
  495. `tv`.`Value` AS `Value`,
  496. `tv`.`LKey` AS `lkey`,
  497. `tv`.`LKey` AS `LKey`,
  498. `tv`.`LKey2` AS `lkey2`,
  499. `tv`.`LKey2` AS `LKey2`,
  500. `tv`.`Data` AS `data`,
  501. `tv`.`Data` AS `Data`,
  502. `tv`.`Order` AS `order`,
  503. `tv`.`Order` AS `Order`" . $sSelectClause . "
  504. FROM `sys_form_pre_values` AS `tv` " . $sJoinClause . "
  505. WHERE 1 " . $sWhereClause . " " . $sGroupClause . " " . $sOrderClause . " " . $sLimitClause;
  506. $aItems = call_user_func_array(array($this, $aMethod['name']), $aMethod['params']);
  507. if(!$bReturnCount)
  508. return !empty($aItems);
  509. return (int)$this->getOne("SELECT FOUND_ROWS()");
  510. }
  511. function deleteValues($aParams)
  512. {
  513. $aBindings = array();
  514. $sWhereClause = $sLimitClause = "";
  515. switch($aParams['type']) {
  516. case 'by_key':
  517. $aBindings['key'] = $aParams['value'];
  518. $sWhereClause = " AND `tv`.`Key`=:key ";
  519. break;
  520. case 'all':
  521. break;
  522. }
  523. $sSql = "DELETE FROM `tv` USING `sys_form_pre_values` AS `tv` WHERE 1 " . $sWhereClause . " " . $sLimitClause;
  524. return $this->query($sSql, $aBindings) !== false;
  525. }
  526. function getValuesOrderMax($sKey)
  527. {
  528. $sSql = $this->prepare("SELECT MAX(`Order`) FROM `sys_form_pre_values` WHERE `Key`=? LIMIT 1", $sKey);
  529. return (int)$this->getOne($sSql);
  530. }
  531. function getSearchForms($aParams, &$aItems, $bReturnCount = true)
  532. {
  533. $aMethod = array('name' => 'getAll', 'params' => array(0 => 'query'));
  534. $sSelectClause = $sJoinClause = $sWhereClause = $sGroupClause = $sOrderClause = $sLimitClause = "";
  535. if(!isset($aParams['order']) || empty($aParams['order']))
  536. $sOrderClause = "ORDER BY `tf`.`title` ASC";
  537. switch($aParams['type']) {
  538. case 'by_id':
  539. $aMethod['name'] = 'getRow';
  540. $aMethod['params'][1] = array(
  541. 'id' => $aParams['id']
  542. );
  543. $sWhereClause = " AND `tf`.`id`=:id ";
  544. break;
  545. case 'by_module':
  546. $aMethod['params'][1] = array(
  547. 'module' => $aParams['module']
  548. );
  549. $sWhereClause = "AND `tf`.`module`=:module";
  550. break;
  551. case 'counter_by_modules':
  552. $aMethod['name'] = 'getPairs';
  553. $aMethod['params'][1] = 'module';
  554. $aMethod['params'][2] = 'counter';
  555. $sSelectClause = ", COUNT(*) AS `counter`";
  556. $sGroupClause = "GROUP BY `tf`.`module`";
  557. case 'all':
  558. break;
  559. }
  560. $aMethod['params'][0] = "SELECT " . ($bReturnCount ? "SQL_CALC_FOUND_ROWS" : "") . "
  561. `tf`.*" . $sSelectClause . "
  562. FROM `sys_objects_search_extended` AS `tf` " . $sJoinClause . "
  563. WHERE 1 " . $sWhereClause . " " . $sGroupClause . " " . $sOrderClause . " " . $sLimitClause;
  564. $aItems = call_user_func_array(array($this, $aMethod['name']), $aMethod['params']);
  565. if(!$bReturnCount)
  566. return !empty($aItems);
  567. return (int)$this->getOne("SELECT FOUND_ROWS()");
  568. }
  569. function getSearchFields($aParams, &$aItems, $bReturnCount = true)
  570. {
  571. $aMethod = array('name' => 'getAll', 'params' => array(0 => 'query'));
  572. $sSelectClause = $sFromClause = $sJoinClause = $sWhereClause = $sGroupClause = $sOrderClause = $sLimitClause = "";
  573. if(!isset($aParams['order']) || empty($aParams['order']))
  574. $sOrderClause = "ORDER BY `tfld`.`order` ASC";
  575. switch($aParams['type']) {
  576. case 'by_id':
  577. $aMethod['name'] = 'getRow';
  578. $aMethod['params'][1] = array(
  579. 'id' => $aParams['id']
  580. );
  581. $sWhereClause = " AND `tfld`.`id`=:id ";
  582. break;
  583. case 'by_object':
  584. $aMethod['params'][1] = array(
  585. 'object' => $aParams['object']
  586. );
  587. $sWhereClause = "AND `tfld`.`object`=:object";
  588. break;
  589. case 'counter_by_modules':
  590. $aMethod['name'] = 'getPairs';
  591. $aMethod['params'][1] = 'module';
  592. $aMethod['params'][2] = 'counter';
  593. $sSelectClause = ", COUNT(*) AS `counter`";
  594. $sGroupClause = "GROUP BY `tfld`.`module`";
  595. $sOrderClause = "";
  596. break;
  597. case 'all':
  598. break;
  599. }
  600. $aMethod['params'][0] = "SELECT " . ($bReturnCount ? "SQL_CALC_FOUND_ROWS" : "") . "
  601. `tfld`.*" . $sSelectClause . "
  602. FROM `sys_search_extended_fields` AS `tfld` " . $sJoinClause . "
  603. WHERE 1 " . $sWhereClause . " " . $sGroupClause . " " . $sOrderClause . " " . $sLimitClause;
  604. $aItems = call_user_func_array(array($this, $aMethod['name']), $aMethod['params']);
  605. if(!$bReturnCount)
  606. return !empty($aItems);
  607. return (int)$this->getOne("SELECT FOUND_ROWS()");
  608. }
  609. function getSortableFields($aParams, &$aItems, $bReturnCount = true)
  610. {
  611. $aMethod = array('name' => 'getAll', 'params' => array(0 => 'query'));
  612. $sSelectClause = $sFromClause = $sJoinClause = $sWhereClause = $sGroupClause = $sOrderClause = $sLimitClause = "";
  613. if(!isset($aParams['order']) || empty($aParams['order']))
  614. $sOrderClause = "ORDER BY `tfld`.`order` ASC";
  615. switch($aParams['type']) {
  616. case 'by_id':
  617. $aMethod['name'] = 'getRow';
  618. $aMethod['params'][1] = array(
  619. 'id' => $aParams['id']
  620. );
  621. $sWhereClause = " AND `tfld`.`id`=:id ";
  622. break;
  623. case 'by_object':
  624. $aMethod['params'][1] = array(
  625. 'object' => $aParams['object']
  626. );
  627. $sWhereClause = "AND `tfld`.`object`=:object";
  628. break;
  629. case 'counter_by_modules':
  630. $aMethod['name'] = 'getPairs';
  631. $aMethod['params'][1] = 'module';
  632. $aMethod['params'][2] = 'counter';
  633. $sSelectClause = ", COUNT(*) AS `counter`";
  634. $sGroupClause = "GROUP BY `tfld`.`module`";
  635. $sOrderClause = "";
  636. break;
  637. case 'all':
  638. break;
  639. }
  640. $aMethod['params'][0] = "SELECT " . ($bReturnCount ? "SQL_CALC_FOUND_ROWS" : "") . "
  641. `tfld`.*" . $sSelectClause . "
  642. FROM `sys_search_extended_sorting_fields` AS `tfld` " . $sJoinClause . "
  643. WHERE 1 " . $sWhereClause . " " . $sGroupClause . " " . $sOrderClause . " " . $sLimitClause;
  644. $aItems = call_user_func_array(array($this, $aMethod['name']), $aMethod['params']);
  645. if(!$bReturnCount)
  646. return !empty($aItems);
  647. return (int)$this->getOne("SELECT FOUND_ROWS()");
  648. }
  649. function alterAdd($sTable, $sField, $sType)
  650. {
  651. if($this->isFieldExists($sTable, $sField))
  652. return true;
  653. return (int)$this->query("ALTER TABLE `" . $sTable . "` ADD `" . $sField . "` " . $sType) > 0;
  654. }
  655. function alterChange($sTable, $sFieldOld, $sFieldNew, $sTypeNew)
  656. {
  657. if(!$this->isFieldExists($sTable, $sFieldOld))
  658. return false;
  659. if(strcmp($sFieldOld, $sFieldNew) !== 0 && $this->isFieldExists($sTable, $sFieldNew))
  660. return false;
  661. return (int)$this->query("ALTER TABLE `" . $sTable . "` CHANGE `" . $sFieldOld . "` `" . $sFieldNew . "` " . $sTypeNew) > 0;
  662. }
  663. function alterRemove($sTable, $sField)
  664. {
  665. if(!$this->isFieldExists($sTable, $sField))
  666. return true;
  667. return (int)$this->query("ALTER TABLE `" . $sTable . "` DROP `" . $sField . "`") > 0;
  668. }
  669. }
  670. /** @} */