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 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+'][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 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+"][values]["+crit_id+"][data]["+obj.name+"]";
  120 + obj.name = "boolean_search[subgroup]["+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+"][values]["+crit_id+"][data]["+obj.name+"]";
  124 + obj.name = "boolean_search[subgroup]["+table_id+"][values]["+crit_id+"][data]["+obj.name+"]";
125 125 }
126 126 simpleLog('DEBUG','criteria addition complete.');
127 127 }
... ...
presentation/lookAndFeel/knowledgeTree/search/booleanSearch.php
... ... @@ -48,27 +48,15 @@ class BooleanSearchDispatcher extends KTStandardDispatcher {
48 48 // TODO finally return via PatternBrowseableSearchResults (urgh.)
49 49  
50 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 55 if (empty($datavars)) {
54 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 61 return $res;
74 62 }
... ... @@ -116,11 +104,11 @@ class BooleanSearchDispatcher extends KTStandardDispatcher {
116 104 return array($aCritQueries, $aCritParams, $aJoinSQL);
117 105 }
118 106  
119   - function criteriaSetToSQL($aCriteriaSet, $sMergeType = "AND") {
  107 + function criteriaSetToSQL($aCriteriaSet) {
120 108 $aJoinSQL = array();
121 109 $aSearchStrings = array();
122 110 $aParams = array();
123   - foreach ($aCriteriaSet as $k => $aOneCriteriaSet) {
  111 + foreach ($aCriteriaSet["subgroup"] as $k => $aOneCriteriaSet) {
124 112 if (is_null($aOneCriteriaSet["values"])) {
125 113 continue;
126 114 }
... ... @@ -130,13 +118,13 @@ class BooleanSearchDispatcher extends KTStandardDispatcher {
130 118 $aSearchStrings[] = "\n\t\t(\n\t\t\t" . join("\n " . KTUtil::arrayGet($aOneCriteriaSet, 'join', "AND") . " ", $aThisCritQueries) . "\n\t\t)";
131 119 }
132 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 122 return array($sSearchString, $aParams, $sJoinSQL);
135 123 }
136 124  
137   - function handleCriteriaSet($aCriteriaSet, $sMergeType = "AND") {
  125 + function handleCriteriaSet($aCriteriaSet, $iStartIndex) {
138 126 global $default;
139   - list($sSQLSearchString, $aCritParams, $sJoinSQL) = $this->criteriaSetToSQL($aCriteriaSet, $sMergeType);
  127 + list($sSQLSearchString, $aCritParams, $sJoinSQL) = $this->criteriaSetToSQL($aCriteriaSet);
140 128  
141 129 $sToSearch = KTUtil::arrayGet($aOrigReq, 'fToSearch', 'Live'); // actually never present in this version.
142 130  
... ... @@ -175,8 +163,6 @@ class BooleanSearchDispatcher extends KTStandardDispatcher {
175 163 //print '<pre>';var_dump(DBUtil::getResultArray(array($sQuery, $aParams)));
176 164 //exit(0);
177 165 //return '<pre>'.print_r(DBUtil::getResultArray(array($sQuery, $aParams)), true).'</pre>';
178   - $iStartIndex = 1;
179   -
180 166 $aColumns = array("folder_name", "file_name", "document_name", "doc_count", "view");
181 167 $aColumnTypes = array(3,3,3,1,3);
182 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 173 $oPatternBrowse = & new PatternBrowseableSearchResults(array($sQuery, $aParams), 10, $aColumns, $aColumnTypes, $aColumnHeaders, $aLinkURLs, $aDBQueryStringColumns, $aQueryStringVariableNames);
188 174 $oPatternBrowse->setStartIndex($iStartIndex);
189 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 48  
49 49 <h2>Boolean Search</h2>
50 50  
51   -<form>
  51 +<form method="POST">
52 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 57 <fieldset>
57 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 62 <table class="advanced-search-form">
62 63 <tbody>
... ...