From 43b613c2104826d5833e03ebf285830714b76b4d Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 9 Mar 2017 11:33:09 +0100 Subject: [PATCH] add method rewriteRevisionLog() --- SeedDMS_Core/Core/inc.ClassDocument.php | 71 +++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/SeedDMS_Core/Core/inc.ClassDocument.php b/SeedDMS_Core/Core/inc.ClassDocument.php index 503d3c554..09959b0da 100644 --- a/SeedDMS_Core/Core/inc.ClassDocument.php +++ b/SeedDMS_Core/Core/inc.ClassDocument.php @@ -3716,6 +3716,77 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ return $this->_revisionStatus; } /* }}} */ + /** + * Rewrites the complete revision log + * + * Attention: this function is highly dangerous. + * It removes an existing receipt log and rewrites it. + * This method was added for importing an xml dump. + * + * @param array $revisionlog new status log with the newest log entry first. + * @return boolean true on success, otherwise false + */ + function rewriteRevisionLog($revisions) { /* {{{ */ + $db = $this->_document->_dms->getDB(); + + $queryStr= "SELECT `tblDocumentRevisors`.* FROM `tblDocumentRevisors` WHERE `tblDocumentRevisors`.`documentID` = '". $this->_document->getID() ."' AND `tblDocumentRevisors`.`version` = '". $this->_version ."' "; + $res = $db->getResultArray($queryStr); + if (is_bool($res) && !$res) + return false; + + $db->startTransaction(); + + if($res) { + foreach($res as $revision) { + $revisionID = $revision['revisionID']; + + /* First, remove the old entries */ + $queryStr = "DELETE from `tblDocumentRevisionLog` where `revisionID`=".$revisionID; + if (!$db->getResult($queryStr)) { + $db->rollbackTransaction(); + return false; + } + + $queryStr = "DELETE from `tblDocumentRevisors` where `revisionID`=".$revisionID; + if (!$db->getResult($queryStr)) { + $db->rollbackTransaction(); + return false; + } + } + } + + /* Second, insert the new entries */ + foreach($revisions as $revision) { + $queryStr = "INSERT INTO `tblDocumentRevisors` (`documentID`, `version`, `type`, `required`) ". + "VALUES ('".$this->_document->getID()."', '".$this->_version."', ".$revision['type'] .", ".(is_object($revision['required']) ? $revision['required']->getID() : (int) $revision['required']).")"; + if (!$db->getResult($queryStr)) { + $db->rollbackTransaction(); + return false; + } + $revisionID = $db->getInsertID('tblDocumentRevisors', 'revisionID'); + $revisionlog = array_reverse($revision['logs']); + foreach($revisionlog as $log) { + if(!SeedDMS_Core_DMS::checkDate($log['date'], 'Y-m-d H:i:s')) { + $db->rollbackTransaction(); + return false; + } + $queryStr = "INSERT INTO `tblDocumentRevisionLog` (`revisionID`, `status`, `comment`, `date`, `userID`) ". + "VALUES ('".$revisionID ."', '".(int) $log['status']."', ".$db->qstr($log['comment']) .", ".$db->qstr($log['date']).", ".(is_object($log['user']) ? $log['user']->getID() : (int) $log['user']).")"; + if (!$db->getResult($queryStr)) { + $db->rollbackTransaction(); + return false; + } + $revisionLogID = $db->getInsertID('tblDocumentRevisionLog', 'revisionLogID'); + if(!empty($log['file'])) { + SeedDMS_Core_File::copyFile($log['file'], $this->_dms->contentDir . $this->_document->getDir() . 'r' . $revisionLogID); + } + } + } + + $db->commitTransaction(); + return true; + } /* }}} */ + function addIndReviewer($user, $requestUser) { /* {{{ */ $db = $this->_document->_dms->getDB();