BxDolFormQuery.php 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  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. /**
  10. * Database queries for forms.
  11. * @see BxDolForm
  12. */
  13. class BxDolFormQuery extends BxDolDb
  14. {
  15. protected $_aObject;
  16. protected static $TYPES_SET = array (
  17. 'select_multiple' => 1,
  18. 'checkbox_set' => 1,
  19. );
  20. protected static $TYPES_TRANSLATABLE = array (
  21. 'submit' => 1,
  22. 'reset' => 1,
  23. 'button' => 1,
  24. );
  25. public function __construct($aObject)
  26. {
  27. parent::__construct();
  28. $this->_aObject = $aObject;
  29. }
  30. static public function getFormArray ($sObject, $sDisplayName)
  31. {
  32. $oDb = BxDolDb::getInstance();
  33. $sQuery = $oDb->prepare("SELECT * FROM `sys_objects_form` WHERE `active` = 1 AND `object` = ?", $sObject);
  34. $aObject = $oDb->getRow($sQuery);
  35. if (!$aObject || !is_array($aObject))
  36. return false;
  37. $sQuery = $oDb->prepare("SELECT * FROM `sys_form_displays` WHERE `object` = ? AND `display_name` = ?", $sObject, $sDisplayName);
  38. $aDisplay = $oDb->getRow($sQuery);
  39. if (!$aDisplay || !is_array($aDisplay))
  40. return false;
  41. $aForm = array ();
  42. // form attrs
  43. if (!empty($aObject['form_attrs']))
  44. $aAddFormAttrs = unserialize($aObject['form_attrs']);
  45. $aDefaultsFormAttrs = array(
  46. 'action' => $aObject['action'],
  47. 'name' => $aObject['object'],
  48. 'id' => $aObject['object'],
  49. );
  50. $aForm['form_attrs'] = array_merge($aDefaultsFormAttrs, !empty($aAddFormAttrs) && is_array($aAddFormAttrs) ? $aAddFormAttrs : array());
  51. // form action
  52. if (!empty($aForm['form_attrs']['action']) && 0 != strncasecmp($aForm['form_attrs']['action'], 'http://', 7) && 0 != strncasecmp($aForm['form_attrs']['action'], 'https://', 8))
  53. $aForm['form_attrs']['action'] = BX_DOL_URL_ROOT . BxDolPermalinks::getInstance()->permalink($aForm['form_attrs']['action']);
  54. // params
  55. if (!empty($aObject['params']))
  56. $aAddFormParams = unserialize($aObject['params']);
  57. $aDefaultsFormParams = array(
  58. 'db' => array(
  59. 'submit_name' => $aObject['submit_name'],
  60. 'table' => $aObject['table'],
  61. 'key' => $aObject['key'],
  62. 'uri' => $aObject['uri'],
  63. 'uri_title' => $aObject['uri_title'],
  64. ),
  65. 'view_mode' => $aDisplay['view_mode'],
  66. 'display' => $sDisplayName,
  67. );
  68. $aForm['params'] = array_merge_recursive($aDefaultsFormParams, !empty($aAddFormParams) && is_array($aAddFormParams) ? $aAddFormParams : array());
  69. // form inputs
  70. $sQuery = $oDb->prepare("SELECT `i`.*, `d`.`visible_for_levels` FROM `sys_form_inputs` AS `i` INNER JOIN `sys_form_display_inputs` AS `d` ON (`d`.`input_name` = `i`.`name`) WHERE `d`.`active` = 1 AND `d`.`display_name` = ? AND `i`.`object` = ? ORDER BY `d`.`order` ASC", $aDisplay['display_name'], $sObject);
  71. $aInputs = $oDb->getAllWithKey($sQuery, 'name');
  72. $aForm['inputs'] = array();
  73. $aInputSets = array();
  74. foreach ($aInputs as $a) {
  75. // main attributes
  76. $aInput = array (
  77. 'type' => $a['type'],
  78. 'name' => $a['name'],
  79. 'caption' => _t($a['caption']),
  80. 'info' => $a['info'] ? _t($a['info']) : '',
  81. 'required' => $a['required'] ? true : false,
  82. 'collapsed' => $a['collapsed'] ? true : false,
  83. 'html' => $a['html'],
  84. 'attrs' => $a['attrs'] ? unserialize($a['attrs']) : false,
  85. 'tr_attrs' => $a['attrs_tr'] ? unserialize($a['attrs_tr']) : false,
  86. 'attrs_wrapper' => $a['attrs_wrapper'] ? unserialize($a['attrs_wrapper']) : false,
  87. 'visible_for_levels' => $a['visible_for_levels'],
  88. );
  89. // if type is input set stop to process other attribnutes
  90. if ('input_set' == $a['type']) {
  91. $aForm['inputs'][$a['name']] = $aInput;
  92. $aInputSets[] = $a['name'];
  93. continue;
  94. }
  95. // default value
  96. if (!empty($a['value']))
  97. $aInput['value'] = isset(self::$TYPES_TRANSLATABLE[$aInput['type']]) ? _t($a['value']) : $a['value'];
  98. if (!empty($a['values'])) {
  99. if (0 == strncmp(BX_DATA_LISTS_KEY_PREFIX, $a['values'], 2)) {
  100. $aInput['values_list_name'] = trim($a['values'], BX_DATA_LISTS_KEY_PREFIX . ' ');
  101. $aInput['values'] = self::getDataItems(trim($a['values'], BX_DATA_LISTS_KEY_PREFIX . ' '), isset(self::$TYPES_SET[$aInput['type']]));
  102. } else {
  103. $aInput['values'] = unserialize($a['values']);
  104. }
  105. }
  106. $aInput['checked'] = $a['checked'] ? true : false;
  107. // checker function options
  108. if (!empty($a['checker_func'])) {
  109. $aChecker = array ('func' => $a['checker_func']);
  110. if ($a['checker_error'])
  111. $aChecker['error'] = _t($a['checker_error']);
  112. if ($a['checker_params'])
  113. $aChecker['params'] = unserialize($a['checker_params']);
  114. $aInput['checker'] = $aChecker;
  115. }
  116. // db processing options
  117. if (!empty($a['db_pass'])) {
  118. $aDb = array ('pass' => $a['db_pass']);
  119. if ($a['db_params'])
  120. $a['params'] = unserialize($a['db_params']);
  121. $aInput['db'] = $aDb;
  122. }
  123. $aForm['inputs'][$a['name']] = $aInput;
  124. }
  125. foreach ($aInputSets as $sName) {
  126. $a = explode(',', $aInputs[$sName]['values']);
  127. foreach ($a as $sInputName) {
  128. if (!isset($aForm['inputs'][$sInputName]))
  129. continue;
  130. $aForm['inputs'][$sName][] = $aForm['inputs'][$sInputName];
  131. unset($aForm['inputs'][$sInputName]);
  132. }
  133. }
  134. $aForm['override_class_name'] = $aObject['override_class_name'];
  135. $aForm['override_class_file'] = $aObject['override_class_file'];
  136. return $aForm;
  137. }
  138. static public function getDataItems($sKey, $isUseForSet = false, $sUseValues = BX_DATA_VALUES_DEFAULT)
  139. {
  140. if ($sUseValues != BX_DATA_VALUES_DEFAULT && $sUseValues != BX_DATA_VALUES_ADDITIONAL)
  141. $sUseValues = BX_DATA_VALUES_DEFAULT;
  142. $oDb = BxDolDb::getInstance();
  143. $sQuery = $oDb->prepare("SELECT `Value`, `LKey`, `LKey2` FROM `sys_form_pre_values` WHERE `Key` = ? ORDER BY `Order` ASC", $sKey);
  144. $a = $oDb->getAll($sQuery);
  145. $iMaxValue = 0;
  146. if ($isUseForSet)
  147. $iMaxValue = log(BX_DOL_INT_MAX, 2) + 1;
  148. $aRet = array();
  149. foreach ($a as $r) {
  150. if ($isUseForSet && (!is_numeric($r['Value']) || $r['Value'] < 1 || $r['Value'] > $iMaxValue))
  151. continue;
  152. $aRet[$r['Value']] = BX_DATA_VALUES_ADDITIONAL == $sUseValues && !empty($r[BX_DATA_VALUES_ADDITIONAL]) ? _t($r[BX_DATA_VALUES_ADDITIONAL]) : _t($r[BX_DATA_VALUES_DEFAULT]);
  153. }
  154. return $aRet;
  155. }
  156. public function getFormInputs()
  157. {
  158. $sQuery = $this->prepare("SELECT * FROM `sys_form_inputs` WHERE `object` = ? ORDER BY `order` ASC", $this->_aObject['object']);
  159. return $this->getAll($sQuery);
  160. }
  161. }
  162. /** @} */