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 | 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 <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 | 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 <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 | 61 | <table class="advanced-search-form"> |
| 62 | 62 | <tbody> | ... | ... |