Commit 7438b6fdc42b070621dcfd4d2f2d7034fd49e0ff

Authored by nbm
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
lib/upgrades/UpgradeFunctions.inc.php
@@ -122,9 +122,11 @@ class UpgradeFunctions { @@ -122,9 +122,11 @@ class UpgradeFunctions {
122 122
123 // {{{ _setRead 123 // {{{ _setRead
124 function _setRead($iID, $oPO) { 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 $oPermission = KTPermission::getByName('ktcore.permissions.read'); 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 $aParams = array($iID, true, true); 130 $aParams = array($iID, true, true);
129 $aGroupIDs = DBUtil::getResultArrayKey(array($query, $aParams), 'group_id'); 131 $aGroupIDs = DBUtil::getResultArrayKey(array($query, $aParams), 'group_id');
130 $aAllowed = array("group" => $aGroupIDs); 132 $aAllowed = array("group" => $aGroupIDs);
@@ -134,9 +136,11 @@ class UpgradeFunctions { @@ -134,9 +136,11 @@ class UpgradeFunctions {
134 136
135 // {{{ _setWrite 137 // {{{ _setWrite
136 function _setWrite($iID, $oPO) { 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 $oPermission = KTPermission::getByName('ktcore.permissions.write'); 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 $aParams = array($iID, true); 144 $aParams = array($iID, true);
141 $aGroupIDs = DBUtil::getResultArrayKey(array($query, $aParams), 'group_id'); 145 $aGroupIDs = DBUtil::getResultArrayKey(array($query, $aParams), 'group_id');
142 $aAllowed = array("group" => $aGroupIDs); 146 $aAllowed = array("group" => $aGroupIDs);
@@ -146,9 +150,11 @@ class UpgradeFunctions { @@ -146,9 +150,11 @@ class UpgradeFunctions {
146 150
147 // {{{ _setAddFolder 151 // {{{ _setAddFolder
148 function _setAddFolder($iID, $oPO) { 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 $oPermission = KTPermission::getByName('ktcore.permissions.addFolder'); 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 $aParams = array($iID, true); 158 $aParams = array($iID, true);
153 $aGroupIDs = DBUtil::getResultArrayKey(array($query, $aParams), 'group_id'); 159 $aGroupIDs = DBUtil::getResultArrayKey(array($query, $aParams), 'group_id');
154 $aAllowed = array("group" => $aGroupIDs); 160 $aAllowed = array("group" => $aGroupIDs);
@@ -159,109 +165,102 @@ class UpgradeFunctions { @@ -159,109 +165,102 @@ class UpgradeFunctions {
159 // {{{ setPermissionObject 165 // {{{ setPermissionObject
160 function setPermissionObject() { 166 function setPermissionObject() {
161 global $default; 167 global $default;
162 - require_once(KT_LIB_DIR . '/foldermanagement/Folder.inc');  
163 - require_once(KT_LIB_DIR . '/documentmanagement/Document.inc');  
164 require_once(KT_LIB_DIR . '/permissions/permissionobject.inc.php'); 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 $query = "SELECT id FROM $default->folders_table WHERE permission_folder_id = id AND permission_object_id IS NULL"; 173 $query = "SELECT id FROM $default->folders_table WHERE permission_folder_id = id AND permission_object_id IS NULL";
168 $aIDs = DBUtil::getResultArrayKey($query, 'id'); 174 $aIDs = DBUtil::getResultArrayKey($query, 'id');
169 foreach ($aIDs as $iID) { 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 $oPO =& KTPermissionObject::createFromArray(array()); 176 $oPO =& KTPermissionObject::createFromArray(array());
180 - if (PEAR::isError($oFolder)) { 177 + if (PEAR::isError($oPO)) {
181 var_dump($oPO); 178 var_dump($oPO);
182 exit(0); 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 UpgradeFunctions::_setRead($iID, $oPO); 185 UpgradeFunctions::_setRead($iID, $oPO);
188 UpgradeFunctions::_setWrite($iID, $oPO); 186 UpgradeFunctions::_setWrite($iID, $oPO);
189 UpgradeFunctions::_setAddFolder($iID, $oPO); 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 $query = "SELECT id FROM $default->folders_table WHERE permission_object_id IS NULL"; 193 $query = "SELECT id FROM $default->folders_table WHERE permission_object_id IS NULL";
192 $aIDs = DBUtil::getResultArrayKey($query, 'id'); 194 $aIDs = DBUtil::getResultArrayKey($query, 'id');
193 foreach ($aIDs as $iID) { 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 $aParams = array($iID); 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 // {{{ createFieldSets 215 // {{{ createFieldSets
231 function createFieldSets () { 216 function createFieldSets () {
232 global $default; 217 global $default;
233 - require_once(KT_LIB_DIR . '/documentmanagement/DocumentField.inc');  
234 require_once(KT_LIB_DIR . '/metadata/fieldset.inc.php'); 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 $sNamespace = 'local.' . str_replace(array(' '), array(), strtolower($sName)); 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 'name' => $sName, 231 'name' => $sName,
242 'namespace' => $sNamespace, 232 'namespace' => $sNamespace,
243 'mandatory' => false, 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 $sTable = KTUtil::getTableName('document_type_fields'); 249 $sTable = KTUtil::getTableName('document_type_fields');
252 $aQuery = array( 250 $aQuery = array(
253 "SELECT document_type_id FROM $sTable WHERE field_id = ?", 251 "SELECT document_type_id FROM $sTable WHERE field_id = ?",
254 array($iFieldId) 252 array($iFieldId)
255 ); 253 );
256 $aDocumentTypeIds = DBUtil::getResultArrayKey($aQuery, 'document_type_id'); 254 $aDocumentTypeIds = DBUtil::getResultArrayKey($aQuery, 'document_type_id');
257 - var_dump($aDocumentTypeIds);  
258 $sTable = KTUtil::getTableName('document_type_fieldsets'); 255 $sTable = KTUtil::getTableName('document_type_fieldsets');
259 foreach ($aDocumentTypeIds as $iDocumentTypeId) { 256 foreach ($aDocumentTypeIds as $iDocumentTypeId) {
260 $res = DBUtil::autoInsert($sTable, array( 257 $res = DBUtil::autoInsert($sTable, array(
261 'document_type_id' => $iDocumentTypeId, 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 }