diff --git a/SeedDMS_Core/Core/inc.ClassUser.php b/SeedDMS_Core/Core/inc.ClassUser.php index 8b5e5768c..ee691cc18 100644 --- a/SeedDMS_Core/Core/inc.ClassUser.php +++ b/SeedDMS_Core/Core/inc.ClassUser.php @@ -974,10 +974,11 @@ class SeedDMS_Core_User { /* {{{ */ * @param array $states remove user only from reviews/approvals in one of the states * e.g. if passing array('review'=>array(0)), the method will operate on * reviews which has not been touched yet. - * @param object user who takes over the processes + * @param object $newuser user who takes over the processes + * @param array $docs remove only processes from docs with the given document ids * @return boolean true on success or false in case of an error */ - private function __removeFromProcesses($user, $states = array(), $newuser=null) { /* {{{ */ + private function __removeFromProcesses($user, $states = array(), $newuser=null, $docs=null) { /* {{{ */ $db = $this->_dms->getDB(); /* Get a list of all reviews, even those of older document versions */ @@ -986,6 +987,12 @@ class SeedDMS_Core_User { /* {{{ */ foreach ($reviewStatus["indstatus"] as $ri) { if(!($doc = $this->_dms->getDocument($ri['documentID']))) continue; + if($docs) { + if(!in_array($doc->getID(), $docs)) + continue; + if(!$doc->isLatestContent($ri['version'])) + continue; + } if($newuser && $doc->getAccessMode($newuser) < M_READ) continue; if($ri['status'] != -2 && (!isset($states['review']) || in_array($ri['status'], $states['review']))) { @@ -998,14 +1005,12 @@ class SeedDMS_Core_User { /* {{{ */ } /* Only reviews not done already can be transferred to a new user */ if($newuser && $ri['status'] == 0) { - if($doc = $this->_dms->getDocument($ri['documentID'])) { - if($version = $doc->getContentByVersion($ri['version'])) { - $ret = $version->addIndReviewer($newuser, $user); - /* returns -3 if the user is already a reviewer */ - if($ret === false || ($ret < 0 && $ret != -3)) { - $db->rollbackTransaction(); - return false; - } + if($version = $doc->getContentByVersion($ri['version'])) { + $ret = $version->addIndReviewer($newuser, $user); + /* returns -3 if the user is already a reviewer */ + if($ret === false || ($ret < 0 && $ret != -3)) { + $db->rollbackTransaction(); + return false; } } } @@ -1019,6 +1024,12 @@ class SeedDMS_Core_User { /* {{{ */ foreach ($approvalStatus["indstatus"] as $ai) { if(!($doc = $this->_dms->getDocument($ai['documentID']))) continue; + if($docs) { + if(!in_array($doc->getID(), $docs)) + continue; + if(!$doc->isLatestContent($ai['version'])) + continue; + } if($newuser && $doc->getAccessMode($newuser) < M_READ) continue; if($ai['status'] != -2 && (!isset($states['approval']) || in_array($ai['status'], $states['approval']))) { @@ -1031,14 +1042,12 @@ class SeedDMS_Core_User { /* {{{ */ } /* Only approvals not done already can be transferred to a new user */ if($newuser && $ai['status'] == 0) { - if($doc = $this->_dms->getDocument($ai['documentID'])) { - if($version = $doc->getContentByVersion($ai['version'])) { - $ret = $version->addIndReviewer($newuser, $user); - /* returns -3 if the user is already a reviewer */ - if($ret === false || ($ret < 0 && $ret != -3)) { - $db->rollbackTransaction(); - return false; - } + if($version = $doc->getContentByVersion($ai['version'])) { + $ret = $version->addIndReviewer($newuser, $user); + /* returns -3 if the user is already a reviewer */ + if($ret === false || ($ret < 0 && $ret != -3)) { + $db->rollbackTransaction(); + return false; } } } @@ -1052,6 +1061,12 @@ class SeedDMS_Core_User { /* {{{ */ foreach ($receiptStatus["indstatus"] as $ri) { if(!($doc = $this->_dms->getDocument($ri['documentID']))) continue; + if($docs) { + if(!in_array($doc->getID(), $docs)) + continue; + if(!$doc->isLatestContent($ri['version'])) + continue; + } if($newuser && $doc->getAccessMode($newuser) < M_READ) continue; if($ri['status'] != -2 && (!isset($states['receipt']) || in_array($ri['status'], $states['receipt']))) { @@ -1085,6 +1100,12 @@ class SeedDMS_Core_User { /* {{{ */ foreach ($revisionStatus["indstatus"] as $ri) { if(!($doc = $this->_dms->getDocument($ri['documentID']))) continue; + if($docs) { + if(!in_array($doc->getID(), $docs)) + continue; + if(!$doc->isLatestContent($ri['version'])) + continue; + } if($newuser && $doc->getAccessMode($newuser) < M_READ) continue; if($ri['status'] != -2 && (!isset($states['revision']) || in_array($ri['status'], $states['revision']))) { @@ -1123,14 +1144,14 @@ class SeedDMS_Core_User { /* {{{ */ * @param object $user the user doing the removal (needed for entry in * review and approve log). * @param array $states remove user only from reviews/approvals in one of the states - * @param object user who takes over the processes + * @param object $newuser user who takes over the processes * @return boolean true on success or false in case of an error */ - public function removeFromProcesses($user, $states=array(), $newuser=null) { /* {{{ */ + public function removeFromProcesses($user, $states=array(), $newuser=null, $docs=null) { /* {{{ */ $db = $this->_dms->getDB(); $db->startTransaction(); - if(!$this->__removeFromProcesses($user, $states, $newuser)) { + if(!$this->__removeFromProcesses($user, $states, $newuser, $docs)) { $db->rollbackTransaction(); return false; } diff --git a/op/op.UsrMgr.php b/op/op.UsrMgr.php index 09e986b60..60de057fe 100644 --- a/op/op.UsrMgr.php +++ b/op/op.UsrMgr.php @@ -240,13 +240,15 @@ else if ($action == "removefromprocesses") { $_POST["status"]["receipt"] = array(); if(!isset($_POST["status"]["revision"])) $_POST["status"]["revision"] = array(); - if (!$userToRemove->removeFromProcesses($user, $_POST['status'], $userToAssign)) { - UI::exitError(getMLText("admin_tools"),getMLText("error_occured")); + if(!empty($_POST['needsdocs']) && empty($_POST['docs'])) { + $session->setSplashMsg(array('type'=>'error', 'msg'=>getMLText('error_rm_user_processes_no_docs'))); + } else { + if (!$userToRemove->removeFromProcesses($user, $_POST['status'], $userToAssign, $_POST['docs'])) { + UI::exitError(getMLText("admin_tools"),getMLText("error_rm_user_processes")); + } + add_log_line(".php&action=removefromprocesses&userid=".$userid); + $session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_rm_user_processes'))); } - - add_log_line(".php&action=removefromprocesses&userid=".$userid); - - $session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_rm_user_processes'))); } } diff --git a/out/out.RemoveUserFromProcesses.php b/out/out.RemoveUserFromProcesses.php index 76af8947c..828a26076 100644 --- a/out/out.RemoveUserFromProcesses.php +++ b/out/out.RemoveUserFromProcesses.php @@ -53,6 +53,11 @@ if (isset($_GET["task"])) { $task = $_GET['task']; } +$type = null; +if (isset($_GET["type"])) { + $type = $_GET['type']; +} + $allusers = $dms->getAllUsers($settings->_sortUsersInList); if($view) { @@ -60,6 +65,7 @@ if($view) { $view->setParam('rmuser', $rmuser); $view->setParam('allusers', $allusers); $view->setParam('task', $task); + $view->setParam('type', $type); $view->setParam('cachedir', $settings->_cacheDir); $view->setParam('rootfolder', $dms->getFolder($settings->_rootFolderID)); $view->setParam('conversionmgr', $conversionmgr); diff --git a/views/bootstrap/class.RemoveUserFromProcesses.php b/views/bootstrap/class.RemoveUserFromProcesses.php index b05b4dbc5..551a64e98 100644 --- a/views/bootstrap/class.RemoveUserFromProcesses.php +++ b/views/bootstrap/class.RemoveUserFromProcesses.php @@ -43,8 +43,12 @@ $(document).ready( function() { $('body').on('click', 'label.checkbox, td span', function(ev){ ev.preventDefault(); $('#kkkk.ajax').data('action', $(this).data('action')); - $('#kkkk.ajax').trigger('update', {userid: $(this).data('userid'), task: $(this).data('task')}); + $('#kkkk.ajax').trigger('update', {userid: $(this).data('userid'), task: $(this).data('task'), type: $(this).data('type')}); }); + $('body').on('click', '#selectall', function(ev){ + $("input.markforprocess").each(function () { this.checked = !this.checked; }); + ev.preventDefault(); + }); }); params['previewconverters']; $timeout = $this->params['timeout']; $rmuser = $this->params['rmuser']; + $allusers = $this->params['allusers']; $task = $this->params['task']; + $type = $this->params['type']; if(!$task) return; @@ -239,12 +245,23 @@ $(document).ready( function() { break; } if($docs) { + echo '
'; } } /* }}} */ @@ -467,7 +506,7 @@ $(document).ready( function() { "; foreach($out as $o) { - echo "