Commit 8000e8d1c496c40375ea95f16c3dd7b12ec0350a

Authored by Brad Shuttleworth
1 parent 009516cd

add simple folder search.


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@5413 c91229c3-7414-0410-bfa2-8a42b809f60b
docs/VERSION.txt
1   -3.0.2.1
  1 +3.0.2.2
... ...
lib/browse/BrowseColumns.inc.php
... ... @@ -124,7 +124,11 @@ class TitleColumn extends BrowseColumn {
124 124 }
125 125  
126 126 function buildFolderLink($aDataRow) {
127   - return KTUtil::addQueryStringSelf('fFolderId='.$aDataRow["folder"]->getId());
  127 + if (is_null(KTUtil::arrayGet($this->aOptions, 'direct_folder'))) {
  128 + return KTUtil::addQueryStringSelf('fFolderId='.$aDataRow["folder"]->getId());
  129 + } else {
  130 + return KTBrowseUtil::getUrlForFolder($aDataRow['folder']);
  131 + }
128 132 }
129 133  
130 134 // use inline, since its just too heavy to even _think_ about using smarty.
... ...
lib/browse/DocumentCollection.inc.php
... ... @@ -167,7 +167,7 @@ class DocumentCollection {
167 167 }
168 168  
169 169 }
170   -
  170 + //var_dump($folderSet);
171 171 $this->activeset = array(
172 172 "folders" => $folderSet,
173 173 "documents" => $documentSet,
... ...
lib/browse/PartialQuery.inc.php
... ... @@ -39,6 +39,8 @@ require_once(KT_LIB_DIR . "/util/ktutil.inc");
39 39 require_once(KT_LIB_DIR . "/database/dbutil.inc");
40 40 require_once(KT_LIB_DIR . "/search/searchutil.inc.php");
41 41  
  42 +define('XXX_HARDCODE_SIMPLE_FOLDER_SEARCH', true);
  43 +
42 44 // Abstract base class.
43 45 class PartialQuery {
44 46 // initialise here (pass whatever this needs)
... ... @@ -254,14 +256,70 @@ class SimpleSearchQuery extends PartialQuery {
254 256 var $searchable_text;
255 257  
256 258 function SimpleSearchQuery($sSearchableText) { $this->searchable_text = $sSearchableText; }
  259 +
  260 + function _getFolderQuery($aOptions = null) {
  261 + $res = KTSearchUtil::permissionToSQL($this->oUser, $this->sPermissionName, "F");
  262 + if (PEAR::isError($res)) {
  263 + return $res;
  264 + }
  265 + list($sPermissionString, $aPermissionParams, $sPermissionJoin) = $res;
  266 +
  267 + $aPotentialWhere = array('MATCH (FST.folder_text) AGAINST (? IN BOOLEAN MODE) <> 0',$sPermissionString);
  268 + $aWhere = array();
  269 + foreach ($aPotentialWhere as $sWhere) {
  270 + if (empty($sWhere)) {
  271 + continue;
  272 + }
  273 + if ($sWhere == "()") {
  274 + continue;
  275 + }
  276 + $aWhere[] = $sWhere;
  277 + }
  278 + $sWhere = "";
  279 + if ($aWhere) {
  280 + $sWhere = "\tWHERE " . join(" AND ", $aWhere);
  281 + }
  282 +
  283 + $sSelect = KTUtil::arrayGet($aOptions, 'select', 'F.id');
  284 +
  285 + $sQuery = "SELECT $sSelect FROM " . KTUtil::getTableName("folders") . " AS F
  286 + LEFT JOIN " . KTUtil::getTableName("folder_searchable_text") . " AS FST ON (F.id = FST.folder_id)
  287 + $sPermissionJoin $sWhere ";
  288 + $aParams = array($this->searchable_text);
  289 + $aParams = kt_array_merge($aParams, $aPermissionParams);
  290 + return array($sQuery, $aParams);
  291 + }
257 292  
258 293 function getFolderCount() {
259   - // never any folders, given the current fulltext environ.
260   - return 0;
  294 + // use hack to get folders, if included.
  295 + if (!XXX_HARDCODE_SIMPLE_FOLDER_SEARCH) { return 0; }
  296 +
  297 + $aOptions = array(
  298 + 'select' => 'count(F.id) AS cnt',
  299 + );
  300 + $aQuery = $this->_getFolderQuery($aOptions);
  301 + if (PEAR::isError($aQuery)) { return 0; }
  302 + $iRet = DBUtil::getOneResultKey($aQuery, 'cnt');
  303 + return $iRet;
261 304 }
262 305  
263 306 function getFolders($iBatchSize, $iBatchStart, $sSortColumn, $sSortOrder, $sJoinClause = null, $aJoinParams = null) {
264   - return array();
  307 + if (!XXX_HARDCODE_SIMPLE_FOLDER_SEARCH) { return array(); }
  308 +
  309 + $res = $this->_getFolderQuery();
  310 + if (PEAR::isError($res)) { return array(); }
  311 + list($sQuery, $aParams) = $res;
  312 + $sQuery .= " ORDER BY " . $sSortColumn . " " . $sSortOrder . " ";
  313 +
  314 + $sQuery .= " LIMIT ?, ?";
  315 + $aParams[] = $iBatchStart;
  316 + $aParams[] = $iBatchSize;
  317 +
  318 + $q = array($sQuery, $aParams);
  319 +
  320 + $res = DBUtil::getResultArray($q);
  321 +
  322 + return $res;
265 323 }
266 324  
267 325 function getQuery($aOptions = null) {
... ...
sql/mysql/upgrade/3.0.2.2/folder_search.sql 0 → 100644
  1 +CREATE TABLE folder_searchable_text (
  2 + `folder_id` INT(11) NOT NULL DEFAULT 0,
  3 + PRIMARY KEY(folder_id),
  4 + `folder_text` text,
  5 + KEY `folder_searchable_text_folder_indx` (`folder_id`),
  6 + FULLTEXT KEY `folder_text` (`folder_text`)
  7 +) Type=MyISAM;
  8 +
  9 +-- generate the data
  10 +
  11 +insert into folder_searchable_text (folder_id, folder_text) SELECT id, name from folders;
... ...