Commit 3a7afecaf6549fcd771c6a534e7f166b657af493

Authored by nbm
1 parent c26fcb26

Make the boolean_search dictionary (from the form) simpler to use and

manage.


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@3909 c91229c3-7414-0410-bfa2-8a42b809f60b
presentation/lookAndFeel/knowledgeTree/js/constructed_search.js
... ... @@ -84,7 +84,7 @@ function addNewCriteria(add_button) {
84 84 // ok, warn the user that we're loading the item.
85 85 replaceChildNodes(notify_message, 'loading...');
86 86 var newCriteriaText = scrapeText(select.options[select.selectedIndex])+' '; // FIXME insert the "input" here.
87   - replaceChildNodes(select.parentNode, newCriteriaText, INPUT({'type':'hidden', 'name':'boolean_search['+tableId+']['+critId+'][type]','value':select.value})); // works thanks to DOM co-ercion.
  87 + replaceChildNodes(select.parentNode, newCriteriaText, INPUT({'type':'hidden', 'name':'boolean_search['+tableId+'][values]['+critId+'][type]','value':select.value})); // works thanks to DOM co-ercion.
88 88 createAdditionalCriteriaOption(parent_table);
89 89 var removeButton = INPUT({'type':'button', 'value':'Remove'});
90 90 attachToElementEvent(removeButton, 'click', partial(removeCriteria, removeButton));
... ... @@ -117,11 +117,11 @@ function do_addNewCriteria(destination_cell, crit_id, table_id, req) {
117 117  
118 118 for (var i=0; i<inputs.length; i++) {
119 119 var obj = inputs[i];
120   - obj.name = "boolean_search["+table_id+"]["+crit_id+"][data]["+obj.name+"]";
  120 + obj.name = "boolean_search["+table_id+"][values]["+crit_id+"][data]["+obj.name+"]";
121 121 }
122 122 for (var i=0; i<selects.length; i++) {
123 123 var obj = selects[i];
124   - obj.name = "boolean_search["+table_id+"]["+crit_id+"][data]["+obj.name+"]";
  124 + obj.name = "boolean_search["+table_id+"][values]["+crit_id+"][data]["+obj.name+"]";
125 125 }
126 126 simpleLog('DEBUG','criteria addition complete.');
127 127 }
... ... @@ -202,7 +202,7 @@ function addBooleanGroup(addbutton) {
202 202 // get an id for the table.
203 203 var table_id = getBooleanGroupId(tableObj);
204 204 // add the grouping string
205   - groupingString = '<p class="helpText">Return items which match &nbsp;<select name="boolean_condition['+table_id+']"><option value="AND">all</option><option value="OR">any</option></select> of the criteria specified.</p>';
  205 + groupingString = '<p class="helpText">Return items which match &nbsp;<select name="boolean_search['+table_id+'][join]"><option value="AND">all</option><option value="OR">any</option></select> of the criteria specified.</p>';
206 206 t = DIV(null);
207 207 t.innerHTML = groupingString;
208 208 var paraObj = t.getElementsByTagName('P')[0];
... ...
presentation/lookAndFeel/knowledgeTree/search/booleanSearch.php
... ... @@ -68,7 +68,7 @@ class BooleanSearchDispatcher extends KTStandardDispatcher {
68 68 $criteria_set[$k][] = array($oCriterion, $dataset["data"]);
69 69 }
70 70 }
71   - $res = $this->handleCriteriaSet($criteria_set, $booleanJoinName, $_REQUEST['boolean_condition']);
  71 + $res = $this->handleCriteriaSet($datavars, $booleanJoinName);
72 72  
73 73 return $res;
74 74 }
... ... @@ -76,7 +76,15 @@ class BooleanSearchDispatcher extends KTStandardDispatcher {
76 76 function _oneCriteriaSetToSQL($aOneCriteriaSet) {
77 77 $aSQL = array();
78 78 $aJoinSQL = array();
79   - foreach ($aOneCriteriaSet as $oCriterionPair) {
  79 + $criteria_set = array();
  80 + foreach ($aOneCriteriaSet as $order => $dataset) {
  81 + $oCriterion = Criteria::getCriterionByNumber($dataset["type"]);
  82 + if (PEAR::isError($oCriterion)) {
  83 + $this->errorRedirectToMain('Invalid criteria specified.');
  84 + }
  85 + $criteria_set[] = array($oCriterion, $dataset["data"]);
  86 + }
  87 + foreach ($criteria_set as $oCriterionPair) {
80 88 $oCriterion = $oCriterionPair[0];
81 89 $aReq = $oCriterionPair[1];
82 90 $res = $oCriterion->searchSQL($aReq);
... ... @@ -108,24 +116,27 @@ class BooleanSearchDispatcher extends KTStandardDispatcher {
108 116 return array($aCritQueries, $aCritParams, $aJoinSQL);
109 117 }
110 118  
111   - function criteriaSetToSQL($aCriteriaSet, $mergeType='AND', $innerMergeTypes = null) {
  119 + function criteriaSetToSQL($aCriteriaSet, $sMergeType = "AND") {
112 120 $aJoinSQL = array();
113 121 $aSearchStrings = array();
114 122 $aParams = array();
115 123 foreach ($aCriteriaSet as $k => $aOneCriteriaSet) {
116   - list($aThisCritQueries, $aThisParams, $aThisJoinSQL) = $this->_oneCriteriaSetToSQL($aOneCriteriaSet);
  124 + if (is_null($aOneCriteriaSet["values"])) {
  125 + continue;
  126 + }
  127 + list($aThisCritQueries, $aThisParams, $aThisJoinSQL) = $this->_oneCriteriaSetToSQL($aOneCriteriaSet["values"]);
117 128 $aJoinSQL = array_merge($aJoinSQL, $aThisJoinSQL);
118 129 $aParams = array_merge($aParams, $aThisParams);
119   - $aSearchStrings[] = "\n\t\t(\n\t\t\t" . join("\n " . KTUtil::arrayGet($innerMergeTypes, $k, "AND") . " ", $aThisCritQueries) . "\n\t\t)";
  130 + $aSearchStrings[] = "\n\t\t(\n\t\t\t" . join("\n " . KTUtil::arrayGet($aOneCriteriaSet, 'join', "AND") . " ", $aThisCritQueries) . "\n\t\t)";
120 131 }
121 132 $sJoinSQL = join(" ", $aJoinSQL);
122   - $sSearchString = "\n\t(" . join("\n\t\t" . $mergeType . " ", $aSearchStrings) . "\n\t)";
  133 + $sSearchString = "\n\t(" . join("\n\t\t" . $sMergeType . " ", $aSearchStrings) . "\n\t)";
123 134 return array($sSearchString, $aParams, $sJoinSQL);
124 135 }
125 136  
126   - function handleCriteriaSet($aCriteriaSet, $mergeType='AND', $innerMergeTypes = null) {
  137 + function handleCriteriaSet($aCriteriaSet, $sMergeType = "AND") {
127 138 global $default;
128   - list($sSQLSearchString, $aCritParams, $sJoinSQL) = $this->criteriaSetToSQL($aCriteriaSet, $mergeType);
  139 + list($sSQLSearchString, $aCritParams, $sJoinSQL) = $this->criteriaSetToSQL($aCriteriaSet, $sMergeType);
129 140  
130 141 $sToSearch = KTUtil::arrayGet($aOrigReq, 'fToSearch', 'Live'); // actually never present in this version.
131 142  
... ...
templates/ktcore/boolean_search.smarty
... ... @@ -56,7 +56,7 @@ legend { border: 1px dotted #999;}
56 56 <fieldset>
57 57 <legend>Criteria Group</legend>
58 58  
59   - <p class="helpText">Return items which match &nbsp;<select name="boolean_condition[0]"><option value="AND">all</option><option value="OR">any</option></select> of the criteria specified.</p>
  59 + <p class="helpText">Return items which match &nbsp;<select name="boolean_search[0][join]"><option value="AND">all</option><option value="OR">any</option></select> of the criteria specified.</p>
60 60  
61 61 <table class="advanced-search-form">
62 62 <tbody>
... ...