BxDolGridQuery.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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. * Database queries for grid.
  11. * @see BxDolGrid
  12. */
  13. class BxDolGridQuery extends BxDolDb
  14. {
  15. protected $_aObject;
  16. public function __construct($aObject)
  17. {
  18. parent::__construct();
  19. $this->_aObject = $aObject;
  20. }
  21. static public function getGridObject ($sObject)
  22. {
  23. $oDb = BxDolDb::getInstance();
  24. $sQuery = $oDb->prepare("SELECT * FROM `sys_objects_grid` WHERE `object` = ?", $sObject);
  25. $aObject = $oDb->getRow($sQuery);
  26. if (!$aObject || !is_array($aObject))
  27. return false;
  28. // paginate
  29. if (!empty($aObject['paginate_url']) && 0 !== strncasecmp($aObject['paginate_url'], 'http://', 7) && 0 !== strncasecmp($aObject['paginate_url'], 'https://', 8))
  30. $aObject['paginate_url'] = BX_DOL_URL_ROOT . $aObject['paginate_url'];
  31. // filter
  32. if ($aObject['filter_fields'])
  33. $aObject['filter_fields'] = array_map('trim', explode(',', $aObject['filter_fields']));
  34. if ($aObject['filter_fields_translatable'])
  35. $aObject['filter_fields_translatable'] = array_map('trim', explode(',', $aObject['filter_fields_translatable']));
  36. // sorting
  37. if ($aObject['sorting_fields'])
  38. $aObject['sorting_fields'] = array_map('trim', explode(',', $aObject['sorting_fields']));
  39. if ($aObject['sorting_fields_translatable']) {
  40. $aObject['sorting_fields_translatable'] = array_map('trim', explode(',', $aObject['sorting_fields_translatable']));
  41. $aObject['sorting_fields'] = array_merge ($aObject['sorting_fields'], $aObject['sorting_fields_translatable']);
  42. }
  43. // get fields
  44. $sQuery = $oDb->prepare("SELECT * FROM `sys_grid_fields` WHERE `object` = ? ORDER BY `order`", $sObject);
  45. $aFields = $oDb->getAllWithKey($sQuery, 'name');
  46. if (!$aFields || !is_array($aFields)) // it is impossible to have grid without any fields
  47. return false;
  48. foreach ($aFields as $sKey => $aRow) {
  49. $aObject['fields'][$sKey] = array(
  50. 'name' => $sKey,
  51. 'title' => _t($aRow['title']),
  52. 'width' => $aRow['width'],
  53. 'translatable' => $aRow['translatable'],
  54. 'chars_limit' => $aRow['chars_limit'],
  55. 'hidden_on' => $aRow['hidden_on'],
  56. );
  57. if (empty($aRow['params']))
  58. continue;
  59. $aAdd = unserialize($aRow['params']);
  60. if (!empty($aAdd) && is_array($aAdd))
  61. $aObject['fields'][$sKey] = array_merge($aObject['fields'][$sKey], $aAdd);
  62. }
  63. // get actions
  64. $a = array('bulk','single','independent');
  65. foreach ($a as $sActionType) {
  66. $sActionField = 'actions_' . $sActionType;
  67. $aObject[$sActionField] = array();
  68. $sQuery = $oDb->prepare("SELECT * FROM `sys_grid_actions` WHERE `object` = ? AND `type` = ? ORDER BY `order`", $sObject, $sActionType);
  69. $aActions = $oDb->getAllWithKey($sQuery, 'name');
  70. if (!$aActions || !is_array($aActions))
  71. continue;
  72. foreach ($aActions as $sKey => $aRow)
  73. $aObject[$sActionField][$sKey] = $aRow['title'] || $aRow['icon'] ? array('title' => _t($aRow['title']), 'icon' => $aRow['icon'], 'confirm' => $aRow['confirm'], 'icon_only' => $aRow['icon_only']) : array();
  74. }
  75. return $aObject;
  76. }
  77. }
  78. /** @} */