1
0

BxBaseSearchExtendedServices.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  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 UnaBaseView UNA Base Representation Classes
  7. * @{
  8. */
  9. /**
  10. * System services related to Extended Search.
  11. *
  12. * @see BxDolSearchExtended
  13. */
  14. class BxBaseSearchExtendedServices extends BxDol
  15. {
  16. public function __construct()
  17. {
  18. parent::__construct();
  19. }
  20. public function serviceGetForm($mParams)
  21. {
  22. $aParams = [];
  23. if(is_string($mParams)) {
  24. if(($_mParams = json_decode($mParams, true)) !== null)
  25. $aParams = $_mParams;
  26. else
  27. $aParams['object'] = $mParams;
  28. }
  29. else
  30. $aParams = $mParams;
  31. $this->prepareParams($aParams);
  32. if(empty($aParams['object']))
  33. return '';
  34. $oSearch = BxDolSearchExtended::getObjectInstance($aParams['object']);
  35. if(!$oSearch || !$oSearch->isEnabled())
  36. return '';
  37. return $oSearch->getForm($aParams);
  38. }
  39. public function serviceGetSorting($mParams)
  40. {
  41. $aParams = [];
  42. if (is_string($mParams))
  43. $aParams['object'] = $mParams;
  44. else
  45. $aParams = $mParams;
  46. $this->prepareParams($aParams);
  47. if(empty($aParams['object']))
  48. return '';
  49. $oSearch = BxDolSearchExtended::getObjectInstance($aParams['object']);
  50. if(!$oSearch || !$oSearch->isEnabled())
  51. return '';
  52. return $oSearch->getSorting($aParams);
  53. }
  54. public function serviceGetResults($mParams)
  55. {
  56. $aParams = [];
  57. $fProcessDefValues = function($aValues) {
  58. if(empty($aValues) || !is_array($aValues))
  59. return;
  60. foreach($aValues as $sKey => $sValue) {
  61. if(empty($sValue))
  62. continue;
  63. $_POST[$sKey] = $sValue;
  64. }
  65. };
  66. if(($mDefValues = bx_get('filters')) !== false)
  67. $fProcessDefValues(json_decode($mDefValues, true));
  68. if(is_string($mParams)) {
  69. $aParams = bx_api_get_browse_params($mParams, true);
  70. if(isset($aParams['filters']))
  71. $fProcessDefValues($aParams['filters']);
  72. if(isset($aParams['sort']))
  73. $fProcessDefValues(['sort' => $aParams['sort']]);
  74. }
  75. else
  76. $aParams = $mParams;
  77. $this->prepareParams($aParams);
  78. if(empty($aParams['object']))
  79. return '';
  80. $oSearch = BxDolSearchExtended::getObjectInstance($aParams['object']);
  81. if(!$oSearch || !$oSearch->isEnabled())
  82. return '';
  83. $sResults = $oSearch->getResults($aParams);
  84. if(bx_is_api())
  85. return $sResults;
  86. return !empty($sResults) ? $sResults : (isset($aParams['show_empty']) && (bool)$aParams['show_empty'] ? MsgBox(_t('_Empty')) : '');
  87. }
  88. public function prepareParams(&$aParams)
  89. {
  90. $this->_prepareParamEmpty('object', BX_DATA_TEXT, $aParams);
  91. $this->_prepareParamEmpty('context_id', BX_DATA_INT, $aParams);
  92. $this->_prepareParamEmpty('template', BX_DATA_TEXT, $aParams);
  93. if(($sK = 'show_empty') && !isset($aParams[$sK]) && ($iShowEmpty = bx_get($sK)) !== false)
  94. $aParams[$sK] = (bool)$iShowEmpty;
  95. if(($sK = 'cond') && empty($aParams[$sK]) && ($sCond = bx_get('cond')) !== false)
  96. $aParams[$sK] = BxDolSearchExtended::decodeConditions(bx_process_input($sCond, BX_DATA_TEXT));
  97. $this->_prepareParamIsset('start', BX_DATA_INT, $aParams);
  98. $this->_prepareParamIsset('per_page', BX_DATA_INT, $aParams);
  99. if(($sK = 'total') && !isset($aParams[$sK]) && ($mixedTotal = bx_get($sK)) !== false)
  100. $aParams[$sK] = is_numeric($mixedTotal) ? (int)$mixedTotal : $mixedTotal == 'true';
  101. }
  102. protected function _prepareParamEmpty($sParam, $iDataType, &$aParams)
  103. {
  104. if(empty($aParams[$sParam]) && ($mixedValue = bx_get($sParam)) !== false)
  105. $aParams[$sParam] = bx_process_input($mixedValue, $iDataType);
  106. }
  107. protected function _prepareParamIsset($sParam, $iDataType, &$aParams)
  108. {
  109. if(!isset($aParams[$sParam]) && ($mixedValue = bx_get($sParam)) !== false)
  110. $aParams[$sParam] = bx_process_input($mixedValue, $iDataType);
  111. }
  112. }
  113. /** @} */