diff --git a/presentation/lookAndFeel/knowledgeTree/js/constructed_search.js b/presentation/lookAndFeel/knowledgeTree/js/constructed_search.js index e482a60..4752378 100644 --- a/presentation/lookAndFeel/knowledgeTree/js/constructed_search.js +++ b/presentation/lookAndFeel/knowledgeTree/js/constructed_search.js @@ -19,6 +19,22 @@ function removeFromElementEvent(elem, event_name, func) { } } +var booleanGroups = Array(); + +function getBooleanGroupId(table) { + for (var i=0; i of the criteria specified.

'; + t = DIV(null); + t.innerHTML = groupingString; + var paraObj = t.getElementsByTagName('P')[0]; + fieldsetObj.insertBefore(paraObj, tableObj); + + // add a basic item to the table. + createAdditionalCriteriaOption(tableObj); + // done. + simpleLog('DEBUG','done adding boolean group.'); +} + +// FIXME do we want a "remove boolean group" setting? +// FIXME yes, and its easy (find parent, find ITS parent, toast.) +function initialiseChecks() { + + var initialTables = getElementsByTagAndClassName('TABLE','advanced-search-form'); + simpleLog('DEBUG','initialising '+initialTables.length+' criteria groups.'); + var t = TABLE(null); + for (var i=0; ierrorRedirectToMain('You need to have at least 1 condition.'); @@ -59,23 +59,24 @@ class BooleanSearchDispatcher extends KTStandardDispatcher { // Step 1: extract the criteria selection, and create an array of criteria. $criteria_set = array(); - foreach ($datavars as $order => $dataset) { - $oCriterion = Criteria::getCriterionByNumber($dataset["type"]); - if (PEAR::isError($oCriterion)) { - $this->errorRedirectToMain('Invalid criteria specified.'); + foreach (array_keys($datavars) as $k) { + foreach ($datavars[$k] as $order => $dataset) { + $oCriterion = Criteria::getCriterionByNumber($dataset["type"]); + if (PEAR::isError($oCriterion)) { + $this->errorRedirectToMain('Invalid criteria specified.'); + } + $criteria_set[$k][] = array($oCriterion, $dataset["data"]); } - $criteria_set[] = array($oCriterion, $dataset["data"]); } - $res = $this->handleCriteriaSet($criteria_set, $booleanJoinName); + $res = $this->handleCriteriaSet($criteria_set, $booleanJoinName, $_REQUEST['boolean_condition']); return $res; } - - function handleCriteriaSet($aCriteriaSet, $mergeType='AND') { - global $default; - $aSQL = array(); - $aJoinSQL = array(); - foreach ($aCriteriaSet as $oCriterionPair) { + + function _oneCriteriaSetToSQL($aOneCriteriaSet) { + $aSQL = array(); + $aJoinSQL = array(); + foreach ($aOneCriteriaSet as $oCriterionPair) { $oCriterion = $oCriterionPair[0]; $aReq = $oCriterionPair[1]; $res = $oCriterion->searchSQL($aReq); @@ -104,8 +105,27 @@ class BooleanSearchDispatcher extends KTStandardDispatcher { exit(0); } - $sSQLSearchString = join("\n ".$mergeType." ", $aCritQueries); + return array($aCritQueries, $aCritParams, $aJoinSQL); + } + + function criteriaSetToSQL($aCriteriaSet, $mergeType='AND', $innerMergeTypes = null) { + $aJoinSQL = array(); + $aSearchStrings = array(); + $aParams = array(); + foreach ($aCriteriaSet as $k => $aOneCriteriaSet) { + list($aThisCritQueries, $aThisParams, $aThisJoinSQL) = $this->_oneCriteriaSetToSQL($aOneCriteriaSet); + $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)"; + } $sJoinSQL = join(" ", $aJoinSQL); + $sSearchString = "\n\t(" . join("\n\t\t" . $mergeType . " ", $aSearchStrings) . "\n\t)"; + return array($sSearchString, $aParams, $sJoinSQL); + } + + function handleCriteriaSet($aCriteriaSet, $mergeType='AND', $innerMergeTypes = null) { + global $default; + list($sSQLSearchString, $aCritParams, $sJoinSQL) = $this->criteriaSetToSQL($aCriteriaSet, $mergeType); $sToSearch = KTUtil::arrayGet($aOrigReq, 'fToSearch', 'Live'); // actually never present in this version. @@ -141,7 +161,7 @@ class BooleanSearchDispatcher extends KTStandardDispatcher { $aParams[] = $sToSearch; $aParams = array_merge($aParams, $aCritParams); - //'
'.var_dump(DBUtil::getResultArray(array($sQuery, $aParams)));
+		//print '
';var_dump(DBUtil::getResultArray(array($sQuery, $aParams)));
 		//exit(0);
 		//return '
'.print_r(DBUtil::getResultArray(array($sQuery, $aParams)), true).'
'; $iStartIndex = 1; diff --git a/templates/ktcore/boolean_search.smarty b/templates/ktcore/boolean_search.smarty index be525c1..80cbcbe 100644 --- a/templates/ktcore/boolean_search.smarty +++ b/templates/ktcore/boolean_search.smarty @@ -50,12 +50,15 @@ legend { border: 1px dotted #999;}
+ +

Return items which match   of the criteria groups specified.

+
- Boolean Search. + Criteria Group -

Return items which match   of the criteria specified.

+

Return items which match   of the criteria specified.

- +
@@ -76,8 +79,13 @@ legend { border: 1px dotted #999;}
Criteria
- + + + + +
+ ---> +