BxDolStudioPageQuery.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  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 BxDolStudioPageQuery extends BxDolDb
  10. {
  11. function __construct()
  12. {
  13. parent::__construct();
  14. }
  15. function getPages($aParams, &$aItems, $bReturnCount = true)
  16. {
  17. $aMethod = array('name' => 'getAll', 'params' => array(0 => 'query'));
  18. $sSelectClause = $sJoinClause = $sWhereClause = $sOrderClause = $sLimitClause = "";
  19. if(!isset($aParams['order']) || empty($aParams['order']))
  20. $sOrderClause = "ORDER BY `tp`.`id` ASC";
  21. switch($aParams['type']) {
  22. case 'all':
  23. break;
  24. case 'by_page_id':
  25. $aMethod['name'] = 'getRow';
  26. $aMethod['params'][1] = array(
  27. 'id' => $aParams['value']
  28. );
  29. $sWhereClause .= "AND `tp`.`id`=:id";
  30. $sOrderClause = "";
  31. $sLimitClause = "LIMIT 1";
  32. break;
  33. case 'by_page_id_full':
  34. $aMethod['name'] = 'getRow';
  35. $aMethod['params'][1] = array(
  36. 'id' => $aParams['value']
  37. );
  38. $sSelectClause .= ", `tw`.`id` AS `wid_id`, `tw`.`module` AS `wid_module`, `tw`.`url` AS `wid_url`, `tw`.`click` AS `wid_click`, `tw`.`icon` AS `wid_icon`, `tw`.`caption` AS `wid_caption`, `tw`.`cnt_notices` AS `wid_cnt_notices`, `tw`.`cnt_actions` AS `wid_cnt_actions` ";
  39. $sJoinClause .= "LEFT JOIN `sys_std_widgets` AS `tw` ON `tp`.`id`=`tw`.`page_id` ";
  40. $sWhereClause .= "AND `tp`.`id`=:id";
  41. $sLimitClause = "LIMIT 1";
  42. break;
  43. case 'by_page_name':
  44. $aMethod['name'] = 'getRow';
  45. $aMethod['params'][1] = array(
  46. 'name' => $aParams['value']
  47. );
  48. $sWhereClause .= "AND `tp`.`name`=:name";
  49. $sLimitClause = "LIMIT 1";
  50. break;
  51. case 'by_page_name_full':
  52. $aMethod['name'] = 'getRow';
  53. $aMethod['params'][1] = array(
  54. 'name' => $aParams['value']
  55. );
  56. $sSelectClause .= ", `tw`.`id` AS `wid_id`, `tw`.`module` AS `wid_module`, `tw`.`url` AS `wid_url`, `tw`.`click` AS `wid_click`, `tw`.`icon` AS `wid_icon`, `tw`.`caption` AS `wid_caption`, `tw`.`cnt_notices` AS `wid_cnt_notices`, `tw`.`cnt_actions` AS `wid_cnt_actions` ";
  57. $sJoinClause .= "LEFT JOIN `sys_std_widgets` AS `tw` ON `tp`.`id`=`tw`.`page_id` ";
  58. $sWhereClause .= "AND `tp`.`name`=:name";
  59. $sLimitClause = "LIMIT 1";
  60. break;
  61. case 'by_page_names_full':
  62. $aMethod['name'] = 'getAll';
  63. $aMethod['params'][1] = array();
  64. $sSelectClause .= ", `tw`.`id` AS `wid_id`, `tw`.`module` AS `wid_module`, `tw`.`url` AS `wid_url`, `tw`.`click` AS `wid_click`, `tw`.`icon` AS `wid_icon`, `tw`.`caption` AS `wid_caption`, `tw`.`cnt_notices` AS `wid_cnt_notices`, `tw`.`cnt_actions` AS `wid_cnt_actions` ";
  65. $sJoinClause .= "LEFT JOIN `sys_std_widgets` AS `tw` ON `tp`.`id`=`tw`.`page_id` ";
  66. foreach($aParams['value'] as $iKey => $sValue) {
  67. $sKey = 'name' . $iKey;
  68. $aMethod['params'][1][$sKey] = $sValue;
  69. $sWhereClause .= " OR `tp`.`name`=:" . $sKey;
  70. }
  71. $sWhereClause = "AND (0" . $sWhereClause . ")";
  72. break;
  73. }
  74. $aMethod['params'][0] = "SELECT " . ($bReturnCount ? "SQL_CALC_FOUND_ROWS" : "") . "
  75. `tp`.`id` AS `id`,
  76. `tp`.`index` AS `index`,
  77. `tp`.`name` AS `name`,
  78. `tp`.`header` AS `header`,
  79. `tp`.`caption` AS `caption`,
  80. `tp`.`icon` AS `icon`" . $sSelectClause . "
  81. FROM `sys_std_pages` AS `tp` " . $sJoinClause . "
  82. WHERE 1 " . $sWhereClause . " " . $sOrderClause . " " . $sLimitClause;
  83. $aItems = call_user_func_array(array($this, $aMethod['name']), $aMethod['params']);
  84. if(!$bReturnCount)
  85. return !empty($aItems);
  86. return (int)$this->getOne("SELECT FOUND_ROWS()");
  87. }
  88. function isBookmarked($aPage)
  89. {
  90. if(empty($aPage['wid_id']))
  91. return false;
  92. $sSql = $this->prepare("SELECT `bookmark` FROM `sys_std_widgets` WHERE `id`=? LIMIT 1", $aPage['wid_id']);
  93. if((int)$this->getOne($sSql) == 0)
  94. return false;
  95. return true;
  96. }
  97. function bookmark(&$aPage)
  98. {
  99. if(empty($aPage['wid_id']))
  100. return false;
  101. $aPageHome = array();
  102. $iPageHome = $this->getPages(array('type' => 'by_page_name', 'value' => BX_DOL_STUDIO_PAGE_HOME), $aPageHome);
  103. if($iPageHome != 1)
  104. return false;
  105. $sSql = $this->prepare("UPDATE `sys_std_widgets` SET `bookmark`=? WHERE `id`=?", $aPage['bookmarked'] ? 0 : 1, $aPage['wid_id']);
  106. if(($bResult = (int)$this->query($sSql) > 0) === true)
  107. $aPage['bookmarked'] = !$aPage['bookmarked'];
  108. return $bResult;
  109. }
  110. }
  111. /** @} */