Commit 940d38f5093d940eddcc614cceb5aa5b6b023ede
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
Showing
3 changed files
with
22 additions
and
32 deletions
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 <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 <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 <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 <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> |