Commit f4cbb99c552dcb532d6e70ac658c50b939a99e0b

Authored by Neil Blakey-Milner
1 parent 3fc01900

Make use of KTSearchUtil, and support saved searches.


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@3954 c91229c3-7414-0410-bfa2-8a42b809f60b
presentation/lookAndFeel/knowledgeTree/search/booleanSearch.php
@@ -9,6 +9,8 @@ require_once(KT_LIB_DIR . "/util/ktutil.inc"); @@ -9,6 +9,8 @@ require_once(KT_LIB_DIR . "/util/ktutil.inc");
9 require_once(KT_LIB_DIR . "/dispatcher.inc.php"); 9 require_once(KT_LIB_DIR . "/dispatcher.inc.php");
10 require_once(KT_LIB_DIR . "/browse/Criteria.inc"); 10 require_once(KT_LIB_DIR . "/browse/Criteria.inc");
11 require_once(KT_LIB_DIR . "/visualpatterns/PatternBrowsableSearchResults.inc"); 11 require_once(KT_LIB_DIR . "/visualpatterns/PatternBrowsableSearchResults.inc");
  12 +require_once(KT_LIB_DIR . "/search/savedsearch.inc.php");
  13 +require_once(KT_LIB_DIR . '/search/searchutil.inc.php');
12 14
13 // specific includes 15 // specific includes
14 16
@@ -51,6 +53,11 @@ class BooleanSearchDispatcher extends KTStandardDispatcher { @@ -51,6 +53,11 @@ class BooleanSearchDispatcher extends KTStandardDispatcher {
51 if (!is_array($datavars)) { 53 if (!is_array($datavars)) {
52 $datavars = unserialize($datavars); 54 $datavars = unserialize($datavars);
53 } 55 }
  56 + $iSavedSearchId = KTUtil::arrayGet($_REQUEST, 'fSavedSearchId');
  57 + if (!empty($iSavedSearchId)) {
  58 + $oSearch = KTSavedSearch::get($iSavedSearchId);
  59 + $datavars = $oSearch->getSearch();
  60 + }
54 61
55 if (empty($datavars)) { 62 if (empty($datavars)) {
56 $this->errorRedirectToMain('You need to have at least 1 condition.'); 63 $this->errorRedirectToMain('You need to have at least 1 condition.');
@@ -60,109 +67,24 @@ class BooleanSearchDispatcher extends KTStandardDispatcher { @@ -60,109 +67,24 @@ class BooleanSearchDispatcher extends KTStandardDispatcher {
60 67
61 return $res; 68 return $res;
62 } 69 }
63 -  
64 - function _oneCriteriaSetToSQL($aOneCriteriaSet) {  
65 - $aSQL = array();  
66 - $aJoinSQL = array();  
67 - $criteria_set = array();  
68 - foreach ($aOneCriteriaSet as $order => $dataset) {  
69 - $oCriterion = Criteria::getCriterionByNumber($dataset["type"]);  
70 - if (PEAR::isError($oCriterion)) {  
71 - $this->errorRedirectToMain('Invalid criteria specified.');  
72 - }  
73 - $criteria_set[] = array($oCriterion, $dataset["data"]);  
74 - }  
75 - foreach ($criteria_set as $oCriterionPair) {  
76 - $oCriterion = $oCriterionPair[0];  
77 - $aReq = $oCriterionPair[1];  
78 - $res = $oCriterion->searchSQL($aReq);  
79 - if (!is_null($res)) {  
80 - $aSQL[] = $res;  
81 - }  
82 - $res = $oCriterion->searchJoinSQL();  
83 - if (!is_null($res)) {  
84 - $aJoinSQL[] = $res;  
85 - }  
86 - }  
87 -  
88 - $aCritParams = array();  
89 - $aCritQueries = array();  
90 - foreach ($aSQL as $sSQL) {  
91 - if (is_array($sSQL)) {  
92 - $aCritQueries[] = '('.$sSQL[0].')';  
93 - $aCritParams = array_merge($aCritParams , $sSQL[1]);  
94 - } else {  
95 - $aCritQueries[] = '('.$sSQL.')';  
96 - }  
97 - }  
98 -  
99 - if (count($aCritQueries) == 0) {  
100 - $this->errorRedirectToMain("No search criteria were specified");  
101 - exit(0);  
102 - }  
103 -  
104 - return array($aCritQueries, $aCritParams, $aJoinSQL);  
105 - }  
106 -  
107 - function criteriaSetToSQL($aCriteriaSet) {  
108 - $aJoinSQL = array();  
109 - $aSearchStrings = array();  
110 - $aParams = array();  
111 - foreach ($aCriteriaSet["subgroup"] as $k => $aOneCriteriaSet) {  
112 - if (is_null($aOneCriteriaSet["values"])) {  
113 - continue;  
114 - }  
115 - list($aThisCritQueries, $aThisParams, $aThisJoinSQL) = $this->_oneCriteriaSetToSQL($aOneCriteriaSet["values"]);  
116 - $aJoinSQL = array_merge($aJoinSQL, $aThisJoinSQL);  
117 - $aParams = array_merge($aParams, $aThisParams);  
118 - $aSearchStrings[] = "\n\t\t(\n\t\t\t" . join("\n " . KTUtil::arrayGet($aOneCriteriaSet, 'join', "AND") . " ", $aThisCritQueries) . "\n\t\t)";  
119 - }  
120 - $sJoinSQL = join(" ", $aJoinSQL);  
121 - $sSearchString = "\n\t(" . join("\n\t\t" . $aCriteriaSet['join'] . " ", $aSearchStrings) . "\n\t)";  
122 - return array($sSearchString, $aParams, $sJoinSQL);  
123 - }  
124 70
125 function handleCriteriaSet($aCriteriaSet, $iStartIndex) { 71 function handleCriteriaSet($aCriteriaSet, $iStartIndex) {
126 - global $default;  
127 - list($sSQLSearchString, $aCritParams, $sJoinSQL) = $this->criteriaSetToSQL($aCriteriaSet);  
128 -  
129 - $sToSearch = KTUtil::arrayGet($aOrigReq, 'fToSearch', 'Live'); // actually never present in this version.  
130 -  
131 - $oPermission =& KTPermission::getByName('ktcore.permissions.read');  
132 - $sPermissionLookupsTable = KTUtil::getTableName('permission_lookups');  
133 - $sPermissionLookupAssignmentsTable = KTUtil::getTableName('permission_lookup_assignments');  
134 - $sPermissionDescriptorsTable = KTUtil::getTableName('permission_descriptors');  
135 - $aGroups = GroupUtil::listGroupsForUserExpand($_SESSION['userID']);  
136 - $aPermissionDescriptors = KTPermissionDescriptor::getByGroups($aGroups, array('ids' => true));  
137 - $sPermissionDescriptors = DBUtil::paramArray($aPermissionDescriptors);  
138 -  
139 - $sQuery = DBUtil::compactQuery("  
140 - SELECT  
141 - F.name AS folder_name, F.id AS folder_id, D.id AS document_id,  
142 - D.name AS document_name, D.filename AS file_name, COUNT(D.id) AS doc_count, 'View' AS view  
143 - FROM  
144 - $default->documents_table AS D  
145 - INNER JOIN $default->folders_table AS F ON D.folder_id = F.id  
146 - $sJoinSQL  
147 - INNER JOIN $default->status_table AS SL on D.status_id=SL.id  
148 - INNER JOIN $sPermissionLookupsTable AS PL ON D.permission_lookup_id = PL.id  
149 - INNER JOIN $sPermissionLookupAssignmentsTable AS PLA ON PL.id = PLA.permission_lookup_id AND PLA.permission_id = ?  
150 - WHERE  
151 - PLA.permission_descriptor_id IN ($sPermissionDescriptors)  
152 - AND SL.name = ?  
153 - AND ($sSQLSearchString)  
154 - GROUP BY D.id  
155 - ORDER BY doc_count DESC");  
156 -  
157 - $aParams = array();  
158 - $aParams[] = $oPermission->getId();  
159 - $aParams = array_merge($aParams, $aPermissionDescriptors);  
160 - $aParams[] = $sToSearch;  
161 - $aParams = array_merge($aParams, $aCritParams);  
162 -  
163 - //print '<pre>';var_dump(DBUtil::getResultArray(array($sQuery, $aParams)));  
164 - //exit(0);  
165 - //return '<pre>'.print_r(DBUtil::getResultArray(array($sQuery, $aParams)), true).'</pre>'; 72 + $aOrigCriteriaSet = $aCriteriaSet;
  73 + $aCriteriaSet = array(
  74 + "join" => "AND",
  75 + "subgroup" => array(
  76 + $aOrigCriteriaSet,
  77 + array(
  78 + "join" => "AND",
  79 + "values" => array(
  80 + array(
  81 + "sql" => array("D.id = ?", array(7)),
  82 + ),
  83 + ),
  84 + ),
  85 + ),
  86 + );
  87 + $aQuery = KTSearchUtil::criteriaToQuery($aCriteriaSet, $_SESSION['userID'], 'ktcore.permissions.read');
166 $aColumns = array("folder_name", "file_name", "document_name", "doc_count", "view"); 88 $aColumns = array("folder_name", "file_name", "document_name", "doc_count", "view");
167 $aColumnTypes = array(3,3,3,1,3); 89 $aColumnTypes = array(3,3,3,1,3);
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>"); 90 $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>");
@@ -170,7 +92,7 @@ class BooleanSearchDispatcher extends KTStandardDispatcher { @@ -170,7 +92,7 @@ class BooleanSearchDispatcher extends KTStandardDispatcher {
170 $aDBQueryStringColumns = array("document_id","folder_id"); 92 $aDBQueryStringColumns = array("document_id","folder_id");
171 $aQueryStringVariableNames = array("fDocumentID", "fFolderID"); 93 $aQueryStringVariableNames = array("fDocumentID", "fFolderID");
172 94
173 - $oPatternBrowse = & new PatternBrowseableSearchResults(array($sQuery, $aParams), 10, $aColumns, $aColumnTypes, $aColumnHeaders, $aLinkURLs, $aDBQueryStringColumns, $aQueryStringVariableNames); 95 + $oPatternBrowse = & new PatternBrowseableSearchResults($aQuery, 10, $aColumns, $aColumnTypes, $aColumnHeaders, $aLinkURLs, $aDBQueryStringColumns, $aQueryStringVariableNames);
174 $oPatternBrowse->setStartIndex($iStartIndex); 96 $oPatternBrowse->setStartIndex($iStartIndex);
175 $oPatternBrowse->setSearchText(""); 97 $oPatternBrowse->setSearchText("");
176 $sFormStart = '<form method="POST" name="MainForm">'; 98 $sFormStart = '<form method="POST" name="MainForm">';