Commit 605725b5057978ac23492178acc4b2a7628140a1

Authored by Jalaloedien Abrahams
1 parent 148d3200

KTS-2214

"Problem with simple search dashlet - database error on searches"
Fixed. Changed PartialQuery and Criteria.inc to cater for infinite search terms...

Committed By: Jalaloedien Abrahams
Reviewed By: Conrad Vermeulen

git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@7024 c91229c3-7414-0410-bfa2-8a42b809f60b
lib/browse/Criteria.inc
@@ -1036,8 +1036,11 @@ class SearchableTextCriterion extends BrowseCriterion { @@ -1036,8 +1036,11 @@ class SearchableTextCriterion extends BrowseCriterion {
1036 continue; 1036 continue;
1037 } 1037 }
1038 $keywords[$i] = '%'.$keywords[$i].'%'; 1038 $keywords[$i] = '%'.$keywords[$i].'%';
  1039 + if($i > 0){
  1040 + $p[0] .= ' AND ';
  1041 + }
  1042 + $p[0] .= "DST.document_text LIKE ?";
1039 } 1043 }
1040 - $p[0] = "DST.document_text LIKE ? AND DST.document_text LIKE ? ";  
1041 $p[1] = $keywords; 1044 $p[1] = $keywords;
1042 }else{ 1045 }else{
1043 $p[0] = "DST.document_text LIKE ? "; 1046 $p[0] = "DST.document_text LIKE ? ";
lib/browse/PartialQuery.inc.php
@@ -306,8 +306,11 @@ class SimpleSearchQuery extends PartialQuery { @@ -306,8 +306,11 @@ class SimpleSearchQuery extends PartialQuery {
306 if(count($keywords) > 1){ 306 if(count($keywords) > 1){
307 for($i=0; $i<count($keywords); $i++){ 307 for($i=0; $i<count($keywords); $i++){
308 $keywords[$i] = '%'.$keywords[$i].'%'; 308 $keywords[$i] = '%'.$keywords[$i].'%';
309 - }  
310 - $aPotentialWhereString = 'FST.folder_text LIKE ? AND FST.folder_text LIKE ? '; 309 + if($i > 0){
  310 + $aPotentialWhereString .= ' AND ';
  311 + }
  312 + $aPotentialWhereString .= 'FST.folder_text LIKE ?';
  313 + }
311 }else{ 314 }else{
312 $aPotentialWhereString = 'FST.folder_text LIKE ? '; 315 $aPotentialWhereString = 'FST.folder_text LIKE ? ';
313 } 316 }
@@ -339,7 +342,8 @@ class SimpleSearchQuery extends PartialQuery { @@ -339,7 +342,8 @@ class SimpleSearchQuery extends PartialQuery {
339 $aParams = array($this->searchable_text); 342 $aParams = array($this->searchable_text);
340 } 343 }
341 344
342 - $aParams = kt_array_merge($aPermissionParams, $aParams); 345 + $aParams = kt_array_merge($aPermissionParams, $aParams);
  346 +
343 return array($sQuery, $aParams); 347 return array($sQuery, $aParams);
344 } 348 }
345 349
lib/search/searchutil.inc.php
@@ -56,7 +56,7 @@ class KTSearchUtil { @@ -56,7 +56,7 @@ class KTSearchUtil {
56 $type = KTUtil::arrayGet($dataset, "type"); 56 $type = KTUtil::arrayGet($dataset, "type");
57 $sql = KTUtil::arrayGet($dataset, "sql"); 57 $sql = KTUtil::arrayGet($dataset, "sql");
58 if (!empty($type)) { 58 if (!empty($type)) {
59 - $oCriteriaRegistry =& KTCriteriaRegistry::getSingleton(); 59 + $oCriteriaRegistry =& KTCriteriaRegistry::getSingleton();
60 $oCriterion = $oCriteriaRegistry->getCriterion($dataset['type']); 60 $oCriterion = $oCriteriaRegistry->getCriterion($dataset['type']);
61 if (PEAR::isError($oCriterion)) { 61 if (PEAR::isError($oCriterion)) {
62 return PEAR::raiseError(_kt('Invalid criteria specified.')); 62 return PEAR::raiseError(_kt('Invalid criteria specified.'));
@@ -75,6 +75,7 @@ class KTSearchUtil { @@ -75,6 +75,7 @@ class KTSearchUtil {
75 foreach ($criteria_set as $oCriterionPair) { 75 foreach ($criteria_set as $oCriterionPair) {
76 $oCriterion = $oCriterionPair[0]; 76 $oCriterion = $oCriterionPair[0];
77 $aReq = $oCriterionPair[1]; 77 $aReq = $oCriterionPair[1];
  78 +
78 if (is_object($oCriterion)) { 79 if (is_object($oCriterion)) {
79 $res = $oCriterion->searchSQL($aReq); 80 $res = $oCriterion->searchSQL($aReq);
80 if (!is_null($res)) { 81 if (!is_null($res)) {
@@ -136,6 +137,7 @@ class KTSearchUtil { @@ -136,6 +137,7 @@ class KTSearchUtil {
136 * subgroups at the top level, even though we most often only 137 * subgroups at the top level, even though we most often only
137 * have a single "subgroup". 138 * have a single "subgroup".
138 */ 139 */
  140 +
139 foreach ($aCriteriaSet["subgroup"] as $k => $aOneCriteriaSet) { 141 foreach ($aCriteriaSet["subgroup"] as $k => $aOneCriteriaSet) {
140 /* 142 /*
141 * Each subgroup will either have values or it will have 143 * Each subgroup will either have values or it will have
@@ -144,15 +146,15 @@ class KTSearchUtil { @@ -144,15 +146,15 @@ class KTSearchUtil {
144 $aValues = KTUtil::arrayGet($aOneCriteriaSet, "values"); 146 $aValues = KTUtil::arrayGet($aOneCriteriaSet, "values");
145 $aSubgroup = KTUtil::arrayGet($aOneCriteriaSet, "subgroup"); 147 $aSubgroup = KTUtil::arrayGet($aOneCriteriaSet, "subgroup");
146 if (!empty($aValues)) { 148 if (!empty($aValues)) {
147 - $res = KTSearchUtil::_oneCriteriaSetToSQL($aOneCriteriaSet["values"]);  
148 - if(PEAR::isError($res)) {  
149 - return $res;  
150 - }  
151 - list($aThisCritQueries, $aThisParams, $aThisJoinSQL) = $res;  
152 - $aJoinSQL = kt_array_merge($aJoinSQL, $aThisJoinSQL);  
153 - $aParams = kt_array_merge($aParams, $aThisParams);  
154 - $tabs = str_repeat("\t", ($iRecurseLevel + 2));  
155 - $aSearchStrings[] = "\n$tabs(\n$tabs\t" . join("\n " . KTUtil::arrayGet($aOneCriteriaSet, 'join', "AND") . " ", $aThisCritQueries) . "\n$tabs)"; 149 + $res = KTSearchUtil::_oneCriteriaSetToSQL($aOneCriteriaSet["values"]);
  150 + if(PEAR::isError($res)) {
  151 + return $res;
  152 + }
  153 + list($aThisCritQueries, $aThisParams, $aThisJoinSQL) = $res;
  154 + $aJoinSQL = kt_array_merge($aJoinSQL, $aThisJoinSQL);
  155 + $aParams = kt_array_merge($aParams, $aThisParams);
  156 + $tabs = str_repeat("\t", ($iRecurseLevel + 2));
  157 + $aSearchStrings[] = "\n$tabs(\n$tabs\t" . join("\n " . KTUtil::arrayGet($aOneCriteriaSet, 'join', "AND") . " ", $aThisCritQueries) . "\n$tabs)";
156 } else if (!empty($aSubgroup)) { 158 } else if (!empty($aSubgroup)) {
157 /* 159 /*
158 * Recurse if we have a criteria set with subgroups. 160 * Recurse if we have a criteria set with subgroups.
@@ -170,6 +172,7 @@ class KTSearchUtil { @@ -170,6 +172,7 @@ class KTSearchUtil {
170 $sJoinSQL = join(" ", $aJoinSQL); 172 $sJoinSQL = join(" ", $aJoinSQL);
171 $tabs = str_repeat("\t", $iRecurseLevel + 1); 173 $tabs = str_repeat("\t", $iRecurseLevel + 1);
172 $sSearchString = "\n$tabs(" . join("\n$tabs\t" . $aCriteriaSet['join'] . " ", $aSearchStrings) . "\n$tabs)"; 174 $sSearchString = "\n$tabs(" . join("\n$tabs\t" . $aCriteriaSet['join'] . " ", $aSearchStrings) . "\n$tabs)";
  175 +
173 return array($sSearchString, $aParams, $sJoinSQL); 176 return array($sSearchString, $aParams, $sJoinSQL);
174 } 177 }
175 // }}} 178 // }}}
@@ -260,12 +263,14 @@ class KTSearchUtil { @@ -260,12 +263,14 @@ class KTSearchUtil {
260 } 263 }
261 264
262 $res = KTSearchUtil::criteriaSetToSQL($aCriteriaSet); 265 $res = KTSearchUtil::criteriaSetToSQL($aCriteriaSet);
  266 +
263 if(PEAR::isError($res)) return $res; 267 if(PEAR::isError($res)) return $res;
264 list($sSQLSearchString, $aCritParams, $sCritJoinSQL) = $res; 268 list($sSQLSearchString, $aCritParams, $sCritJoinSQL) = $res;
265 - 269 +
266 $sToSearch = KTUtil::arrayGet($aOrigReq, 'fToSearch', 'Live'); // actually never present in this version. 270 $sToSearch = KTUtil::arrayGet($aOrigReq, 'fToSearch', 'Live'); // actually never present in this version.
267 271
268 $res = KTSearchUtil::permissionToSQL($oUser, $sPermissionName); 272 $res = KTSearchUtil::permissionToSQL($oUser, $sPermissionName);
  273 +
269 if (PEAR::isError($res)) { // only occurs if the group has no permissions. 274 if (PEAR::isError($res)) { // only occurs if the group has no permissions.
270 return $res; 275 return $res;
271 } else { 276 } else {
@@ -278,6 +283,7 @@ class KTSearchUtil { @@ -278,6 +283,7 @@ class KTSearchUtil {
278 * trailing ANDs. 283 * trailing ANDs.
279 */ 284 */
280 $aPotentialWhere = array($sPermissionString, 'SL.name = ?', "($sSQLSearchString)"); 285 $aPotentialWhere = array($sPermissionString, 'SL.name = ?', "($sSQLSearchString)");
  286 +
281 $aWhere = array(); 287 $aWhere = array();
282 foreach ($aPotentialWhere as $sWhere) { 288 foreach ($aPotentialWhere as $sWhere) {
283 if (empty($sWhere)) { 289 if (empty($sWhere)) {
@@ -287,6 +293,7 @@ class KTSearchUtil { @@ -287,6 +293,7 @@ class KTSearchUtil {
287 continue; 293 continue;
288 } 294 }
289 $aWhere[] = $sWhere; 295 $aWhere[] = $sWhere;
  296 +
290 } 297 }
291 $sWhere = ""; 298 $sWhere = "";
292 if ($aWhere) { 299 if ($aWhere) {
@@ -320,7 +327,6 @@ class KTSearchUtil { @@ -320,7 +327,6 @@ class KTSearchUtil {
320 $aParams = kt_array_merge($aParams, $aPermissionParams); 327 $aParams = kt_array_merge($aParams, $aPermissionParams);
321 $aParams[] = $sToSearch; 328 $aParams[] = $sToSearch;
322 $aParams = kt_array_merge($aParams, $aCritParams); 329 $aParams = kt_array_merge($aParams, $aCritParams);
323 -  
324 return array($sQuery, $aParams); 330 return array($sQuery, $aParams);
325 } 331 }
326 // }}} 332 // }}}