📄 search.inc.php
字号:
foreach($rs as $folder)
{
$fobj = Folder::get($folder['id']);
if (Permission::userHasFolderReadPermission($fobj))
{
$folders[] = $folder;
}
}
return $folders;
}
public static function getFields($fieldsetID)
{
if ($fieldsetID < 0)
{
$documentTypeID = sanitizeForSQL(-$fieldsetID);
$sql = "SELECT
df.id, df.name, df.data_type, df.has_lookup, df.has_lookuptree, df.description
FROM
document_type_fields_link dtfl
INNER JOIN document_fields df on dtfl.field_id=df.id
WHERE
dtfl.document_type_id=$documentTypeID
ORDER BY
df.name";
}
else
{
$fieldsetID = sanitizeForSQL($fieldsetID);
$sql = "SELECT id, name, data_type, has_lookup, has_lookuptree, description FROM document_fields WHERE parent_fieldset=$fieldsetID ORDER BY name";
}
$rs = DBUtil::getResultArray($sql);
if (PEAR::isError($rs))
{
return $rs;
}
if (count($rs) == 0)
{
return new PEAR_Error(_kt('Fieldset was not found'));
}
$result=array();
foreach($rs as $item)
{
$fieldid=$item['id'];
$type='normal';
$options = array();
$haslookup =$item['has_lookup'] + 0 > 0;
$hastree = ($item['has_lookuptree']+0 > 1);
if ($haslookup || $hastree)
{
$type = 'lookup';
$sql = "select id, name from metadata_lookup where document_field_id=$fieldid";
$options = DBUtil::getResultArray($sql);
}
/*if ($hastree)
{
$type = 'lookup';
$sql = "select id, name, metadata_lookup_tree_parent as parent from metadata_lookup_tree where document_field_id=$fieldid";
$options = DBUtil::getResultArray($sql);
}*/
if ($item['data_type'] == 'USERLIST')
{
$type = 'lookup';
$sql = "SELECT id, name from users WHERE disabled=0";
$options = DBUtil::getResultArray($sql);
}
$ritem = array(
'id'=>$fieldid,
'name'=>$item['name'],
'description'=>$item['description'],
'datatype'=>$item['data_type'],
'control'=>$type,
'options'=>$options
);
$result[]= $ritem;
}
return $result;
}
public static function getFieldsets()
{
$sql = "SELECT id, name, description FROM fieldsets WHERE disabled=0 ORDER BY name";
$rs = DBUtil::getResultArray($sql);
return $rs;
}
public static function getDocumentTypeFieldsets($documentTypeID)
{
$documentTypeID = sanitizeForSQL($documentTypeID);
$sql = "SELECT
fs.id, fs.name, fs.description
FROM
fieldsets fs LEFT JOIN document_type_fieldsets_link dtfl ON dtfl.fieldset_id=fs.id
WHERE
fs.disabled=0 AND (dtfl.document_type_id=$documentTypeID OR fs.is_generic=1)";
$rs = DBUtil::getResultArray($sql);
return $rs;
}
public static function getDocumentTypes()
{
$sql = "SELECT id, name from document_types_lookup WHERE disabled=0 ORDER BY name";
$rs = DBUtil::getResultArray($sql);
return $rs;
}
public static function getMimeTypes() {
$sql = "SELECT DISTINCT mimetypes as name FROM mime_types ORDER BY mimetypes ";
$rs = DBUtil::getResultArray($sql);
return $rs;
}
public static function getWorkflows()
{
$sql = "SELECT id, human_name as name FROM workflows WHERE enabled=1 ORDER BY human_name";
$rs = DBUtil::getResultArray($sql);
return $rs;
}
public static function getUsers()
{
$sql = "SELECT id, name FROM users WHERE disabled=0 ORDER BY name";
$rs = DBUtil::getResultArray($sql);
return $rs;
}
public static function getWorkflowStates($workflowid)
{
$sql = "SELECT id,human_name as name FROM workflow_states WHERE workflow_id=$workflowid ORDER BY id";
$rs = DBUtil::getResultArray($sql);
return $rs;
}
}
function getExpressionLocalityString($expr_str, $locality, $length, $start_offset=10)
{
if ($locality - $start_offset < 0)
{
$locality = 0;
}
else
{
$locality -= $start_offset;
}
return substr($expr_str, $locality, $length);
}
/**
* This parses a query.
*
* @param OpExpr $expr_str
* @return array of MatchResult
*/
function parseExpression($expr_str)
{
$parser = new SearchCommandParser();
$lexer = new SearchCommandLexer($expr_str);
// $parser->PrintTrace();
$use_internal=false;
try
{
while ($lexer->yylex())
{
//print "\n" . $lexer->value . "\n";
$parser->doParse($lexer->token, $lexer->value);
if (!$parser->isExprOk())
{
$use_internal=true;
$expr_str=getExpressionLocalityString($expr_str, $lexer->offset, 20);
throw new Exception(sprintf(_kt("Parsing problem near '%s' in '%s' of expression."),$lexer->value,$expr_str));
}
}
// we are now done
$parser->doParse(0, 0);
if (!$parser->isExprOk())
{
$use_internal=true;
$expr_str=getExpressionLocalityString($expr_str, $lexer->offset, 20);
throw new Exception(sprintf(_kt("There is a problem parsing the expression '%s'"),$expr_str));
}
}
catch(ResolutionException $e)
{
throw $e;
}
catch(Exception $e)
{
if ($use_internal)
{
throw $e;
}
$expr_str=getExpressionLocalityString($expr_str, $lexer->offset, 20);
throw new Exception(sprintf(_kt("Parsing problem near '%s' of expression '%s'."), $lexer->value, $expr_str));
}
return $parser->getExprResult();
}
function processSearchExpression($query)
{
try
{
$expr = parseExpression($query);
$rs = $expr->evaluate(ExprContext::DOCUMENT);
$rs = $rs['docs'];
usort($rs, 'rank_compare');
$results = array();
foreach($rs as $hit)
{
$item = array(
'document_id' => (int) $hit->DocumentID,
'custom_document_no' => 'n/a',
'oem_document_no' => (string) $hit->OemDocumentNo,
'relevance' => (float) $hit->Rank,
'text' => (string) $noText?'':$hit->Text,
'title' => (string) $hit->Title,
'document_type'=> $hit->DocumentType,
'fullpath' => (string) $hit->FullPath,
'filename' => (string) $hit->Filename,
'filesize' => (int) $hit->Filesize,
'folder_id' => (int) $hit->FolderId,
'created_by' => (string) $hit->CreatedBy,
'created_date' => (string) $hit->DateCreated,
'modified_by' => (string) $hit->ModifiedBy,
'modified_date' => (string) $hit->DateModified,
'checked_out_by' => (string) $hit->CheckedOutUser,
'checked_out_date' => (string) $hit->DateCheckedOut,
'owned_by' => (string) $hit->Owner,
'version' => (float) $hit->Version,
'is_immutable'=> (bool) $hit->Immutable,
'permissions'=> $hit->Permissions,
'workflow' => (string) $hit->WorkflowOnly,
'workflow_state' => (string) $hit->WorkflowStateOnly,
'mime_type' => (string) $hit->MimeType,
'mime_icon_path' => (string) $hit->MimeIconPath,
'mime_display' => (string) $hit->MimeDisplay,
'storage_path' => (string) $hit->StoragePath,
'status' => (string) $hit->Status,
'is_available' => (bool) $hit->IsAvailable,
);
$results[] = $item;
}
return $results;
}
catch(Exception $e)
{
return new PEAR_Error(_kt('Could not process query.') . $e->getMessage());
}
}
function resolveSearchShortcuts($result)
{
$oPermission =& KTPermission::getByName('ktcore.permissions.read');
$permId = $oPermission->getID();
$oUser = User::get($_SESSION['userID']);
$aPermissionDescriptors = KTPermissionUtil::getPermissionDescriptorsForUser($oUser);
$sPermissionDescriptors = empty($aPermissionDescriptors)? -1: implode(',', $aPermissionDescriptors);
$documentIds = implode(',',array_keys($result['docs']));
$linkedDocuments = array();
if (!empty($documentIds))
{
$sql = "SELECT d.id, d.linked_document_id from documents d ";
$sql .= 'INNER JOIN permission_lookups AS PL ON d.permission_lookup_id = PL.id '. "\n";
$sql .= 'INNER JOIN permission_lookup_assignments AS PLA ON PL.id = PLA.permission_lookup_id AND PLA.permission_id = '.$permId. " \n";
$sql .= " WHERE d.linked_document_id in ($documentIds) AND PLA.permission_descriptor_id IN ($sPermissionDescriptors)";
$rs = DBUtil::getResultArray($sql);
foreach($rs as $row)
{
$id = $row['id'];
$linked_id = $row['linked_document_id'];
$result['shortdocs'][$id] = new DocumentShortcutResultItem($id, $result['docs'][$linked_id]);
}
}
$folderIds = implode(',',array_keys($result['folders']));
$linkedFolders = array();
if (!empty($folderIds))
{
$sql = "SELECT f.id, f.linked_folder_id from folders f ";
$sql .= 'INNER JOIN permission_lookups AS PL ON f.permission_lookup_id = PL.id '. "\n";
$sql .= 'INNER JOIN permission_lookup_assignments AS PLA ON PL.id = PLA.permission_lookup_id AND PLA.permission_id = '.$permId. " \n";
$sql .= " WHERE f.linked_folder_id in ($folderIds) AND PLA.permission_descriptor_id IN ($sPermissionDescriptors)";
$rs = DBUtil::getResultArray($sql);
foreach($rs as $row)
{
$id = $row['id'];
$linked_id = $row['linked_folder_id'];
$result['shortfolders'][$id] = new FolderShortcutResultItem($id, $result['folders'][$linked_id]);
}
}
return $result;
}
?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -