Commit 940d38f5093d940eddcc614cceb5aa5b6b023ede

Authored by Neil Blakey-Milner
1 parent dc08c0a0

Bring the outer boolean into the boolean_search array, and finish the

pagination in the boolean search.


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@3911 c91229c3-7414-0410-bfa2-8a42b809f60b
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+'][values]['+critId+'][type]','value':select.value})); // works thanks to DOM co-ercion. 87 + replaceChildNodes(select.parentNode, newCriteriaText, INPUT({'type':'hidden', 'name':'boolean_search[subgroup]['+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+"][values]["+crit_id+"][data]["+obj.name+"]"; 120 + obj.name = "boolean_search[subgroup]["+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+"][values]["+crit_id+"][data]["+obj.name+"]"; 124 + obj.name = "boolean_search[subgroup]["+table_id+"][values]["+crit_id+"][data]["+obj.name+"]";
125 } 125 }
126 simpleLog('DEBUG','criteria addition complete.'); 126 simpleLog('DEBUG','criteria addition complete.');
127 } 127 }
presentation/lookAndFeel/knowledgeTree/search/booleanSearch.php
@@ -48,27 +48,15 @@ class BooleanSearchDispatcher extends KTStandardDispatcher { @@ -48,27 +48,15 @@ class BooleanSearchDispatcher extends KTStandardDispatcher {
48 // TODO finally return via PatternBrowseableSearchResults (urgh.) 48 // TODO finally return via PatternBrowseableSearchResults (urgh.)
49 49
50 $datavars = KTUtil::arrayGet($_REQUEST, 'boolean_search'); 50 $datavars = KTUtil::arrayGet($_REQUEST, 'boolean_search');
51 - $booleanJoinName = KTUtil::arrayGet($_REQUEST, 'outer_boolean_condition'); 51 + if (!is_array($datavars)) {
  52 + $datavars = unserialize($datavars);
  53 + }
52 54
53 if (empty($datavars)) { 55 if (empty($datavars)) {
54 $this->errorRedirectToMain('You need to have at least 1 condition.'); 56 $this->errorRedirectToMain('You need to have at least 1 condition.');
55 } 57 }
56 - if (empty($booleanJoinName)) {  
57 - $this->errorRedirectToMain('You need to specify which kind of search (ALL/ANY) you wish to perform.');  
58 - }  
59 58
60 - // Step 1: extract the criteria selection, and create an array of criteria.  
61 - $criteria_set = array();  
62 - foreach (array_keys($datavars) as $k) {  
63 - foreach ($datavars[$k] as $order => $dataset) {  
64 - $oCriterion = Criteria::getCriterionByNumber($dataset["type"]);  
65 - if (PEAR::isError($oCriterion)) {  
66 - $this->errorRedirectToMain('Invalid criteria specified.');  
67 - }  
68 - $criteria_set[$k][] = array($oCriterion, $dataset["data"]);  
69 - }  
70 - }  
71 - $res = $this->handleCriteriaSet($datavars, $booleanJoinName); 59 + $res = $this->handleCriteriaSet($datavars, KTUtil::arrayGet($_REQUEST, 'fStartIndex', 1));
72 60
73 return $res; 61 return $res;
74 } 62 }
@@ -116,11 +104,11 @@ class BooleanSearchDispatcher extends KTStandardDispatcher { @@ -116,11 +104,11 @@ class BooleanSearchDispatcher extends KTStandardDispatcher {
116 return array($aCritQueries, $aCritParams, $aJoinSQL); 104 return array($aCritQueries, $aCritParams, $aJoinSQL);
117 } 105 }
118 106
119 - function criteriaSetToSQL($aCriteriaSet, $sMergeType = "AND") { 107 + function criteriaSetToSQL($aCriteriaSet) {
120 $aJoinSQL = array(); 108 $aJoinSQL = array();
121 $aSearchStrings = array(); 109 $aSearchStrings = array();
122 $aParams = array(); 110 $aParams = array();
123 - foreach ($aCriteriaSet as $k => $aOneCriteriaSet) { 111 + foreach ($aCriteriaSet["subgroup"] as $k => $aOneCriteriaSet) {
124 if (is_null($aOneCriteriaSet["values"])) { 112 if (is_null($aOneCriteriaSet["values"])) {
125 continue; 113 continue;
126 } 114 }
@@ -130,13 +118,13 @@ class BooleanSearchDispatcher extends KTStandardDispatcher { @@ -130,13 +118,13 @@ class BooleanSearchDispatcher extends KTStandardDispatcher {
130 $aSearchStrings[] = "\n\t\t(\n\t\t\t" . join("\n " . KTUtil::arrayGet($aOneCriteriaSet, 'join', "AND") . " ", $aThisCritQueries) . "\n\t\t)"; 118 $aSearchStrings[] = "\n\t\t(\n\t\t\t" . join("\n " . KTUtil::arrayGet($aOneCriteriaSet, 'join', "AND") . " ", $aThisCritQueries) . "\n\t\t)";
131 } 119 }
132 $sJoinSQL = join(" ", $aJoinSQL); 120 $sJoinSQL = join(" ", $aJoinSQL);
133 - $sSearchString = "\n\t(" . join("\n\t\t" . $sMergeType . " ", $aSearchStrings) . "\n\t)"; 121 + $sSearchString = "\n\t(" . join("\n\t\t" . $aCriteriaSet['join'] . " ", $aSearchStrings) . "\n\t)";
134 return array($sSearchString, $aParams, $sJoinSQL); 122 return array($sSearchString, $aParams, $sJoinSQL);
135 } 123 }
136 124
137 - function handleCriteriaSet($aCriteriaSet, $sMergeType = "AND") { 125 + function handleCriteriaSet($aCriteriaSet, $iStartIndex) {
138 global $default; 126 global $default;
139 - list($sSQLSearchString, $aCritParams, $sJoinSQL) = $this->criteriaSetToSQL($aCriteriaSet, $sMergeType); 127 + list($sSQLSearchString, $aCritParams, $sJoinSQL) = $this->criteriaSetToSQL($aCriteriaSet);
140 128
141 $sToSearch = KTUtil::arrayGet($aOrigReq, 'fToSearch', 'Live'); // actually never present in this version. 129 $sToSearch = KTUtil::arrayGet($aOrigReq, 'fToSearch', 'Live'); // actually never present in this version.
142 130
@@ -175,8 +163,6 @@ class BooleanSearchDispatcher extends KTStandardDispatcher { @@ -175,8 +163,6 @@ class BooleanSearchDispatcher extends KTStandardDispatcher {
175 //print '<pre>';var_dump(DBUtil::getResultArray(array($sQuery, $aParams))); 163 //print '<pre>';var_dump(DBUtil::getResultArray(array($sQuery, $aParams)));
176 //exit(0); 164 //exit(0);
177 //return '<pre>'.print_r(DBUtil::getResultArray(array($sQuery, $aParams)), true).'</pre>'; 165 //return '<pre>'.print_r(DBUtil::getResultArray(array($sQuery, $aParams)), true).'</pre>';
178 - $iStartIndex = 1;  
179 -  
180 $aColumns = array("folder_name", "file_name", "document_name", "doc_count", "view"); 166 $aColumns = array("folder_name", "file_name", "document_name", "doc_count", "view");
181 $aColumnTypes = array(3,3,3,1,3); 167 $aColumnTypes = array(3,3,3,1,3);
182 $aColumnHeaders = array("<font color=\"ffffff\"><img src=$default->graphicsUrl/widgets/dfolder.gif>" . _("Folder") . "</font>", "<font color=\"ffffff\">" . _("Name") . "</font>", "<font color=\"ffffff\">" . _("Title") . "</font>", "<font color=\"ffffff\">" . _("Matches") . "</font>", "<font color=\"ffffff\">" . _("View") . "</font>"); 168 $aColumnHeaders = array("<font color=\"ffffff\"><img src=$default->graphicsUrl/widgets/dfolder.gif>" . _("Folder") . "</font>", "<font color=\"ffffff\">" . _("Name") . "</font>", "<font color=\"ffffff\">" . _("Title") . "</font>", "<font color=\"ffffff\">" . _("Matches") . "</font>", "<font color=\"ffffff\">" . _("View") . "</font>");
@@ -187,9 +173,12 @@ class BooleanSearchDispatcher extends KTStandardDispatcher { @@ -187,9 +173,12 @@ class BooleanSearchDispatcher extends KTStandardDispatcher {
187 $oPatternBrowse = & new PatternBrowseableSearchResults(array($sQuery, $aParams), 10, $aColumns, $aColumnTypes, $aColumnHeaders, $aLinkURLs, $aDBQueryStringColumns, $aQueryStringVariableNames); 173 $oPatternBrowse = & new PatternBrowseableSearchResults(array($sQuery, $aParams), 10, $aColumns, $aColumnTypes, $aColumnHeaders, $aLinkURLs, $aDBQueryStringColumns, $aQueryStringVariableNames);
188 $oPatternBrowse->setStartIndex($iStartIndex); 174 $oPatternBrowse->setStartIndex($iStartIndex);
189 $oPatternBrowse->setSearchText(""); 175 $oPatternBrowse->setSearchText("");
190 - $sForSearch = "<input type=\"hidden\" name=\"fForSearch\" value=\"1\" />";  
191 -  
192 - return renderHeading(_("Advanced Search")) . $oPatternBrowse->render() . $sForSearch . $sRefreshMessage; 176 + $sFormStart = '<form method="POST" name="MainForm">';
  177 +
  178 + $sFormEnd = '<input type="hidden" name="boolean_search" value="'. htmlentities(serialize($aCriteriaSet)) . '" />';
  179 + $sFormEnd .= '<input type="hidden" name="action" value="performSearch" />';
  180 +
  181 + return renderHeading(_("Advanced Search")) . $sFormStart . $oPatternBrowse->render() . $sFormEnd . $sRefreshMessage;
193 } 182 }
194 } 183 }
195 184
templates/ktcore/boolean_search.smarty
@@ -48,15 +48,16 @@ legend { border: 1px dotted #999;} @@ -48,15 +48,16 @@ legend { border: 1px dotted #999;}
48 48
49 <h2>Boolean Search</h2> 49 <h2>Boolean Search</h2>
50 50
51 -<form> 51 +<form method="POST">
52 <input type="hidden" name="action" value="performSearch" /> 52 <input type="hidden" name="action" value="performSearch" />
53 53
54 - <p class="helpText">Return items which match &nbsp;<select name="outer_boolean_condition"><option value="AND">all</option><option value="OR">any</option></select> of the <strong>criteria groups</strong> specified.</p> 54 + <p class="helpText">Return items which match &nbsp;<select
  55 +name="boolean_search[join]"><option value="AND">all</option><option value="OR">any</option></select> of the <strong>criteria groups</strong> specified.</p>
55 56
56 <fieldset> 57 <fieldset>
57 <legend>Criteria Group</legend> 58 <legend>Criteria Group</legend>
58 59
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 + <p class="helpText">Return items which match &nbsp;<select name="boolean_search[subgroup][0][join]"><option value="AND">all</option><option value="OR">any</option></select> of the criteria specified.</p>
60 61
61 <table class="advanced-search-form"> 62 <table class="advanced-search-form">
62 <tbody> 63 <tbody>