diff --git a/lib/documentmanagement/DocumentTransaction.inc b/lib/documentmanagement/DocumentTransaction.inc index c5b5c97..56e5676 100644 --- a/lib/documentmanagement/DocumentTransaction.inc +++ b/lib/documentmanagement/DocumentTransaction.inc @@ -1,21 +1,5 @@ iId = -1; - $this->iDocumentID = $iNewDocumentID; + + $this->iDocumentID = $oDocument->getID(); $this->sComment = $sNewComment; - $this->iTransactionID = $iNewTransactionID; - $oDocument = & Document::get($iNewDocumentID); - if ($oDocument) { - $this->sVersion = $oDocument->getMajorVersionNumber() . "." . $oDocument->getMinorVersionNumber(); - $oFolder = Folder::get($oDocument->iFolderID); - $this->sFileName = addslashes($oFolder->sFullPath . "/" . $oFolder->getName() . "/" . $oDocument->getName()); - } + $this->sTransactionNS = $sTransactionNS; + $this->sVersion = $oDocument->getMajorVersionNumber() . "." . $oDocument->getMinorVersionNumber(); + $oFolder = Folder::get($oDocument->iFolderID); + $this->sFileName = addslashes($oFolder->sFullPath . "/" . $oFolder->getName() . "/" . $oDocument->getName()); + $this->iUserID = $_SESSION["userID"]; $oUser = KTUtil::arrayGet($aOptions, 'user'); - if ($oUser) { + + if (!(PEAR::isError($oUser) || ($oUser == false))) { $this->iUserID = $oUser->getID(); } $this->dDateTime = getCurrentDateTime(); $this->sIP = KTUtil::arrayGet($_SERVER, "REMOTE_ADDR", '0.0.0.0'); } - /** - * Returns the current version - */ - function getVersion() { - return $this->sVersion; - } - - function getComment() { - return $this->sComment; - } - - function _table() { - global $default; - return $default->document_transactions_table; - } + function getVersion() { return $this->sVersion; } + function getComment() { return $this->sComment; } + function _table() { return KTUtil::getTableName('document_transactions'); } /** * Create the document transaction in the database @@ -130,7 +94,7 @@ class DocumentTransaction { 'ip' => $this->sIP, 'filename' => $this->sFileName, 'comment' => $this->sComment, - 'transaction_id' => $this->iTransactionID, + 'transaction_namespace' => $this->sTransactionNS, ); $id =& DBUtil::autoInsert($this->_table(), $aFieldValues); @@ -180,7 +144,7 @@ class DocumentTransaction { $sql = $default->db; $sql->query(array("SELECT * FROM $default->document_transactions_table WHERE id = ?", $iDocumentTransactionID));/*ok*/ if ($sql->next_record()) { - $oDocumentTransaction = & new DocumentTransaction($sql->f("document_id"), $sql->f("comment"), $sql->f("transaction_id")); + $oDocumentTransaction = & new DocumentTransaction(Document::get($sql->f("document_id")), $sql->f("comment"), $sql->f("transaction_namespace")); $oDocumentTransaction->iId = $sql->f("id"); $oDocumentTransaction->sVersion = $sql->f("version"); $oDocumentTransaction->iUserID = $sql->f("user_id"); diff --git a/lib/documentmanagement/DocumentTransactionType.inc.php b/lib/documentmanagement/DocumentTransactionType.inc.php index c6f9f59..e164ca3 100644 --- a/lib/documentmanagement/DocumentTransactionType.inc.php +++ b/lib/documentmanagement/DocumentTransactionType.inc.php @@ -1,14 +1,13 @@ "id", @@ -26,30 +25,13 @@ class KTDocumentTransactionType extends KTEntity { function setNamespace($sNamespace) { $this->sNamespace = $sNamespace; } function _table () { - global $default; - return $default->transaction_types_table; - } - - // STATIC - function &get($iId) { - return KTEntityUtil::get('KTDocumentTransactionType', $iId); - } - - // STATIC - function &createFromArray($aOptions) { - return KTEntityUtil::createFromArray('KTDocumentTransactionType', $aOptions); - } - - // STATIC - function &getList($sWhereClause = null) { - global $default; - return KTEntityUtil::getList($default->permissions_table, 'KTDocumentTransactionType', $sWhereClause); + return KTUtil::getTableName('transaction_types'); } - // STATIC - function &getByNamespace($sNamespace) { - return KTEntityUtil::getBy('KTDocumentTransactionType', 'namespace', $sNamespace); - } + function &get($iId) { return KTEntityUtil::get('KTDocumentTransactionType', $iId); } + function &createFromArray($aOptions) { return KTEntityUtil::createFromArray('KTDocumentTransactionType', $aOptions); } + function &getList($sWhereClause = null) { return KTEntityUtil::getList2('KTDocumentTransactionType', $sWhereClause); } + function &getByNamespace($sNamespace) { return KTEntityUtil::getBy('KTDocumentTransactionType', 'namespace', $sNamespace); } } ?> diff --git a/lib/documentmanagement/documentutil.inc.php b/lib/documentmanagement/documentutil.inc.php index b19949e..ee79d9a 100644 --- a/lib/documentmanagement/documentutil.inc.php +++ b/lib/documentmanagement/documentutil.inc.php @@ -135,7 +135,7 @@ class KTDocumentUtil { } // create the document transaction record - $oDocumentTransaction = & new DocumentTransaction($oDocument->getID(), $sCheckInComment, CHECKIN); + $oDocumentTransaction = & new DocumentTransaction($oDocument, $sCheckInComment, 'ktcore.transactions.check_in'); $oDocumentTransaction->create(); $oKTTriggerRegistry = KTTriggerRegistry::getSingleton(); @@ -423,7 +423,7 @@ class KTDocumentUtil { $oUploadChannel->sendMessage(new KTUploadGenericMessage(_("Creating transaction"))); $aOptions = array('user' => $oUser); //create the document transaction record - $oDocumentTransaction = & new DocumentTransaction($oDocument->getID(), "Document created", CREATE, $aOptions); + $oDocumentTransaction = & new DocumentTransaction($oDocument, "Document created", 'ktcore.transactions.create', $aOptions); $res = $oDocumentTransaction->create(); if (PEAR::isError($res)) { $oDocument->delete(); diff --git a/lib/workflow/workflowutil.inc.php b/lib/workflow/workflowutil.inc.php index 53d7e47..d92f184 100644 --- a/lib/workflow/workflowutil.inc.php +++ b/lib/workflow/workflowutil.inc.php @@ -392,7 +392,7 @@ class KTWorkflowUtil { if ($sComments) { $sTransactionComments .= "; Reason given was: " . $sComments; } - $oDocumentTransaction = & new DocumentTransaction($oDocument->getID(), $sTransactionComments, WORKFLOW_TRANSITION); + $oDocumentTransaction = & new DocumentTransaction($oDocument, $sTransactionComments, 'ktcore.transactions.workflow_state_transition'); $oDocumentTransaction->create(); return true; diff --git a/plugins/ktcore/KTDocumentActions.php b/plugins/ktcore/KTDocumentActions.php index ded20c8..f4a50fe 100644 --- a/plugins/ktcore/KTDocumentActions.php +++ b/plugins/ktcore/KTDocumentActions.php @@ -23,7 +23,7 @@ class KTDocumentViewAction extends KTDocumentAction { function do_main() { $oStorage =& KTStorageManagerUtil::getSingleton(); - $oDocumentTransaction = & new DocumentTransaction($this->oDocument->getId(), "Document downloaded", DOWNLOAD); + $oDocumentTransaction = & new DocumentTransaction($this->oDocument, "Document downloaded", 'ktcore.transactions.download'); $oDocumentTransaction->create(); $oStorage->download($this->oDocument); exit(0); @@ -114,7 +114,7 @@ class KTDocumentCheckOutAction extends KTDocumentAction { } } - $oDocumentTransaction = & new DocumentTransaction($this->oDocument->getID(), $sReason, CHECKOUT); + $oDocumentTransaction = & new DocumentTransaction($this->oDocument, $sReason, 'ktcore.transactions.check_out'); $oDocumentTransaction->create(); $oStorage =& KTStorageManagerUtil::getSingleton(); @@ -289,7 +289,7 @@ class KTDocumentDeleteAction extends KTDocumentAction { exit(0); } - $oDocumentTransaction = & new DocumentTransaction($this->oDocument->getId(), "Document deleted: " . $sReason, DELETE); + $oDocumentTransaction = & new DocumentTransaction($this->oDocument, "Document deleted: " . $sReason, 'ktcore.transactions.delete'); $oDocumentTransaction->create(); $this->commitTransaction(); @@ -478,7 +478,8 @@ class KTDocumentMoveAction extends KTDocumentAction { $sReason); // create the document transaction record - $oDocumentTransaction = & new DocumentTransaction($this->oDocument->getID(), $sMoveMessage, MOVE); + + $oDocumentTransaction = & new DocumentTransaction($this->oDocument, $sMoveMessage, 'ktcore.transactions.move'); $oDocumentTransaction->create(); $this->commitTransaction(); diff --git a/plugins/ktcore/admin/deletedDocuments.php b/plugins/ktcore/admin/deletedDocuments.php index 5798d2e..69ce8dc 100755 --- a/plugins/ktcore/admin/deletedDocuments.php +++ b/plugins/ktcore/admin/deletedDocuments.php @@ -81,7 +81,7 @@ class DeletedDocumentsDispatcher extends KTAdminDispatcher { foreach ($aDocuments as $oDoc) { if (!PhysicalDocumentManager::expunge($oDoc)) { $aErrorDocuments[] = $oDoc->getDisplayPath(); } else { - $oDocumentTransaction = & new DocumentTransaction($oDoc->getId(), "Document expunged", EXPUNGE); + $oDocumentTransaction = & new DocumentTransaction($oDoc, "Document expunged", 'ktcore.transactions.expunge'); $oDocumentTransaction->create(); // delete this from the db now diff --git a/plugins/ktcore/admin/documentCheckout.php b/plugins/ktcore/admin/documentCheckout.php index d83b14b..fd3e835 100644 --- a/plugins/ktcore/admin/documentCheckout.php +++ b/plugins/ktcore/admin/documentCheckout.php @@ -108,7 +108,7 @@ class KTCheckoutAdminDispatcher extends KTAdminDispatcher { } // checkout cancelled transaction - $oDocumentTransaction = & new DocumentTransaction($oDocument->getID(), "Document checked out cancelled", FORCE_CHECKIN); + $oDocumentTransaction = & new DocumentTransaction($oDocument, "Document checked out cancelled", 'ktcore.transactions.force_checkin'); if ($oDocumentTransaction->create()) { $default->log->debug("editDocCheckoutBL.php created forced checkin document transaction for document ID=" . $oDocument->getID()); } else { diff --git a/plugins/ktstandard/KTEmail.php b/plugins/ktstandard/KTEmail.php index 0e7b02d..e1561e2 100644 --- a/plugins/ktstandard/KTEmail.php +++ b/plugins/ktstandard/KTEmail.php @@ -6,6 +6,7 @@ require_once(KT_LIB_DIR . "/email/Email.inc"); require_once(KT_LIB_DIR . "/users/User.inc"); require_once(KT_LIB_DIR . "/groups/Group.inc"); require_once(KT_LIB_DIR . "/documentmanagement/DocumentTransaction.inc"); +require_once(KT_LIB_DIR . "/documentmanagement/Document.inc"); /** * Sends emails to the selected groups @@ -122,7 +123,7 @@ function sendEmailDocument($sDestEmailAddress, $sDestUserName, $iDocumentID, $sD } // emailed link transaction - $oDocumentTransaction = & new DocumentTransaction($iDocumentID, "Document link emailed to $sDestEmailAddress", EMAIL_ATTACH); + $oDocumentTransaction = & new DocumentTransaction($oDocument, "Document link emailed to " . $sDestEmailAddress, 'ktcore.transactions.email_attachment'); if ($oDocumentTransaction->create()) { $default->log->debug("emailBL.php created email link document transaction for document ID=$iDocumentID"); } else { @@ -164,7 +165,10 @@ function sendEmailHyperlink($sDestEmailAddress, $sDestUserName, $iDocumentID, $s } // emailed link transaction - $oDocumentTransaction = & new DocumentTransaction($iDocumentID, "Document link emailed to $sDestEmailAddress", EMAIL_LINK); + // need a document to do this. + $oDocument =& Document::get($iDocumentID); + + $oDocumentTransaction = & new DocumentTransaction($oDocument, "Document link emailed to " . $sDestEmailAddress, 'ktcore.transactions.email_link'); if ($oDocumentTransaction->create()) { $default->log->debug("emailBL.php created email link document transaction for document ID=$iDocumentID"); } else { diff --git a/presentation/lookAndFeel/knowledgeTree/documentmanagement/editDocument.php b/presentation/lookAndFeel/knowledgeTree/documentmanagement/editDocument.php index 68ef6ae..5f309c7 100644 --- a/presentation/lookAndFeel/knowledgeTree/documentmanagement/editDocument.php +++ b/presentation/lookAndFeel/knowledgeTree/documentmanagement/editDocument.php @@ -257,7 +257,7 @@ class KTEditDocumentDispatcher extends KTStandardDispatcher { $oDocument->setLastModifiedDate(getCurrentDateTime()); $oDocument->setModifiedUserId($this->oUser->getId()); $oDocument->setMetadataVersion($oDocument->getMetadataVersion() + 1); - $oDocumentTransaction = & new DocumentTransaction($oDocument->getID(), 'update metadata.', UPDATE); + $oDocumentTransaction = & new DocumentTransaction($oDocument, 'update metadata.', 'ktcore.transactions.update'); $res = $oDocumentTransaction->create(); if (PEAR::isError($res)) { diff --git a/presentation/lookAndFeel/knowledgeTree/documentmanagement/view.php b/presentation/lookAndFeel/knowledgeTree/documentmanagement/view.php index 30b9346..3211397 100644 --- a/presentation/lookAndFeel/knowledgeTree/documentmanagement/view.php +++ b/presentation/lookAndFeel/knowledgeTree/documentmanagement/view.php @@ -162,7 +162,7 @@ class ViewDocumentDispatcher extends KTStandardDispatcher { // FIXME do we really need to use a raw db-access here? probably... $sQuery = "SELECT DTT.name AS transaction_name, U.name AS user_name, DT.version AS version, DT.comment AS comment, DT.datetime AS datetime " . "FROM " . KTUtil::getTableName("document_transactions") . " AS DT INNER JOIN " . KTUtil::getTableName("users") . " AS U ON DT.user_id = U.id " . - "INNER JOIN " . KTUtil::getTableName("transaction_types") . " AS DTT ON DTT.id = DT.transaction_id " . + "INNER JOIN " . KTUtil::getTableName("transaction_types") . " AS DTT ON DTT.namespace = DT.transaction_namespace " . "WHERE DT.document_id = ? ORDER BY DT.datetime DESC"; $aParams = array($document_id); $res = DBUtil::getResultArray(array($sQuery, $aParams)); diff --git a/sql/mysql/install/structure.sql b/sql/mysql/install/structure.sql index e52a017..3aefe64 100644 --- a/sql/mysql/install/structure.sql +++ b/sql/mysql/install/structure.sql @@ -367,11 +367,10 @@ CREATE TABLE `document_transactions` ( `ip` char(30) default NULL, `filename` char(255) NOT NULL default '', `comment` char(255) NOT NULL default '', - `transaction_id` int(11) default NULL, + `transaction_namespace` char(255) NOT NULL default 'ktcore.transactions.event', UNIQUE KEY `id` (`id`), KEY `fk_document_id` (`document_id`), KEY `fk_user_id` (`user_id`), - KEY `fk_transaction_id` (`transaction_id`) ) ENGINE=InnoDB ; -- -------------------------------------------------------- diff --git a/sql/mysql/upgrade/2.99.5/transaction_namespaces.sql b/sql/mysql/upgrade/2.99.5/transaction_namespaces.sql new file mode 100644 index 0000000..36aa3cc --- /dev/null +++ b/sql/mysql/upgrade/2.99.5/transaction_namespaces.sql @@ -0,0 +1,24 @@ +SET FOREIGN_KEY_CHECKS=0; + +ALTER TABLE `document_transactions` ADD `transaction_namespace` char(255) NOT NULL default 'ktcore.transactions.event'; + +UPDATE `document_transactions` SET `transaction_namespace` = 'ktcore.transactions.create' WHERE `transaction_id` = 1; +UPDATE `document_transactions` SET `transaction_namespace` = 'ktcore.transactions.update' WHERE `transaction_id` = 2; +UPDATE `document_transactions` SET `transaction_namespace` = 'ktcore.transactions.delete' WHERE `transaction_id` = 3; +UPDATE `document_transactions` SET `transaction_namespace` = 'ktcore.transactions.rename' WHERE `transaction_id` = 4; +UPDATE `document_transactions` SET `transaction_namespace` = 'tcore.transactions.move' WHERE `transaction_id` = 5; +UPDATE `document_transactions` SET `transaction_namespace` = 'ktcore.transactions.download' WHERE `transaction_id` = 6; +UPDATE `document_transactions` SET `transaction_namespace` = 'ktcore.transactions.check_in' WHERE `transaction_id` = 7; +UPDATE `document_transactions` SET `transaction_namespace` = 'ktcore.transactions.check_out' WHERE `transaction_id` = 8; +UPDATE `document_transactions` SET `transaction_namespace` = 'ktcore.transactions.collaboration_step_rollback' WHERE `transaction_id` = 9; +UPDATE `document_transactions` SET `transaction_namespace` = 'ktcore.transactions.view' WHERE `transaction_id` = 10; +UPDATE `document_transactions` SET `transaction_namespace` = 'ktcore.transactions.expunge' WHERE `transaction_id` = 11; +UPDATE `document_transactions` SET `transaction_namespace` = 'ktcore.transactions.force_checkin' WHERE `transaction_id` = 12; +UPDATE `document_transactions` SET `transaction_namespace` = 'ktcore.transactions.email_link' WHERE `transaction_id` = 13; +UPDATE `document_transactions` SET `transaction_namespace` = 'ktcore.transactions.collaboration_step_approve' WHERE `transaction_id` = 14; +UPDATE `document_transactions` SET `transaction_namespace` = 'ktcore.transactions.email_attachment' WHERE `transaction_id` = 15; +UPDATE `document_transactions` SET `transaction_namespace` = 'ktcore.transactions.workflow_state_transition' WHERE `transaction_id` = 16; + +ALTER TABLE `document_transactions` DROP `transaction_id`; + +SET FOREIGN_KEY_CHECKS=1;