📄 upgradefunctions.inc.php
字号:
$schemautil = KTSchemaUtil::getSingleton();
$schemautil->createForeignKeys();
}
function createIndexes()
{
$schemautil = KTSchemaUtil::getSingleton();
$schemautil->createIndexes();
}
// {{{ setStorageEngine
function setStorageEngine()
{
$schemautil = KTSchemaUtil::getSingleton();
$schemautil->setTablesToInnoDb();
}
// }}}
function _removeSlashesFromFolders($folderid, $name, $full_path, $folder_ids)
{
$name = str_replace(array('/','\\'),array('-','-'), $name);
// get folders
$sql = "select id, name from folders where parent_id=$folderid";
$ids = DBUtil::getResultArray($sql);
// set to the latest values
$parent_ids = implode(',', $folder_ids);
if (empty($parent_ids)) $parent_ids = null;
if (empty($full_path)) $full_path = null;
if($folderid != 1) $full_path = (empty($full_path))?$name:($full_path . '/' . $name);
$folder_ids [] = $folderid;
$sql = "update folders set name=?,description=?, full_path=?, parent_folder_ids=? where id=?";
DBUtil::runQuery(array($sql, array($name,$name, $full_path, $parent_ids, $folderid)));
// update documents
$sql = "update documents set full_path=?, parent_folder_ids=? where folder_id=?";
DBUtil::runQuery(array($sql, array($full_path, $parent_ids, $folderid)));
// recurse subfolders
foreach($ids as $row)
{
$id = $row['id'];
$name = $row['name'];
UpgradeFunctions::_removeSlashesFromFolders($id, $name, $full_path, $folder_ids);
}
}
function removeSlashesFromObjects()
{
$GLOBALS["_OBJECTCACHE"] = array();
$sql = "select name from folders where id=1";
$name = DBUtil::getOneResultKey($sql,'name');
UpgradeFunctions::_removeSlashesFromFolders(1, $name, array(), array());
DBUtil::commit();
}
// {{{ _setPermissionFolder
function _setPermissionFolder($iFolderId) {
global $default;
$iInheritedFolderId = $iFolderId;
if ($iInheritedFolderId == 1) {
$sQuery = "UPDATE folders SET permission_folder_id = 1 WHERE id = 1";
DBUtil::runQuery($sQuery);
return;
}
while ($bFoundPermissions !== true) {
/*ok*/$aCheckQuery = array('SELECT id FROM groups_folders_link WHERE folder_id = ? LIMIT 1', $iInheritedFolderId);
if (count(DBUtil::getResultArrayKey($aCheckQuery, 'id')) == 0) {
$default->log->debug('No direct permissions on folder ' . $iInheritedFolderId);
$bInherited = true;
$aParentQuery = array('SELECT parent_id FROM folders WHERE id = ? LIMIT 1', $iInheritedFolderId);
$iParentId = DBUtil::getOneResultKey($aParentQuery, 'parent_id');
$iInheritedFolderId = $iParentId;
if ($iInheritedFolderId === false) {
return;
}
if ($iInheritedFolderId === null) {
return;
}
// if our parent knows the permission folder, use that.
$aQuery = array("SELECT permission_folder_id FROM folders WHERE id = ?", array($iInheritedFolderId));
$iPermissionFolderID = DBUtil::getOneResultKey($aQuery, 'permission_folder_id');
if (!empty($iPermissionFolderID)) {
$aQuery = array(
"UPDATE folders SET permission_folder_id = ? WHERE id = ?",
array($iPermissionFolderID, $iFolderId)
);
DBUtil::runQuery($aQuery);
return;
}
$default->log->debug('... trying parent: ' . $iInheritedFolderId);
} else {
$default->log->debug('Found direct permissions on folder ' . $iInheritedFolderId);
$iPermissionFolderID = $iInheritedFolderId;
$aQuery = array(
"UPDATE folders SET permission_folder_id = ? WHERE id = ?",
array($iPermissionFolderID, $iFolderId)
);
DBUtil::runQuery($aQuery);
return;
}
}
$default->log->error('No permissions whatsoever for folder ' . $iFolderId);
// 0, which can never exist, for non-existent. null for not set yet (database upgrade).
$iPermissionFolderID = 0;
$aQuery = array(
"UPDATE folders SET permission_folder_id = ? WHERE id = ?",
array($iPermissionFolderID, $iFolderId)
);
DBUtil::runQuery($aQuery);
}
// }}}
// {{{ setPermissionFolder
function setPermissionFolder() {
global $default;
require_once(KT_LIB_DIR . '/foldermanagement/Folder.inc');
$sQuery = "SELECT id FROM $default->folders_table WHERE permission_folder_id IS NULL ORDER BY LENGTH(parent_folder_ids)";
$aIDs = DBUtil::getResultArrayKey($sQuery, 'id');
foreach ($aIDs as $iId) {
$res = UpgradeFunctions::_setPermissionFolder($iId);
if (PEAR::isError($res)) {
return $res;
}
}
}
// }}}
// {{{ addTemplateMimeTypes
function addTemplateMimeTypes() {
global $default;
$table = $default->mimetypes_table;
$query = sprintf('SELECT id FROM %s WHERE filetypes = ?',
$table);
$newTypes = array(
array(
'filetypes' => 'xlt',
'mimetypes' => 'application/vnd.ms-excel',
'icon_path' => 'icons/excel.gif',
),
array(
'filetypes' => 'dot',
'mimetypes' => 'application/msword',
'icon_path' => 'icons/word.gif',
),
);
foreach ($newTypes as $types) {
$res = DBUtil::getOneResultKey(array($query, $types['filetypes']), 'id');
if (PEAR::isError($res)) {
return $res;
}
if (is_null($res)) {
$res = DBUtil::autoInsert($table, $types);
if (PEAR::isError($res)) {
return $res;
}
}
}
return true;
}
// }}}
// {{{ _setRead
function _setRead($iID, $oPO) {
require_once(KT_LIB_DIR . '/permissions/permission.inc.php');
require_once(KT_LIB_DIR . '/permissions/permissionutil.inc.php');
$sTable = 'groups_folders_link';
$oPermission = KTPermission::getByName('ktcore.permissions.read');
$query = "SELECT group_id FROM $sTable WHERE folder_id = ? AND (can_read = ? OR can_write = ?)";
$aParams = array($iID, true, true);
$aGroupIDs = DBUtil::getResultArrayKey(array($query, $aParams), 'group_id');
$aAllowed = array("group" => $aGroupIDs);
KTPermissionUtil::setPermissionForID($oPermission, $oPO, $aAllowed);
}
// }}}
// {{{ _setWrite
function _setWrite($iID, $oPO) {
require_once(KT_LIB_DIR . '/permissions/permission.inc.php');
require_once(KT_LIB_DIR . '/permissions/permissionutil.inc.php');
$sTable = 'groups_folders_link';
$oPermission = KTPermission::getByName('ktcore.permissions.write');
$query = "SELECT group_id FROM $sTable WHERE folder_id = ? AND can_write = ?";
$aParams = array($iID, true);
$aGroupIDs = DBUtil::getResultArrayKey(array($query, $aParams), 'group_id');
$aAllowed = array("group" => $aGroupIDs);
KTPermissionUtil::setPermissionForID($oPermission, $oPO, $aAllowed);
}
// }}}
// {{{ _setAddFolder
function _setAddFolder($iID, $oPO) {
require_once(KT_LIB_DIR . '/permissions/permission.inc.php');
require_once(KT_LIB_DIR . '/permissions/permissionutil.inc.php');
$sTable = 'groups_folders_link';
$oPermission = KTPermission::getByName('ktcore.permissions.addFolder');
$query = "SELECT group_id FROM $sTable WHERE folder_id = ? AND can_write = ?";
$aParams = array($iID, true);
$aGroupIDs = DBUtil::getResultArrayKey(array($query, $aParams), 'group_id');
$aAllowed = array("group" => $aGroupIDs);
KTPermissionUtil::setPermissionForID($oPermission, $oPO, $aAllowed);
}
// }}}
// {{{ setPermissionObject
function setPermissionObject() {
global $default;
require_once(KT_LIB_DIR . '/permissions/permissionobject.inc.php');
DBUtil::runQuery("UPDATE folders SET permission_folder_id = 1 WHERE id = 1");
$aBrokenFolders = DBUtil::getResultArray('SELECT id, parent_id FROM folders WHERE permission_folder_id = 0 OR permission_folder_id IS NULL ORDER BY LENGTH(parent_folder_ids)');
foreach ($aBrokenFolders as $aFolderInfo) {
$iFolderId = $aFolderInfo['id'];
$iParentFolderId = $aFolderInfo['parent_id'];
$iParentFolderPermissionFolder = DBUtil::getOneResultKey(array("SELECT permission_folder_id FROM folders WHERE id = ?", array($iParentFolderId)), 'permission_folder_id');
$res = DBUtil::whereUpdate('folders', array('permission_folder_id' => $iParentFolderPermissionFolder), array('id' => $iFolderId));
}
// First, set permission object on all folders that were
// "permission folders".
$query = "SELECT id FROM $default->folders_table WHERE permission_folder_id = id AND permission_object_id IS NULL";
$aIDs = DBUtil::getResultArrayKey($query, 'id');
foreach ($aIDs as $iID) {
$oPO =& KTPermissionObject::createFromArray(array());
if (PEAR::isError($oPO)) {
var_dump($oPO);
exit(0);
}
$sTableName = KTUtil::getTableName('folders');
$query = sprintf("UPDATE %s SET permission_object_id = %d WHERE id = %d", $sTableName, $oPO->getId(), $iID);
$res = DBUtil::runQuery($query);
UpgradeFunctions::_setRead($iID, $oPO);
UpgradeFunctions::_setWrite($iID, $oPO);
UpgradeFunctions::_setAddFolder($iID, $oPO);
}
// Next, set permission object on all folders that weren't
// "permission folders" by using the permission object on their
// permission folders.
$query = "SELECT id FROM $default->folders_table WHERE permission_object_id IS NULL";
$aIDs = DBUtil::getResultArrayKey($query, 'id');
foreach ($aIDs as $iID) {
$sTableName = KTUtil::getTableName('folders');
$query = sprintf("SELECT F2.permission_object_id AS poi FROM %s AS F LEFT JOIN %s AS F2 ON F2.id = F.permission_folder_id WHERE F.id = ?", $sTableName, $sTableName);
$aParams = array($iID);
$iPermissionObjectId = DBUtil::getOneResultKey(array($query, $aParams), 'poi');
$sTableName = KTUtil::getTableName('folders');
$query = sprintf("UPDATE %s SET permission_object_id = %d WHERE id = %d", $sTableName, $iPermissionObjectId, $iID);
DBUtil::runQuery($query);
}
$sDocumentsTable = KTUtil::getTableName('documents');
$sFoldersTable = KTUtil::getTableName('folders');
$query = sprintf("UPDATE %s AS D, %s AS F SET D.permission_object_id = F.permission_object_id WHERE D.folder_id = F.id AND D.permission_object_id IS NULL", $sDocumentsTable, $sFoldersTable);
DBUtil::runQuery($query);
}
// }}}
// {{{ createFieldSets
function createFieldSets () {
global $default;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -