📄 search.inc.php
字号:
<?php
/**
* $Id:$
*
* KnowledgeTree Community Edition
* Document Management Made Simple
* Copyright (C) 2008 KnowledgeTree Inc.
* Portions copyright The Jam Warehouse Software (Pty) Limited
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 3 as published by the
* Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
* California 94120-7775, or email info@knowledgetree.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* KnowledgeTree" logo and retain the original copyright notice. If the display of the
* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
* must display the words "Powered by KnowledgeTree" and retain the original
* copyright notice.
* Contributor( s): ______________________________________
*
*/
require_once('search/SearchCommandParser.php');
require_once('search/SearchCommandLexer.php');
require_once('search/fieldRegistry.inc.php');
require_once('search/expr.inc.php');
require_once(KT_LIB_DIR . '/security/Permission.inc');
// TODO: move standalone functions into a class.... what was I thinking?
function rank_compare($a, $b)
{
if ($a->Rank == $b->Rank)
{
if ($a->Title == $b->Title)
return 0;
// we'll show docs in ascending order by name
return ($a->Title < $b->Title)?-1:1;
}
// we want to be in descending order
return ($a->Rank > $b->Rank)?-1:1;
}
function search_alias_compare($a, $b)
{
if ($a['alias'] == $b['alias']) return 0;
return ($a['alias'] < $b['alias'])?-1:1;
}
function searchfix($str)
{
return str_replace(array("\n","\r"), array('',''), addslashes($str));
}
// TODO: replace manual json construction with json_encode().
class SearchHelper
{
public static function correctPath($path)
{
if (OS_WINDOWS)
{
return str_replace('/','\\', $path);
}
else
{
return str_replace('\\','/', $path);
}
}
public static function checkOpenOfficeAvailablity()
{
$config =& KTConfig::getSingleton();
$ooHost = $config->get('openoffice/host', 'localhost');
$ooPort = $config->get('openoffice/port', 8100);
$connection = @fsockopen($ooHost, $ooPort,$errno, $errstr, 2);
if (false === $connection)
{
return sprintf(_kt("Cannot connect to Open Office Server on host '%s:%s'."), $ooHost, $ooPort);
}
fclose($connection);
return null;
}
public static function getSavedSearchEvents()
{
// TODO
$sql = "";
}
public static function getJSdocumentTypesStruct($documenttypes = null)
{
if (is_null($documenttypes))
{
$documenttypes = SearchHelper::getDocumentTypes();
}
$dt=0;
$documenttypes_str = '[';
foreach($documenttypes as $user)
{
if ($dt++ > 0) $documenttypes_str .= ',';
$id=$user['id'];
$name=searchfix($user['name']);
$documenttypes_str .= "\n\t{id: \"$id\", name: \"$name\"}";
}
$documenttypes_str .= ']';
return $documenttypes_str;
}
public static function getJSmimeTypesStruct($mimetypes = null)
{
if (is_null($mimetypes))
{
$mimetypes = SearchHelper::getMimeTypes();
}
$mt=0;
$mimetypes_str = '[';
foreach($mimetypes as $user)
{
if ($mt++ > 0) $mimetypes_str .= ',';
$name=$user['name'];
$mimetypes_str .= "\n\t\"$name\"";
}
$mimetypes_str .= ']';
return $mimetypes_str;
}
public static function getJSusersStruct($users = null)
{
if (is_null($users))
{
$users = SearchHelper::getUsers();
}
$uo=0;
$users_str = '[';
foreach($users as $user)
{
if ($uo++ > 0) $users_str .= ',';
$id=$user['id'];
$name=searchfix($user['name']);
$users_str .= "\n\t{id: \"$id\", name: \"$name\"}";
}
$users_str .= ']';
return $users_str;
}
public static function getJSfieldsStruct($fields = null)
{
if (is_null($fields))
{
$fields = SearchHelper::getSearchFields();
}
$fields_str = '[';
$fo=0;
foreach($fields as $field)
{
if ($fo++ > 0) $fields_str .= ',';
$alias = searchfix($field['alias']);
$display = searchfix($field['display']);
$type = $field['type'];
$fields_str .= "\n\t{alias: \"$alias\", name: \"$display\", type:\"$type\"}";
}
$fields_str .= ']';
return $fields_str;
}
public static function getJSworkflowStruct($workflows = null)
{
if (is_null($workflows))
{
$workflows = SearchHelper::getWorkflows();
}
$workflow_str = '[';
$wo=0;
foreach($workflows as $workflow)
{
if ($wo++ > 0) $workflow_str .= ',';
$wid = $workflow['id'];
$name = searchfix($workflow['name']);
$workflow_str .= "\n\t{id:\"$wid\", name: \"$name\", states: [ ";
$result['workflows'][$wid] = $workflow;
$states = SearchHelper::getWorkflowStates($wid);
$result['workflows'][$wid]['states'] = array();
$so=0;
foreach($states as $state)
{
if ($so++>0) $workflow_str .= ',';
$sid = $state['id'];
$name=searchfix($state['name']);
$result['workflows'][$wid]['states'][$sid] = $state;
$workflow_str .= "\n\t\t{id:\"$wid\", name: \"$name\"}";
}
$workflow_str .= ']}';
}
$workflow_str .= ']';
return $workflow_str;
}
public static function getJSfieldsetStruct($fieldsets = null)
{
if (is_null($fieldsets))
{
$fieldsets = SearchHelper::getFieldsets();
}
$fieldset_str = '[';
$fso=0;
foreach($fieldsets as $fieldset)
{
$fsid=$fieldset['id'];
$name = searchfix($fieldset['name']);
$desc = searchfix($fieldset['description']);
if ($fso++>0) $fieldset_str .= ',';
$fieldset_str .= "\n\t{id:\"$fsid\",name:\"$name\",description:\"$desc\", fields: [";
$result['fieldsets'][$fsid] = $fieldset;
$fields = SearchHelper::getFields($fsid);
$result['fieldsets'][$fsid]['fields'] = array();
$fo=0;
foreach($fields as $field)
{
if ($fo++ >0) $fieldset_str .= ',';
$fid = $field['id'];
$name= searchfix($field['name']);
$desc = searchfix($field['description']);
$datatype=$field['datatype'];
$control=$field['control'];
$fieldset_str .= "\n\t\t{id:\"$fid\", name:\"$name\", description:\"$desc\", datatype:\"$datatype\", control:\"$control\", options: [";
$options = $field['options'];
$oo = 0;
if (!is_array($options))
{
$options = array();
}
foreach($options as $option)
{
if ($oo++ > 0) $fieldset_str .= ',';
$oid = $option['id'];
$name= searchfix($option['name']);
$fieldset_str .= "\n\t\t\t{id: \"$oid\", name: \"$name\"}";
}
$fieldset_str .= ']}';
$result['fieldsets'][$fsid]['fields'][$fid] = $field;
}
$fieldset_str .= ']}';
}
$fieldset_str .= ']';
return $fieldset_str;
}
public static function getSavedSearches($userID)
{
// need to test for broken db configuration so that the queries dont fail
// and so that we can be redirected to the db error page
// TODO: maybe best to have a special db error page rather than the default template when logged in
global $default;
if (is_null($default->_db) || PEAR::isError($default->_db)) return array();
$sql = "SELECT id, name FROM search_saved WHERE type='S'";
// if we are not the system admin, then we get only ours or shared searches
if (!Permission::userIsSystemAdministrator($userID))
{
$sql .= " and ( user_id=$userID OR shared=1 ) ";
}
$rs = DBUtil::getResultArray($sql);
return $rs;
}
public static function getSearchFields()
{
$registry = ExprFieldRegistry::getRegistry();
$fields = $registry->getFields();
$results = array();
foreach($fields as $field )
{
$type = $field->getInputRequirements();
$type = $type['value']['type'];
$results[] = array('alias'=>$field->getAlias(), 'display'=>$field->getDisplay(), 'type'=>$type);
}
usort($results, search_alias_compare);
return $results;
}
public static function getFolder($folderID, $userid)
{
$folder = Folder::get($folderID + 0);
if (PEAR::isError($folder))
{
return $folder;
}
if (!Permission::userHasFolderReadPermission($folder))
{
return new PEAR_Error(_kt('no permission to read folder'));
}
$sql = "SELECT id, name FROM folders WHERE parent_id=$folderID ORDER BY name";
$rs = DBUtil::getResultArray($sql);
if (PEAR::isError($rs))
{
return $rs;
}
$folders = array();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -