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 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 }
... ...