diff --git a/presentation/lookAndFeel/knowledgeTree/search/booleanSearch.php b/presentation/lookAndFeel/knowledgeTree/search/booleanSearch.php index a4aa28a..2580c39 100644 --- a/presentation/lookAndFeel/knowledgeTree/search/booleanSearch.php +++ b/presentation/lookAndFeel/knowledgeTree/search/booleanSearch.php @@ -8,6 +8,7 @@ require_once(KT_LIB_DIR . "/database/dbutil.inc"); require_once(KT_LIB_DIR . "/util/ktutil.inc"); require_once(KT_LIB_DIR . "/dispatcher.inc.php"); require_once(KT_LIB_DIR . "/browse/Criteria.inc"); +require_once(KT_LIB_DIR . "/visualpatterns/PatternBrowsableSearchResults.inc"); // specific includes @@ -38,6 +39,124 @@ class BooleanSearchDispatcher extends KTStandardDispatcher { $main->setCentralPayload($data); $main->render(); } + + function do_performSearch() { + // TODO first extract environ vars + // TODO second create criterion objects (see getAdvancedSearchResults for this. + // TODO third get each one to generate the SQL snippet. (ENSURE that they are wrapped in '('..')' ) + // TODO fourth array().join(' AND ') where appropriate + // TODO finally return via PatternBrowseableSearchResults (urgh.) + + $datavars = KTUtil::arrayGet($_REQUEST, 'boolean_search'); + $booleanJoinName = KTUtil::arrayGet($_REQUEST, 'boolean_condition'); + + if (empty($datavars)) { + $this->errorRedirectToMain('You need to have at least 1 condition.'); + } + if (empty($booleanJoinName)) { + $this->errorRedirectToMain('You need to specify which kind of search (ALL/ANY) you wish to perform.'); + } + + + // Step 1: extract the criteria selection, and create an array of criteria. + $criteria_set = array(); + foreach ($datavars as $order => $dataset) { + + $oCriterion =& Criteria::getCriterionByNumber($dataset["type"]); + if (PEAR::isError($oCriterion)) { + $this->errorRedirectToMain('Invalid criteria specified.'); + } + + $criteria_set[] = array($oCriterion, $dataset['data']); + } + + $res = $this->handleCriteriaSet($criteria_set, $booleanJoinName); + + return $res; + } + + function handleCriteriaSet($aCriteriaSet, $mergeType='AND') { + global $default; + $aSQL = array(); + $aJoinSQL = array(); + foreach ($aCriteriaSet as $oCriterionPair) { + $oCriterion = $oCriterionPair[0]; + $aReq = $oCriterionPair[1]; + $res = $oCriterion->searchSQL($aReq); + if (!is_null($res)) { + $aSQL[] = $res; + } + $res = $oCriterion->searchJoinSQL(); + if (!is_null($res)) { + $aJoinSQL[] = $res; + } + } + + $aCritParams = array(); + $aCritQueries = array(); + foreach ($aSQL as $sSQL) { + if (is_array($sSQL)) { + $aCritQueries[] = '('.$sSQL[0].')'; + $aCritParams = array_merge($aCritParams , $sSQL[1]); + } else { + $aCritQueries[] = '('.$sSQL.')'; + } + } + + if (count($aCritQueries) == 0) { + $this->errorRedirectToMain("No search criteria were specified"); + exit(0); + } + + $sSQLSearchString = join("\n ".$mergeType." ", $aCritQueries); + $sJoinSQL = join(" ", $aJoinSQL); + + $sToSearch = KTUtil::arrayGet($aOrigReq, 'fToSearch', 'Live'); // actually never present in this version. + + $sQuery = DBUtil::compactQuery(" + SELECT + F.name AS folder_name, F.id AS folder_id, D.id AS document_id, + D.name AS document_name, D.filename AS file_name, COUNT(D.id) AS doc_count, 'View' AS view + FROM + $default->documents_table AS D + INNER JOIN $default->folders_table AS F ON D.folder_id = F.id + $sJoinSQL + INNER JOIN $default->search_permissions_table AS SDUL ON SDUL.document_id = D.id + INNER JOIN $default->status_table AS SL on D.status_id=SL.id + WHERE + (F.is_public OR + SDUL.user_id = ?) + AND SL.name = ? + AND ($sSQLSearchString) + GROUP BY D.id + ORDER BY doc_count DESC"); + + $aParams = array(); + $aParams[] = $_SESSION["userID"]; + $aParams[] = $sToSearch; + $aParams = array_merge($aParams, $aCritParams); + + //'
'.var_dump(DBUtil::getResultArray(array($sQuery, $aParams)));
+		//exit(0);
+		//return '
'.print_r(DBUtil::getResultArray(array($sQuery, $aParams)), true).'
'; + + $aColumns = array("folder_name", "file_name", "document_name", "doc_count", "view"); + $aColumnTypes = array(3,3,3,1,3); + $aColumnHeaders = array("graphicsUrl/widgets/dfolder.gif>" . _("Folder") . "", "" . _("Name") . "", "" . _("Title") . "", "" . _("Matches") . "", "" . _("View") . ""); + $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"); + $aDBQueryStringColumns = array("document_id","folder_id"); + $aQueryStringVariableNames = array("fDocumentID", "fFolderID"); + + $oPatternBrowse = & new PatternBrowseableSearchResults(array($sQuery, $aParams), 10, $aColumns, $aColumnTypes, $aColumnHeaders, $aLinkURLs, $aDBQueryStringColumns, $aQueryStringVariableNames); + $oPatternBrowse->setStartIndex($iStartIndex); + $oPatternBrowse->setSearchText(""); + $oPatternBrowse->setRememberValues($aReq); + $sForSearch = ""; + + return renderHeading(_("Advanced Search")) . $oPatternBrowse->render() . $sForSearch . $sRefreshMessage; + + //return '
'.$sSQLSearchString.'
'; + } } $oDispatcher = new BooleanSearchDispatcher();