Commit 7438b6fdc42b070621dcfd4d2f2d7034fd49e0ff
1 parent
719b8c47
Rewrite to avoid using out-of-sync on-disk classes and instead go
directly to the database as it is expected to work for the current state of the database structure in terms of the upgrade process. Still uses some classes, but builds from 2.0.7 now. git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@4552 c91229c3-7414-0410-bfa2-8a42b809f60b
Showing
1 changed file
with
65 additions
and
66 deletions
lib/upgrades/UpgradeFunctions.inc.php
| ... | ... | @@ -122,9 +122,11 @@ class UpgradeFunctions { |
| 122 | 122 | |
| 123 | 123 | // {{{ _setRead |
| 124 | 124 | function _setRead($iID, $oPO) { |
| 125 | - global $default; | |
| 125 | + require_once(KT_LIB_DIR . '/permissions/permission.inc.php'); | |
| 126 | + require_once(KT_LIB_DIR . '/permissions/permissionutil.inc.php'); | |
| 127 | + $sTable = 'groups_folders_link'; | |
| 126 | 128 | $oPermission = KTPermission::getByName('ktcore.permissions.read'); |
| 127 | - $query = "SELECT group_id FROM $default->groups_folders_table WHERE folder_id = ? AND (can_read = ? OR can_write = ?)"; | |
| 129 | + $query = "SELECT group_id FROM $sTable WHERE folder_id = ? AND (can_read = ? OR can_write = ?)"; | |
| 128 | 130 | $aParams = array($iID, true, true); |
| 129 | 131 | $aGroupIDs = DBUtil::getResultArrayKey(array($query, $aParams), 'group_id'); |
| 130 | 132 | $aAllowed = array("group" => $aGroupIDs); |
| ... | ... | @@ -134,9 +136,11 @@ class UpgradeFunctions { |
| 134 | 136 | |
| 135 | 137 | // {{{ _setWrite |
| 136 | 138 | function _setWrite($iID, $oPO) { |
| 137 | - global $default; | |
| 139 | + require_once(KT_LIB_DIR . '/permissions/permission.inc.php'); | |
| 140 | + require_once(KT_LIB_DIR . '/permissions/permissionutil.inc.php'); | |
| 141 | + $sTable = 'groups_folders_link'; | |
| 138 | 142 | $oPermission = KTPermission::getByName('ktcore.permissions.write'); |
| 139 | - $query = "SELECT group_id FROM $default->groups_folders_table WHERE folder_id = ? AND can_write = ?"; | |
| 143 | + $query = "SELECT group_id FROM $sTable WHERE folder_id = ? AND can_write = ?"; | |
| 140 | 144 | $aParams = array($iID, true); |
| 141 | 145 | $aGroupIDs = DBUtil::getResultArrayKey(array($query, $aParams), 'group_id'); |
| 142 | 146 | $aAllowed = array("group" => $aGroupIDs); |
| ... | ... | @@ -146,9 +150,11 @@ class UpgradeFunctions { |
| 146 | 150 | |
| 147 | 151 | // {{{ _setAddFolder |
| 148 | 152 | function _setAddFolder($iID, $oPO) { |
| 149 | - global $default; | |
| 153 | + require_once(KT_LIB_DIR . '/permissions/permission.inc.php'); | |
| 154 | + require_once(KT_LIB_DIR . '/permissions/permissionutil.inc.php'); | |
| 155 | + $sTable = 'groups_folders_link'; | |
| 150 | 156 | $oPermission = KTPermission::getByName('ktcore.permissions.addFolder'); |
| 151 | - $query = "SELECT group_id FROM $default->groups_folders_table WHERE folder_id = ? AND can_write = ?"; | |
| 157 | + $query = "SELECT group_id FROM $sTable WHERE folder_id = ? AND can_write = ?"; | |
| 152 | 158 | $aParams = array($iID, true); |
| 153 | 159 | $aGroupIDs = DBUtil::getResultArrayKey(array($query, $aParams), 'group_id'); |
| 154 | 160 | $aAllowed = array("group" => $aGroupIDs); |
| ... | ... | @@ -159,109 +165,102 @@ class UpgradeFunctions { |
| 159 | 165 | // {{{ setPermissionObject |
| 160 | 166 | function setPermissionObject() { |
| 161 | 167 | global $default; |
| 162 | - require_once(KT_LIB_DIR . '/foldermanagement/Folder.inc'); | |
| 163 | - require_once(KT_LIB_DIR . '/documentmanagement/Document.inc'); | |
| 164 | 168 | require_once(KT_LIB_DIR . '/permissions/permissionobject.inc.php'); |
| 165 | - require_once(KT_LIB_DIR . '/permissions/permissionutil.inc.php'); | |
| 166 | - require_once(KT_LIB_DIR . '/permissions/permission.inc.php'); | |
| 169 | + | |
| 170 | + | |
| 171 | + // First, set permission object on all folders that were | |
| 172 | + // "permission folders". | |
| 167 | 173 | $query = "SELECT id FROM $default->folders_table WHERE permission_folder_id = id AND permission_object_id IS NULL"; |
| 168 | 174 | $aIDs = DBUtil::getResultArrayKey($query, 'id'); |
| 169 | 175 | foreach ($aIDs as $iID) { |
| 170 | - $oFolder =& Folder::get($iID); | |
| 171 | - if (PEAR::isError($oFolder)) { | |
| 172 | - var_dump($oFolder); | |
| 173 | - exit(0); | |
| 174 | - } | |
| 175 | - if ($oFolder === false) { | |
| 176 | - print "Could not find folder...\n"; | |
| 177 | - exit(0); | |
| 178 | - } | |
| 179 | 176 | $oPO =& KTPermissionObject::createFromArray(array()); |
| 180 | - if (PEAR::isError($oFolder)) { | |
| 177 | + if (PEAR::isError($oPO)) { | |
| 181 | 178 | var_dump($oPO); |
| 182 | 179 | exit(0); |
| 183 | 180 | } |
| 184 | - $oFolder->setPermissionObjectID($oPO->getId()); | |
| 185 | - $oFolder->update(); | |
| 181 | + $sTableName = KTUtil::getTableName('folders'); | |
| 182 | + $query = sprintf("UPDATE %s SET permission_object_id = %d WHERE id = %d", $sTableName, $oPO->getId(), $iID); | |
| 183 | + $res = DBUtil::runQuery($query); | |
| 186 | 184 | |
| 187 | 185 | UpgradeFunctions::_setRead($iID, $oPO); |
| 188 | 186 | UpgradeFunctions::_setWrite($iID, $oPO); |
| 189 | 187 | UpgradeFunctions::_setAddFolder($iID, $oPO); |
| 190 | 188 | } |
| 189 | + | |
| 190 | + // Next, set permission object on all folders that weren't | |
| 191 | + // "permission folders" by using the permission object on their | |
| 192 | + // permission folders. | |
| 191 | 193 | $query = "SELECT id FROM $default->folders_table WHERE permission_object_id IS NULL"; |
| 192 | 194 | $aIDs = DBUtil::getResultArrayKey($query, 'id'); |
| 193 | 195 | foreach ($aIDs as $iID) { |
| 194 | - $oFolder =& Folder::get($iID); | |
| 195 | - $query = "SELECT permission_folder_id FROM $default->folders_table WHERE id = ?"; | |
| 196 | + $sTableName = KTUtil::getTableName('folders'); | |
| 197 | + $query = sprintf("SELECT F2.permission_object_id AS poi FROM %s AS F LEFT JOIN %s AS F2 WHERE F2.id = F.permission_folder_id WHERE id = ?", $sTableName, $sTableName); | |
| 196 | 198 | $aParams = array($iID); |
| 197 | - $iPermissionFolderID = DBUtil::getOneResultKey(array($query, $aParams), 'permission_folder_id'); | |
| 198 | - $oPermissionFolder =& Folder::get($iPermissionFolderID); | |
| 199 | - $oFolder->setPermissionObjectID($oPermissionFolder->getPermissionObjectId()); | |
| 200 | - $oFolder->update(); | |
| 201 | - } | |
| 202 | - $query = "SELECT id FROM $default->documents_table WHERE permission_object_id IS NULL"; | |
| 203 | - $aIDs = DBUtil::getResultArrayKey($query, 'id'); | |
| 204 | - foreach ($aIDs as $iID) { | |
| 205 | - $oDocument =& Document::get($iID); | |
| 206 | - $oFolder =& Folder::get($oDocument->getFolderID()); | |
| 207 | - if ($oFolder === false) { | |
| 208 | - continue; | |
| 209 | - } | |
| 210 | - $oDocument->setPermissionObjectID($oFolder->getPermissionObjectID()); | |
| 211 | - $oDocument->update(); | |
| 212 | - } | |
| 199 | + $iPermissionObjectId = DBUtil::getOneResultKey(array($query, $aParams), 'poi'); | |
| 213 | 200 | |
| 214 | - $query = "SELECT id FROM $default->documents_table WHERE permission_lookup_id IS NULL AND permission_object_id IS NOT NULL"; | |
| 215 | - $aIDs = DBUtil::getResultArrayKey($query, 'id'); | |
| 216 | - foreach ($aIDs as $iID) { | |
| 217 | - $oDocument =& Document::get($iID); | |
| 218 | - KTPermissionUtil::updatePermissionLookup($oDocument); | |
| 201 | + $sTableName = KTUtil::getTableName('folders'); | |
| 202 | + $query = sprintf("UPDATE %s SET permission_object_id = %d WHERE id = %d", $sTableName, $iPermissionObjectId, $iID); | |
| 203 | + DBUtil::runQuery($query); | |
| 219 | 204 | } |
| 220 | 205 | |
| 221 | - $query = "SELECT id FROM $default->folders_table WHERE permission_lookup_id IS NULL"; | |
| 222 | - $aIDs = DBUtil::getResultArrayKey($query, 'id'); | |
| 223 | - foreach ($aIDs as $iID) { | |
| 224 | - $oFolder =& Folder::get($iID); | |
| 225 | - KTPermissionUtil::updatePermissionLookup($oFolder); | |
| 226 | - } | |
| 206 | + | |
| 207 | + $sDocumentsTable = KTUtil::getTableName('documents'); | |
| 208 | + $sFoldersTable = KTUtil::getTableName('folders'); | |
| 209 | + | |
| 210 | + $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); | |
| 211 | + DBUtil::runQuery($query); | |
| 227 | 212 | } |
| 228 | 213 | // }}} |
| 229 | 214 | |
| 230 | 215 | // {{{ createFieldSets |
| 231 | 216 | function createFieldSets () { |
| 232 | 217 | global $default; |
| 233 | - require_once(KT_LIB_DIR . '/documentmanagement/DocumentField.inc'); | |
| 234 | 218 | require_once(KT_LIB_DIR . '/metadata/fieldset.inc.php'); |
| 235 | - $aFields = DocumentField::getList("parent_fieldset IS NULL"); | |
| 236 | - foreach ($aFields as $oField) { | |
| 237 | - $sName = $oField->getName(); | |
| 219 | + | |
| 220 | + $sFieldsTable = KTUtil::getTableName('document_fields'); | |
| 221 | + $sQuery = sprintf("SELECT id, name, is_generic FROM %s", $sFieldsTable); | |
| 222 | + $aFields = DBUtil::getResultArray($sQuery); | |
| 223 | + | |
| 224 | + foreach ($aFields as $aField) { | |
| 225 | + $sName = $aField['name']; | |
| 238 | 226 | $sNamespace = 'local.' . str_replace(array(' '), array(), strtolower($sName)); |
| 239 | - $iFieldId = $oField->getId(); | |
| 240 | - $oFieldSet = KTFieldset::createFromArray(array( | |
| 227 | + $iFieldId = $aField['id']; | |
| 228 | + $bIsGeneric = $aField['is_generic']; | |
| 229 | + $sFieldsetsTable = KTUtil::getTableName('fieldsets'); | |
| 230 | + $iFieldsetId = DBUtil::autoInsert($sFieldsetsTable, array( | |
| 241 | 231 | 'name' => $sName, |
| 242 | 232 | 'namespace' => $sNamespace, |
| 243 | 233 | 'mandatory' => false, |
| 244 | - 'isconditional' => false, | |
| 245 | - 'masterfield' => $iFieldId, | |
| 246 | - 'isgeneric' => $oField->getIsGeneric(), | |
| 234 | + 'is_conditional' => false, | |
| 235 | + 'master_field' => $iFieldId, | |
| 236 | + 'is_generic' => $bIsGeneric, | |
| 247 | 237 | )); |
| 248 | - $iFieldSetId = $oFieldSet->getId(); | |
| 249 | - $oField->setParentFieldset($iFieldSetId); | |
| 250 | - $oField->update(); | |
| 238 | + if (PEAR::isError($iFieldsetId)) { | |
| 239 | + return $iFieldsetId; | |
| 240 | + } | |
| 241 | + | |
| 242 | + $sQuery = sprintf("UPDATE %s SET parent_fieldset = ? WHERE id = ?", $sFieldsTable); | |
| 243 | + $aParams = array($iFieldsetId, $iFieldId); | |
| 244 | + $res = DBUtil::runQuery(array($sQuery, $aParams)); | |
| 245 | + if (PEAR::isError($res)) { | |
| 246 | + return $res; | |
| 247 | + } | |
| 248 | + | |
| 251 | 249 | $sTable = KTUtil::getTableName('document_type_fields'); |
| 252 | 250 | $aQuery = array( |
| 253 | 251 | "SELECT document_type_id FROM $sTable WHERE field_id = ?", |
| 254 | 252 | array($iFieldId) |
| 255 | 253 | ); |
| 256 | 254 | $aDocumentTypeIds = DBUtil::getResultArrayKey($aQuery, 'document_type_id'); |
| 257 | - var_dump($aDocumentTypeIds); | |
| 258 | 255 | $sTable = KTUtil::getTableName('document_type_fieldsets'); |
| 259 | 256 | foreach ($aDocumentTypeIds as $iDocumentTypeId) { |
| 260 | 257 | $res = DBUtil::autoInsert($sTable, array( |
| 261 | 258 | 'document_type_id' => $iDocumentTypeId, |
| 262 | - 'fieldset_id' => $iFieldSetId, | |
| 259 | + 'fieldset_id' => $iFieldsetId, | |
| 263 | 260 | )); |
| 264 | - var_dump($res); | |
| 261 | + if (PEAR::isError($res)) { | |
| 262 | + return $res; | |
| 263 | + } | |
| 265 | 264 | } |
| 266 | 265 | } |
| 267 | 266 | } | ... | ... |