Commit 9eeaf9c1e4e32e6c1e30192c7b9f7c07aee9a6c2

Authored by nbm
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
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 // }}}
... ...