📄 search.inc.php.svn-base
字号:
<?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 + -