diff --git a/lib/documentmanagement/documentutil.inc.php b/lib/documentmanagement/documentutil.inc.php index 5514129..d5621eb 100644 --- a/lib/documentmanagement/documentutil.inc.php +++ b/lib/documentmanagement/documentutil.inc.php @@ -863,6 +863,70 @@ class KTDocumentUtil { return true; } + + function move($oDocument, $oToFolder, $oUser = null) { + + $oFolder = $oToFolder; // alias. + + $oOriginalFolder = Folder::get($oDocument->getFolderId()); + $iOriginalFolderPermissionObjectId = $oOriginalFolder->getPermissionObjectId(); + $iDocumentPermissionObjectId = $oDocument->getPermissionObjectId(); + + if ($iDocumentPermissionObjectId === $iOriginalFolderPermissionObjectId) { + $oDocument->setPermissionObjectId($oFolder->getPermissionObjectId()); + } + + //put the document in the new folder + $oDocument->setFolderID($oFolder->getId()); + $res = $oDocument->update(); + if (PEAR::isError($res)) { + return $res; + } + + + //move the document on the file system + $oStorage =& KTStorageManagerUtil::getSingleton(); + $res = $oStorage->moveDocument($oDocument, $oFolder, $oOriginalFolder); + if (PEAR::isError($res) || ($res === false)) { + $oDocument->setFolderID($oOriginalFolder->getId()); + $res = $oDocument->update(); + if (PEAR::isError($res)) { + return $res; + } + return $res; // we failed, bail. + } + + $sMoveMessage = sprintf("Moved from %s/%s to %s/%s: Workflow trigger.", + $oOriginalFolder->getFullPath(), + $oOriginalFolder->getName(), + $oFolder->getFullPath(), + $oFolder->getName()); + + // create the document transaction record + + $oDocumentTransaction = & new DocumentTransaction($oDocument, $sMoveMessage, 'ktcore.transactions.move'); + $oDocumentTransaction->create(); + + + $oKTTriggerRegistry = KTTriggerRegistry::getSingleton(); + $aTriggers = $oKTTriggerRegistry->getTriggers('moveDocument', 'postValidate'); + foreach ($aTriggers as $aTrigger) { + $sTrigger = $aTrigger[0]; + $oTrigger = new $sTrigger; + $aInfo = array( + "document" => $oDocument, + "old_folder" => $oOriginalFolder, + "new_folder" => $oFolder, + ); + $oTrigger->setInfo($aInfo); + $ret = $oTrigger->postValidate(); + if (PEAR::isError($ret)) { + return $ret; + } + } + + return KTPermissionUtil::updatePermissionLookup($oDocument); + } } diff --git a/plugins/ktcore/KTWorkflowTriggers.inc.php b/plugins/ktcore/KTWorkflowTriggers.inc.php index eaf309a..4512102 100644 --- a/plugins/ktcore/KTWorkflowTriggers.inc.php +++ b/plugins/ktcore/KTWorkflowTriggers.inc.php @@ -446,70 +446,14 @@ class CopyActionTrigger extends KTWorkflowTrigger { } function performTransition($oDocument, $oUser) { + $iFolderId = KTUtil::arrayGet($this->aConfig, 'folder_id'); - $oFolder = Folder::get($iFolderId); + $oToFolder = Folder::get($iFolderId); if (PEAR::isError($oFolder)) { return PEAR::raiseError(_kt('The folder to which this document should be moved does not exist. Cancelling the transition - please contact a system administrator.')); } - // FIXME refactor into documentutil. - - $oOriginalFolder = Folder::get($oDocument->getFolderId()); - $iOriginalFolderPermissionObjectId = $oOriginalFolder->getPermissionObjectId(); - $iDocumentPermissionObjectId = $oDocument->getPermissionObjectId(); - - - if ($iDocumentPermissionObjectId === $iOriginalFolderPermissionObjectId) { - $oDocument->setPermissionObjectId($oFolder->getPermissionObjectId()); - } - - //put the document in the new folder - $oDocument->setFolderID($oFolder->getId()); - if (!$oDocument->update(true)) { - $this->errorRedirectTo("main", _kt("There was a problem updating the document's location in the database"), sprintf("fDocumentId=%d&fFolderId=%d", $this->oDocument->getId(), $this->oFolder->getId())); - } - - - //move the document on the file system - $oStorage =& KTStorageManagerUtil::getSingleton(); - if (!$oStorage->moveDocument($oDocument, $oFolder, $oOriginalFolder)) { - $oDocument->setFolderID($oFolder->getId()); - $res = $oDocument->update(true); - if (PEAR::isError($res)) { - return $res; - } - } - - $sMoveMessage = sprintf("Moved from %s/%s to %s/%s: Workflow trigger.", - $oOriginalFolder->getFullPath(), - $oOriginalFolder->getName(), - $oFolder->getFullPath(), - $oFolder->getName()); - - // create the document transaction record - - $oDocumentTransaction = & new DocumentTransaction($oDocument, $sMoveMessage, 'ktcore.transactions.move'); - $oDocumentTransaction->create(); - - - $oKTTriggerRegistry = KTTriggerRegistry::getSingleton(); - $aTriggers = $oKTTriggerRegistry->getTriggers('moveDocument', 'postValidate'); - foreach ($aTriggers as $aTrigger) { - $sTrigger = $aTrigger[0]; - $oTrigger = new $sTrigger; - $aInfo = array( - "document" => $oDocument, - "old_folder" => $oOriginalFolder, - "new_folder" => $oFolder, - ); - $oTrigger->setInfo($aInfo); - $ret = $oTrigger->postValidate(); - if (PEAR::isError($ret)) { - return $ret; - } - } - - return KTPermissionUtil::updatePermissionLookup($oDocument); + return KTDocumentUtil::move($oDocument, $oToFolder, $oUser); } function displayConfiguration($args) {