1
0

BxDolGridQuery.php 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. 'title' => _t($aRow['title']),
  51. 'width' => $aRow['width'],
  52. 'translatable' => $aRow['translatable'],
  53. 'chars_limit' => $aRow['chars_limit'],
  54. );
  55. if (empty($aRow['params']))
  56. continue;
  57. $aAdd = unserialize($aRow['params']);
  58. if (!empty($aAdd) && is_array($aAdd))
  59. $aObject['fields'][$sKey] = array_merge($aObject['fields'][$sKey], $aAdd);
  60. }
  61. // get actions
  62. $a = array('bulk','single','independent');
  63. foreach ($a as $sActionType) {
  64. $sActionField = 'actions_' . $sActionType;
  65. $aObject[$sActionField] = array();
  66. $sQuery = $oDb->prepare("SELECT * FROM `sys_grid_actions` WHERE `object` = ? AND `type` = ? ORDER BY `order`", $sObject, $sActionType);
  67. $aActions = $oDb->getAllWithKey($sQuery, 'name');
  68. if (!$aActions || !is_array($aActions))
  69. continue;
  70. foreach ($aActions as $sKey => $aRow)
  71. $aObject[$sActionField][$sKey] = $aRow['title'] || $aRow['icon'] ? array('title' => _t($aRow['title']), 'icon' => $aRow['icon'], 'confirm' => $aRow['confirm'], 'icon_only' => $aRow['icon_only']) : array();
  72. }
  73. return $aObject;
  74. }
  75. }
  76. /** @} */