diff --git a/docs/VERSION.txt b/docs/VERSION.txt index 9e20d20..37f4c41 100644 --- a/docs/VERSION.txt +++ b/docs/VERSION.txt @@ -1 +1 @@ -3.0.2.1 +3.0.2.2 diff --git a/lib/browse/BrowseColumns.inc.php b/lib/browse/BrowseColumns.inc.php index 7d799a7..4b633ff 100644 --- a/lib/browse/BrowseColumns.inc.php +++ b/lib/browse/BrowseColumns.inc.php @@ -124,7 +124,11 @@ class TitleColumn extends BrowseColumn { } function buildFolderLink($aDataRow) { - return KTUtil::addQueryStringSelf('fFolderId='.$aDataRow["folder"]->getId()); + if (is_null(KTUtil::arrayGet($this->aOptions, 'direct_folder'))) { + return KTUtil::addQueryStringSelf('fFolderId='.$aDataRow["folder"]->getId()); + } else { + return KTBrowseUtil::getUrlForFolder($aDataRow['folder']); + } } // use inline, since its just too heavy to even _think_ about using smarty. diff --git a/lib/browse/DocumentCollection.inc.php b/lib/browse/DocumentCollection.inc.php index 602d40a..b1894b0 100644 --- a/lib/browse/DocumentCollection.inc.php +++ b/lib/browse/DocumentCollection.inc.php @@ -167,7 +167,7 @@ class DocumentCollection { } } - + //var_dump($folderSet); $this->activeset = array( "folders" => $folderSet, "documents" => $documentSet, diff --git a/lib/browse/PartialQuery.inc.php b/lib/browse/PartialQuery.inc.php index 6c05a50..3575ca8 100644 --- a/lib/browse/PartialQuery.inc.php +++ b/lib/browse/PartialQuery.inc.php @@ -39,6 +39,8 @@ require_once(KT_LIB_DIR . "/util/ktutil.inc"); require_once(KT_LIB_DIR . "/database/dbutil.inc"); require_once(KT_LIB_DIR . "/search/searchutil.inc.php"); +define('XXX_HARDCODE_SIMPLE_FOLDER_SEARCH', true); + // Abstract base class. class PartialQuery { // initialise here (pass whatever this needs) @@ -254,14 +256,70 @@ class SimpleSearchQuery extends PartialQuery { var $searchable_text; function SimpleSearchQuery($sSearchableText) { $this->searchable_text = $sSearchableText; } + + function _getFolderQuery($aOptions = null) { + $res = KTSearchUtil::permissionToSQL($this->oUser, $this->sPermissionName, "F"); + if (PEAR::isError($res)) { + return $res; + } + list($sPermissionString, $aPermissionParams, $sPermissionJoin) = $res; + + $aPotentialWhere = array('MATCH (FST.folder_text) AGAINST (? IN BOOLEAN MODE) <> 0',$sPermissionString); + $aWhere = array(); + foreach ($aPotentialWhere as $sWhere) { + if (empty($sWhere)) { + continue; + } + if ($sWhere == "()") { + continue; + } + $aWhere[] = $sWhere; + } + $sWhere = ""; + if ($aWhere) { + $sWhere = "\tWHERE " . join(" AND ", $aWhere); + } + + $sSelect = KTUtil::arrayGet($aOptions, 'select', 'F.id'); + + $sQuery = "SELECT $sSelect FROM " . KTUtil::getTableName("folders") . " AS F + LEFT JOIN " . KTUtil::getTableName("folder_searchable_text") . " AS FST ON (F.id = FST.folder_id) + $sPermissionJoin $sWhere "; + $aParams = array($this->searchable_text); + $aParams = kt_array_merge($aParams, $aPermissionParams); + return array($sQuery, $aParams); + } function getFolderCount() { - // never any folders, given the current fulltext environ. - return 0; + // use hack to get folders, if included. + if (!XXX_HARDCODE_SIMPLE_FOLDER_SEARCH) { return 0; } + + $aOptions = array( + 'select' => 'count(F.id) AS cnt', + ); + $aQuery = $this->_getFolderQuery($aOptions); + if (PEAR::isError($aQuery)) { return 0; } + $iRet = DBUtil::getOneResultKey($aQuery, 'cnt'); + return $iRet; } function getFolders($iBatchSize, $iBatchStart, $sSortColumn, $sSortOrder, $sJoinClause = null, $aJoinParams = null) { - return array(); + if (!XXX_HARDCODE_SIMPLE_FOLDER_SEARCH) { return array(); } + + $res = $this->_getFolderQuery(); + if (PEAR::isError($res)) { return array(); } + list($sQuery, $aParams) = $res; + $sQuery .= " ORDER BY " . $sSortColumn . " " . $sSortOrder . " "; + + $sQuery .= " LIMIT ?, ?"; + $aParams[] = $iBatchStart; + $aParams[] = $iBatchSize; + + $q = array($sQuery, $aParams); + + $res = DBUtil::getResultArray($q); + + return $res; } function getQuery($aOptions = null) { diff --git a/sql/mysql/upgrade/3.0.2.2/folder_search.sql b/sql/mysql/upgrade/3.0.2.2/folder_search.sql new file mode 100644 index 0000000..3fae62b --- /dev/null +++ b/sql/mysql/upgrade/3.0.2.2/folder_search.sql @@ -0,0 +1,11 @@ +CREATE TABLE folder_searchable_text ( + `folder_id` INT(11) NOT NULL DEFAULT 0, + PRIMARY KEY(folder_id), + `folder_text` text, + KEY `folder_searchable_text_folder_indx` (`folder_id`), + FULLTEXT KEY `folder_text` (`folder_text`) +) Type=MyISAM; + +-- generate the data + +insert into folder_searchable_text (folder_id, folder_text) SELECT id, name from folders;