From 3a7afecaf6549fcd771c6a534e7f166b657af493 Mon Sep 17 00:00:00 2001 From: nbm Date: Wed, 2 Nov 2005 14:13:01 +0000 Subject: [PATCH] Make the boolean_search dictionary (from the form) simpler to use and manage. --- presentation/lookAndFeel/knowledgeTree/js/constructed_search.js | 8 ++++---- presentation/lookAndFeel/knowledgeTree/search/booleanSearch.php | 27 +++++++++++++++++++-------- templates/ktcore/boolean_search.smarty | 2 +- 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/presentation/lookAndFeel/knowledgeTree/js/constructed_search.js b/presentation/lookAndFeel/knowledgeTree/js/constructed_search.js index 4752378..660560b 100644 --- a/presentation/lookAndFeel/knowledgeTree/js/constructed_search.js +++ b/presentation/lookAndFeel/knowledgeTree/js/constructed_search.js @@ -84,7 +84,7 @@ function addNewCriteria(add_button) { // ok, warn the user that we're loading the item. replaceChildNodes(notify_message, 'loading...'); var newCriteriaText = scrapeText(select.options[select.selectedIndex])+' '; // FIXME insert the "input" here. - replaceChildNodes(select.parentNode, newCriteriaText, INPUT({'type':'hidden', 'name':'boolean_search['+tableId+']['+critId+'][type]','value':select.value})); // works thanks to DOM co-ercion. + replaceChildNodes(select.parentNode, newCriteriaText, INPUT({'type':'hidden', 'name':'boolean_search['+tableId+'][values]['+critId+'][type]','value':select.value})); // works thanks to DOM co-ercion. createAdditionalCriteriaOption(parent_table); var removeButton = INPUT({'type':'button', 'value':'Remove'}); attachToElementEvent(removeButton, 'click', partial(removeCriteria, removeButton)); @@ -117,11 +117,11 @@ function do_addNewCriteria(destination_cell, crit_id, table_id, req) { for (var i=0; i of the criteria specified.

'; + groupingString = '

Return items which match   of the criteria specified.

'; t = DIV(null); t.innerHTML = groupingString; var paraObj = t.getElementsByTagName('P')[0]; diff --git a/presentation/lookAndFeel/knowledgeTree/search/booleanSearch.php b/presentation/lookAndFeel/knowledgeTree/search/booleanSearch.php index 00477a2..b6b068a 100644 --- a/presentation/lookAndFeel/knowledgeTree/search/booleanSearch.php +++ b/presentation/lookAndFeel/knowledgeTree/search/booleanSearch.php @@ -68,7 +68,7 @@ class BooleanSearchDispatcher extends KTStandardDispatcher { $criteria_set[$k][] = array($oCriterion, $dataset["data"]); } } - $res = $this->handleCriteriaSet($criteria_set, $booleanJoinName, $_REQUEST['boolean_condition']); + $res = $this->handleCriteriaSet($datavars, $booleanJoinName); return $res; } @@ -76,7 +76,15 @@ class BooleanSearchDispatcher extends KTStandardDispatcher { function _oneCriteriaSetToSQL($aOneCriteriaSet) { $aSQL = array(); $aJoinSQL = array(); - foreach ($aOneCriteriaSet as $oCriterionPair) { + $criteria_set = array(); + foreach ($aOneCriteriaSet as $order => $dataset) { + $oCriterion = Criteria::getCriterionByNumber($dataset["type"]); + if (PEAR::isError($oCriterion)) { + $this->errorRedirectToMain('Invalid criteria specified.'); + } + $criteria_set[] = array($oCriterion, $dataset["data"]); + } + foreach ($criteria_set as $oCriterionPair) { $oCriterion = $oCriterionPair[0]; $aReq = $oCriterionPair[1]; $res = $oCriterion->searchSQL($aReq); @@ -108,24 +116,27 @@ class BooleanSearchDispatcher extends KTStandardDispatcher { return array($aCritQueries, $aCritParams, $aJoinSQL); } - function criteriaSetToSQL($aCriteriaSet, $mergeType='AND', $innerMergeTypes = null) { + function criteriaSetToSQL($aCriteriaSet, $sMergeType = "AND") { $aJoinSQL = array(); $aSearchStrings = array(); $aParams = array(); foreach ($aCriteriaSet as $k => $aOneCriteriaSet) { - list($aThisCritQueries, $aThisParams, $aThisJoinSQL) = $this->_oneCriteriaSetToSQL($aOneCriteriaSet); + if (is_null($aOneCriteriaSet["values"])) { + continue; + } + list($aThisCritQueries, $aThisParams, $aThisJoinSQL) = $this->_oneCriteriaSetToSQL($aOneCriteriaSet["values"]); $aJoinSQL = array_merge($aJoinSQL, $aThisJoinSQL); $aParams = array_merge($aParams, $aThisParams); - $aSearchStrings[] = "\n\t\t(\n\t\t\t" . join("\n " . KTUtil::arrayGet($innerMergeTypes, $k, "AND") . " ", $aThisCritQueries) . "\n\t\t)"; + $aSearchStrings[] = "\n\t\t(\n\t\t\t" . join("\n " . KTUtil::arrayGet($aOneCriteriaSet, 'join', "AND") . " ", $aThisCritQueries) . "\n\t\t)"; } $sJoinSQL = join(" ", $aJoinSQL); - $sSearchString = "\n\t(" . join("\n\t\t" . $mergeType . " ", $aSearchStrings) . "\n\t)"; + $sSearchString = "\n\t(" . join("\n\t\t" . $sMergeType . " ", $aSearchStrings) . "\n\t)"; return array($sSearchString, $aParams, $sJoinSQL); } - function handleCriteriaSet($aCriteriaSet, $mergeType='AND', $innerMergeTypes = null) { + function handleCriteriaSet($aCriteriaSet, $sMergeType = "AND") { global $default; - list($sSQLSearchString, $aCritParams, $sJoinSQL) = $this->criteriaSetToSQL($aCriteriaSet, $mergeType); + list($sSQLSearchString, $aCritParams, $sJoinSQL) = $this->criteriaSetToSQL($aCriteriaSet, $sMergeType); $sToSearch = KTUtil::arrayGet($aOrigReq, 'fToSearch', 'Live'); // actually never present in this version. diff --git a/templates/ktcore/boolean_search.smarty b/templates/ktcore/boolean_search.smarty index 80cbcbe..90bdf36 100644 --- a/templates/ktcore/boolean_search.smarty +++ b/templates/ktcore/boolean_search.smarty @@ -56,7 +56,7 @@ legend { border: 1px dotted #999;}
Criteria Group -

Return items which match   of the criteria specified.

+

Return items which match   of the criteria specified.

-- libgit2 0.21.4