From 9b2eecca0ed1f0b937d34d84ea4bbedf80b860a7 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 13 Mar 2018 17:51:44 +0100 Subject: [PATCH] rejecting a revision will neccesarily put document in need correction status --- controllers/class.ReviseDocument.php | 33 +++++++++++++++++++++++----- inc/inc.ClassSettings.php | 4 ++++ op/op.ReviseDocument.php | 1 + op/op.Settings.php | 1 + views/bootstrap/class.Settings.php | 4 ++++ 5 files changed, 37 insertions(+), 6 deletions(-) diff --git a/controllers/class.ReviseDocument.php b/controllers/class.ReviseDocument.php index 35106984d..ccee171e5 100644 --- a/controllers/class.ReviseDocument.php +++ b/controllers/class.ReviseDocument.php @@ -33,6 +33,13 @@ class SeedDMS_Controller_ReviseDocument extends SeedDMS_Controller_Common { $group = $this->params['group']; $comment = $this->params['comment']; + /* if set to true, a single reject will reject the doc. If set to false + * all revisions will be collected first and afterwards the doc is rejected + * if one has rejected it. So in the very end the doc is rejected, but + * doc remainѕ in S_IN_REVISION until all have revised the doc + */ + $onevotereject = $this->param['onevotereject']; + /* Get the document id and name before removing the document */ $docname = $document->getName(); $documentid = $document->getID(); @@ -63,7 +70,7 @@ class SeedDMS_Controller_ReviseDocument extends SeedDMS_Controller_Common { */ $result = $this->callHook('reviseUpdateDocumentStatus', $content); if($result === null) { - if ($revisionstatus == -1){ + if ($onevotereject && $revisionstatus == -1){ if(!$content->setStatus(S_NEEDS_CORRECTION,$comment,$user)) { $this->error = 1; $this->errormsg = "revision_update_failed"; @@ -76,24 +83,38 @@ class SeedDMS_Controller_ReviseDocument extends SeedDMS_Controller_Common { $this->errormsg = "cannot_retrieve_revision_snapshot"; return false; } - $revisionCT = 0; + $revisionok = 0; + $revisionnotok = 0; $revisionTotal = 0; foreach ($docRevisionStatus as $drstat) { if ($drstat["status"] == 1) { - $revisionCT++; + $revisionok++; + } + if ($drstat["status"] == -1) { + $revisionnotok++; } if ($drstat["status"] != -2) { $revisionTotal++; } } - // If all revisions have been received and there are no rejections, - // then release the document otherwise put it back into revision workflow - if ($revisionCT == $revisionTotal) { + // If all revisions have been done and there are no rejections, + // then release the document. If all revisions have been done but some + // of them were rejections then documents needs correction. + // Otherwise put it back into revision workflow + if ($revisionok == $revisionTotal) { $newStatus=S_RELEASED; if ($content->finishRevision($user, $newStatus, 'Finished revision workflow', getMLText("automatic_status_update"))) { if(!$this->callHook('finishReviseDocument', $content)) { } } + } elseif (($revisionok + $revisionnotok) == $revisionTotal) { + $newStatus=S_NEEDS_CORRECTION; +// if ($content->finishRevision($user, $newStatus, 'Finished revision workflow', getMLText("automatic_status_update"))) { + if(!$content->setStatus($newStatus,$comment,$user)) { + $this->error = 1; + $this->errormsg = "revision_update_failed"; + return false; + } } else { $newStatus=S_IN_REVISION; if(!$content->setStatus($newStatus,$comment,$user)) { diff --git a/inc/inc.ClassSettings.php b/inc/inc.ClassSettings.php index 0a4d25dfa..2e7bd7253 100644 --- a/inc/inc.ClassSettings.php +++ b/inc/inc.ClassSettings.php @@ -186,6 +186,8 @@ class Settings { /* {{{ */ var $_enableAcknowledgeWorkflow = true; // enable/disable revision workflow var $_enableRevisionWorkflow = true; + // enable/disable revision on vote reject + var $_enableRevisionOnVoteReject = true; // Allow to set just a reviewer in tradional workflow var $_allowReviewerOnly = true; // enable/disable log system @@ -649,6 +651,7 @@ class Settings { /* {{{ */ $this->_workflowMode = strval($tab["workflowMode"]); $this->_enableAcknowledgeWorkflow = strval($tab["enableAcknowledgeWorkflow"]); $this->_enableRevisionWorkflow = strval($tab["enableRevisionWorkflow"]); + $this->_enableRevisionOnVoteReject = strval($tab["enableRevisionOnVoteReject"]); $this->_allowReviewerOnly = Settings::boolval($tab["allowReviewerOnly"]); $this->_enableVersionDeletion = Settings::boolval($tab["enableVersionDeletion"]); $this->_enableVersionModification = Settings::boolval($tab["enableVersionModification"]); @@ -965,6 +968,7 @@ class Settings { /* {{{ */ $this->setXMLAttributValue($node, "workflowMode", $this->_workflowMode); $this->setXMLAttributValue($node, "enableAcknowledgeWorkflow", $this->_enableAcknowledgeWorkflow); $this->setXMLAttributValue($node, "enableRevisionWorkflow", $this->_enableRevisionWorkflow); + $this->setXMLAttributValue($node, "enableRevisionOnVoteReject", $this->_enableRevisionOnVoteReject); $this->setXMLAttributValue($node, "allowReviewerOnly", $this->_allowReviewerOnly); $this->setXMLAttributValue($node, "enableVersionDeletion", $this->_enableVersionDeletion); $this->setXMLAttributValue($node, "enableVersionModification", $this->_enableVersionModification); diff --git a/op/op.ReviseDocument.php b/op/op.ReviseDocument.php index 307550976..a96f2b86d 100644 --- a/op/op.ReviseDocument.php +++ b/op/op.ReviseDocument.php @@ -92,6 +92,7 @@ if ($_POST["revisionType"] == "grp") { } $controller->setParam('group', $group); $controller->setParam('comment', $_POST["comment"]); +$controller->setParam('onevotereject', $settins->_enableRevisionOnVoteReject); if(!$controller->run()) { UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText($controller->getErrorMsg())); } diff --git a/op/op.Settings.php b/op/op.Settings.php index 68aa131e0..c665200d8 100644 --- a/op/op.Settings.php +++ b/op/op.Settings.php @@ -180,6 +180,7 @@ if ($action == "saveSettings") $settings->_workflowMode = $_POST["workflowMode"]; $settings->_enableAcknowledgeWorkflow = getBoolValue("enableAcknowledgeWorkflow"); $settings->_enableRevisionWorkflow = getBoolValue("enableRevisionWorkflow"); + $settings->_enableRevisionOnVoteReject = getBoolValue("enableRevisionOnVoteReject"); $settings->_allowReviewerOnly = getBoolValue("allowReviewerOnly"); $settings->_enableAdminRevApp = getBoolValue("enableAdminRevApp"); $settings->_enableOwnerRevApp = getBoolValue("enableOwnerRevApp"); diff --git a/views/bootstrap/class.Settings.php b/views/bootstrap/class.Settings.php index 74cb9afc0..65540b35a 100644 --- a/views/bootstrap/class.Settings.php +++ b/views/bootstrap/class.Settings.php @@ -678,6 +678,10 @@ if(!is_writeable($settings->_configFilePath)) { : _enableRevisionWorkflow) echo "checked" ?> /> + "> + : + _enableRevisionOnVoteReject) echo "checked" ?> /> + "> : showTextField("versioningFileName", $settings->_versioningFileName); ?>