buildform.html.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <?php
  2. namespace zin;
  3. /* Build operators. */
  4. $operators = array();
  5. foreach($lang->search->operators as $value => $text) $operators[] = array('value' => $value, 'text' => $text);
  6. /* Build conditions. */
  7. $conditions = array();
  8. $conditionHasZeroValue = array();
  9. foreach($fieldParams as $name => $param)
  10. {
  11. if(!isset($fields[$name])) continue;
  12. $condition = new stdClass();
  13. $condition->text = $fields[$name];
  14. $condition->name = $name;
  15. $condition->control = $param['control'];
  16. $condition->defaultOperator = $param['operator'];
  17. $condition->placeholder = '';
  18. $condition->controlProps = isset($config->search->controlProps[$module][$name]) ? (array)$config->search->controlProps[$module][$name] : array();
  19. if($condition->control == 'select' && !isset($condition->controlProps['maxItemsCount'])) $condition->controlProps['maxItemsCount'] = 200;
  20. if(isset($param['class']) && in_array('date', explode(' ', $param['class'])))
  21. {
  22. $condition->control = 'date';
  23. }
  24. if(isset($param['class']) && in_array('datetime', explode(' ', $param['class'])))
  25. {
  26. $condition->control = 'datetime';
  27. }
  28. if(is_array($param['values']))
  29. {
  30. $condition->items = array();
  31. foreach($param['values'] as $value => $text)
  32. {
  33. if(empty($text)) continue;
  34. $condition->items[] = array('value' => $value, 'text' => $text);
  35. if($value === 'ZERO') $conditionHasZeroValue[] = $name;
  36. }
  37. }
  38. $conditions[] = $condition;
  39. }
  40. /* Build default data. */
  41. $defaultData = array();
  42. if(is_array($formSession))
  43. {
  44. $index = 1;
  45. $conditionIndex = 0;
  46. foreach($formSession as $item)
  47. {
  48. if(isset($item['field']))
  49. {
  50. if(!isset($fields[$item['field']]))
  51. {
  52. $defaultData['field' . $index] = $conditions[$conditionIndex]->name;
  53. $conditionIndex ++;
  54. }
  55. else
  56. {
  57. $defaultData['field' . $index] = $item['field'];
  58. if(isset($item['operator'])) $defaultData['operator' . $index] = $item['operator'];
  59. if(isset($item['andOr'])) $defaultData['andOr' . $index] = $item['andOr'];
  60. if(isset($item['value'])) $defaultData['value' . $index] = ($item['value'] === '0' && in_array($item['field'], $conditionHasZeroValue)) ? 'ZERO' : $item['value'];
  61. }
  62. $index++;
  63. }
  64. elseif(isset($item['groupAndOr']))
  65. {
  66. $defaultData['groupAndOr'] = $item['groupAndOr'];
  67. }
  68. }
  69. }
  70. /* Build saved query list. */
  71. $canSaveQuery = !empty($_SESSION[$module . 'Query']) && common::hasPriv('search', 'saveQuery');
  72. $canDeleteQuery = hasPriv('search', 'deleteQuery');
  73. $deleteQueryConfirm = $canDeleteQuery ? $lang->search->confirmDelete : null;
  74. $savedQueryList = array();
  75. if(is_array($queries))
  76. {
  77. foreach($queries as $query)
  78. {
  79. if(!is_object($query)) continue;
  80. $savedQueryList[] = array('id' => $query->id, 'text' => $query->title, 'noDelete' => $query->account != $app->user->account);
  81. }
  82. }
  83. /* Build date period list. */
  84. $datePeriods = array();
  85. $dpText = $lang->datepicker->dpText;
  86. $datePeriods[] = array('type' => 'heading', 'text' => $dpText->TEXT_DATE, 'className' => 'whitespace-nowrap');
  87. $datePeriods[] = array('value' => '$lastWeek', 'text' => $dpText->TEXT_PREV_WEEK);
  88. $datePeriods[] = array('value' => '$thisWeek', 'text' => $dpText->TEXT_THIS_WEEK);
  89. $datePeriods[] = array('value' => '$yesterday', 'text' => $dpText->TEXT_YESTERDAY);
  90. $datePeriods[] = array('value' => '$today', 'text' => $dpText->TEXT_TODAY);
  91. $datePeriods[] = array('value' => '$lastMonth', 'text' => $dpText->TEXT_PREV_MONTH);
  92. $datePeriods[] = array('value' => '$thisMonth', 'text' => $dpText->TEXT_THIS_MONTH);
  93. /* Build search form setting. */
  94. $setting = new stdClass();
  95. $setting->actionURL = $actionURL;
  96. $setting->operators = $operators;
  97. $setting->conditions = $conditions;
  98. $setting->defaultData = $defaultData;
  99. $setting->groupItemCount = $config->search->groupItems;
  100. $setting->groupTitles = array($lang->search->group1, $lang->search->group2);
  101. $setting->andText = $lang->search->andor['and'];
  102. $setting->orText = $lang->search->andor['or'];
  103. $setting->searchBtnText = $lang->search->common;
  104. $setting->resetBtnText = $lang->search->reset;
  105. $setting->canSaveQuery = $canSaveQuery ? $this->createLink('search', 'saveQuery', "module=$module&onMenuBar=$onMenuBar") : false;
  106. $setting->canDeleteQuery = $canDeleteQuery;
  107. $setting->savedQueryList = $savedQueryList;
  108. $setting->deleteQueryConfirm = $deleteQueryConfirm;
  109. $setting->saveQueryPanelTitle = $lang->search->savedQuery;
  110. $setting->saveQueryBtnText = $lang->search->saveCondition;
  111. $setting->onMenuBar = $onMenuBar;
  112. $setting->datePeriods = $datePeriods;
  113. /**
  114. * 渲染 JSON 字符串并发送到客户端。
  115. * Render setting data to string and send to client.
  116. */
  117. renderJson($setting);