Commit ea056f624a470ea9fb04712e19ca2d38f47d5f1c

Authored by nbm
1 parent 995a1e21

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 9 require_once(KT_LIB_DIR . "/dispatcher.inc.php");
10 10 require_once(KT_LIB_DIR . "/browse/Criteria.inc");
11 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 15 // specific includes
14 16  
... ... @@ -51,6 +53,11 @@ class BooleanSearchDispatcher extends KTStandardDispatcher {
51 53 if (!is_array($datavars)) {
52 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 62 if (empty($datavars)) {
56 63 $this->errorRedirectToMain('You need to have at least 1 condition.');
... ... @@ -60,109 +67,24 @@ class BooleanSearchDispatcher extends KTStandardDispatcher {
60 67  
61 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 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 88 $aColumns = array("folder_name", "file_name", "document_name", "doc_count", "view");
167 89 $aColumnTypes = array(3,3,3,1,3);
168 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 92 $aDBQueryStringColumns = array("document_id","folder_id");
171 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 96 $oPatternBrowse->setStartIndex($iStartIndex);
175 97 $oPatternBrowse->setSearchText("");
176 98 $sFormStart = '<form method="POST" name="MainForm">';
... ...