BxDolGridQuery.php 3.5 KB

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