📄 upgradefunctions.inc.php
字号:
require_once(KT_LIB_DIR . '/metadata/fieldset.inc.php');
$sFieldsTable = KTUtil::getTableName('document_fields');
$sQuery = sprintf("SELECT id, name, is_generic FROM %s", $sFieldsTable);
$aFields = DBUtil::getResultArray($sQuery);
foreach ($aFields as $aField) {
$sName = $aField['name'];
$sNamespace = 'local.' . str_replace(array(' '), array(), strtolower($sName));
$iFieldId = $aField['id'];
$bIsGeneric = $aField['is_generic'];
$sFieldsetsTable = KTUtil::getTableName('fieldsets');
$iFieldsetId = DBUtil::autoInsert($sFieldsetsTable, array(
'name' => $sName,
'namespace' => $sNamespace,
'mandatory' => false,
'is_conditional' => false,
'master_field' => $iFieldId,
'is_generic' => $bIsGeneric,
));
if (PEAR::isError($iFieldsetId)) {
return $iFieldsetId;
}
$sQuery = sprintf("UPDATE %s SET parent_fieldset = ? WHERE id = ?", $sFieldsTable);
$aParams = array($iFieldsetId, $iFieldId);
$res = DBUtil::runQuery(array($sQuery, $aParams));
if (PEAR::isError($res)) {
return $res;
}
$sTable = KTUtil::getTableName('document_type_fields');
$aQuery = array(
"SELECT document_type_id FROM $sTable WHERE field_id = ?",
array($iFieldId)
);
$aDocumentTypeIds = DBUtil::getResultArrayKey($aQuery, 'document_type_id');
$sTable = KTUtil::getTableName('document_type_fieldsets');
foreach ($aDocumentTypeIds as $iDocumentTypeId) {
$res = DBUtil::autoInsert($sTable, array(
'document_type_id' => $iDocumentTypeId,
'fieldset_id' => $iFieldsetId,
));
if (PEAR::isError($res)) {
return $res;
}
}
}
}
// }}}
// {{{ normaliseDocuments
function normaliseDocuments() {
$sDocumentsTable = KTUtil::getTableName('documents');
DBUtil::runQuery("SET FOREIGN_KEY_CHECKS=0");
$aDocuments = DBUtil::getResultArray("SELECT * FROM $sDocumentsTable WHERE metadata_version_id IS NULL");
$oConfig = KTConfig::getSingleton();
foreach ($aDocuments as $aRow) {
$aMetadataVersionIds = array();
$sTransTable = KTUtil::getTableName("document_transactions");
$sQuery = "SELECT DISTINCT version, datetime, user_id FROM $sTransTable WHERE document_id = ? AND transaction_namespace = ?";
$aParams = array($aRow['id'], 'ktcore.transactions.check_out');
$sCurrentVersion = sprintf("%d.%d", $aRow['major_version'], $aRow['minor_version']);
$aVersions = DBUtil::getResultArray(array($sQuery, $aParams));
$iMetadataVersion = 0;
foreach ($aVersions as $sVersionInfo) {
$sVersion = $sVersionInfo['version'];
$sDate = $sVersionInfo['datetime'];
$iUserId = $sVersionInfo['user_id'];
$aVersionSplit = split("\.", $sVersion);
$iMajor = $aVersionSplit[0];
$iMinor = $aVersionSplit[1];
$sStoragePath = $aRow['storage_path'] . "-" . $sVersion;
$sPath = sprintf("%s/%s", $oConfig->get('urls/documentRoot'), $sStoragePath);
if ($sCurrentVersion == $sVersion) {
continue;
}
if (file_exists($sPath)) {
$iFileSize = filesize($sPath);
} else {
$iFileSize = $aRow['size'];
}
$aContentInfo = array(
'document_id' => $aRow['id'],
'filename' => $aRow['filename'],
'size' => $iFileSize,
'mime_id' => $aRow['mime_id'],
'major_version' => $iMajor,
'minor_version' => $iMinor,
'storage_path' => $sStoragePath,
);
$iContentId = DBUtil::autoInsert(KTUtil::getTableName('document_content_version'), $aContentInfo);
$aMetadataInfo = array(
'document_id' => $aRow['id'],
'content_version_id' => $iContentId,
'document_type_id' => $aRow['document_type_id'],
'name' => $aRow['name'],
'description' => $aRow['description'],
'status_id' => $aRow['status_id'],
'metadata_version' => $iMetadataVersion,
'version_created' => $sDate,
'version_creator_id' => $iUserId,
);
$iMetadataId = DBUtil::autoInsert(KTUtil::getTableName('document_metadata_version'), $aMetadataInfo);
$aMetadataVersionIds[] = $iMetadataId;
$iMetadataVersion++;
}
$aContentInfo = array(
'document_id' => $aRow['id'],
'filename' => $aRow['filename'],
'size' => $aRow['size'],
'mime_id' => $aRow['mime_id'],
'major_version' => $aRow['major_version'],
'minor_version' => $aRow['minor_version'],
'storage_path' => $aRow['storage_path'],
);
$iContentId = DBUtil::autoInsert(KTUtil::getTableName('document_content_version'), $aContentInfo);
$aMetadataInfo = array(
'document_id' => $aRow['id'],
'content_version_id' => $iContentId,
'document_type_id' => $aRow['document_type_id'],
'name' => $aRow['name'],
'description' => $aRow['description'],
'status_id' => $aRow['status_id'],
'metadata_version' => $iMetadataVersion,
'version_created' => $aRow['modified'],
'version_creator_id' => $aRow['modified_user_id'],
);
$iMetadataId = DBUtil::autoInsert(KTUtil::getTableName('document_metadata_version'), $aMetadataInfo);
$aMetadataVersionIds[] = $iMetadataId;
if (PEAR::isError($iMetadataId)) {
var_dump($iMetadataId);
}
$sDFLTable = KTUtil::getTableName('document_fields_link');
$aInfo = DBUtil::getResultArray(array("SELECT document_field_id, value FROM $sDFLTable WHERE metadata_version_id IS NULL AND document_id = ?", array($aRow['id'])));
foreach ($aInfo as $aInfoRow) {
unset($aInfoRow['id']);
foreach ($aMetadataVersionIds as $iMetadataVersionId) {
$aInfoRow['metadata_version_id'] = $iMetadataVersionId;
DBUtil::autoInsert($sDFLTable, $aInfoRow);
}
}
DBUtil::runQuery(array("UPDATE $sDocumentsTable SET metadata_version_id = ? WHERE id = ?", array($iMetadataId, $aRow['id'])));
DBUtil::runQuery(array("DELETE FROM $sDFLTable WHERE metadata_version_id IS NULL AND document_id = ?", array($aRow['id'])));
}
DBUtil::runQuery("SET FOREIGN_KEY_CHECKS=1");
}
// }}}
// {{{ applyDiscussionUpgrade
function applyDiscussionUpgrade() {
$sUpgradesTable = KTUtil::getTableName('upgrades');
$bIsVersionApplied = DBUtil::getOneResultKey("SELECT MAX(result) AS result FROM $sUpgradesTable WHERE descriptor = 'upgrade*2.99.7*99*upgrade2.99.7'", "result");
if (empty($bIsVersionApplied)) {
// print "Version is not applied!<br />\n";
return;
}
$bIsDiscussionApplied = DBUtil::getOneResultKey("SELECT MAX(result) AS result FROM $sUpgradesTable WHERE descriptor = 'sql*2.99.7*0*2.99.7/discussion.sql'", "result");
if (!empty($bIsDiscussionApplied)) {
// print "Discussion is applied!<br />\n";
return;
}
// print "Discussion is not applied!<br />\n";
$f = array(
'descriptor' => 'sql*2.99.7*0*2.99.7/discussion.sql',
'result' => true,
);
$res = DBUtil::autoInsert($sUpgradesTable, $f);
return;
}
// }}}
// {{{ fixUnits
function fixUnits() {
// First, assign the unit to a group directly on the group
// table, not via the group_units table, since groups could only
// belong to a single unit anyway.
$sGULTable = KTUtil::getTableName("groups_units");
$sGroupsTable = KTUtil::getTableName('groups');
$aGroupUnits = DBUtil::getResultArray("SELECT group_id, unit_id FROM $sGULTable");
foreach ($aGroupUnits as $aRow) {
// $curunit = DBUtil::getOneResultKey(array("SELECT unit_id FROM $sGroupsTable WHERE id = ?", array($aRow['group_id'])), "unit_id");
DBUtil::autoUpdate($sGroupsTable, array('unit_id' => $aRow['unit_id']), $aRow['group_id']);
}
// Now, assign the unit folder id to the unit directly, instead
// of storing the unit_id on every folder beneath the unit
// folder.
$sFoldersTable = KTUtil::getTableName('folders');
$sUnitsTable = KTUtil::getTableName('units');
$sQuery = "SELECT id FROM folders WHERE unit_id = ? ORDER BY LENGTH(parent_folder_ids) LIMIT 1";
$aUnitIds = DBUtil::getResultArrayKey("SELECT id FROM $sUnitsTable", 'id');
foreach ($aUnitIds as $iUnitId) {
$aParams = array($iUnitId);
$iFolderId = DBUtil::getOneResultKey(array($sQuery, $aParams), 'id');
if (!empty($iFolderId)) {
DBUtil::autoUpdate($sUnitsTable, array('folder_id' => $iFolderId), $iUnitId);
}
}
return true;
}
// }}}
// {{{ createLdapAuthenticationProvider
function createLdapAuthenticationProvider() {
if (!file_exists(KT_DIR . '/config/environment.php')) {
return;
}
global $default;
$new_default = $default;
$default = null;
require_once(KT_DIR . '/config/environment.php');
$old_default = $default;
$default = $new_default;
if ($old_default->authenticationClass !== "LDAPAuthenticator") {
return;
}
$sName = "Autocreated by upgrade";
$sNamespace = KTUtil::nameToLocalNamespace("authenticationsources", $sName);
$aConfig = array(
'searchattributes' => split(',', 'cn,mail,sAMAccountName'),
'objectclasses' => split(',', 'user,inetOrgPerson,posixAccount'),
'servername' => $old_default->ldapServer,
'basedn' => $old_default->ldapRootDn,
'searchuser' => $old_default->ldapSearchUser,
'searchpassword' => $old_default->ldapSearchPassword,
);
if ($old_default->ldapServerType == "ActiveDirectory") {
$sProvider = "ktstandard.authentication.adprovider" ;
} else {
$sProvider = "ktstandard.authentication.ldapprovider" ;
}
require_once(KT_LIB_DIR . '/authentication/authenticationsource.inc.php');
$oSource = KTAuthenticationSource::createFromArray(array(
'name' => $sName,
'namespace' => $sNamespace,
'config' => serialize($aConfig),
'authenticationprovider' => $sProvider,
));
if (PEAR::isError($oSource)) {
return $oSource;
}
$sUsersTable = KTUtil::getTableName('users');
$sQuery = "UPDATE $sUsersTable SET authentication_source_id = ? WHERE authentication_source_id IS NULL AND LENGTH(authentication_details_s1)";
$aParams = array($oSource->getId());
$res = DBUtil::runQuery(array($sQuery, $aParams));
return $res;
}
// }}}
// {{{ createSecurityDeletePermissions
function createSecurityDeletePermissions() {
$sPermissionsTable = KTUtil::getTableName('permissions');
$aPermissionInfo = array(
'human_name' => 'Core: Manage security',
'name' => 'ktcore.permissions.security',
'built_in' => true,
);
$res = DBUtil::autoInsert($sPermissionsTable, $aPermissionInfo);
if (PEAR::isError($res)) {
return $res;
}
$iSecurityPermissionId = $res;
$aPermissionInfo = array(
'human_name' => 'Core: Delete',
'name' => 'ktcore.permissions.delete',
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -