Commit 9eeaf9c1e4e32e6c1e30192c7b9f7c07aee9a6c2
1 parent
1fd08c70
Stop using folder objects in the 1.2.4 -> 2.0.0 upgrade
As a rule, shouldn't use objects in upgrades - never know what fields are there or are not. git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@5443 c91229c3-7414-0410-bfa2-8a42b809f60b
Showing
1 changed file
with
34 additions
and
19 deletions
lib/upgrades/UpgradeFunctions.inc.php
| ... | ... | @@ -52,6 +52,7 @@ class UpgradeFunctions { |
| 52 | 52 | 'createWorkflowPermission' => 'Create the Core: Manage Workflow', |
| 53 | 53 | ); |
| 54 | 54 | var $phases = array( |
| 55 | + "setPermissionFolder" => 1, | |
| 55 | 56 | "setPermissionObject" => 1, |
| 56 | 57 | "createFieldSets" => 1, |
| 57 | 58 | "normaliseDocuments" => 1, |
| ... | ... | @@ -60,49 +61,61 @@ class UpgradeFunctions { |
| 60 | 61 | ); |
| 61 | 62 | |
| 62 | 63 | // {{{ _setPermissionFolder |
| 63 | - function _setPermissionFolder($oFolder) { | |
| 64 | + function _setPermissionFolder($iFolderId) { | |
| 64 | 65 | global $default; |
| 65 | - $oInheritedFolder = $oFolder; | |
| 66 | + $iInheritedFolderId = $iFolderId; | |
| 67 | + if ($iInheritedFolderId == 1) { | |
| 68 | + $sQuery = "UPDATE folders SET permission_folder_id = 1 WHERE id = 1"; | |
| 69 | + DBUtil::runQuery($sQuery); | |
| 70 | + return; | |
| 71 | + } | |
| 66 | 72 | while ($bFoundPermissions !== true) { |
| 67 | - /*ok*/$aCheckQuery = array('SELECT id FROM groups_folders_link WHERE folder_id = ? LIMIT 1', $oInheritedFolder->getID()); | |
| 73 | + /*ok*/$aCheckQuery = array('SELECT id FROM groups_folders_link WHERE folder_id = ? LIMIT 1', $iInheritedFolderId); | |
| 68 | 74 | if (count(DBUtil::getResultArrayKey($aCheckQuery, 'id')) == 0) { |
| 69 | - $default->log->debug('No direct permissions on folder ' . $oInheritedFolder->getID()); | |
| 75 | + $default->log->debug('No direct permissions on folder ' . $iInheritedFolderId); | |
| 70 | 76 | $bInherited = true; |
| 71 | - $oInheritedFolder =& Folder::get($oInheritedFolder->getParentID()); | |
| 72 | - if ($oInheritedFolder === false) { | |
| 73 | - break; | |
| 77 | + | |
| 78 | + $aParentQuery = array('SELECT parent_id FROM folders WHERE id = ? LIMIT 1', $iInheritedFolderId); | |
| 79 | + $iParentId = DBUtil::getOneResultKey($aParentQuery, 'parent_id'); | |
| 80 | + $iInheritedFolderId = $iParentId; | |
| 81 | + | |
| 82 | + if ($iInheritedFolderId === false) { | |
| 83 | + return; | |
| 84 | + } | |
| 85 | + if ($iInheritedFolderId === null) { | |
| 86 | + return; | |
| 74 | 87 | } |
| 75 | 88 | // if our parent knows the permission folder, use that. |
| 76 | 89 | |
| 77 | - $aQuery = array("SELECT permission_folder_id FROM folders WHERE id = ?", array($oInheritedFolder->getID())); | |
| 90 | + $aQuery = array("SELECT permission_folder_id FROM folders WHERE id = ?", array($iInheritedFolderId)); | |
| 78 | 91 | $iPermissionFolderID = DBUtil::getOneResultKey($aQuery, 'permission_folder_id'); |
| 79 | 92 | if (!empty($iPermissionFolderID)) { |
| 80 | 93 | $aQuery = array( |
| 81 | 94 | "UPDATE folders SET permission_folder_id = ? WHERE id = ?", |
| 82 | - array($iPermissionFolderID, $oFolder->getID()) | |
| 95 | + array($iPermissionFolderID, $iFolderId) | |
| 83 | 96 | ); |
| 84 | 97 | DBUtil::runQuery($aQuery); |
| 85 | 98 | return; |
| 86 | 99 | } |
| 87 | - $default->log->debug('... trying parent: ' . $oInheritedFolder->getID()); | |
| 100 | + $default->log->debug('... trying parent: ' . $iInheritedFolderId); | |
| 88 | 101 | } else { |
| 89 | - $default->log->debug('Found direct permissions on folder ' . $oInheritedFolder->getID()); | |
| 90 | - $iPermissionFolderID = $oInheritedFolder->getID(); | |
| 102 | + $default->log->debug('Found direct permissions on folder ' . $iInheritedFolderId); | |
| 103 | + $iPermissionFolderID = $iInheritedFolderId; | |
| 91 | 104 | $aQuery = array( |
| 92 | 105 | "UPDATE folders SET permission_folder_id = ? WHERE id = ?", |
| 93 | - array($iPermissionFolderID, $oFolder->getID()) | |
| 106 | + array($iPermissionFolderID, $iFolderId) | |
| 94 | 107 | ); |
| 95 | 108 | DBUtil::runQuery($aQuery); |
| 96 | 109 | return; |
| 97 | 110 | } |
| 98 | 111 | } |
| 99 | 112 | |
| 100 | - $default->log->error('No permissions whatsoever for folder ' . $oFolder->getID()); | |
| 113 | + $default->log->error('No permissions whatsoever for folder ' . $iFolderId); | |
| 101 | 114 | // 0, which can never exist, for non-existent. null for not set yet (database upgrade). |
| 102 | 115 | $iPermissionFolderID = 0; |
| 103 | 116 | $aQuery = array( |
| 104 | 117 | "UPDATE folders SET permission_folder_id = ? WHERE id = ?", |
| 105 | - array($iPermissionFolderID, $oFolder->getID()) | |
| 118 | + array($iPermissionFolderID, $iFolderId) | |
| 106 | 119 | ); |
| 107 | 120 | DBUtil::runQuery($aQuery); |
| 108 | 121 | } |
| ... | ... | @@ -113,13 +126,15 @@ class UpgradeFunctions { |
| 113 | 126 | global $default; |
| 114 | 127 | require_once(KT_LIB_DIR . '/foldermanagement/Folder.inc'); |
| 115 | 128 | |
| 116 | - $sQuery = "SELECT id FROM $default->folders_table WHERE permission_folder_id IS NULL"; | |
| 129 | + $sQuery = "SELECT id FROM $default->folders_table WHERE permission_folder_id IS NULL ORDER BY LENGTH(parent_folder_ids)"; | |
| 117 | 130 | |
| 118 | 131 | $aIDs = DBUtil::getResultArrayKey($sQuery, 'id'); |
| 119 | 132 | |
| 120 | - foreach ($aIDs as $iID) { | |
| 121 | - $oFolder =& Folder::get($iID); | |
| 122 | - UpgradeFunctions::_setPermissionFolder($oFolder); | |
| 133 | + foreach ($aIDs as $iId) { | |
| 134 | + $res = UpgradeFunctions::_setPermissionFolder($iId); | |
| 135 | + if (PEAR::isError($res)) { | |
| 136 | + return $res; | |
| 137 | + } | |
| 123 | 138 | } |
| 124 | 139 | } |
| 125 | 140 | // }}} | ... | ... |