Commit 3a7afecaf6549fcd771c6a534e7f166b657af493
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
Showing
3 changed files
with
24 additions
and
13 deletions
presentation/lookAndFeel/knowledgeTree/js/constructed_search.js
| @@ -84,7 +84,7 @@ function addNewCriteria(add_button) { | @@ -84,7 +84,7 @@ function addNewCriteria(add_button) { | ||
| 84 | // ok, warn the user that we're loading the item. | 84 | // ok, warn the user that we're loading the item. |
| 85 | replaceChildNodes(notify_message, 'loading...'); | 85 | replaceChildNodes(notify_message, 'loading...'); |
| 86 | var newCriteriaText = scrapeText(select.options[select.selectedIndex])+' '; // FIXME insert the "input" here. | 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 | createAdditionalCriteriaOption(parent_table); | 88 | createAdditionalCriteriaOption(parent_table); |
| 89 | var removeButton = INPUT({'type':'button', 'value':'Remove'}); | 89 | var removeButton = INPUT({'type':'button', 'value':'Remove'}); |
| 90 | attachToElementEvent(removeButton, 'click', partial(removeCriteria, removeButton)); | 90 | attachToElementEvent(removeButton, 'click', partial(removeCriteria, removeButton)); |
| @@ -117,11 +117,11 @@ function do_addNewCriteria(destination_cell, crit_id, table_id, req) { | @@ -117,11 +117,11 @@ function do_addNewCriteria(destination_cell, crit_id, table_id, req) { | ||
| 117 | 117 | ||
| 118 | for (var i=0; i<inputs.length; i++) { | 118 | for (var i=0; i<inputs.length; i++) { |
| 119 | var obj = inputs[i]; | 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 | for (var i=0; i<selects.length; i++) { | 122 | for (var i=0; i<selects.length; i++) { |
| 123 | var obj = selects[i]; | 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 | simpleLog('DEBUG','criteria addition complete.'); | 126 | simpleLog('DEBUG','criteria addition complete.'); |
| 127 | } | 127 | } |
| @@ -202,7 +202,7 @@ function addBooleanGroup(addbutton) { | @@ -202,7 +202,7 @@ function addBooleanGroup(addbutton) { | ||
| 202 | // get an id for the table. | 202 | // get an id for the table. |
| 203 | var table_id = getBooleanGroupId(tableObj); | 203 | var table_id = getBooleanGroupId(tableObj); |
| 204 | // add the grouping string | 204 | // add the grouping string |
| 205 | - groupingString = '<p class="helpText">Return items which match <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 <select name="boolean_search['+table_id+'][join]"><option value="AND">all</option><option value="OR">any</option></select> of the criteria specified.</p>'; |
| 206 | t = DIV(null); | 206 | t = DIV(null); |
| 207 | t.innerHTML = groupingString; | 207 | t.innerHTML = groupingString; |
| 208 | var paraObj = t.getElementsByTagName('P')[0]; | 208 | var paraObj = t.getElementsByTagName('P')[0]; |
presentation/lookAndFeel/knowledgeTree/search/booleanSearch.php
| @@ -68,7 +68,7 @@ class BooleanSearchDispatcher extends KTStandardDispatcher { | @@ -68,7 +68,7 @@ class BooleanSearchDispatcher extends KTStandardDispatcher { | ||
| 68 | $criteria_set[$k][] = array($oCriterion, $dataset["data"]); | 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 | return $res; | 73 | return $res; |
| 74 | } | 74 | } |
| @@ -76,7 +76,15 @@ class BooleanSearchDispatcher extends KTStandardDispatcher { | @@ -76,7 +76,15 @@ class BooleanSearchDispatcher extends KTStandardDispatcher { | ||
| 76 | function _oneCriteriaSetToSQL($aOneCriteriaSet) { | 76 | function _oneCriteriaSetToSQL($aOneCriteriaSet) { |
| 77 | $aSQL = array(); | 77 | $aSQL = array(); |
| 78 | $aJoinSQL = array(); | 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 | $oCriterion = $oCriterionPair[0]; | 88 | $oCriterion = $oCriterionPair[0]; |
| 81 | $aReq = $oCriterionPair[1]; | 89 | $aReq = $oCriterionPair[1]; |
| 82 | $res = $oCriterion->searchSQL($aReq); | 90 | $res = $oCriterion->searchSQL($aReq); |
| @@ -108,24 +116,27 @@ class BooleanSearchDispatcher extends KTStandardDispatcher { | @@ -108,24 +116,27 @@ class BooleanSearchDispatcher extends KTStandardDispatcher { | ||
| 108 | return array($aCritQueries, $aCritParams, $aJoinSQL); | 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 | $aJoinSQL = array(); | 120 | $aJoinSQL = array(); |
| 113 | $aSearchStrings = array(); | 121 | $aSearchStrings = array(); |
| 114 | $aParams = array(); | 122 | $aParams = array(); |
| 115 | foreach ($aCriteriaSet as $k => $aOneCriteriaSet) { | 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 | $aJoinSQL = array_merge($aJoinSQL, $aThisJoinSQL); | 128 | $aJoinSQL = array_merge($aJoinSQL, $aThisJoinSQL); |
| 118 | $aParams = array_merge($aParams, $aThisParams); | 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 | $sJoinSQL = join(" ", $aJoinSQL); | 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 | return array($sSearchString, $aParams, $sJoinSQL); | 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 | global $default; | 138 | global $default; |
| 128 | - list($sSQLSearchString, $aCritParams, $sJoinSQL) = $this->criteriaSetToSQL($aCriteriaSet, $mergeType); | 139 | + list($sSQLSearchString, $aCritParams, $sJoinSQL) = $this->criteriaSetToSQL($aCriteriaSet, $sMergeType); |
| 129 | 140 | ||
| 130 | $sToSearch = KTUtil::arrayGet($aOrigReq, 'fToSearch', 'Live'); // actually never present in this version. | 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,7 +56,7 @@ legend { border: 1px dotted #999;} | ||
| 56 | <fieldset> | 56 | <fieldset> |
| 57 | <legend>Criteria Group</legend> | 57 | <legend>Criteria Group</legend> |
| 58 | 58 | ||
| 59 | - <p class="helpText">Return items which match <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 <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 | <table class="advanced-search-form"> | 61 | <table class="advanced-search-form"> |
| 62 | <tbody> | 62 | <tbody> |