📄 partialquery.inc.php
字号:
$temp = str_replace('%', '', $this->searchable_text);
$keywords = explode(' ', $temp);
for($i=0; $i<count($keywords); $i++){
if($keywords[$i] == ' ' or $keywords[$i] == ''){
continue;
}else{
$keywords_temp[] = trim($keywords[$i]);
}
}
$keywords = $keywords_temp;
if(count($keywords) > 1){
for($i=0; $i<count($keywords); $i++){
$keywords[$i] = '%'.$keywords[$i].'%';
if($i > 0){
$aPotentialWhereString .= ' AND ';
}
$aPotentialWhereString .= 'FST.folder_text LIKE ?';
}
}else{
$aPotentialWhereString = 'FST.folder_text LIKE ? ';
}
$aPotentialWhere = array($sPermissionString, $aPotentialWhereString);
$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 ";
if(count($keywords) > 1){
$aParams = $keywords;
}else{
$aParams = array($this->searchable_text);
}
$aParams = kt_array_merge($aPermissionParams, $aParams);
return array($sQuery, $aParams);
}
function getFolderCount() {
// 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) {
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 $iBatchStart, $iBatchSize";
$q = array($sQuery, $aParams);
$res = DBUtil::getResultArray($q);
return $res;
}
function getQuery($aOptions = null) {
$aSubgroup = array(
'values' => array(
array('type' => 'ktcore.criteria.searchabletext', 'data' => array('ktcore.criteria.searchabletext' => $this->searchable_text)),
array('sql' => array('D.status_id = 1')),
),
'join' => 'AND',
);
$aCriteriaSet = array(
'subgroup' => array($aSubgroup),
'join' => 'AND',
);
$oUser = User::get($_SESSION['userID']);
return KTSearchUtil::criteriaToQuery($aCriteriaSet, $oUser, 'ktcore.permissions.read', $aOptions);
}
function getDocumentCount() {
$aOptions = array(
'select' => 'count(DISTINCT D.id) AS cnt',
);
$aQuery = $this->getQuery($aOptions);
if (PEAR::isError($aQuery)) { return 0; }
$iRet = DBUtil::getOneResultKey($aQuery, 'cnt');
return $iRet;
}
// 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) {
$this->sDocumentJoinClause = $sJoinClause;
$this->aDocumentJoinParams = $aJoinParams;
$aOptions = array(
'select' => 'DISTINCT D.id AS id',
'join' => array($sJoinClause, $aJoinParams),
);
$res = $this->getQuery($aOptions);
if (PEAR::isError($res)) { return array(); }
list($sQuery, $aParams) = $res;
$sQuery .= ' ORDER BY ' . $sSortColumn . ' ' . $sSortOrder . ' ';
$sQuery .= " LIMIT $iBatchStart, $iBatchSize";
$q = array($sQuery, $aParams);
$res = DBUtil::getResultArray($q);
return $res;
}
}
class TypeBrowseQuery extends SimpleSearchQuery {
var $iDocType;
function TypeBrowseQuery($oDocType) {
$this->iDocType = $oDocType->getId();
}
function getQuery($aOptions = null) {
$aSubgroup = array(
'values' => array(
array('type' => 'ktcore.criteria.documenttype', 'data' => array('ktcore.criteria.documenttype' => $this->iDocType)),
array('sql' => array('D.status_id = 1')),
),
'join' => 'AND',
);
$aCriteriaSet = array(
'subgroup' => array($aSubgroup),
'join' => 'AND',
);
$oUser = User::get($_SESSION['userID']);
return KTSearchUtil::criteriaToQuery($aCriteriaSet, $oUser, 'ktcore.permissions.read', $aOptions);
}
// don't do folder searching
function getFolderCount() { return 0; }
function getFolders($iBatchSize, $iBatchStart, $sSortColumn, $sSortOrder, $sJoinClause = null, $aJoinParams = null) { return array(); }
}
class ValueBrowseQuery extends SimpleSearchQuery {
var $sFieldNamespace;
var $sValueName;
function ValueBrowseQuery($oField, $oValue) {
$this->sFieldNamespace = $oField->getNamespace();
$this->sValueName = $oValue->getName();
}
function getQuery($aOptions = null) {
$aSubgroup = array(
'values' => array(
array('type' => $this->sFieldNamespace, 'data' => array($this->sFieldNamespace => $this->sValueName)),
array('sql' => array('D.status_id = 1')),
),
'join' => 'AND',
);
$aCriteriaSet = array(
'subgroup' => array($aSubgroup),
'join' => 'AND',
);
$oUser = User::get($_SESSION['userID']);
return KTSearchUtil::criteriaToQuery($aCriteriaSet, $oUser, 'ktcore.permissions.read', $aOptions);
}
// don't do folder searching
function getFolderCount() { return 0; }
function getFolders($iBatchSize, $iBatchStart, $sSortColumn, $sSortOrder, $sJoinClause = null, $aJoinParams = null) { return array(); }
}
class BooleanSearchQuery extends PartialQuery {
// FIXME cache permission lookups, etc.
var $datavars;
function BooleanSearchQuery($datavars) { $this->datavars = $datavars; }
function getFolderCount() {
// never any folders, given the current fulltext environ.
return 0;
}
function getFolders($iBatchSize, $iBatchStart, $sSortColumn, $sSortOrder, $sJoinClause = null, $aJoinParams = null) {
return array();
}
function getQuery($aOptions = null) {
$oUser = User::get($_SESSION['userID']);
return KTSearchUtil::criteriaToQuery($this->datavars, $oUser, 'ktcore.permissions.read', $aOptions);
}
function getDocumentCount() {
$aOptions = array(
'select' => 'count(DISTINCT D.id) AS cnt',
);
$aQuery = $this->getQuery($aOptions);
if (PEAR::isError($aQuery)) { return 0; }
$iRet = DBUtil::getOneResultKey($aQuery, 'cnt');
return $iRet;
}
// 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) {
$this->sDocumentJoinClause = $sJoinClause;
$this->aDocumentJoinParams = $aJoinParams;
$aOptions = array(
'select' => 'DISTINCT D.id AS id',
'join' => array($sJoinClause, $aJoinParams),
);
$res = $this->getQuery($aOptions);
if (PEAR::isError($res)) { return array(); }
list($sQuery, $aParams) = $res;
$sQuery .= ' ORDER BY ' . $sSortColumn . ' ' . $sSortOrder . ' ';
$sQuery .= " LIMIT $iBatchStart, $iBatchSize";
$q = array($sQuery, $aParams);
$res = DBUtil::getResultArray($q);
return $res;
}
}
class FolderBrowseQuery extends BrowseQuery {
function getDocumentCount() {
return 0;
}
function getDocuments() {
return array();
}
}
class ArchivedBrowseQuery extends BrowseQuery {
function _getDocumentQuery($aOptions = null) {
$oUser = User::get($_SESSION['userID']);
$res = KTSearchUtil::permissionToSQL($oUser, $this->sPermissionName);
if (PEAR::isError($res)) {
return $res;
}
list($sPermissionString, $aPermissionParams, $sPermissionJoin) = $res;
$aPotentialWhere = array($sPermissionString, 'D.folder_id = ?', 'D.status_id = ' . ARCHIVED);
$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', 'D.id');
$sQuery = sprintf('SELECT %s FROM %s AS D
LEFT JOIN %s AS DM ON D.metadata_version_id = DM.id
LEFT JOIN %s AS DC ON DM.content_version_id = DC.id
%s %s',
$sSelect, KTUtil::getTableName('documents'),
KTUtil::getTableName('document_metadata_version'),
KTUtil::getTableName('document_content_version'),
$sPermissionJoin, $sWhere);
$aParams = array();
$aParams = kt_array_merge($aParams, $aPermissionParams);
$aParams[] = $this->folder_id;
return array($sQuery, $aParams);
}
}
?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -