schema.inc.php.svn-base
来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· SVN-BASE 代码 · 共 1,058 行 · 第 1/3 页
SVN-BASE
1,058 行
<?php/** * $Id: $ * * Database access utility class * * 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): ______________________________________ */class KTSchemaUtil{ /** * Indicates if statements to the database must be performed. * * @var boolean */ public $persist; /** * Primary key definitions. * * @var array */ private $primaryKeys; /** * Foreign key definitions * * @var array */ private $foreignKeys; /** * Index definitions * * @var array */ private $indexes; /** * Schema of database * * @var array */ private $schema; private $primary; private function __construct($setup=false) { $this->persist = true; $this->getDBSchema(); if ($setup) { $this->setupAdminDatabase(); } $this->definePrimaryKeys(); $this->defineForeignKeys(); $this->defineOtherIndexes(); } public function setTablesToInnoDb() { foreach($this->schema as $tablename=>$schema) { $schema = strtolower($schema); $isInnoDb = (strpos($schema, 'innodb') !== false); $hasFulltext = (strpos($schema, 'fulltext') !== false); // if the table is innodb already, don't have to do anything // only myisam tables can do fulltext if (!$isInnoDb && !$hasFulltext) { $sql = "ALTER TABLE $tablename TYPE=innodb;"; $this->_exec($sql); } } } private function createFixUser() { $sql = "SELECT 1 FROM users WHERE id = -10;"; $rs = DBUtil::getResultArray($sql); if (PEAR::isError($rs)) { print ''; } if (count($rs) == 0) { $sql = "INSERT INTO users (id,username,name,password,max_sessions) VALUES (-10,'_deleted_helper','Deleted User','---------------',0)"; $this->_exec($sql); } } public function setupAdminDatabase() { global $default; $dsn = array( 'phptype' => $default->dbType, 'username' => $default->dbAdminUser, 'password' => $default->dbAdminPass, 'hostspec' => $default->dbHost, 'database' => $default->dbName, 'port' => $default->dbPort, ); $options = array( 'debug' => 2, 'portability' => DB_PORTABILITY_ERRORS, 'seqname_format' => 'zseq_%s', ); $default->_admindb = &DB::connect($dsn, $options); if (PEAR::isError($default->_admindb)) { die($default->_admindb->toString()); } $default->_admindb->setFetchMode(DB_FETCHMODE_ASSOC); return; } private function removeDuplicateIndexes() { foreach($this->primary as $table=>$key) { $this->dropIndex($table,$key); } } /** * Enter description here... * * @return KTSchemaUtil */ public function getSingleton() { static $singleton = null; if (is_null($singleton)) { $singleton = new KTSchemaUtil(); } return $singleton; } /** * Adds primary keys to the database * */ private function definePrimaryKeys() { $this->primaryKeys = array(); $this->definePrimaryKey('active_sessions', 'id'); $this->definePrimaryKey('archive_restoration_request','id'); $this->definePrimaryKey('archiving_settings','id'); $this->definePrimaryKey('archiving_type_lookup','id'); $this->definePrimaryKey('authentication_sources','id'); $this->definePrimaryKey('baobab_keys','id'); $this->definePrimaryKey('baobab_user_keys','id'); $this->definePrimaryKey('column_entries','id'); $this->definePrimaryKey('comment_searchable_text','comment_id'); $this->definePrimaryKey('dashlet_disables','id'); $this->definePrimaryKey('data_types','id'); $this->definePrimaryKey('discussion_comments','id'); $this->definePrimaryKey('discussion_threads','id'); $this->definePrimaryKey('document_archiving_link','id'); $this->definePrimaryKey('document_content_version','id'); $this->definePrimaryKey('document_fields','id'); $this->definePrimaryKey('document_fields_link','id'); $this->definePrimaryKey('document_incomplete','id'); $this->definePrimaryKey('document_link','id'); $this->definePrimaryKey('document_link_types','id'); $this->definePrimaryKey('document_metadata_version','id'); $this->definePrimaryKey('document_role_allocations','id'); $this->definePrimaryKey('document_subscriptions','id'); $this->definePrimaryKey('document_tags',array('document_id','tag_id')); $this->definePrimaryKey('document_text', 'document_id'); $this->definePrimaryKey('document_transaction_types_lookup', 'id'); $this->definePrimaryKey('document_transaction_text', 'document_id'); $this->definePrimaryKey('document_transactions','id'); $this->definePrimaryKey('document_type_fields_link','id'); $this->definePrimaryKey('document_type_fieldsets_link','id'); $this->definePrimaryKey('document_types_lookup','id'); $this->definePrimaryKey('documents','id'); $this->definePrimaryKey('download_files',array('document_id','session')); $this->definePrimaryKey('field_behaviours','id'); $this->definePrimaryKey('field_value_instances','id'); $this->definePrimaryKey('fieldsets','id'); $this->definePrimaryKey('folder_doctypes_link','id'); $this->definePrimaryKey('folder_searchable_text','folder_id'); $this->definePrimaryKey('folder_subscriptions','id'); $this->definePrimaryKey('folder_transactions','id'); $this->definePrimaryKey('folder_workflow_map','folder_id'); $this->definePrimaryKey('folders','id'); $this->definePrimaryKey('folders_users_roles_link','id'); $this->definePrimaryKey('groups_groups_link','id'); $this->definePrimaryKey('groups_lookup','id'); $this->definePrimaryKey('help','id'); $this->definePrimaryKey('help_replacement','id'); $this->definePrimaryKey('index_files','document_id'); $this->definePrimaryKey('interceptor_instances','id'); $this->definePrimaryKey('links','id'); $this->definePrimaryKey('metadata_lookup','id'); $this->definePrimaryKey('metadata_lookup_tree','id'); $this->definePrimaryKey('mime_documents','id'); $this->definePrimaryKey('mime_extractors','id'); $this->definePrimaryKey('mime_document_mapping',array('mime_type_id','mime_document_id')); $this->definePrimaryKey('mime_types','id'); $this->definePrimaryKey('news','id'); $this->definePrimaryKey('notifications','id'); $this->definePrimaryKey('organisations_lookup','id'); $this->definePrimaryKey('permission_assignments','id'); $this->definePrimaryKey('permission_descriptor_groups', array('descriptor_id','group_id')); $this->definePrimaryKey('permission_descriptor_roles', array('descriptor_id','role_id')); $this->definePrimaryKey('permission_descriptor_users', array('descriptor_id','user_id')); $this->definePrimaryKey('permission_descriptors','id'); $this->definePrimaryKey('permission_dynamic_conditions','id'); $this->definePrimaryKey('permission_lookup_assignments','id'); $this->definePrimaryKey('permission_lookups','id'); $this->definePrimaryKey('permission_objects','id'); $this->definePrimaryKey('permissions','id'); $this->definePrimaryKey('plugin_rss','id'); $this->definePrimaryKey('plugins','id'); $this->definePrimaryKey('plugin_helper','id'); $this->definePrimaryKey('quicklinks','id'); $this->definePrimaryKey('role_allocations','id'); $this->definePrimaryKey('roles','id'); $this->definePrimaryKey('saved_searches','id'); $this->definePrimaryKey('scheduler_tasks','id'); $this->definePrimaryKey('search_ranking',array('groupname','itemname')); $this->definePrimaryKey('search_saved','id'); $this->definePrimaryKey('search_saved_events','document_id'); $this->definePrimaryKey('status_lookup','id'); $this->definePrimaryKey('system_settings','id'); $this->definePrimaryKey('tag_words','id'); $this->definePrimaryKey('time_period','id'); $this->definePrimaryKey('time_unit_lookup','id'); $this->definePrimaryKey('trigger_selection','event_ns'); $this->definePrimaryKey('type_workflow_map','document_type_id'); $this->definePrimaryKey('units_lookup','id'); $this->definePrimaryKey('units_organisations_link','id'); $this->definePrimaryKey('upgrades','id'); $this->definePrimaryKey('uploaded_files','tempfilename'); $this->definePrimaryKey('user_history','id'); $this->definePrimaryKey('user_history_documents','id'); $this->definePrimaryKey('user_history_folders','id'); $this->definePrimaryKey('users','id'); $this->definePrimaryKey('users_groups_link','id'); $this->definePrimaryKey('workflow_actions','workflow_id'); $this->definePrimaryKey('workflow_documents','document_id'); $this->definePrimaryKey('workflow_state_permission_assignments','id'); $this->definePrimaryKey('workflow_states','id'); $this->definePrimaryKey('workflow_state_transitions',array('state_id','transition_id')); $this->definePrimaryKey('workflow_transitions','id'); $this->definePrimaryKey('workflow_trigger_instances','id'); $this->definePrimaryKey('workflows','id'); } /** * Adds foreign keys to the database * */ private function defineForeignKeys() { $this->foreignKeys = array(); $this->defineForeignKey('active_sessions', 'user_id', 'users', 'id'); $this->defineForeignKey('archive_restoration_request', 'document_id', 'documents', 'id'); $this->defineForeignKey('archive_restoration_request', 'request_user_id', 'users', 'id'); $this->defineForeignKey('archive_restoration_request', 'admin_user_id', 'users', 'id'); $this->defineForeignKey('archiving_settings', 'archiving_type_id', 'archiving_type_lookup', 'id'); $this->defineForeignKey('archiving_settings', 'time_period_id', 'time_period', 'id'); $this->defineForeignKey('baobab_user_keys', 'user_id', 'users', 'id'); $this->defineForeignKey('baobab_user_keys', 'key_id', 'baobab_keys', 'id'); $this->defineForeignKey('comment_searchable_text', 'comment_id', 'discussion_comments', 'id'); $this->defineForeignKey('comment_searchable_text', 'document_id', 'documents', 'id'); $this->defineForeignKey('dashlet_disables', 'user_id', 'users', 'id'); $this->defineForeignKey('discussion_comments', 'thread_id', 'discussion_threads', 'id'); $this->defineForeignKey('discussion_comments', 'user_id', 'users', 'id'); $this->defineForeignKey('discussion_comments', 'in_reply_to', 'discussion_comments', 'id'); $this->defineForeignKey('discussion_threads', 'document_id', 'documents', 'id'); $this->defineForeignKey('discussion_threads', 'first_comment_id', 'discussion_comments', 'id'); $this->defineForeignKey('discussion_threads', 'last_comment_id', 'discussion_comments', 'id'); $this->defineForeignKey('discussion_threads', 'creator_id', 'users', 'id'); $this->defineForeignKey('document_archiving_link', 'document_id', 'documents', 'id'); $this->defineForeignKey('document_archiving_link', 'archiving_settings_id', 'archiving_settings', 'id'); $this->defineForeignKey('document_content_version', 'document_id', 'documents', 'id'); $this->defineForeignKey('document_content_version', 'mime_id', 'mime_types', 'id'); $this->defineForeignKey('document_fields','parent_fieldset','fieldsets','id'); $this->defineForeignKey('document_fields_link','document_field_id','document_fields','id'); $this->defineForeignKey('document_fields_link','metadata_version_id','document_metadata_version','id'); $this->defineForeignKey('document_link','parent_document_id', 'documents', 'id'); $this->defineForeignKey('document_link','child_document_id', 'documents', 'id'); $this->defineForeignKey('document_link','link_type_id','document_link_types','id'); $this->defineForeignKey('document_metadata_version','document_type_id','document_types_lookup','id'); $this->defineForeignKey('document_metadata_version','status_id','status_lookup','id'); $this->defineForeignKey('document_metadata_version','document_id','documents','id'); $this->defineForeignKey('document_metadata_version','version_creator_id','users','id'); $this->defineForeignKey('document_metadata_version','content_version_id','document_content_version','id'); $this->defineForeignKey('document_metadata_version','workflow_id','workflows','id'); $this->defineForeignKey('document_metadata_version','workflow_state_id','workflow_states','id'); $this->defineForeignKey('document_role_allocations','role_id','roles','id');
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?