Commit 94ab7bd9c72dd854d9da02b7ae73842ba92127d8
1 parent
64052a0a
adding BL for boolean search.
git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@3699 c91229c3-7414-0410-bfa2-8a42b809f60b
Showing
1 changed file
with
119 additions
and
0 deletions
presentation/lookAndFeel/knowledgeTree/search/booleanSearch.php
| @@ -8,6 +8,7 @@ require_once(KT_LIB_DIR . "/database/dbutil.inc"); | @@ -8,6 +8,7 @@ require_once(KT_LIB_DIR . "/database/dbutil.inc"); | ||
| 8 | require_once(KT_LIB_DIR . "/util/ktutil.inc"); | 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 | 12 | ||
| 12 | // specific includes | 13 | // specific includes |
| 13 | 14 | ||
| @@ -38,6 +39,124 @@ class BooleanSearchDispatcher extends KTStandardDispatcher { | @@ -38,6 +39,124 @@ class BooleanSearchDispatcher extends KTStandardDispatcher { | ||
| 38 | $main->setCentralPayload($data); | 39 | $main->setCentralPayload($data); |
| 39 | $main->render(); | 40 | $main->render(); |
| 40 | } | 41 | } |
| 42 | + | ||
| 43 | + function do_performSearch() { | ||
| 44 | + // TODO first extract environ vars | ||
| 45 | + // TODO second create criterion objects (see getAdvancedSearchResults for this. | ||
| 46 | + // TODO third get each one to generate the SQL snippet. (ENSURE that they are wrapped in '('..')' ) | ||
| 47 | + // TODO fourth array().join(' AND ') where appropriate | ||
| 48 | + // TODO finally return via PatternBrowseableSearchResults (urgh.) | ||
| 49 | + | ||
| 50 | + $datavars = KTUtil::arrayGet($_REQUEST, 'boolean_search'); | ||
| 51 | + $booleanJoinName = KTUtil::arrayGet($_REQUEST, 'boolean_condition'); | ||
| 52 | + | ||
| 53 | + if (empty($datavars)) { | ||
| 54 | + $this->errorRedirectToMain('You need to have at least 1 condition.'); | ||
| 55 | + } | ||
| 56 | + if (empty($booleanJoinName)) { | ||
| 57 | + $this->errorRedirectToMain('You need to specify which kind of search (ALL/ANY) you wish to perform.'); | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + | ||
| 61 | + // Step 1: extract the criteria selection, and create an array of criteria. | ||
| 62 | + $criteria_set = array(); | ||
| 63 | + foreach ($datavars as $order => $dataset) { | ||
| 64 | + | ||
| 65 | + $oCriterion =& Criteria::getCriterionByNumber($dataset["type"]); | ||
| 66 | + if (PEAR::isError($oCriterion)) { | ||
| 67 | + $this->errorRedirectToMain('Invalid criteria specified.'); | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + $criteria_set[] = array($oCriterion, $dataset['data']); | ||
| 71 | + } | ||
| 72 | + | ||
| 73 | + $res = $this->handleCriteriaSet($criteria_set, $booleanJoinName); | ||
| 74 | + | ||
| 75 | + return $res; | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + function handleCriteriaSet($aCriteriaSet, $mergeType='AND') { | ||
| 79 | + global $default; | ||
| 80 | + $aSQL = array(); | ||
| 81 | + $aJoinSQL = array(); | ||
| 82 | + foreach ($aCriteriaSet as $oCriterionPair) { | ||
| 83 | + $oCriterion = $oCriterionPair[0]; | ||
| 84 | + $aReq = $oCriterionPair[1]; | ||
| 85 | + $res = $oCriterion->searchSQL($aReq); | ||
| 86 | + if (!is_null($res)) { | ||
| 87 | + $aSQL[] = $res; | ||
| 88 | + } | ||
| 89 | + $res = $oCriterion->searchJoinSQL(); | ||
| 90 | + if (!is_null($res)) { | ||
| 91 | + $aJoinSQL[] = $res; | ||
| 92 | + } | ||
| 93 | + } | ||
| 94 | + | ||
| 95 | + $aCritParams = array(); | ||
| 96 | + $aCritQueries = array(); | ||
| 97 | + foreach ($aSQL as $sSQL) { | ||
| 98 | + if (is_array($sSQL)) { | ||
| 99 | + $aCritQueries[] = '('.$sSQL[0].')'; | ||
| 100 | + $aCritParams = array_merge($aCritParams , $sSQL[1]); | ||
| 101 | + } else { | ||
| 102 | + $aCritQueries[] = '('.$sSQL.')'; | ||
| 103 | + } | ||
| 104 | + } | ||
| 105 | + | ||
| 106 | + if (count($aCritQueries) == 0) { | ||
| 107 | + $this->errorRedirectToMain("No search criteria were specified"); | ||
| 108 | + exit(0); | ||
| 109 | + } | ||
| 110 | + | ||
| 111 | + $sSQLSearchString = join("\n ".$mergeType." ", $aCritQueries); | ||
| 112 | + $sJoinSQL = join(" ", $aJoinSQL); | ||
| 113 | + | ||
| 114 | + $sToSearch = KTUtil::arrayGet($aOrigReq, 'fToSearch', 'Live'); // actually never present in this version. | ||
| 115 | + | ||
| 116 | + $sQuery = DBUtil::compactQuery(" | ||
| 117 | + SELECT | ||
| 118 | + F.name AS folder_name, F.id AS folder_id, D.id AS document_id, | ||
| 119 | + D.name AS document_name, D.filename AS file_name, COUNT(D.id) AS doc_count, 'View' AS view | ||
| 120 | + FROM | ||
| 121 | + $default->documents_table AS D | ||
| 122 | + INNER JOIN $default->folders_table AS F ON D.folder_id = F.id | ||
| 123 | + $sJoinSQL | ||
| 124 | + INNER JOIN $default->search_permissions_table AS SDUL ON SDUL.document_id = D.id | ||
| 125 | + INNER JOIN $default->status_table AS SL on D.status_id=SL.id | ||
| 126 | + WHERE | ||
| 127 | + (F.is_public OR | ||
| 128 | + SDUL.user_id = ?) | ||
| 129 | + AND SL.name = ? | ||
| 130 | + AND ($sSQLSearchString) | ||
| 131 | + GROUP BY D.id | ||
| 132 | + ORDER BY doc_count DESC"); | ||
| 133 | + | ||
| 134 | + $aParams = array(); | ||
| 135 | + $aParams[] = $_SESSION["userID"]; | ||
| 136 | + $aParams[] = $sToSearch; | ||
| 137 | + $aParams = array_merge($aParams, $aCritParams); | ||
| 138 | + | ||
| 139 | + //'<pre>'.var_dump(DBUtil::getResultArray(array($sQuery, $aParams))); | ||
| 140 | + //exit(0); | ||
| 141 | + //return '<pre>'.print_r(DBUtil::getResultArray(array($sQuery, $aParams)), true).'</pre>'; | ||
| 142 | + | ||
| 143 | + $aColumns = array("folder_name", "file_name", "document_name", "doc_count", "view"); | ||
| 144 | + $aColumnTypes = array(3,3,3,1,3); | ||
| 145 | + $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>"); | ||
| 146 | + $aLinkURLs = array("$default->rootUrl/control.php?action=browse","$default->rootUrl/control.php?action=viewDocument", "$default->rootUrl/control.php?action=viewDocument", null, "$default->rootUrl/control.php?action=downloadDocument"); | ||
| 147 | + $aDBQueryStringColumns = array("document_id","folder_id"); | ||
| 148 | + $aQueryStringVariableNames = array("fDocumentID", "fFolderID"); | ||
| 149 | + | ||
| 150 | + $oPatternBrowse = & new PatternBrowseableSearchResults(array($sQuery, $aParams), 10, $aColumns, $aColumnTypes, $aColumnHeaders, $aLinkURLs, $aDBQueryStringColumns, $aQueryStringVariableNames); | ||
| 151 | + $oPatternBrowse->setStartIndex($iStartIndex); | ||
| 152 | + $oPatternBrowse->setSearchText(""); | ||
| 153 | + $oPatternBrowse->setRememberValues($aReq); | ||
| 154 | + $sForSearch = "<input type=\"hidden\" name=\"fForSearch\" value=\"1\" />"; | ||
| 155 | + | ||
| 156 | + return renderHeading(_("Advanced Search")) . $oPatternBrowse->render() . $sForSearch . $sRefreshMessage; | ||
| 157 | + | ||
| 158 | + //return '<pre>'.$sSQLSearchString.'</pre>'; | ||
| 159 | + } | ||
| 41 | } | 160 | } |
| 42 | 161 | ||
| 43 | $oDispatcher = new BooleanSearchDispatcher(); | 162 | $oDispatcher = new BooleanSearchDispatcher(); |