BxDolGridQuery.php 3.5 KB

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