folder_id = $iFolderId; } function getFolderCount() { // FIXME add permission checks here $sQuery = "SELECT count(id) AS c FROM " . KTUtil::getTableName("folders") . " WHERE parent_id = ? "; $aParams = array($this->folder_id); return DBUtil::getOneResultKey(array($sQuery, $aParams), 'c'); } function getDocumentCount() { // FIXME add permission checks here $sQuery = "SELECT count(id) AS c FROM " . KTUtil::getTableName("documents") . " WHERE folder_id = ? "; $aParams = array($this->folder_id); return DBUtil::getOneResultKey(array($sQuery, $aParams), 'c'); // FIXME is this right? } function getFolders($iBatchSize, $iBatchStart, $sSortColumn, $sSortOrder, $sJoinClause = null, $aJoinParams = null) { // FIXME add permission checks here $aParams = array(); $aJoinParams = array($aJoinParams); $sQuery = "SELECT id FROM " . KTUtil::getTableName("folders") . " AS F WHERE parent_id = ? "; $aParams[] = $this->folder_id; if ($sJoinClause !== null) { $sQuery .= $sJoinClause; foreach ($aJoinParams as $param) { $aParams[] = $param; } // FIXME use merge... } $sQuery .= " ORDER BY " . $sSortColumn . " " . $sSortOrder . " "; $sQuery .= " LIMIT ?, ?"; $aParams[] = $iBatchStart; $aParams[] = $iBatchSize; $q = array($sQuery, $aParams); $res = DBUtil::getResultArray($q); return $res; } function getDocuments($iBatchSize, $iBatchStart, $sSortColumn, $sSortOrder, $sJoinClause = null, $aJoinParams = null) { // FIXME add permission checks here $aParams = array(); // main parameter array. $aJoinParams = array($aJoinParams); $sQuery = "SELECT id FROM " . KTUtil::getTableName("documents") . " AS D WHERE folder_id = ? "; $aParams = array($this->folder_id); if ($sJoinClause !== null) { $sQuery .= $sJoinClause; foreach ($aJoinParams as $param) { $aParams[] = $param; } // FIXME use merge... } $sQuery .= " ORDER BY " . $sSortColumn . " " . $sSortOrder . " "; $sQuery .= " LIMIT ?, ?"; $aParams[] = $iBatchStart; $aParams[] = $iBatchSize; $q = array($sQuery, $aParams); $res = DBUtil::getResultArray($q); return $res; } } // testing class - puts docs/folders into testdocs, testfolders. class TestQuery extends PartialQuery{ var $testdocs; var $testfolders; function TestQuery() { $this->testdocs = array(array("id" => 2), array("id" => 3), ); $this->testfolders = array(array("id" => 3),); } function getFolderCount() { count($this->testfolders); } function getDocumentCount() { count($this->testdocs); } // with batching. function getFolders($iBatchSize, $iBatchStart, $sSortColumn, $sSortOrder) { return array_slice($this->testfolders, $iBatchStart, $iBatchSize); } function getDocuments($iBatchSize, $iBatchStart, $sSortColumn, $sSortOrder) { return array_slice($this->testdocs, $iBatchStart, $iBatchSize); } } class SimpleSearchQuery extends PartialQuery { // FIXME cache permission lookups, etc. var $searchable_text; function SimpleSearchQuery($sSearchableText) { $this->searchable_text = $sSearchableText; } function getFolderCount() { // never any folders, given the current fulltext environ. return 0; } function getDocumentCount() { // FIXME add permission checks here // FIXME do not refer directly. // FIXME is this even _vaguely_ portable. $sQuery = "SELECT count(document_id) AS c FROM document_text WHERE MATCH (document_text) AGAINST (?)"; $aParams = array($this->searchable_text); return DBUtil::getOneResultKey(array($sQuery, $aParams), 'c'); } function getFolders($iBatchSize, $iBatchStart, $sSortColumn, $sSortOrder, $sJoinClause = null, $aJoinParams = null) { return array(); } // search needs some special stuff... this should probably get folded into a more complex criteria-driven thing // later. // // we also leak like ---- here, since getting the score is ... fiddly. and expensive. function getDocuments($iBatchSize, $iBatchStart, $sSortColumn, $sSortOrder, $sJoinClause = null, $aJoinParams = null) { // FIXME add permission checks here $aParams = array(); // main parameter array. $aJoinParams = array($aJoinParams); $sQuery = "SELECT D.id, MATCH (DT.document_text) AGAINST (?) as score FROM " . KTUtil::getTableName("documents") . " AS D "; $aParams[] = $this->searchable_text; $sQuery .= " LEFT JOIN document_text AS DT ON (DT.document_id = D.id) "; if ($sJoinClause !== null) { $sQuery .= $sJoinClause; foreach ($aJoinParams as $param) { $aParams[] = $param; } // FIXME use merge... } $sQuery .= " WHERE MATCH(DT.document_text) AGAINST (?) "; $aParams[] = $this->searchable_text; $sQuery .= " ORDER BY " . $sSortColumn . " " . $sSortOrder . " "; $sQuery .= " LIMIT ?, ?"; $aParams[] = $iBatchStart; $aParams[] = $iBatchSize; $q = array($sQuery, $aParams); $res = DBUtil::getResultArray($q); return $res; } } ?>