From efd159e4d898ea170180ca1b3c85ce9de7d5b85a Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 29 Jun 2021 08:26:42 +0200 Subject: [PATCH 01/56] call hook preIndexFolder() for folders --- op/op.Ajax.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/op/op.Ajax.php b/op/op.Ajax.php index c1adcac9d..6a89526cb 100644 --- a/op/op.Ajax.php +++ b/op/op.Ajax.php @@ -852,7 +852,7 @@ switch($command) { if(isset($GLOBALS['SEEDDMS_HOOKS'][$hook])) { foreach($GLOBALS['SEEDDMS_HOOKS'][$hook] as $hookObj) { if (method_exists($hookObj, 'pre'.ucfirst($hook))) { - $ires = $hookObj->preIndexDocument(null, $object, $idoc); + $ires = $hookObj->{'pre'.ucfirst($hook)}(null, $object, $idoc); } } } From e8a50e31017bf05a1baec4e1cbf85aafc92e0c14 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 29 Jun 2021 09:04:57 +0200 Subject: [PATCH 02/56] more access checking --- op/op.LockDocument.php | 5 +++++ op/op.MoveDocument.php | 5 +++++ op/op.RemoveDocument.php | 4 ++++ op/op.UnlockDocument.php | 5 +++++ op/op.UpdateDocument.php | 4 ++++ views/bootstrap/class.Bootstrap.php | 19 ++++++++++++++++--- views/bootstrap4/class.Bootstrap4.php | 14 ++++++++------ 7 files changed, 47 insertions(+), 9 deletions(-) diff --git a/op/op.LockDocument.php b/op/op.LockDocument.php index e2b2215c9..78b40e079 100644 --- a/op/op.LockDocument.php +++ b/op/op.LockDocument.php @@ -29,6 +29,11 @@ require_once("inc/inc.DBInit.php"); require_once("inc/inc.ClassUI.php"); require_once("inc/inc.Authentication.php"); +$accessop = new SeedDMS_AccessOperation($dms, $user, $settings); +if (!$accessop->check_controller_access('LockDocument', $_POST)) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("access_denied")); +} + /* Check if the form data comes from a trusted request */ if(!checkFormKey('lockdocument', 'GET')) { UI::exitError(getMLText("document_title"), getMLText("invalid_request_token")); diff --git a/op/op.MoveDocument.php b/op/op.MoveDocument.php index e1ebc227a..8006903c3 100644 --- a/op/op.MoveDocument.php +++ b/op/op.MoveDocument.php @@ -33,6 +33,11 @@ if(!checkFormKey('movedocument', 'GET')) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_request_token"))),getMLText("invalid_request_token")); } +$accessop = new SeedDMS_AccessOperation($dms, $user, $settings); +if (!$accessop->check_controller_access('MoveDocument', $_POST)) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("access_denied")); +} + if (!isset($_GET["documentid"]) || !is_numeric($_GET["documentid"]) || intval($_GET["documentid"])<1) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } diff --git a/op/op.RemoveDocument.php b/op/op.RemoveDocument.php index f700b96ac..c53e6808d 100644 --- a/op/op.RemoveDocument.php +++ b/op/op.RemoveDocument.php @@ -30,6 +30,10 @@ include("../inc/inc.Authentication.php"); $tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); $controller = Controller::factory($tmp[1], array('dms'=>$dms, 'user'=>$user)); +$accessop = new SeedDMS_AccessOperation($dms, $user, $settings); +if (!$accessop->check_controller_access($controller, $_POST)) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("access_denied")); +} /* Check if the form data comes from a trusted request */ if(!checkFormKey('removedocument')) { diff --git a/op/op.UnlockDocument.php b/op/op.UnlockDocument.php index 235e8c5d0..f61767365 100644 --- a/op/op.UnlockDocument.php +++ b/op/op.UnlockDocument.php @@ -28,6 +28,11 @@ include("../inc/inc.DBInit.php"); include("../inc/inc.ClassUI.php"); include("../inc/inc.Authentication.php"); +$accessop = new SeedDMS_AccessOperation($dms, $user, $settings); +if (!$accessop->check_controller_access('UnlockDocument', $_POST)) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("access_denied")); +} + /* Check if the form data comes from a trusted request */ if(!checkFormKey('unlockdocument', 'GET')) { UI::exitError(getMLText("document_title"), getMLText("invalid_request_token")); diff --git a/op/op.UpdateDocument.php b/op/op.UpdateDocument.php index 58cd26991..8af7b8e5a 100644 --- a/op/op.UpdateDocument.php +++ b/op/op.UpdateDocument.php @@ -30,6 +30,10 @@ include("../inc/inc.ClassController.php"); $tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); $controller = Controller::factory($tmp[1], array('dms'=>$dms, 'user'=>$user)); +$accessop = new SeedDMS_AccessOperation($dms, $user, $settings); +if (!$accessop->check_controller_access($controller, $_POST)) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("access_denied")); +} /* Check if the form data comes from a trusted request */ if(!checkFormKey('updatedocument')) { diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index 386d9f963..f259369b7 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -798,9 +798,17 @@ background-image: linear-gradient(to bottom, #882222, #111111);; $menuitems['update_document'] = array('link'=>"../out/out.UpdateDocument".$docid, 'label'=>getMLText('update_document')); if($accessobject->check_controller_access('LockDocument')) $menuitems['lock_document'] = array('link'=>"../op/op.LockDocument".$docid."&formtoken=".createFormKey('lockdocument'), 'label'=>getMLText('lock_document')); + if($document->isCheckedOut()) + $menuitems['checkin_document'] = array('link'=>"../out/out.CheckInDocument".$docid, 'label'=>getMLText('checkin_document')); + else { + if($this->params['checkoutdir']) { + $menuitems['checkout_document'] = array('link'=>"../op/op.CheckOutDocument".$docid, 'label'=>getMLText('checkout_document')); + } + } if($accessobject->check_controller_access('EditDocument')) $menuitems['edit_document_props'] = array('link'=>"../out/out.EditDocument".$docid , 'label'=>getMLText('edit_document_props')); - $menuitems['move_document'] = array('link'=>"../out/out.MoveDocument".$docid, 'label'=>getMLText('move_document')); + if($accessobject->check_controller_access('MoveDocument')) + $menuitems['move_document'] = array('link'=>"../out/out.MoveDocument".$docid, 'label'=>getMLText('move_document')); } else { $lockingUser = $document->getLockingUser(); @@ -811,7 +819,8 @@ background-image: linear-gradient(to bottom, #882222, #111111);; $menuitems['unlock_document'] = array('link'=>"../op/op.UnlockDocument".$docid."&formtoken=".createFormKey('unlockdocument'), 'label'=>getMLText('unlock_document')); if($accessobject->check_controller_access('EditDocument')) $menuitems['edit_document_props'] = array('link'=>"../out/out.EditDocument".$docid, 'label'=>getMLText('edit_document_props')); - $menuitems['move_document'] = array('link'=>"../out/out.MoveDocument".$docid, 'label'=>getMLText('move_document')); + if($accessobject->check_controller_access('MoveDocument')) + $menuitems['move_document'] = array('link'=>"../out/out.MoveDocument".$docid, 'label'=>getMLText('move_document')); } } if($accessobject->maySetExpires($document)) { @@ -825,7 +834,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);; if ($accessobject->check_view_access('DocumentAccess')) $menuitems['edit_document_access'] = array('link'=>"../out/out.DocumentAccess". $docid, 'label'=>getMLText('edit_document_access')); } - if ($accessMode >= M_READ) { + if ($accessMode >= M_READ && !$this->params['user']->isGuest()) { if ($accessobject->check_view_access('DocumentNotify')) $menuitems['edit_existing_notify'] = array('link'=>"../out/out.DocumentNotify". $docid, 'label'=>getMLText('edit_existing_notify')); } @@ -1604,6 +1613,7 @@ $(document).ready(function() { array( 'target' => 'docChooser'.$formid, 'remote' => "../out/out.DocumentChooser.php?form=".$formid."&folderid=".$folderid."&partialtree=".$partialtree, + 'class' => 'btn btn-secondary', 'title' => getMLText('document').'…' )); $content .= "\n"; @@ -1668,6 +1678,7 @@ function folderSelected(id, name) { array( 'target' => 'folderChooser'.$formid, 'remote' => "../out/out.FolderChooser.php?form=".$formid."&mode=".$accessMode."&exclude=".$exclude, + 'class' => 'btn btn-secondary', 'title' => getMLText('folder').'…' )); } @@ -1740,6 +1751,7 @@ $(document).ready(function() { array( 'target' => 'keywordChooser', 'remote' => "../out/out.KeywordChooser.php?target=".$formName, + 'class' => 'btn btn-secondary', 'title' => getMLText('keywords').'…' )); $content .= ' @@ -1991,6 +2003,7 @@ $(document).ready(function() { array( 'target' => 'dropfolderChooser', 'remote' => "../out/out.DropFolderChooser.php?form=".$formName."&dropfolderfile=".urlencode($dropfolderfile)."&showfolders=".$showfolders, + 'class' => 'btn btn-secondary', 'title' => ($showfolders ? getMLText("choose_target_folder"): getMLText("choose_target_file")).'…' )); $content .= "\n"; diff --git a/views/bootstrap4/class.Bootstrap4.php b/views/bootstrap4/class.Bootstrap4.php index 64e1c36e2..d14f2786e 100644 --- a/views/bootstrap4/class.Bootstrap4.php +++ b/views/bootstrap4/class.Bootstrap4.php @@ -721,7 +721,8 @@ background-image: linear-gradient(to bottom, #882222, #111111);; } if($accessobject->check_controller_access('EditDocument')) $menuitems['edit_document_props'] = array('link'=>"../out/out.EditDocument".$docid , 'label'=>getMLText('edit_document_props')); - $menuitems['move_document'] = array('link'=>"../out/out.MoveDocument".$docid, 'label'=>getMLText('move_document')); + if($accessobject->check_controller_access('MoveDocument')) + $menuitems['move_document'] = array('link'=>"../out/out.MoveDocument".$docid, 'label'=>getMLText('move_document')); } else { $lockingUser = $document->getLockingUser(); @@ -732,7 +733,8 @@ background-image: linear-gradient(to bottom, #882222, #111111);; $menuitems['unlock_document'] = array('link'=>"../op/op.UnlockDocument".$docid."&formtoken=".createFormKey('unlockdocument'), 'label'=>getMLText('unlock_document')); if($accessobject->check_controller_access('EditDocument')) $menuitems['edit_document_props'] = array('link'=>"../out/out.EditDocument".$docid, 'label'=>getMLText('edit_document_props')); - $menuitems['move_document'] = array('link'=>"../out/out.MoveDocument".$docid, 'label'=>getMLText('move_document')); + if($accessobject->check_controller_access('MoveDocument')) + $menuitems['move_document'] = array('link'=>"../out/out.MoveDocument".$docid, 'label'=>getMLText('move_document')); } } if($accessobject->maySetExpires($document)) { @@ -750,7 +752,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);; if ($accessobject->check_view_access('DocumentNotify')) $menuitems['edit_existing_notify'] = array('link'=>"../out/out.DocumentNotify". $docid, 'label'=>getMLText('edit_existing_notify')); } - if ($this->params['user']->isAdmin()) { + if ($accessobject->check_view_access('TransferDocument')) { $menuitems['transfer_document'] = array('link'=>"../out/out.TransferDocument". $docid, 'label'=>getMLText('transfer_document')); } @@ -777,7 +779,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);; $accessobject = $this->params['accessobject']; $menuitems = array(); - if ($this->params['user']->isAdmin() || !$this->params['disableselfedit']) + if ($accessobject->check_view_access('EditUserData') || !$this->params['disableselfedit']) $menuitems['edit_user_details'] = array('link'=>"../out/out.EditUserData.php", 'label'=>getMLText('edit_user_details')); if (!$this->params['user']->isAdmin()) @@ -938,7 +940,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);; echo "
  • ".getMLText("week_view")."
  • \n"; echo "
  • ".getMLText("month_view")."
  • \n"; echo "
  • ".getMLText("year_view")."
  • \n"; - if (!$this->params['user']->isGuest()) + if($accessobject->check_view_access(array('AddEvent'))) echo "
  • ".getMLText("add_event")."
  • \n"; echo "\n"; echo "\n"; @@ -950,7 +952,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);; $accessobject = $this->params['accessobject']; $menuitems = array(); - if (!$this->params['user']->isGuest()) + if($accessobject->check_view_access(array('AddEvent'))) $menuitems['addevent'] = array('link'=>"../out/out.AddEvent.php", 'label'=>getMLText('add_event')); /* Check if hook exists because otherwise callHook() will override $menuitems */ From 0edce2694bd4e84f8e4547c34dbb36833045927b Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 29 Jun 2021 09:06:49 +0200 Subject: [PATCH 03/56] include Settings.php only if $settings not set --- op/op.UnlockDocument.php | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/op/op.UnlockDocument.php b/op/op.UnlockDocument.php index b457f842b..be90d36d9 100644 --- a/op/op.UnlockDocument.php +++ b/op/op.UnlockDocument.php @@ -18,15 +18,16 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -include("../inc/inc.Settings.php"); -include("../inc/inc.LogInit.php"); -include("../inc/inc.Utils.php"); -include("../inc/inc.Language.php"); -include("../inc/inc.Init.php"); -include("../inc/inc.Extension.php"); -include("../inc/inc.DBInit.php"); -include("../inc/inc.ClassUI.php"); -include("../inc/inc.Authentication.php"); +if(!isset($settings)) + require_once("../inc/inc.Settings.php"); +require_once("inc/inc.LogInit.php"); +require_once("inc/inc.Utils.php"); +require_once("inc/inc.Language.php"); +require_once("inc/inc.Init.php"); +require_once("inc/inc.Extension.php"); +require_once("inc/inc.DBInit.php"); +require_once("inc/inc.ClassUI.php"); +require_once("inc/inc.Authentication.php"); /* Check if the form data comes from a trusted request */ if(!checkFormKey('unlockdocument', 'GET')) { From 03a394906ec93dc12f414408b2a6b98841fc082e Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 29 Jun 2021 09:44:30 +0200 Subject: [PATCH 04/56] more access control --- op/op.EditDocument.php | 4 ++++ views/bootstrap/class.Bootstrap.php | 12 ++++++------ views/bootstrap4/class.Bootstrap4.php | 12 ++++++------ 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/op/op.EditDocument.php b/op/op.EditDocument.php index 8e9f21518..ace42d15d 100644 --- a/op/op.EditDocument.php +++ b/op/op.EditDocument.php @@ -31,6 +31,10 @@ include("../inc/inc.Authentication.php"); $tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); $controller = Controller::factory($tmp[1], array('dms'=>$dms, 'user'=>$user)); +$accessop = new SeedDMS_AccessOperation($dms, $user, $settings); +if (!$accessop->check_controller_access($controller, $_POST)) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("access_denied")); +} /* Check if the form data comes from a trusted request */ if(!checkFormKey('editdocument')) { diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index f259369b7..243d01cc7 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -741,20 +741,20 @@ background-image: linear-gradient(to bottom, #882222, #111111);; $menuitems = array(); if ($accessMode == M_READ && !$this->params['user']->isGuest()) { - if ($accessobject->check_view_access('FolderNotify')) + if ($accessobject->check_controller_access('FolderNotify')) $menuitems['edit_folder_notify'] = array('link'=>"../out/out.FolderNotify.php?folderid=".$folderID."&showtree=".showtree(), 'label'=>getMLText('edit_folder_notify')); } else if ($accessMode >= M_READWRITE) { - if ($accessobject->check_view_access('AddSubFolder')) + if ($accessobject->check_controller_access('AddSubFolder')) $menuitems['add_subfolder'] = array('link'=>"../out/out.AddSubFolder.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>getMLText('add_subfolder')); - if ($accessobject->check_view_access('AddDocument')) + if ($accessobject->check_controller_access('AddDocument')) $menuitems['add_document'] = array('link'=>"../out/out.AddDocument.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>getMLText('add_document')); if(0 && $this->params['enablelargefileupload']) $menuitems['add_multiple_documents'] = array('link'=>"../out/out.AddMultiDocument.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>getMLText('add_multiple_documents')); - if ($accessobject->check_view_access('EditFolder')) { + if ($accessobject->check_controller_access('EditFolder')) { $menuitems['edit_folder_props'] = array('link'=>"../out/out.EditFolder.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>getMLText('edit_folder_props')); } - if ($accessobject->check_view_access('MoveFolder')) { + if ($accessobject->check_controller_access('MoveFolder')) { if ($folderID != $this->params['rootfolderid'] && $folder->getParent()) $menuitems['move_folder'] = array('link'=>"../out/out.MoveFolder.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>getMLText('move_folder')); } @@ -768,7 +768,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);; if ($accessobject->check_view_access('FolderAccess')) $menuitems['edit_folder_access'] = array('link'=>"../out/out.FolderAccess.php?folderid=".$folderID."&showtree=".showtree(), 'label'=>getMLText('edit_folder_access')); } - if ($accessobject->check_view_access('FolderNotify')) + if ($accessobject->check_controller_access('FolderNotify')) $menuitems['edit_existing_notify'] = array('link'=>"../out/out.FolderNotify.php?folderid=". $folderID ."&showtree=". showtree(), 'label'=>getMLText('edit_existing_notify')); } if ($accessobject->check_view_access('Indexer') && $this->params['enablefullsearch']) { diff --git a/views/bootstrap4/class.Bootstrap4.php b/views/bootstrap4/class.Bootstrap4.php index d14f2786e..2d7f69992 100644 --- a/views/bootstrap4/class.Bootstrap4.php +++ b/views/bootstrap4/class.Bootstrap4.php @@ -659,20 +659,20 @@ background-image: linear-gradient(to bottom, #882222, #111111);; $menuitems = array(); if ($accessMode == M_READ && !$this->params['user']->isGuest()) { - if ($accessobject->check_view_access('FolderNotify')) + if ($accessobject->check_controller_access('FolderNotify')) $menuitems['edit_folder_notify'] = array('link'=>"../out/out.FolderNotify.php?folderid=".$folderID."&showtree=".showtree(), 'label'=>getMLText('edit_folder_notify')); } else if ($accessMode >= M_READWRITE) { - if ($accessobject->check_view_access('AddSubFolder')) + if ($accessobject->check_controller_access('AddSubFolder')) $menuitems['add_subfolder'] = array('link'=>"../out/out.AddSubFolder.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>getMLText('add_subfolder')); - if ($accessobject->check_view_access('AddDocument')) + if ($accessobject->check_controller_access('AddDocument')) $menuitems['add_document'] = array('link'=>"../out/out.AddDocument.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>getMLText('add_document')); if(0 && $this->params['enablelargefileupload']) $menuitems['add_multiple_documents'] = array('link'=>"../out/out.AddMultiDocument.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>getMLText('add_multiple_documents')); - if ($accessobject->check_view_access('EditFolder')) { + if ($accessobject->check_controller_access('EditFolder')) { $menuitems['edit_folder_props'] = array('link'=>"../out/out.EditFolder.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>getMLText('edit_folder_props')); } - if ($accessobject->check_view_access('MoveFolder')) { + if ($accessobject->check_controller_access('MoveFolder')) { if ($folderID != $this->params['rootfolderid'] && $folder->getParent()) $menuitems['move_folder'] = array('link'=>"../out/out.MoveFolder.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>getMLText('move_folder')); } @@ -686,7 +686,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);; if ($accessobject->check_view_access('FolderAccess')) $menuitems['edit_folder_access'] = array('link'=>"../out/out.FolderAccess.php?folderid=".$folderID."&showtree=".showtree(), 'label'=>getMLText('edit_folder_access')); } - if ($accessobject->check_view_access('FolderNotify')) + if ($accessobject->check_controller_access('FolderNotify')) $menuitems['edit_existing_notify'] = array('link'=>"../out/out.FolderNotify.php?folderid=". $folderID ."&showtree=". showtree(), 'label'=>getMLText('edit_existing_notify')); } if ($this->params['user']->isAdmin() && $this->params['enablefullsearch']) { From 8eb58825203ae274fa591d94590b88b064a7f634 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 29 Jun 2021 10:20:31 +0200 Subject: [PATCH 05/56] revert to regex for email validation --- SeedDMS_Core/Core/inc.ClassAttribute.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SeedDMS_Core/Core/inc.ClassAttribute.php b/SeedDMS_Core/Core/inc.ClassAttribute.php index cac122db3..5d2d6c473 100644 --- a/SeedDMS_Core/Core/inc.ClassAttribute.php +++ b/SeedDMS_Core/Core/inc.ClassAttribute.php @@ -1233,8 +1233,8 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */ break; case self::type_email: foreach($values as $value) { - $success &= filter_var($value, FILTER_VALIDATE_EMAIL); - //preg_match('/^[a-z0-9._-]+@+[a-z0-9._-]+\.+[a-z]{2,63}$/i', $value); + //$success &= filter_var($value, FILTER_VALIDATE_EMAIL) ? true : false; + $success &= preg_match('/^[a-z0-9._-]+@+[a-z0-9._-]+\.+[a-z]{2,63}$/i', $value); } if(!$success) $this->_validation_error = 5; From 1f22a0dd222b5f04b567dd035e47408faae76195 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 29 Jun 2021 11:26:55 +0200 Subject: [PATCH 06/56] add more access checking --- views/bootstrap/class.Bootstrap.php | 11 +++++++---- views/bootstrap4/class.Bootstrap4.php | 11 +++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index 02bd060ac..82d81eeef 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -745,7 +745,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);; if ($accessobject->check_view_access('DocumentNotify')) $menuitems['edit_existing_notify'] = array('link'=>"../out/out.DocumentNotify". $docid, 'label'=>getMLText('edit_existing_notify')); } - if ($this->params['user']->isAdmin()) { + if ($accessobject->check_view_access('TransferDocument')) { $menuitems['transfer_document'] = array('link'=>"../out/out.TransferDocument". $docid, 'label'=>getMLText('transfer_document')); } @@ -782,7 +782,8 @@ background-image: linear-gradient(to bottom, #882222, #111111);; if (!$this->params['user']->isAdmin()) $menuitems['edit_default_keywords'] = array('link'=>"../out/out.UserDefaultKeywords.php", 'label'=>getMLText('edit_default_keywords')); - $menuitems['edit_notify'] = array('link'=>"../out/out.ManageNotify.php", 'label'=>getMLText('edit_existing_notify')); + if ($accessobject->check_view_access('ManageNotify')) + $menuitems['edit_notify'] = array('link'=>"../out/out.ManageNotify.php", 'label'=>getMLText('edit_existing_notify')); if ($this->params['enableusersview']){ if ($accessobject->check_view_access('UsrView')) @@ -807,8 +808,10 @@ background-image: linear-gradient(to bottom, #882222, #111111);; echo "
    \n"; $menuitems = array(); - $menuitems['inprocess'] = array('link'=>"../out/out.MyDocuments.php?inProcess=1", 'label'=>getMLText('documents_in_process')); - $menuitems['all_documents'] = array('link'=>"../out/out.MyDocuments.php", 'label'=>getMLText('all_documents')); + if ($accessobject->check_view_access('MyDocuments')) { + $menuitems['inprocess'] = array('link'=>"../out/out.MyDocuments.php?inProcess=1", 'label'=>getMLText('documents_in_process')); + $menuitems['all_documents'] = array('link'=>"../out/out.MyDocuments.php", 'label'=>getMLText('all_documents')); + } if($this->params['workflowmode'] == 'traditional' || $this->params['workflowmode'] == 'traditional_only_approval') { if ($accessobject->check_view_access('ReviewSummary')) $menuitems['review_summary'] = array('link'=>"../out/out.ReviewSummary.php", 'label'=>getMLText('review_summary')); diff --git a/views/bootstrap4/class.Bootstrap4.php b/views/bootstrap4/class.Bootstrap4.php index b251c6b96..499834f80 100644 --- a/views/bootstrap4/class.Bootstrap4.php +++ b/views/bootstrap4/class.Bootstrap4.php @@ -735,7 +735,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);; if ($accessobject->check_view_access('DocumentNotify')) $menuitems['edit_existing_notify'] = array('link'=>"../out/out.DocumentNotify". $docid, 'label'=>getMLText('edit_existing_notify')); } - if ($this->params['user']->isAdmin()) { + if ($accessobject->check_view_access('TransferDocument')) { $menuitems['transfer_document'] = array('link'=>"../out/out.TransferDocument". $docid, 'label'=>getMLText('transfer_document')); } @@ -768,7 +768,8 @@ background-image: linear-gradient(to bottom, #882222, #111111);; if (!$this->params['user']->isAdmin()) $menuitems['edit_default_keywords'] = array('link'=>"../out/out.UserDefaultKeywords.php", 'label'=>getMLText('edit_default_keywords')); - $menuitems['edit_notify'] = array('link'=>"../out/out.ManageNotify.php", 'label'=>getMLText('edit_existing_notify')); + if ($accessobject->check_view_access('ManageNotify')) + $menuitems['edit_notify'] = array('link'=>"../out/out.ManageNotify.php", 'label'=>getMLText('edit_existing_notify')); if ($this->params['enableusersview']){ if ($accessobject->check_view_access('UsrView')) @@ -789,8 +790,10 @@ background-image: linear-gradient(to bottom, #882222, #111111);; $accessobject = $this->params['accessobject']; $menuitems = array(); - $menuitems['inprocess'] = array('link'=>"../out/out.MyDocuments.php?inProcess=1", 'label'=>getMLText('documents_in_process')); - $menuitems['all_documents'] = array('link'=>"../out/out.MyDocuments.php", 'label'=>getMLText('all_documents')); + if ($accessobject->check_view_access('MyDocuments')) { + $menuitems['inprocess'] = array('link'=>"../out/out.MyDocuments.php?inProcess=1", 'label'=>getMLText('documents_in_process')); + $menuitems['all_documents'] = array('link'=>"../out/out.MyDocuments.php", 'label'=>getMLText('all_documents')); + } if($this->params['workflowmode'] == 'traditional' || $this->params['workflowmode'] == 'traditional_only_approval') { if ($accessobject->check_view_access('ReviewSummary')) $menuitems['review_summary'] = array('link'=>"../out/out.ReviewSummary.php", 'label'=>getMLText('review_summary')); From b84bf38842a4a06c9ec1e506f9d07ef4679d8e90 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 30 Jun 2021 12:51:57 +0200 Subject: [PATCH 07/56] make api much more like Zend_Lucene api --- SeedDMS_SQLiteFTS/SQLiteFTS/Document.php | 57 +++++++++++- SeedDMS_SQLiteFTS/SQLiteFTS/Exception.php | 41 +++++++++ SeedDMS_SQLiteFTS/SQLiteFTS/Field.php | 88 +++++++++++++++++++ .../SQLiteFTS/IndexedDocument.php | 53 ++++++----- SeedDMS_SQLiteFTS/SQLiteFTS/Indexer.php | 65 +++++--------- SeedDMS_SQLiteFTS/package.xml | 1 + 6 files changed, 239 insertions(+), 66 deletions(-) create mode 100644 SeedDMS_SQLiteFTS/SQLiteFTS/Exception.php create mode 100644 SeedDMS_SQLiteFTS/SQLiteFTS/Field.php diff --git a/SeedDMS_SQLiteFTS/SQLiteFTS/Document.php b/SeedDMS_SQLiteFTS/SQLiteFTS/Document.php index 956c8076c..ea63d733e 100644 --- a/SeedDMS_SQLiteFTS/SQLiteFTS/Document.php +++ b/SeedDMS_SQLiteFTS/SQLiteFTS/Document.php @@ -36,14 +36,14 @@ class SeedDMS_SQLiteFTS_Document { */ protected $fields; - public function __get($key) { /* {{{ */ + public function ___get($key) { /* {{{ */ if(isset($this->fields[$key])) return $this->fields[$key]; else return false; } /* }}} */ - public function addField($key, $value) { /* {{{ */ + public function _addField($key, $value) { /* {{{ */ //if($key == 'document_id') { if($key == 'docid') { $this->id = $this->fields[$key] = (int) $value; @@ -55,12 +55,63 @@ class SeedDMS_SQLiteFTS_Document { } } /* }}} */ - public function getFieldValue($key) { /* {{{ */ + public function addField(SeedDMS_SQLiteFTS_Field $field) { /* {{{ */ + $this->fields[$field->name] = $field; + if($field->name == 'docid') { + $this->id = $field->value; + } + return $this; + } /* }}} */ + + /** + * Return an array with the names of the fields in this document. + * + * @return array + */ + public function getFieldNames() { + return array_keys($this->fields); + } + + public function _getFieldValue($key) { /* {{{ */ if(isset($this->fields[$key])) return $this->fields[$key]; else return false; } /* }}} */ + /** + * Proxy method for getFieldValue(), provides more convenient access to + * the string value of a field. + * + * @param string $name + * @return string + */ + public function __get($name) { + return $this->getFieldValue($name); + } + + /** + * Returns Zend_Search_Lucene_Field object for a named field in this document. + * + * @param string $fieldName + * @return Zend_Search_Lucene_Field + */ + public function getField($fieldName) { + if (!array_key_exists($fieldName, $this->fields)) { + require_once 'SeedDMS/SQLiteFTS/Exception.php'; + throw new SeedDMS_SQLiteFTS_Exception("Field name \"$fieldName\" not found in document."); + } + return $this->fields[$fieldName]; + } + + /** + * Returns the string value of a named field in this document. + * + * @see __get() + * @return string + */ + public function getFieldValue($fieldName) { + return $this->getField($fieldName)->value; + } } ?> diff --git a/SeedDMS_SQLiteFTS/SQLiteFTS/Exception.php b/SeedDMS_SQLiteFTS/SQLiteFTS/Exception.php new file mode 100644 index 000000000..281947dce --- /dev/null +++ b/SeedDMS_SQLiteFTS/SQLiteFTS/Exception.php @@ -0,0 +1,41 @@ + + * @copyright Copyright (C) 2010, Uwe Steinmann + * @version Release: @package_version@ + */ + + +/** + * Class for managing a field. + * + * @category DMS + * @package SeedDMS_SQLiteFTS + * @version @version@ + * @author Uwe Steinmann + * @copyright Copyright (C) 2011, Uwe Steinmann + * @version Release: @package_version@ + */ +class SeedDMS_SQLiteFTS_Field { + + /** + * Field name + * + * @var string + */ + public $name; + + /** + * Field value + * + * @var boolean + */ + public $value; + + /** + * Object constructor + * + * @param string $name + * @param string $value + */ + public function __construct($name, $value) { + $this->name = $name; + $this->value = $value; + } + + /** + * Constructs a String-valued Field that is not tokenized, but is indexed + * and stored. Useful for non-text fields, e.g. date or url. + * + * @param string $name + * @param string $value + * @return SeedDMS_SQLiteFTS_Field + */ + public static function keyword($name, $value) { + return new self($name, $value); + } + + /** + * Constructs a String-valued Field that is tokenized and indexed, + * and is stored in the index, for return with hits. Useful for short text + * fields, like "title" or "subject". Term vector will not be stored for this field. + * + * @param string $name + * @param string $value + * @return SeedDMS_SQLiteFTS_Field + */ + public static function text($name, $value) { + return new self($name, $value); + } + + /** + * Constructs a String-valued Field that is tokenized and indexed, + * but that is not stored in the index. + * + * @param string $name + * @param string $value + * @return SeedDMS_SQLiteFTS_Field + */ + public static function unStored($name, $value) { + return new self($name, $value); + } +} diff --git a/SeedDMS_SQLiteFTS/SQLiteFTS/IndexedDocument.php b/SeedDMS_SQLiteFTS/SQLiteFTS/IndexedDocument.php index 74c6ee234..0fb7c86da 100644 --- a/SeedDMS_SQLiteFTS/SQLiteFTS/IndexedDocument.php +++ b/SeedDMS_SQLiteFTS/SQLiteFTS/IndexedDocument.php @@ -15,6 +15,7 @@ * @uses SeedDMS_SQLiteFTS_Document */ require_once('Document.php'); +require_once('Field.php'); /** @@ -111,50 +112,50 @@ class SeedDMS_SQLiteFTS_IndexedDocument extends SeedDMS_SQLiteFTS_Document { $this->cmd = ''; $this->mimetype = ''; - $this->addField('title', $document->getName()); + $this->addField(SeedDMS_SQLiteFTS_Field::Text('title', $document->getName())); if($acllist = $document->getReadAccessList(1, 1, 1)) { $allu = []; foreach($acllist['users'] as $u) $allu[] = $u->getLogin(); - $this->addField('users', implode(' ', $allu)); + $this->addField(SeedDMS_SQLiteFTS_Field::Text('users', implode(' ', $allu))); /* $allg = []; foreach($acllist['groups'] as $g) $allg[] = $g->getName(); - $this->addField('groups', implode(' ', $allg)); + $this->addField(SeedDMS_SQLiteFTS_Field::Text('groups', implode(' ', $allg))); */ } if($attributes = $document->getAttributes()) { foreach($attributes as $attribute) { $attrdef = $attribute->getAttributeDefinition(); if($attrdef->getValueSet() != '') - $this->addField('attr_'.str_replace(' ', '_', $attrdef->getName()), $attribute->getValue()); + $this->addField(SeedDMS_SQLiteFTS_Field::Keyword('attr_'.str_replace(' ', '_', $attrdef->getName()), $attribute->getValue())); else - $this->addField('attr_'.str_replace(' ', '_', $attrdef->getName()), $attribute->getValue()); + $this->addField(SeedDMS_SQLiteFTS_Field::Text('attr_'.str_replace(' ', '_', $attrdef->getName()), $attribute->getValue())); } } $owner = $document->getOwner(); - $this->addField('owner', $owner->getLogin()); - $this->addField('path', str_replace(':', 'x', $document->getFolderList())); + $this->addField(SeedDMS_SQLiteFTS_Field::Text('owner', $owner->getLogin())); + $this->addField(SeedDMS_SQLiteFTS_Field::Keyword('path', str_replace(':', 'x', $document->getFolderList()))); if($comment = $document->getComment()) { - $this->addField('comment', $comment); + $this->addField(SeedDMS_SQLiteFTS_Field::Text('comment', $comment)); } if($document->isType('document')) { - $this->addField('document_id', 'D'.$document->getID()); + $this->addField(SeedDMS_SQLiteFTS_Field::Keyword('document_id', 'D'.$document->getID())); $version = $document->getLatestContent(); if($version) { - $this->addField('mimetype', $version->getMimeType()); - $this->addField('origfilename', $version->getOriginalFileName()); + $this->addField(SeedDMS_SQLiteFTS_Field::Keyword('mimetype', $version->getMimeType())); + $this->addField(SeedDMS_SQLiteFTS_Field::Keyword('origfilename', $version->getOriginalFileName())); if(!$nocontent) - $this->addField('created', $version->getDate(), 'unindexed'); + $this->addField(SeedDMS_SQLiteFTS_Field::Keyword('created', $version->getDate(), 'unindexed')); if($attributes = $version->getAttributes()) { foreach($attributes as $attribute) { $attrdef = $attribute->getAttributeDefinition(); if($attrdef->getValueSet() != '') - $this->addField('attr_'.str_replace(' ', '_', $attrdef->getName()), $attribute->getValue()); + $this->addField(SeedDMS_SQLiteFTS_Field::Keyword('attr_'.str_replace(' ', '_', $attrdef->getName()), $attribute->getValue())); else - $this->addField('attr_'.str_replace(' ', '_', $attrdef->getName()), $attribute->getValue()); + $this->addField(SeedDMS_SQLiteFTS_Field::Text('attr_'.str_replace(' ', '_', $attrdef->getName()), $attribute->getValue())); } } } @@ -163,14 +164,14 @@ class SeedDMS_SQLiteFTS_IndexedDocument extends SeedDMS_SQLiteFTS_Document { foreach($categories as $cat) { $names[] = $cat->getName(); } - $this->addField('category', implode(' ', $names)); + $this->addField(SeedDMS_SQLiteFTS_Field::Text('category', implode(' ', $names))); } if($keywords = $document->getKeywords()) { - $this->addField('keywords', $keywords); + $this->addField(SeedDMS_SQLiteFTS_Field::Text('keywords', $keywords)); } if($version) { $status = $version->getStatus(); - $this->addField('status', $status['status']+10); + $this->addField(SeedDMS_SQLiteFTS_Field::Keyword('status', $status['status']+10)); } if($version && !$nocontent) { $path = $dms->contentDir . $version->getPath(); @@ -192,7 +193,7 @@ class SeedDMS_SQLiteFTS_IndexedDocument extends SeedDMS_SQLiteFTS_Document { try { $content = self::execWithTimeout($cmd, $timeout); if($content['stdout']) { - $this->addField('content', $content['stdout'], 'unstored'); + $this->addField(SeedDMS_SQLiteFTS_Field::UnStored('content', $content['stdout'])); } if($content['stderr']) { $this->errormsg = $content['stderr']; @@ -203,8 +204,8 @@ class SeedDMS_SQLiteFTS_IndexedDocument extends SeedDMS_SQLiteFTS_Document { } } } elseif($document->isType('folder')) { - $this->addField('document_id', 'F'.$document->getID()); - $this->addField('created', $document->getDate(), 'unindexed'); + $this->addField(SeedDMS_SQLiteFTS_Field::Keyword('document_id', 'F'.$document->getID())); + $this->addField(SeedDMS_SQLiteFTS_Field::Keyword('created', $document->getDate(), 'unindexed')); } } /* }}} */ @@ -216,8 +217,20 @@ class SeedDMS_SQLiteFTS_IndexedDocument extends SeedDMS_SQLiteFTS_Document { return $this->mimetype; } /* }}} */ + public function setContent($data) { /* {{{ */ + $this->addField(SeedDMS_SQLiteFTS_Field::Text('content', $data)); + } /* }}} */ + public function getCmd() { /* {{{ */ return $this->cmd; } /* }}} */ + + /* Use only for setting the command if e.g. an extension takes over the + * conversion to txt (like the office extension which uses the collabora + * conversion service). + */ + public function setCmd($cmd) { /* {{{ */ + $this->cmd = $cmd; + } /* }}} */ } ?> diff --git a/SeedDMS_SQLiteFTS/SQLiteFTS/Indexer.php b/SeedDMS_SQLiteFTS/SQLiteFTS/Indexer.php index bb77b9835..61987ccee 100644 --- a/SeedDMS_SQLiteFTS/SQLiteFTS/Indexer.php +++ b/SeedDMS_SQLiteFTS/SQLiteFTS/Indexer.php @@ -123,7 +123,14 @@ class SeedDMS_SQLiteFTS_Indexer { if(!$this->_conn) return false; - $sql = "INSERT INTO docs (documentid, title, comment, keywords, category, owner, content, mimetype, origfilename, created, users, status, path) VALUES (".$this->_conn->quote($doc->getFieldValue('document_id')).", ".$this->_conn->quote($doc->getFieldValue('title')).", ".$this->_conn->quote($doc->getFieldValue('comment')).", ".$this->_conn->quote($doc->getFieldValue('keywords')).", ".$this->_conn->quote($doc->getFieldValue('category')).", ".$this->_conn->quote($doc->getFieldValue('owner')).", ".$this->_conn->quote($doc->getFieldValue('content')).", ".$this->_conn->quote($doc->getFieldValue('mimetype')).", ".$this->_conn->quote($doc->getFieldValue('origfilename')).", ".(int)$doc->getFieldValue('created').", ".$this->_conn->quote($doc->getFieldValue('users')).", ".$this->_conn->quote($doc->getFieldValue('status')).", ".$this->_conn->quote($doc->getFieldValue('path'))/*time()*/.")"; + foreach(array('comment', 'keywords', 'category', 'content', 'mimetype', 'origfilename', 'status') as $kk) { + try { + ${$kk} = $doc->getFieldValue($kk); + } catch (Exception $e) { + ${$kk} = ''; + } + } + $sql = "INSERT INTO docs (documentid, title, comment, keywords, category, owner, content, mimetype, origfilename, created, users, status, path) VALUES (".$this->_conn->quote($doc->getFieldValue('document_id')).", ".$this->_conn->quote($doc->getFieldValue('title')).", ".$this->_conn->quote($comment).", ".$this->_conn->quote($keywords).", ".$this->_conn->quote($category).", ".$this->_conn->quote($doc->getFieldValue('owner')).", ".$this->_conn->quote($content).", ".$this->_conn->quote($mimetype).", ".$this->_conn->quote($origfilename).", ".(int)$doc->getFieldValue('created').", ".$this->_conn->quote($doc->getFieldValue('users')).", ".$this->_conn->quote($status).", ".$this->_conn->quote($doc->getFieldValue('path'))/*time()*/.")"; $res = $this->_conn->exec($sql); if($res === false) { return false; @@ -243,49 +250,21 @@ class SeedDMS_SQLiteFTS_Indexer { if($res) { $rec = $res->fetch(PDO::FETCH_ASSOC); $doc = new SeedDMS_SQLiteFTS_Document(); - $doc->addField('docid', $rec[$this->_rawid]); - $doc->addField('document_id', $rec['documentid']); - $doc->addField('title', $rec['title']); - $doc->addField('comment', $rec['comment']); - $doc->addField('keywords', $rec['keywords']); - $doc->addField('category', $rec['category']); - $doc->addField('mimetype', $rec['mimetype']); - $doc->addField('origfilename', $rec['origfilename']); - $doc->addField('owner', $rec['owner']); - $doc->addField('created', $rec['created']); - $doc->addField('users', $rec['users']); - $doc->addField('status', $rec['status']); - $doc->addField('path', $rec['path']); + $doc->addField(SeedDMS_SQLiteFTS_Field::Keyword('docid', $rec[$this->_rawid])); + $doc->addField(SeedDMS_SQLiteFTS_Field::Keyword('document_id', $rec['documentid'])); + $doc->addField(SeedDMS_SQLiteFTS_Field::Text('title', $rec['title'])); + $doc->addField(SeedDMS_SQLiteFTS_Field::Text('comment', $rec['comment'])); + $doc->addField(SeedDMS_SQLiteFTS_Field::Text('keywords', $rec['keywords'])); + $doc->addField(SeedDMS_SQLiteFTS_Field::Text('category', $rec['category'])); + $doc->addField(SeedDMS_SQLiteFTS_Field::Keyword('mimetype', $rec['mimetype'])); + $doc->addField(SeedDMS_SQLiteFTS_Field::Keyword('origfilename', $rec['origfilename'])); + $doc->addField(SeedDMS_SQLiteFTS_Field::Text('owner', $rec['owner'])); + $doc->addField(SeedDMS_SQLiteFTS_Field::Keyword('created', $rec['created'])); + $doc->addField(SeedDMS_SQLiteFTS_Field::Text('users', $rec['users'])); + $doc->addField(SeedDMS_SQLiteFTS_Field::Keyword('status', $rec['status'])); + $doc->addField(SeedDMS_SQLiteFTS_Field::Keyword('path', $rec['path'])); if($content) - $doc->addField('content', $rec['content']); - } - return $doc; - } /* }}} */ - - /** - * Get a single folder from index - * - * @param integer $id id of folder - * @return boolean false in case of an error, otherwise true - */ - public function __getFolder($id) { /* {{{ */ - if(!$this->_conn) - return false; - - $sql = "SELECT ".$this->_rawid.", documentid, title, comment, owner, keywords, category, mimetype, origfilename, created, users, status, path FROM docs WHERE documentid='F".$id."'"; - $res = $this->_conn->query($sql); - $doc = false; - if($res) { - $rec = $res->fetch(PDO::FETCH_ASSOC); - $doc = new SeedDMS_SQLiteFTS_Document(); - $doc->addField('docid', $rec[$this->_rawid]); - $doc->addField('document_id', $rec['documentid']); - $doc->addField('title', $rec['title']); - $doc->addField('comment', $rec['comment']); - $doc->addField('owner', $rec['owner']); - $doc->addField('created', $rec['created']); - $doc->addField('users', $rec['users']); - $doc->addField('path', $rec['path']); + $doc->addField(SeedDMS_SQLiteFTS_Field::UnStored('content', $rec['content'])); } return $doc; } /* }}} */ diff --git a/SeedDMS_SQLiteFTS/package.xml b/SeedDMS_SQLiteFTS/package.xml index 8e05d96ef..9ebb706fc 100644 --- a/SeedDMS_SQLiteFTS/package.xml +++ b/SeedDMS_SQLiteFTS/package.xml @@ -25,6 +25,7 @@ - close pipes in execWithTimeout(), also return exit code of command - add support for fts5 (make it the default) +- add class SeedDMS_SQLiteFTS_Field From 189f9620123594fe7469a0ad8a770c304d7fd311 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 30 Jun 2021 12:53:20 +0200 Subject: [PATCH 08/56] add new methods setCmd() and setContent() --- SeedDMS_Lucene/Lucene/IndexedDocument.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/SeedDMS_Lucene/Lucene/IndexedDocument.php b/SeedDMS_Lucene/Lucene/IndexedDocument.php index a0b1b8ae7..14bd3fd49 100644 --- a/SeedDMS_Lucene/Lucene/IndexedDocument.php +++ b/SeedDMS_Lucene/Lucene/IndexedDocument.php @@ -220,8 +220,20 @@ class SeedDMS_Lucene_IndexedDocument extends Zend_Search_Lucene_Document { return $this->mimetype; } /* }}} */ + public function setContent($data) { /* {{{ */ + $this->addField(Zend_Search_Lucene_Field::UnStored('content', $data, 'utf-8')); + } /* }}} */ + public function getCmd() { /* {{{ */ return $this->cmd; } /* }}} */ + + /* Use only for setting the command if e.g. an extension takes over the + * conversion to txt (like the office extension which uses the collabora + * conversion service). + */ + public function setCmd($cmd) { /* {{{ */ + $this->cmd = $cmd; + } /* }}} */ } ?> From 0cd9910c25940971c6ec091990b53f0fde2017fb Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 1 Jul 2021 11:44:49 +0200 Subject: [PATCH 09/56] add new method SeedDMS_Core_DocumentContent::removeReview() --- SeedDMS_Core/Core/inc.ClassDocument.php | 47 +++++++++++++++++++++++++ SeedDMS_Core/package.xml | 1 + 2 files changed, 48 insertions(+) diff --git a/SeedDMS_Core/Core/inc.ClassDocument.php b/SeedDMS_Core/Core/inc.ClassDocument.php index 4d9c45a1b..822eea6c6 100644 --- a/SeedDMS_Core/Core/inc.ClassDocument.php +++ b/SeedDMS_Core/Core/inc.ClassDocument.php @@ -3925,6 +3925,53 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ return $reviewLogID; } /* }}} */ + /** + * Add another entry to review log which resets the status + * + * This method will not delete anything from the database, but will add + * a new review log entry which sets the status to 0. This is only allowed + * if the current status is either 1 or -1. + * + * After calling this method SeedDMS_Core_DocumentCategory::verifyStatus() + * should be called to recalculate the document status. + * + * @param SeedDMS_Core_User $user + * @return int 0 if successful + */ + public function removeReview($reviewid, $requestUser, $comment='') { /* {{{ */ + $db = $this->_document->getDMS()->getDB(); + + // Check to see if the user can be removed from the review list. + $reviews = $this->getReviewStatus(); + if (is_bool($reviews) && !$reviews) { + return -1; + } + $reviewStatus = null; + foreach($reviews as $review) { + if($review['reviewID'] == $reviewid) { + $reviewStatus = $review; + break; + } + } + if(!$reviewStatus) + return -2; + + // The review log entry may only be removed if the status is 1 or -1 + if ($reviewStatus["status"] != 1 && $reviewStatus["status"] != -1) + return -3; + + $queryStr = "INSERT INTO `tblDocumentReviewLog` (`reviewID`, `status`, + `comment`, `date`, `userID`) ". + "VALUES ('". $reviewStatus["reviewID"] ."', '0', ".$db->qstr($comment).", ".$db->getCurrentDatetime().", '". + $requestUser->getID() ."')"; + //$queryStr = "DELETE FROM `tblDocumentReviewLog` WHERE `reviewLogID` = ".$reviewStatus['reviewLogID']; + $res=$db->getResult($queryStr); + if (is_bool($res) && !$res) + return -1; + + return 0; + } /* }}} */ + /** * Add a review to the document content * diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index e1d424d98..24e70aa76 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -30,6 +30,7 @@ - better handling of document with an empty workflow state - fix checking of email addresses by using filter_var instead of regex - add new method SeedDMS_Core_Document::hasCategory() +- add new method SeedDMS_Core_DocumentContent::removeReview() From 80f712e71608e7f62f50ee4d5dd1379b890ca92c Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 1 Jul 2021 11:45:46 +0200 Subject: [PATCH 10/56] catch exeption if 'created' is not set --- SeedDMS_SQLiteFTS/SQLiteFTS/Indexer.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SeedDMS_SQLiteFTS/SQLiteFTS/Indexer.php b/SeedDMS_SQLiteFTS/SQLiteFTS/Indexer.php index 61987ccee..68037bb8d 100644 --- a/SeedDMS_SQLiteFTS/SQLiteFTS/Indexer.php +++ b/SeedDMS_SQLiteFTS/SQLiteFTS/Indexer.php @@ -123,14 +123,14 @@ class SeedDMS_SQLiteFTS_Indexer { if(!$this->_conn) return false; - foreach(array('comment', 'keywords', 'category', 'content', 'mimetype', 'origfilename', 'status') as $kk) { + foreach(array('comment', 'keywords', 'category', 'content', 'mimetype', 'origfilename', 'status', 'created') as $kk) { try { ${$kk} = $doc->getFieldValue($kk); } catch (Exception $e) { ${$kk} = ''; } } - $sql = "INSERT INTO docs (documentid, title, comment, keywords, category, owner, content, mimetype, origfilename, created, users, status, path) VALUES (".$this->_conn->quote($doc->getFieldValue('document_id')).", ".$this->_conn->quote($doc->getFieldValue('title')).", ".$this->_conn->quote($comment).", ".$this->_conn->quote($keywords).", ".$this->_conn->quote($category).", ".$this->_conn->quote($doc->getFieldValue('owner')).", ".$this->_conn->quote($content).", ".$this->_conn->quote($mimetype).", ".$this->_conn->quote($origfilename).", ".(int)$doc->getFieldValue('created').", ".$this->_conn->quote($doc->getFieldValue('users')).", ".$this->_conn->quote($status).", ".$this->_conn->quote($doc->getFieldValue('path'))/*time()*/.")"; + $sql = "INSERT INTO docs (documentid, title, comment, keywords, category, owner, content, mimetype, origfilename, created, users, status, path) VALUES (".$this->_conn->quote($doc->getFieldValue('document_id')).", ".$this->_conn->quote($doc->getFieldValue('title')).", ".$this->_conn->quote($comment).", ".$this->_conn->quote($keywords).", ".$this->_conn->quote($category).", ".$this->_conn->quote($doc->getFieldValue('owner')).", ".$this->_conn->quote($content).", ".$this->_conn->quote($mimetype).", ".$this->_conn->quote($origfilename).", ".(int)$created.", ".$this->_conn->quote($doc->getFieldValue('users')).", ".$this->_conn->quote($status).", ".$this->_conn->quote($doc->getFieldValue('path'))/*time()*/.")"; $res = $this->_conn->exec($sql); if($res === false) { return false; From 2ea83e65d511cdb836e85b2968464fcb865c9c9d Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 1 Jul 2021 11:46:33 +0200 Subject: [PATCH 11/56] set class of table --- views/bootstrap/class.ApproveDocument.php | 2 +- views/bootstrap/class.ReviewDocument.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/views/bootstrap/class.ApproveDocument.php b/views/bootstrap/class.ApproveDocument.php index 9ac4252db..8fa8d75e2 100644 --- a/views/bootstrap/class.ApproveDocument.php +++ b/views/bootstrap/class.ApproveDocument.php @@ -98,7 +98,7 @@ $(document).ready(function() { $approvaltype = ($approvalStatus['type'] == 0) ? 'ind' : 'grp'; if($approvalStatus["status"]!=0) { - print ""; + print "
    "; print ""; print ""; print ""; diff --git a/views/bootstrap/class.ReviewDocument.php b/views/bootstrap/class.ReviewDocument.php index 5f1e6871d..1565dcdcf 100644 --- a/views/bootstrap/class.ReviewDocument.php +++ b/views/bootstrap/class.ReviewDocument.php @@ -97,7 +97,7 @@ $(document).ready(function() { $reviewtype = ($reviewStatus['type'] == 0) ? 'ind' : 'grp'; if($reviewStatus["status"]!=0) { - print "
    ".getMLText("status")."".getMLText("comment")."".getMLText("last_update")."
    "; + print "
    "; print ""; print ""; print ""; From d6419d38ef35a55a80734499f9c4733172469527 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 1 Jul 2021 12:14:55 +0200 Subject: [PATCH 12/56] add new config var enableRemoveRevApp --- inc/inc.ClassSettings.php | 4 ++++ op/op.Settings.php | 1 + views/bootstrap/class.Settings.php | 1 + 3 files changed, 6 insertions(+) diff --git a/inc/inc.ClassSettings.php b/inc/inc.ClassSettings.php index 62173030e..fddfe052d 100644 --- a/inc/inc.ClassSettings.php +++ b/inc/inc.ClassSettings.php @@ -168,6 +168,8 @@ class Settings { /* {{{ */ var $_enableSelfRevApp = false; // enable/disable update of a review/approval by the reviewer/approver var $_enableUpdateRevApp = false; + // enable/disable removal of a review/approval by the admiistrator + var $_enableRemoveRevApp = false; // enable/disable default notification for owner var $_enableOwnerNotification = false; // enable/disable deleting of versions for regular users @@ -694,6 +696,7 @@ class Settings { /* {{{ */ $this->_enableOwnerRevApp = Settings::boolval($tab["enableOwnerRevApp"]); $this->_enableSelfRevApp = Settings::boolval($tab["enableSelfRevApp"]); $this->_enableUpdateRevApp = Settings::boolval($tab["enableUpdateRevApp"]); + $this->_enableRemoveRevApp = Settings::boolval($tab["enableRemoveRevApp"]); $this->_presetExpirationDate = strval($tab["presetExpirationDate"]); $this->_versioningFileName = strval($tab["versioningFileName"]); $this->_workflowMode = strval($tab["workflowMode"]); @@ -1029,6 +1032,7 @@ class Settings { /* {{{ */ $this->setXMLAttributValue($node, "enableOwnerRevApp", $this->_enableOwnerRevApp); $this->setXMLAttributValue($node, "enableSelfRevApp", $this->_enableSelfRevApp); $this->setXMLAttributValue($node, "enableUpdateRevApp", $this->_enableUpdateRevApp); + $this->setXMLAttributValue($node, "enableRemoveRevApp", $this->_enableRemoveRevApp); $this->setXMLAttributValue($node, "presetExpirationDate", $this->_presetExpirationDate); $this->setXMLAttributValue($node, "versioningFileName", $this->_versioningFileName); $this->setXMLAttributValue($node, "presetExpirationDate", $this->_presetExpirationDate); diff --git a/op/op.Settings.php b/op/op.Settings.php index dde1ad91a..8f0c33f2a 100644 --- a/op/op.Settings.php +++ b/op/op.Settings.php @@ -237,6 +237,7 @@ if ($action == "saveSettings") setBoolValue("enableOwnerRevApp"); setBoolValue("enableSelfRevApp"); setBoolValue("enableUpdateRevApp"); + setBoolValue("enableRemoveRevApp"); setBoolValue("enableVersionDeletion"); setBoolValue("enableVersionModification"); setBoolValue("enableDuplicateDocNames"); diff --git a/views/bootstrap/class.Settings.php b/views/bootstrap/class.Settings.php index 8d3eaff66..c1f10e374 100644 --- a/views/bootstrap/class.Settings.php +++ b/views/bootstrap/class.Settings.php @@ -480,6 +480,7 @@ if(($kkk = $this->callHook('getFullSearchEngine')) && is_array($kkk)) showConfigCheckbox('settings_enableOwnerRevApp', 'enableOwnerRevApp'); ?> showConfigCheckbox('settings_enableSelfRevApp', 'enableSelfRevApp'); ?> showConfigCheckbox('settings_enableUpdateRevApp', 'enableUpdateRevApp'); ?> +showConfigCheckbox('settings_enableRemoveRevApp', 'enableRemoveRevApp'); ?> showConfigCheckbox('settings_enableVersionDeletion', 'enableVersionDeletion'); ?> showConfigCheckbox('settings_enableVersionModification', 'enableVersionModification'); ?> showConfigCheckbox('settings_enableDuplicateDocNames', 'enableDuplicateDocNames'); ?> From 1360fbc4789a04ec17c0e486addebcfc5a8611eb Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 1 Jul 2021 12:17:04 +0200 Subject: [PATCH 13/56] allow removal of reviews --- op/op.RemoveReviewLog.php | 99 +++++++++++++++++ out/out.RemoveReviewLog.php | 88 +++++++++++++++ out/out.ViewDocument.php | 1 + views/bootstrap/class.RemoveReviewLog.php | 126 ++++++++++++++++++++++ views/bootstrap/class.ViewDocument.php | 3 + 5 files changed, 317 insertions(+) create mode 100644 op/op.RemoveReviewLog.php create mode 100644 out/out.RemoveReviewLog.php create mode 100644 views/bootstrap/class.RemoveReviewLog.php diff --git a/op/op.RemoveReviewLog.php b/op/op.RemoveReviewLog.php new file mode 100644 index 000000000..1ec2b00b3 --- /dev/null +++ b/op/op.RemoveReviewLog.php @@ -0,0 +1,99 @@ + getMLText("invalid_request_token"))),getMLText("invalid_request_token")); +} + +if (!isset($_POST["documentid"]) || !is_numeric($_POST["documentid"]) || intval($_POST["documentid"])<1) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); +} + +$documentid = $_POST["documentid"]; +$document = $dms->getDocument($documentid); + +if (!is_object($document)) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); +} + +if (!$user->isAdmin() || $document->getAccessMode($user) < M_ALL) { + UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("access_denied")); +} + +if (!isset($_POST["version"]) || !is_numeric($_POST["version"]) || intval($_POST["version"])<1) { + UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("invalid_version")); +} + +$version = $_POST["version"]; +$content = $document->getContentByVersion($version); + +if (!is_object($content)) { + UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("invalid_version")); +} + +// operation is only allowed for the last document version +$latestContent = $document->getLatestContent(); +if ($latestContent->getVersion()!=$version) { + UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("invalid_version")); +} + +if (!isset($_POST["reviewid"]) || !is_numeric($_POST["reviewid"]) || intval($_POST["reviewid"])<1) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_reviewid")); +} +$reviewid = $_POST['reviewid']; +$reviews = $latestContent->getReviewStatus(); +$reviewStatus = null; +foreach($reviews as $review) { + if($review['reviewID'] == $reviewid) { + $reviewStatus = $review; + break; + } +} +if(!$reviewStatus) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_reviewid")); +} + +if($reviewStatus['type'] == 0) { + $ruser = $dms->getUser($reviewStatus['required']); + $msg = getMLText('ind_review_removed', array('name'=>$ruser->getFullName())); +} elseif($reviewStatus['type'] == 1) { + $rgroup = $dms->getGroup($reviewStatus['required']); + $msg = getMLText('group_review_removed', array('name'=>$rgroup->getName())); +} else + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_reviewid")); + +$comment = $_POST["comment"]; +if(0 == $latestContent->removeReview($reviewid, $user, $comment)) { + $latestContent->verifyStatus(true, $user, $msg); +} +header("Location:../out/out.ViewDocument.php?documentid=".$documentid."¤ttab=revapp"); diff --git a/out/out.RemoveReviewLog.php b/out/out.RemoveReviewLog.php new file mode 100644 index 000000000..8e46ac83c --- /dev/null +++ b/out/out.RemoveReviewLog.php @@ -0,0 +1,88 @@ + getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); +} + +$document = $dms->getDocument(intval($_GET["documentid"])); + +if (!is_object($document)) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); +} + +$folder = $document->getFolder(); + +if (!$user->isAdmin() || $document->getAccessMode($user) < M_ALL) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied")); +} + +if (!isset($_GET["version"]) || !is_numeric($_GET["version"]) || intval($_GET["version"])<1) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_version")); +} +$version = $_GET["version"]; +$content = $document->getContentByVersion($version); +if (!is_object($content)) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_version")); +} + +// operation is admitted only for last document version +$latestContent = $document->getLatestContent(); +if ($latestContent->getVersion()!=$version) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_version")); +} + +if (!isset($_GET["reviewid"]) || !is_numeric($_GET["reviewid"]) || intval($_GET["reviewid"])<1) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_reviewid")); +} +$reviewid = $_GET['reviewid']; + +/* Create object for checking access to certain operations */ +$accessop = new SeedDMS_AccessOperation($dms, $document, $user, $settings); + +$reviews = $content->getReviewStatus(); +if(!$reviews) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("no_action")); +} + +$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); +$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user)); +if($view) { + $view->setParam('folder', $folder); + $view->setParam('document', $document); + $view->setParam('version', $content); + $view->setParam('reviewid', $reviewid); + $view->setParam('accessobject', $accessop); + $view($_GET); + exit; +} diff --git a/out/out.ViewDocument.php b/out/out.ViewDocument.php index dbb1a6e67..e0ecb3c60 100644 --- a/out/out.ViewDocument.php +++ b/out/out.ViewDocument.php @@ -71,6 +71,7 @@ if($view) { $view->setParam('accessobject', $accessop); $view->setParam('viewonlinefiletypes', $settings->_viewOnlineFileTypes); $view->setParam('enableownerrevapp', $settings->_enableOwnerRevApp); + $view->setParam('enableremoverevapp', $settings->_enableRemoveRevApp); $view->setParam('cachedir', $settings->_cacheDir); $view->setParam('workflowmode', $settings->_workflowMode); $view->setParam('previewWidthList', $settings->_previewWidthList); diff --git a/views/bootstrap/class.RemoveReviewLog.php b/views/bootstrap/class.RemoveReviewLog.php new file mode 100644 index 000000000..236c42375 --- /dev/null +++ b/views/bootstrap/class.RemoveReviewLog.php @@ -0,0 +1,126 @@ + + * @copyright Copyright (C) 2002-2005 Markus Westphal, + * 2006-2008 Malcolm Cowe, 2010 Matteo Lucarelli, + * 2010-2012 Uwe Steinmann + * @version Release: @package_version@ + */ + +/** + * Include parent class + */ +//require_once("class.Bootstrap.php"); + +/** + * Class which outputs the html page for ReviewDocument view + * + * @category DMS + * @package SeedDMS + * @author Markus Westphal, Malcolm Cowe, Uwe Steinmann + * @copyright Copyright (C) 2002-2005 Markus Westphal, + * 2006-2008 Malcolm Cowe, 2010 Matteo Lucarelli, + * 2010-2012 Uwe Steinmann + * @version Release: @package_version@ + */ +class SeedDMS_View_RemoveReviewLog extends SeedDMS_Theme_Style { + + function js() { /* {{{ */ + header('Content-Type: application/javascript; charset=UTF-8'); + parent::jsTranslations(array('js_form_error', 'js_form_errors')); +?> +$(document).ready(function() { + $("#form1").validate({ + rules: { + comment: { + required: true + }, + }, + messages: { + comment: "", + }, + }); +}); +printFileChooserJs(); + } /* }}} */ + + function show() { /* {{{ */ + $dms = $this->params['dms']; + $user = $this->params['user']; + $folder = $this->params['folder']; + $document = $this->params['document']; + $content = $this->params['version']; + $reviewid = $this->params['reviewid']; + + $reviews = $content->getReviewStatus(); + foreach($reviews as $review) { + if($review['reviewID'] == $reviewid) { + $reviewStatus = $review; + break; + } + } + + $this->htmlAddHeader(''."\n", 'js'); + $this->htmlAddHeader(''."\n", 'js'); + + $this->htmlStartPage(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName())))); + $this->globalNavigation($folder); + $this->contentStart(); + $this->pageNavigation($this->getFolderPathHTML($folder, true, $document), "view_document", $document); + $this->contentHeading(getMLText("remove_review_log")); + $this->warningMsg(getMLText('warning_remove_review_log')); + + // Display the Review form. + if($reviewStatus["status"]!=0) { + + print "
    ".getMLText("status")."".getMLText("comment")."".getMLText("last_update")."
    "; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + $indUser = $dms->getUser($reviewStatus["userID"]); + print ""; + print "
    ".getMLText("status")."".getMLText("comment")."".getMLText("last_update")."
    "; + printReviewStatusText($reviewStatus["status"]); + print "".htmlspecialchars($reviewStatus["comment"])."".$reviewStatus["date"]." - ". htmlspecialchars($indUser->getFullname()) ."

    \n"; + } +?> +
    + +contentContainerStart(); + + $this->formField( + getMLText("comment"), + array( + 'element'=>'textarea', + 'name'=>'comment', + 'required'=>true, + 'rows'=>4, + 'cols'=>80 + ) + ); + $this->contentContainerEnd(); + + $this->formSubmit(' '.getMLText('remove_review_log')); +?> + + + +
    +contentEnd(); + $this->htmlEndPage(); + } /* }}} */ +} +?> + diff --git a/views/bootstrap/class.ViewDocument.php b/views/bootstrap/class.ViewDocument.php index 5d8487334..4ed5a9b16 100644 --- a/views/bootstrap/class.ViewDocument.php +++ b/views/bootstrap/class.ViewDocument.php @@ -647,6 +647,7 @@ $(document).ready( function() { $accessop = $this->params['accessobject']; $viewonlinefiletypes = $this->params['viewonlinefiletypes']; $enableownerrevapp = $this->params['enableownerrevapp']; + $enableremoverevapp = $this->params['enableremoverevapp']; $workflowmode = $this->params['workflowmode']; $cachedir = $this->params['cachedir']; $previewwidthlist = $this->params['previewWidthList']; @@ -945,6 +946,8 @@ $(document).ready( function() { } } } + if($enableremoverevapp && $user->isAdmin() && ($r['status'] == 1 || $r['status'] == -1)) + echo '
  • '; print "\n"; print "\n"; From d11feff2aa4ef09f20409af7d0da335cf5568150 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 1 Jul 2021 12:20:54 +0200 Subject: [PATCH 14/56] add more phrases --- languages/ar_EG/lang.inc | 7 +++++++ languages/bg_BG/lang.inc | 7 +++++++ languages/ca_ES/lang.inc | 7 +++++++ languages/cs_CZ/lang.inc | 7 +++++++ languages/de_DE/lang.inc | 15 +++++++++++---- languages/el_GR/lang.inc | 7 +++++++ languages/en_GB/lang.inc | 11 +++++++++-- languages/es_ES/lang.inc | 7 +++++++ languages/fr_FR/lang.inc | 7 +++++++ languages/hr_HR/lang.inc | 7 +++++++ languages/hu_HU/lang.inc | 7 +++++++ languages/it_IT/lang.inc | 7 +++++++ languages/ko_KR/lang.inc | 7 +++++++ languages/lo_LA/lang.inc | 7 +++++++ languages/nb_NO/lang.inc | 7 +++++++ languages/nl_NL/lang.inc | 7 +++++++ languages/pl_PL/lang.inc | 7 +++++++ languages/pt_BR/lang.inc | 7 +++++++ languages/ro_RO/lang.inc | 7 +++++++ languages/ru_RU/lang.inc | 7 +++++++ languages/sk_SK/lang.inc | 7 +++++++ languages/sv_SE/lang.inc | 7 +++++++ languages/tr_TR/lang.inc | 7 +++++++ languages/uk_UA/lang.inc | 7 +++++++ languages/zh_CN/lang.inc | 7 +++++++ languages/zh_TW/lang.inc | 7 +++++++ 26 files changed, 188 insertions(+), 6 deletions(-) diff --git a/languages/ar_EG/lang.inc b/languages/ar_EG/lang.inc index 9729a6783..8e4b6eae9 100644 --- a/languages/ar_EG/lang.inc +++ b/languages/ar_EG/lang.inc @@ -525,6 +525,7 @@ URL: [url]', 'error_add_aro' => 'خطأ في الإضافة', 'error_add_permission' => 'خطأ في طلب السماح', 'error_cleared_cache' => 'خطأ في مسح المحفوظات', +'error_document_indexed' => '', 'error_edit_task' => 'خطأ في تعديل المهمة', 'error_extension_getlist' => 'خطأ في أخذ الائحة', 'error_importfs' => 'خطأ في الإستيراد', @@ -662,6 +663,7 @@ URL: [url]', 'group_management' => 'إدارة المجموعات', 'group_members' => 'أعضاء المجموعة', 'group_receipt_summary' => 'ملخص وصل المجموعة', +'group_review_removed' => '', 'group_review_summary' => 'ملخص مراجعة المجموعة', 'group_revision_summary' => '', 'guest_login' => 'الدخول كضيف', @@ -704,6 +706,7 @@ URL: [url]', 'index_waiting' => 'الفهرسة قيد الإنتظار', 'individuals' => 'افراد', 'individuals_in_groups' => 'أفراد في المجموعات', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => 'رابط معلومات المستلمين لم يصدر بعد', 'info_rm_user_from_processes_user' => '', 'inherited' => 'موروث', @@ -1062,6 +1065,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - تم ازالة مسار العمل من اصدار المستند', 'removeFolderFromDropFolder' => 'إزالة مجلد من إسقاط لائحة', 'remove_marked_files' => 'ازالة الملفات المختارة', +'remove_review_log' => '', 'repaired' => 'تم اصلاحه', 'repairing_objects' => 'تحضير المستندات والمجلدات.', 'replace_content_email_body' => '', @@ -1417,6 +1421,8 @@ URL: [url]', 'settings_enableReceiptWorkflow_desc' => 'تمكين استلام سير العمل', 'settings_enableRecursiveCount' => 'تمكين عدد المستندات / المجلدات العودية', 'settings_enableRecursiveCount_desc' => 'تمكين عدد المستندات / المجلدات العودية', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => 'تمكين رفض مراجعة التصويت', @@ -1966,6 +1972,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'شاهد اونلاين', 'warning' => 'تحذير', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/bg_BG/lang.inc b/languages/bg_BG/lang.inc index f3f1e308b..a0613f10f 100644 --- a/languages/bg_BG/lang.inc +++ b/languages/bg_BG/lang.inc @@ -478,6 +478,7 @@ $text = array( 'error_add_aro' => '', 'error_add_permission' => '', 'error_cleared_cache' => '', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => '', 'error_importfs' => '', @@ -591,6 +592,7 @@ $text = array( 'group_management' => 'Управление на групи', 'group_members' => 'Членове на групата', 'group_receipt_summary' => '', +'group_review_removed' => '', 'group_review_summary' => 'Сводка по рецензирането на групи', 'group_revision_summary' => '', 'guest_login' => 'Влез като гост', @@ -633,6 +635,7 @@ $text = array( 'index_waiting' => '', 'individuals' => 'Личности', 'individuals_in_groups' => '', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '', 'info_rm_user_from_processes_user' => '', 'inherited' => 'наследен', @@ -952,6 +955,7 @@ $text = array( 'removed_workflow_email_subject' => '', 'removeFolderFromDropFolder' => '', 'remove_marked_files' => '', +'remove_review_log' => '', 'repaired' => '', 'repairing_objects' => 'Поправка на папки и документи', 'replace_content_email_body' => '', @@ -1280,6 +1284,8 @@ $text = array( 'settings_enableReceiptWorkflow_desc' => '', 'settings_enableRecursiveCount' => '', 'settings_enableRecursiveCount_desc' => '', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -1815,6 +1821,7 @@ $text = array( 'view_folder' => '', 'view_online' => 'Преглед онлайн', 'warning' => 'Внимание', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/ca_ES/lang.inc b/languages/ca_ES/lang.inc index 0cb2875df..2c94313b5 100644 --- a/languages/ca_ES/lang.inc +++ b/languages/ca_ES/lang.inc @@ -483,6 +483,7 @@ URL: [url]', 'error_add_aro' => '', 'error_add_permission' => '', 'error_cleared_cache' => '', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => '', 'error_importfs' => '', @@ -596,6 +597,7 @@ URL: [url]', 'group_management' => 'Grups', 'group_members' => 'Membres del grup', 'group_receipt_summary' => '', +'group_review_removed' => '', 'group_review_summary' => 'Resum del grup revisor', 'group_revision_summary' => '', 'guest_login' => 'Accés com a invitat', @@ -638,6 +640,7 @@ URL: [url]', 'index_waiting' => '', 'individuals' => 'Individuals', 'individuals_in_groups' => '', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '', 'info_rm_user_from_processes_user' => '', 'inherited' => 'Heredat', @@ -957,6 +960,7 @@ URL: [url]', 'removed_workflow_email_subject' => '', 'removeFolderFromDropFolder' => 'Esborrar carpeta després de la importació', 'remove_marked_files' => '', +'remove_review_log' => '', 'repaired' => '', 'repairing_objects' => '', 'replace_content_email_body' => '', @@ -1285,6 +1289,8 @@ URL: [url]', 'settings_enableReceiptWorkflow_desc' => '', 'settings_enableRecursiveCount' => '', 'settings_enableRecursiveCount_desc' => '', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -1820,6 +1826,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'Veure online', 'warning' => 'Advertència', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/cs_CZ/lang.inc b/languages/cs_CZ/lang.inc index 8dd14260f..0842a6bd7 100644 --- a/languages/cs_CZ/lang.inc +++ b/languages/cs_CZ/lang.inc @@ -549,6 +549,7 @@ URL: [url]', 'error_add_aro' => 'Chyba při přidávání požadavku přístupu k objektu', 'error_add_permission' => 'Chyba při přidání oprávnění', 'error_cleared_cache' => 'Chyba při vymazání mezipaměti', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => 'Chyba při získání seznamu rozšíření z úložiště', 'error_importfs' => 'Chyba při importu formy souborového systému', @@ -693,6 +694,7 @@ URL: [url]', 'group_management' => 'Skupiny', 'group_members' => 'Členové skupiny', 'group_receipt_summary' => 'Přehled potvrzení přijímání do skupiny', +'group_review_removed' => '', 'group_review_summary' => 'Souhrn recenzí skupiny', 'group_revision_summary' => '', 'guest_login' => 'Přihlásit se jako host', @@ -735,6 +737,7 @@ URL: [url]', 'index_waiting' => 'Čekání', 'individuals' => 'Jednotlivci', 'individuals_in_groups' => 'Členové skupiny', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => 'Potvrzení o příjmu této verze dokumentu není možné, protože verze není uvolněna.', 'info_rm_user_from_processes_user' => '', 'inherited' => 'Zděděno', @@ -1108,6 +1111,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Odstraněno workflow z verze dokumentu', 'removeFolderFromDropFolder' => 'Odstranit složku po nahrání', 'remove_marked_files' => 'Odstranit označené soubory', +'remove_review_log' => '', 'repaired' => 'opraveno', 'repairing_objects' => 'Opravuji dokumenty a složky.', 'replace_content_email_body' => '', @@ -1489,6 +1493,8 @@ Jméno: [username] 'settings_enableReceiptWorkflow_desc' => 'Povolte, pro spuštění workflow při potvrzení příjmu dokumentu.', 'settings_enableRecursiveCount' => 'Povolit rekurzivní počítání dokumentů / složek', 'settings_enableRecursiveCount_desc' => 'Při zapnutí je počet dokumentů a složek v zobrazení složek určen počítáním všech objektů při rekurzivním zpracování složek a počítáním těch dokumentů a složek, ke kterým má uživatel přístup.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => 'Odmítnutí jedním revizorem', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -2038,6 +2044,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'Zobrazit online', 'warning' => 'Upozornění', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/de_DE/lang.inc b/languages/de_DE/lang.inc index e0618edbc..3f3a7ed7a 100644 --- a/languages/de_DE/lang.inc +++ b/languages/de_DE/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (2938), dgrutsch (22) +// Translators: Admin (2948), dgrutsch (22) $text = array( '2_factor_auth' => '2-Faktor Authentifizierung', @@ -235,12 +235,12 @@ URL: [url]', 'cancel_checkout' => 'Auschecken abbrechen', 'cancel_checkout_warning' => 'Das Auschecken kann beendet werden, auch wenn bereits Änderung am ausgecheckten Dokument vorgenommen worden sind. In dem Fall wird die Datei gelöscht und die Änderungen gehen verloren.', 'cannot_assign_invalid_state' => 'Die Zuweisung eines neuen Prüfers zu einem Dokument, welches noch nachbearbeitet oder überprüft wird ist nicht möglich', -'cannot_change_final_states' => 'Warnung: Nicht imstande, Dokumentstatus für Dokumente, die zurückgewiesen worden sind, oder als abgelaufen bzw. überholt markiert wurden zu ändern', +'cannot_change_final_states' => 'Warnung: Der Dokumentstatus für Dokumente, die zurückgewiesen worden sind oder als abgelaufen bzw. veraltert markiert wurden, kann nicht geändert werden.', 'cannot_delete_user' => 'Benutzer kann nicht gelöscht werden', 'cannot_delete_yourself' => 'Sie können Ihr eigenes Login nicht löschen', 'cannot_move_root' => 'Fehler: Verschieben des Hauptordners nicht möglich', -'cannot_retrieve_approval_snapshot' => 'Nicht imstande, für diese Dokumentenversion die Freigabe für den Status Snapshot zurückzuholen.', -'cannot_retrieve_review_snapshot' => 'Nicht imstande, Berichtstatus Snapshot für diese Dokumentversion zurückzuholen', +'cannot_retrieve_approval_snapshot' => 'Für diese Dokumentenversion konnte der aktuelle Freigabestatus nicht ermittelt werden.', +'cannot_retrieve_review_snapshot' => 'Für diese Dokumentenversion konnte der aktuelle Prüfstatus nicht ermittelt werden.', 'cannot_revapp_expired_docs' => 'Das Dokument kann nicht mehr geprüft oder freigegeben werden, weil es bereits abgelaufen ist.', 'cannot_rm_root' => 'Fehler: Löschen des Hauptordners nicht möglich', 'cannot_transfer_your_objects' => 'Sie können Ihre eigenen Objekte nicht transferieren.', @@ -551,6 +551,7 @@ URL: [url]', 'error_add_aro' => 'Fehler beim Hinzufügen des Zugriffsobjekts', 'error_add_permission' => 'Fehler beim Hinzufügen der Berechtigung', 'error_cleared_cache' => 'Fehler beim Löschen des Cache', +'error_document_indexed' => 'Fehler beim Indizieren des Dokuments', 'error_edit_task' => 'Fehler beim Speichern der Task', 'error_extension_getlist' => 'Fehler beim Holen der Liste der Erweiterungen aus dem Repositorium', 'error_importfs' => 'Fehler beim Importieren aus dem Dateisystem', @@ -695,6 +696,7 @@ URL: [url]', 'group_management' => 'Gruppenverwaltung', 'group_members' => 'Gruppenmitglieder', 'group_receipt_summary' => 'Übersicht Gruppenbestätigungen', +'group_review_removed' => 'Statuswechsel, weil Prufung der Gruppe [name] entfernt wurde.', 'group_review_summary' => 'Übersicht Gruppenprüfungen', 'group_revision_summary' => 'Übersicht Gruppenwiederholungsprüfungen', 'guest_login' => 'Als Gast anmelden', @@ -737,6 +739,7 @@ URL: [url]', 'index_waiting' => 'Warte', 'individuals' => 'Einzelpersonen', 'individuals_in_groups' => 'Mitglieder einer Gruppe', +'ind_review_removed' => 'Statuswechsel, weil Prufung des Benutzers [name] entfernt wurde.', 'info_recipients_tab_not_released' => 'Die Bestätigung des Empfangs für diese Dokumentenversion ist nicht möglich, weil die Version nicht freigegeben ist.', 'info_rm_user_from_processes_user' => 'Nur die noch offenen Aufgaben können auf einen anderen Benutzer übertragen werden. Bei Aufgaben, die bereits bearbeitet wurden, wird der Benutzer aus der Bearbeitungshistorie gelöscht, als würde der Benutzer selbst gelöscht.', 'inherited' => 'geerbt', @@ -1113,6 +1116,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Workflow von Dokumentenversion', 'removeFolderFromDropFolder' => 'Ordner nach Import entfernen', 'remove_marked_files' => 'Markierte Dateien löschen', +'remove_review_log' => 'Einzelne Prüfung entfernen', 'repaired' => 'repariert', 'repairing_objects' => 'Repariere Dokumente und Ordner.', 'replace_content_email_body' => 'Die letzte Version des Dokuments wurde ersetzt @@ -1509,6 +1513,8 @@ Sollten Sie kein Passwort bekommen haben, dann nutzen Sie bitte die Passwort-Ver 'settings_enableReceiptWorkflow_desc' => 'Anwählen, um den Workflow zur Kenntnisnahme von Dokumenten einzuschalten', 'settings_enableRecursiveCount' => 'Rekursive Dokumenten-/Ordner-Zählung', 'settings_enableRecursiveCount_desc' => 'Wenn diese Option eingeschaltet ist, wird die Anzahl der Dokumente und Ordner in der Ordner-Ansicht rekursiv, unter Berücksichtigung der Zugriffsrechte ermittelt.', +'settings_enableRemoveRevApp' => 'Erlaube dsa Löschen einer Prüfung/Freigabe', +'settings_enableRemoveRevApp_desc' => 'Anwählen, um Administratoren das Löschen einer Prüfung/Freigabe zu erlauben. Dabei wird die Prüfung/Freigabe nicht aus der Datenbank gelöscht, sondern durch einen neuen Eintrag im Prüf-/Freigabeprotokoll der Anfangszustand hergestellt.', 'settings_enableRevisionOneVoteReject' => 'Ablehnung durch einen Wiederholungsprüfer', 'settings_enableRevisionOneVoteReject_desc' => 'Diese Einstellung setzen, wenn die Ablehnung einer Wiederholungsprüfung durch einen einzelnen Prüfer den Status \'Korrektur erforderlich\' setzt und nicht erst alle Prüfungen abgewartet werden, bevor ein Statuswechsel vollzogen wird.', 'settings_enableRevisionOnVoteReject' => '', @@ -2058,6 +2064,7 @@ URL: [url]', 'view_folder' => 'Ordnerdetails anzeigen', 'view_online' => 'Online betrachten', 'warning' => 'Warnung', +'warning_remove_review_log' => 'Das Entfernen einer bestehenden Prüfung kann nicht rückgängig gemacht werden und wird nicht protokoliert.', 'webauthn_auth' => 'WebAuthn Authentifizierung', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/el_GR/lang.inc b/languages/el_GR/lang.inc index 8b3773ba3..1335f024e 100644 --- a/languages/el_GR/lang.inc +++ b/languages/el_GR/lang.inc @@ -478,6 +478,7 @@ $text = array( 'error_add_aro' => '', 'error_add_permission' => '', 'error_cleared_cache' => '', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => '', 'error_importfs' => '', @@ -591,6 +592,7 @@ $text = array( 'group_management' => 'Διαχείριση ομάδων', 'group_members' => 'Μέλη ομάδας', 'group_receipt_summary' => '', +'group_review_removed' => '', 'group_review_summary' => '', 'group_revision_summary' => '', 'guest_login' => '', @@ -633,6 +635,7 @@ $text = array( 'index_waiting' => 'Αναμονή', 'individuals' => 'Άτομα', 'individuals_in_groups' => '', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '', 'info_rm_user_from_processes_user' => '', 'inherited' => 'Κληρονομημένο', @@ -963,6 +966,7 @@ URL: [url]', 'removed_workflow_email_subject' => '', 'removeFolderFromDropFolder' => '', 'remove_marked_files' => '', +'remove_review_log' => '', 'repaired' => '', 'repairing_objects' => '', 'replace_content_email_body' => '', @@ -1291,6 +1295,8 @@ URL: [url]', 'settings_enableReceiptWorkflow_desc' => '', 'settings_enableRecursiveCount' => '', 'settings_enableRecursiveCount_desc' => '', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -1826,6 +1832,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'προβολή online', 'warning' => 'Προειδοποίηση', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/en_GB/lang.inc b/languages/en_GB/lang.inc index 52f835883..d48c9711c 100644 --- a/languages/en_GB/lang.inc +++ b/languages/en_GB/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (2043), archonwang (3), dgrutsch (9), netixw (14) +// Translators: Admin (2052), archonwang (3), dgrutsch (9), netixw (14) $text = array( '2_factor_auth' => '2-factor authentication', @@ -551,6 +551,7 @@ URL: [url]', 'error_add_aro' => 'Error while adding access request object', 'error_add_permission' => 'Error while add permission', 'error_cleared_cache' => 'Error while clearing cache', +'error_document_indexed' => 'Error indexing document', 'error_edit_task' => 'Error when saving task', 'error_extension_getlist' => 'Error getting extension list from repository', 'error_importfs' => 'Error while importing form file system', @@ -695,6 +696,7 @@ URL: [url]', 'group_management' => 'Groups management', 'group_members' => 'Group members', 'group_receipt_summary' => 'Group receipt summary', +'group_review_removed' => 'Change of status, because review of group [name] was removed.', 'group_review_summary' => 'Group review summary', 'group_revision_summary' => 'Group revision summary', 'guest_login' => 'Login as guest', @@ -737,6 +739,7 @@ URL: [url]', 'index_waiting' => 'Waiting', 'individuals' => 'Individuals', 'individuals_in_groups' => 'Members of a group', +'ind_review_removed' => 'Change of status, because review of user [name] was removed.', 'info_recipients_tab_not_released' => 'Acknowledgement of reception for this document version is not possible, because the version is not released.', 'info_rm_user_from_processes_user' => 'Only tasks not being touched can be transfered to another user. Task which has been taken care of, will just add an item in the history, as if the user was deleted.', 'inherited' => 'inherited', @@ -1114,6 +1117,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Removed workflow from document version', 'removeFolderFromDropFolder' => 'Remove folder after import', 'remove_marked_files' => 'Remove marked files', +'remove_review_log' => 'Remove review', 'repaired' => 'repaired', 'repairing_objects' => 'Repairing documents and folders.', 'replace_content_email_body' => 'The last version of the document has been replaced @@ -1503,6 +1507,8 @@ If you did not receive a password, please use the password forgotten function on 'settings_enableReceiptWorkflow_desc' => 'Enable, to turn on the workflow to acknowledge document reception.', 'settings_enableRecursiveCount' => 'Enable recursive document/folder count', 'settings_enableRecursiveCount_desc' => 'If turned on, the number of documents and folders in the folder view will be determined by counting all objects by recursively processing the folders and counting those documents and folders the user is allowed to access.', +'settings_enableRemoveRevApp' => 'Allow removal of existing review/approval', +'settings_enableRemoveRevApp_desc' => 'Enable this, if admins may remove an review/approval. This will not delete the review/approval from the database, but add a new entry in the review/approval log setting status to its initial state.', 'settings_enableRevisionOneVoteReject' => 'Reject by one revisor', 'settings_enableRevisionOneVoteReject_desc' => 'If enabled, the document status will be set to \'needs correction\' once the first revisor rejects the document. If disabled, the document status will not change until all revisors have finished their revision.', 'settings_enableRevisionOnVoteReject' => '', @@ -1519,7 +1525,7 @@ If you did not receive a password, please use the password forgotten function on 'settings_enableThemeSelector_desc' => 'Turns on/off the theme selector on the login page.', 'settings_enableUpdateReceipt' => 'Allow editing of existing reception', 'settings_enableUpdateReceipt_desc' => 'Enable this, if the user who has made a reception may change the decission.', -'settings_enableUpdateRevApp' => 'Allow editing of exting review/approval', +'settings_enableUpdateRevApp' => 'Allow editing of existing review/approval', 'settings_enableUpdateRevApp_desc' => 'Enable this, if the user who has made a review/approval may change the decission as long as the current workflow step has not been finished.', 'settings_enableUserImage' => 'Enable User Image', 'settings_enableUserImage_desc' => 'Enable users images', @@ -2052,6 +2058,7 @@ URL: [url]', 'view_folder' => 'View folder details', 'view_online' => 'View online', 'warning' => 'Warning', +'warning_remove_review_log' => 'Removing a single review cannot not be undone and will not be reported. The reviewer must redo the review.', 'webauthn_auth' => 'WebAuthn Authentification', 'webauthn_crossplatform_info' => 'Use cross-platform \'Yes\' when you have a removable device, like a Yubico key, which you would want to use to login on different computers; say \'No\' when your device is attached to the computer. The choice affects which device(s) are offered by the browser and/or computer security system.', 'webauthn_info' => 'WebAuthn is a password less authentification using public key cryptography. A private-public keypair (known as a credential) is created for a website. The private key is stored securely on the user’s device; a public key and randomly generated credential ID is sent to the server for storage. The server can then use that public key to prove the user’s identity. The private key is usually stored on a hardware token. The token must be registered before it can be used for authentication.', diff --git a/languages/es_ES/lang.inc b/languages/es_ES/lang.inc index 602169de3..d60117455 100644 --- a/languages/es_ES/lang.inc +++ b/languages/es_ES/lang.inc @@ -532,6 +532,7 @@ URL: [url]', 'error_add_aro' => '', 'error_add_permission' => '', 'error_cleared_cache' => '', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => '', 'error_importfs' => '', @@ -669,6 +670,7 @@ URL: [url]', 'group_management' => 'Gestion de Grupos', 'group_members' => 'Miembros de grupo', 'group_receipt_summary' => '', +'group_review_removed' => '', 'group_review_summary' => 'Resumen del grupo revisor', 'group_revision_summary' => '', 'guest_login' => 'Acceso como invitado', @@ -711,6 +713,7 @@ URL: [url]', 'index_waiting' => 'Esperando', 'individuals' => 'Individuales', 'individuals_in_groups' => 'Miembros del grupo', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '', 'info_rm_user_from_processes_user' => '', 'inherited' => 'heredado', @@ -1077,6 +1080,7 @@ nURL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Eliminar flujo de trabajo de la versión del documento', 'removeFolderFromDropFolder' => 'Eliminar carpeta después de importar', 'remove_marked_files' => 'Eliminar ficheros marcados', +'remove_review_log' => '', 'repaired' => 'Reparado', 'repairing_objects' => 'Reparando documentos y carpetas.', 'replace_content_email_body' => '', @@ -1432,6 +1436,8 @@ URL: [url]', 'settings_enableReceiptWorkflow_desc' => '', 'settings_enableRecursiveCount' => 'Habilitar cuenta de documento/carpeta recursivo', 'settings_enableRecursiveCount_desc' => 'Si cambia a activado, el número de documentos y carpetas en la carpeta será determinado por la cuenta de todos los objetos recursivos procesados de la carpeta y una vez contados el usuarios tendrá permiso para acceder.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => 'Rechazado por un revisor', 'settings_enableRevisionOneVoteReject_desc' => 'Si está habilitado, una vez que el primer revisor rechaza el documento, el estado del documento será \'necesita corrección\'. Si se encuentra deshabilitado, el estado del docuento no cambiará hast que todos los revisores hayan concluido su revisión.', 'settings_enableRevisionOnVoteReject' => '', @@ -1981,6 +1987,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'Ver online', 'warning' => 'Advertencia', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/fr_FR/lang.inc b/languages/fr_FR/lang.inc index 0e6a3a864..78cfe17a4 100644 --- a/languages/fr_FR/lang.inc +++ b/languages/fr_FR/lang.inc @@ -549,6 +549,7 @@ URL: [url]', 'error_add_aro' => '', 'error_add_permission' => 'Erreur lors de l’ajout de permission', 'error_cleared_cache' => 'Erreur lors du vidage du cache', +'error_document_indexed' => '', 'error_edit_task' => 'Erreur lors de la modification de la tâche', 'error_extension_getlist' => 'Erreur lors de l’obtention de la liste des extensions depuis le dépôt', 'error_importfs' => 'Erreur lors de l’import depuis le système de fichiers', @@ -693,6 +694,7 @@ URL: [url]', 'group_management' => 'Gestion des groupes', 'group_members' => 'Membres du groupe', 'group_receipt_summary' => 'Récapitulatif groupe réception', +'group_review_removed' => '', 'group_review_summary' => 'Récapitulatif groupe vérification', 'group_revision_summary' => 'Récapitulatif groupe révision', 'guest_login' => 'Se connecter comme invité', @@ -735,6 +737,7 @@ URL: [url]', 'index_waiting' => 'Chargement…', 'individuals' => 'Individuels', 'individuals_in_groups' => 'Membres d’un groupe', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => 'L’accusé de réception pour cette version du document n’est pas possible car la version n’est pas en état « publié ».', 'info_rm_user_from_processes_user' => 'Seules les tâches non traitées peuvent être transférées à un autre utilisateur. Pour les tâches déjà traitées, une entrée sera ajoutée dans l’historique, comme si l’utilisateur lui-même avait été supprimé.', 'inherited' => 'hérité', @@ -1109,6 +1112,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename] : [name] - Workflow retiré de la version du doument', 'removeFolderFromDropFolder' => 'Suppression du dossier après importation', 'remove_marked_files' => 'Supprimer les fichiers sélectionnés', +'remove_review_log' => '', 'repaired' => 'réparé', 'repairing_objects' => 'Réparation des documents et des dossiers.', 'replace_content_email_body' => '', @@ -1492,6 +1496,8 @@ Nom : [username] 'settings_enableReceiptWorkflow_desc' => 'Activer cette option pour permettre de confirmer la réception de document dans le workflow.', 'settings_enableRecursiveCount' => 'Décompte récursif des documents/dossiers', 'settings_enableRecursiveCount_desc' => 'Si activé, le nombre de documents et répertoires dans un répertoire est calculé en comptant récursivement le contenu des sous-répertoires auxquels l\'utilisateur a accès.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => 'Rejet par un réviseur', 'settings_enableRevisionOneVoteReject_desc' => 'Si cette option est activée, le statut du document sera défini sur « nécessite une correction » une fois que le premier réviseur a rejeté le document. Si elle est désactivée, le statut du document ne changera pas jusqu’à ce que tous les réviseurs aient terminé leur révision.', 'settings_enableRevisionOnVoteReject' => '', @@ -2041,6 +2047,7 @@ URL: [url]', 'view_folder' => 'Voir les détails du dossier', 'view_online' => 'Aperçu en ligne', 'warning' => 'Avertissement', +'warning_remove_review_log' => '', 'webauthn_auth' => 'Authentification WebAuthn', 'webauthn_crossplatform_info' => 'Choisissez « Oui » lorsque vous avez un périphérique amovible, comme une clé Yubico, que vous souhaitez utiliser pour vous connecter sur différents ordinateurs ; choisissez « Non » lorsque votre appareil est connecté à l\'ordinateur. Le choix affecte le ou les appareils proposés par le navigateur et / ou le système de sécurité informatique.', 'webauthn_info' => 'WebAuthn est une authentification sans mot de passe utilisant la cryptographie à clé publique. Une paire de clés privée-publique (connue sous le nom de certificat) est créée pour un site Web. La clé privée est stockée en toute sécurité sur l’appareil de l’utilisateur ; une clé publique et un identifiant généré de manière aléatoire sont envoyés au serveur pour stockage. Le serveur peut ensuite utiliser cette clé publique pour prouver l’identité de l’utilisateur. La clé privée est généralement stockée sur un jeton matériel. Le jeton doit être enregistré avant de pouvoir être utilisé pour l’authentification.', diff --git a/languages/hr_HR/lang.inc b/languages/hr_HR/lang.inc index 87bf1f756..fcc9b96b0 100644 --- a/languages/hr_HR/lang.inc +++ b/languages/hr_HR/lang.inc @@ -537,6 +537,7 @@ Internet poveznica: [url]', 'error_add_aro' => '', 'error_add_permission' => '', 'error_cleared_cache' => '', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => '', 'error_importfs' => '', @@ -674,6 +675,7 @@ Internet poveznica: [url]', 'group_management' => 'Upravljanje grupama', 'group_members' => 'Članovi grupe', 'group_receipt_summary' => 'Sažetak prijema za grupu', +'group_review_removed' => '', 'group_review_summary' => 'Sažetak pregleda grupe', 'group_revision_summary' => '', 'guest_login' => 'Prijavite se kao gost', @@ -716,6 +718,7 @@ Internet poveznica: [url]', 'index_waiting' => '', 'individuals' => 'Pojedinci', 'individuals_in_groups' => '', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '', 'info_rm_user_from_processes_user' => '', 'inherited' => 'naslijeđeno', @@ -1081,6 +1084,7 @@ Internet poveznica: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Uklonjeni tok rada iz ove verzije dokumenta', 'removeFolderFromDropFolder' => '', 'remove_marked_files' => 'Ukloni označene datoteke', +'remove_review_log' => '', 'repaired' => 'popravljeno', 'repairing_objects' => 'Popravljanje dokumenata ili mapa.', 'replace_content_email_body' => '', @@ -1453,6 +1457,8 @@ Internet poveznica: [url]', 'settings_enableReceiptWorkflow_desc' => 'Omogućite kako bi omogućili tok rada za potvrđivajne prijema dokumenta.', 'settings_enableRecursiveCount' => 'Omogući rekurzivno brojanje dokumenta/mape', 'settings_enableRecursiveCount_desc' => 'Ako je uključeno, broj dokumenata i mapa u pregledu mape će biti određen brojanjem svih objekata rekurzivnom obradom mapa i brojanjem tih dokumenata i mapa kojima je korisniku omogućen pristup.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -2002,6 +2008,7 @@ Internet poveznica: [url]', 'view_folder' => '', 'view_online' => 'Online pregled', 'warning' => 'Upozorenje', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/hu_HU/lang.inc b/languages/hu_HU/lang.inc index 258a63992..522012f4c 100644 --- a/languages/hu_HU/lang.inc +++ b/languages/hu_HU/lang.inc @@ -532,6 +532,7 @@ URL: [url]', 'error_add_aro' => '', 'error_add_permission' => '', 'error_cleared_cache' => '', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => '', 'error_importfs' => '', @@ -669,6 +670,7 @@ URL: [url]', 'group_management' => 'Csoportok', 'group_members' => 'Csoporttagok', 'group_receipt_summary' => '', +'group_review_removed' => '', 'group_review_summary' => 'Csoport felülvizsgálat összefoglaló', 'group_revision_summary' => '', 'guest_login' => 'Bejelentkezés vendégként', @@ -711,6 +713,7 @@ URL: [url]', 'index_waiting' => '', 'individuals' => 'Egyedek', 'individuals_in_groups' => '', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '', 'info_rm_user_from_processes_user' => '', 'inherited' => 'örökölt', @@ -1077,6 +1080,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Dokumentum változatból eltávolított munkafolyamat', 'removeFolderFromDropFolder' => '', 'remove_marked_files' => 'Megjelölt állományok eltávolítása', +'remove_review_log' => '', 'repaired' => 'javított', 'repairing_objects' => 'Dokumentumok és mappák helyreállítása', 'replace_content_email_body' => '', @@ -1431,6 +1435,8 @@ URL: [url]', 'settings_enableReceiptWorkflow_desc' => '', 'settings_enableRecursiveCount' => 'Engedélyezi a rekurzív dokumentum/mappa számot', 'settings_enableRecursiveCount_desc' => 'Ha be van kapcsolva a mappa nézetben a dokumentumok és mappák száma minden objektum rekurzív feldolgozásával kerül meghatározásra és a dokumentumok és mappák száma a felhasználó számára engedélyezett.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -1980,6 +1986,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'Online megtekintés', 'warning' => 'Figyelmeztetés', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/it_IT/lang.inc b/languages/it_IT/lang.inc index 5a085a9d2..9b6cefe93 100644 --- a/languages/it_IT/lang.inc +++ b/languages/it_IT/lang.inc @@ -542,6 +542,7 @@ URL: [url]', 'error_add_aro' => 'Errore durante l\'accesso aggiungendo richiesta oggetto', 'error_add_permission' => 'Errore durante l\'aggiunta di permesso', 'error_cleared_cache' => 'Errore durante svuotare la cache', +'error_document_indexed' => '', 'error_edit_task' => 'Modifica attività', 'error_extension_getlist' => 'Errore nel recuperare l\'elenco delle estensioni dal repository', 'error_importfs' => 'Errore durante l\'importazione dal file system', @@ -679,6 +680,7 @@ URL: [url]', 'group_management' => 'Amministrazione gruppi', 'group_members' => 'Membri del gruppo', 'group_receipt_summary' => 'Panoramica delle conferme ricevute gruppo.', +'group_review_removed' => '', 'group_review_summary' => 'Dettaglio revisioni di gruppo', 'group_revision_summary' => 'Riepilogo revisioni del gruppo', 'guest_login' => 'Login come Ospite', @@ -721,6 +723,7 @@ URL: [url]', 'index_waiting' => 'Attendi', 'individuals' => 'Singoli', 'individuals_in_groups' => 'I membri de la gruppo', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => 'Non è possibile confermare la ricezione di questa versione del documento, poiché la versione non è stata rilasciata.', 'info_rm_user_from_processes_user' => '', 'inherited' => 'ereditato', @@ -1098,6 +1101,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Flusso di lavoro rimosso dalla versione del documento', 'removeFolderFromDropFolder' => 'Rimuovi la cartella di pubblicazione dopo l\'importazione', 'remove_marked_files' => 'Rimuovi i files contrassegnati', +'remove_review_log' => '', 'repaired' => 'riparato', 'repairing_objects' => 'Riparazione documenti e cartelle in corso...', 'replace_content_email_body' => '', @@ -1480,6 +1484,8 @@ Name: [username] 'settings_enableReceiptWorkflow_desc' => 'Abilitare per attivare le ricevute di notifica nel flusso di lavoro.', 'settings_enableRecursiveCount' => 'Abilita il conteggio ricursivo di documenti/cartelle', 'settings_enableRecursiveCount_desc' => 'Se selezionato il numero di documenti e sottocartelle accessibili all\'utente sarà calcolato con un conteggio ricursivo di tutti gli oggetti contenuti nella cartella.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => 'Respinto da un revisore', 'settings_enableRevisionOneVoteReject_desc' => 'Se abilitato, lo stato del documento verrà impostato su ""necessita correzione"" una volta che il primo revisore rifiuta il documento. Se disabilitato, lo stato del documento non cambierà fino a quando tutti i revisori non avranno terminato la revisione.', 'settings_enableRevisionOnVoteReject' => 'Rifiutato da un revisore', @@ -2029,6 +2035,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'Visualizza on-line', 'warning' => 'Attenzione', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/ko_KR/lang.inc b/languages/ko_KR/lang.inc index 0ad72a862..3754a8b49 100644 --- a/languages/ko_KR/lang.inc +++ b/languages/ko_KR/lang.inc @@ -538,6 +538,7 @@ URL: [url]', 'error_add_aro' => '', 'error_add_permission' => '', 'error_cleared_cache' => '', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => '', 'error_importfs' => '', @@ -675,6 +676,7 @@ URL: [url]', 'group_management' => '그룹 관리', 'group_members' => '카페 회원', 'group_receipt_summary' => '그룹 접수 요약', +'group_review_removed' => '', 'group_review_summary' => '그룹 검토 요약', 'group_revision_summary' => '', 'guest_login' => '게스트로 로그인', @@ -717,6 +719,7 @@ URL: [url]', 'index_waiting' => '기다리는 중', 'individuals' => '개인', 'individuals_in_groups' => '개별 그룹', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '', 'info_rm_user_from_processes_user' => '', 'inherited' => '상속', @@ -1075,6 +1078,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename] : [name] - 문서 버전에서 제거 된 워크플로우', 'removeFolderFromDropFolder' => '', 'remove_marked_files' => '마크 파일을 제거', +'remove_review_log' => '', 'repaired' => '복구', 'repairing_objects' => '문서 및 폴더 복구', 'replace_content_email_body' => '', @@ -1447,6 +1451,8 @@ URL : [url]', 'settings_enableReceiptWorkflow_desc' => '문서의 수신 확인을 위해 워크플로어를 선택하고 활성화 합니다.', 'settings_enableRecursiveCount' => '재귀적 문서 / 폴더 수 사용', 'settings_enableRecursiveCount_desc' => 'If turned on, the number of documents and folders in the folder view will be determined by counting all objects by recursively processing the folders and counting those documents and folders the user is allowed to access.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -1996,6 +2002,7 @@ URL : [url]', 'view_folder' => '', 'view_online' => '온라인으로 보기', 'warning' => '경고', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/lo_LA/lang.inc b/languages/lo_LA/lang.inc index 0cf039459..b921201e1 100644 --- a/languages/lo_LA/lang.inc +++ b/languages/lo_LA/lang.inc @@ -535,6 +535,7 @@ URL: [url]', 'error_add_aro' => 'ເກີດຂໍຜິດພາດຂະນະເພີ່ມການເພີ່ມຄຳຂໍການເຂົາເຖິງ', 'error_add_permission' => 'ເກີດຂໍ້ຜິດພາດໃນຂະນະເພີ່ມສິດ', 'error_cleared_cache' => 'ເກີດຂໍ້ຜິດພາດໃນຂະນະລ້າງແຄຣ', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => '', 'error_importfs' => 'ເກີດຂໍ້ຜິດພາດໃນຂະນະເຂົ້າລະບົບໄຟລຟອມ', @@ -672,6 +673,7 @@ URL: [url]', 'group_management' => 'ການຈັດການກຸ່ມ', 'group_members' => 'ສະມາຊິກກຸ່ມ', 'group_receipt_summary' => 'ພາບລວມການຢືນຢັນເນື້ອຫາຂອງກຸ່ມ', +'group_review_removed' => '', 'group_review_summary' => 'ສະຫຼຸບບົດວິຈານຂອງກຸ່ມ', 'group_revision_summary' => '', 'guest_login' => 'ເຂົ້າສູ້ລະບົບໃນຖານະແຂກ', @@ -714,6 +716,7 @@ URL: [url]', 'index_waiting' => 'ຖ້າ', 'individuals' => 'ບຸກຄົນ', 'individuals_in_groups' => 'ສະມາຊິກຂອງກຸ່ມ', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '', 'info_rm_user_from_processes_user' => '', 'inherited' => 'ຮັບການຖ່າຍທອດ', @@ -1091,6 +1094,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]:[name] - ຍ້າຍການເຮັດວຽກ (ເວີກໂຟລ) ອອກຈາກເວີຊັ້ນຂອງເອກະສານ', 'removeFolderFromDropFolder' => 'ຍ້າຍໂຟລເດີຫຼັງຈາກນຳຂໍ້ມູນເຂົ້າ', 'remove_marked_files' => 'ລົບໄຟລທີມີເຄື່ອງໝາຍໄວ້', +'remove_review_log' => '', 'repaired' => 'ການສ້ອມແປງ', 'repairing_objects' => 'ການສ້ອມແປງເອກະສານແລະໂຟລເດີ', 'replace_content_email_body' => '', @@ -1473,6 +1477,8 @@ URL: [url]', 'settings_enableReceiptWorkflow_desc' => '', 'settings_enableRecursiveCount' => 'ເປີດໄຊ້ງານການນັບເອກະສານ/ໂຟລເດີນັບຊໍ້າ', 'settings_enableRecursiveCount_desc' => 'ຫາກເປີດໄຊ້ງານຈຳນວນເອກະສານແລະໂຟລເດີໃນມຸມມອງຂອງໂຟລເດີຈະຖືກກຳນົດໂດຍນັບວັດຖຸທັງໝົດໂດຍປະມວນຜົນໂຟລເດີໂຟລເດີຊຳ, ນັບເກະສານ ແລະໂຟລເດີທີຜູ້ໄຊ້ສາມາດເຂົ້າເຖິງໄດ້', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -2022,6 +2028,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'ດູອອນລາຍ', 'warning' => 'ການເຕືອນ', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/nb_NO/lang.inc b/languages/nb_NO/lang.inc index 6e43518e3..1ddbb65a9 100644 --- a/languages/nb_NO/lang.inc +++ b/languages/nb_NO/lang.inc @@ -549,6 +549,7 @@ URL: [url]', 'error_add_aro' => 'Feil under tilføyelse av adgangsforespørselsobjekt', 'error_add_permission' => 'Feil under tilføyelse av tillatelse', 'error_cleared_cache' => 'Feil ved rensning av hurtig-minne', +'error_document_indexed' => '', 'error_edit_task' => 'Feil ved lagring av oppgave', 'error_extension_getlist' => 'Feil under mottak av utvidelsesliste fra depotet', 'error_importfs' => 'Feil under import av skjemafilsystem', @@ -693,6 +694,7 @@ URL: [url]', 'group_management' => 'Gruppe ledelse', 'group_members' => 'Gruppemedlemmer', 'group_receipt_summary' => 'Gruppe kvitterings sammendrag', +'group_review_removed' => '', 'group_review_summary' => 'Sammendrag av gruppevisning', 'group_revision_summary' => 'Sammendrag av grupperevisjon', 'guest_login' => 'Logg inn som gjest', @@ -735,6 +737,7 @@ URL: [url]', 'index_waiting' => 'Venter', 'individuals' => 'Personer', 'individuals_in_groups' => 'Medlemmer i en gruppe', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => 'Bekreftelse av mottak for denne dokumentversjonen er ikke mulig fordi versjonen ikke er utgitt.', 'info_rm_user_from_processes_user' => '', 'inherited' => 'arvet', @@ -1106,6 +1109,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Fjernet arbeidsflyt fra dokumentversjonen', 'removeFolderFromDropFolder' => 'Fjern mappe etter import', 'remove_marked_files' => 'Fjern markerte filer', +'remove_review_log' => '', 'repaired' => 'reparert', 'repairing_objects' => 'Reparere dokumenter og mapper.', 'replace_content_email_body' => '', @@ -1486,6 +1490,8 @@ Bruker: [username] 'settings_enableReceiptWorkflow_desc' => 'Aktiver for å slå på arbeidsflyten for å bekrefte dokumentmottak.', 'settings_enableRecursiveCount' => 'Aktiver rekursivt antall dokumenter / mapper', 'settings_enableRecursiveCount_desc' => 'Hvis det er slått på, vil antall dokumenter og mapper i mappevisningen bestemmes ved å telle alle objekter ved rekursivt å behandle mappene og telle de dokumentene og mappene brukeren har lov til å få tilgang til.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => 'Avvist av en rådgiver', 'settings_enableRevisionOneVoteReject_desc' => 'Hvis dette er aktivert, vil dokumentstatusen settes til \'trenger korrigering \' når den første rådgiveren avviser dokumentet. Hvis den er deaktivert, vil dokumentstatus ikke endres før alle revisorer er ferdige med revisjonen.', 'settings_enableRevisionOnVoteReject' => 'Aktiver revisjon av kvote avvist', @@ -2035,6 +2041,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'Vis på nett', 'warning' => 'Advarsel', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/nl_NL/lang.inc b/languages/nl_NL/lang.inc index 8e0216428..c3b219633 100644 --- a/languages/nl_NL/lang.inc +++ b/languages/nl_NL/lang.inc @@ -542,6 +542,7 @@ URL: [url]', 'error_add_aro' => 'Verzoek om toegang toegevoegd', 'error_add_permission' => 'Voeg permissie toe', 'error_cleared_cache' => 'Fout bij het leegmaken van de cache', +'error_document_indexed' => '', 'error_edit_task' => 'Fout bij het opslaan van de taak', 'error_extension_getlist' => 'Fout bij het ophalen van de lijst met extensies uit het repository', 'error_importfs' => 'Fout bij het importeren van form file systeem', @@ -686,6 +687,7 @@ URL: [url]', 'group_management' => 'Groepenbeheer', 'group_members' => 'Groepsleden', 'group_receipt_summary' => 'Overzicht van ontvangst per groep', +'group_review_removed' => '', 'group_review_summary' => 'Samenvatting beoordeling per groep', 'group_revision_summary' => 'Samenvatting van de beoordelingen', 'guest_login' => 'Login als Gast', @@ -728,6 +730,7 @@ URL: [url]', 'index_waiting' => 'Indexering wacht', 'individuals' => 'Individuen', 'individuals_in_groups' => 'Individuen in groepen', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => 'Ontvangstbevestiging van deze versie van het document is niet mogelijk omdat de versie nog niet is vrijgegeven.', 'info_rm_user_from_processes_user' => '', 'inherited' => 'overgeërfd', @@ -1104,6 +1107,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Workflow verwijderd van document versie', 'removeFolderFromDropFolder' => 'Map verwijderen uit Dropfilder', 'remove_marked_files' => 'Geselecteerde bestanden worden verwijderd', +'remove_review_log' => '', 'repaired' => 'Gerepareerd', 'repairing_objects' => 'Documenten en mappen repareren.', 'replace_content_email_body' => '', @@ -1485,6 +1489,8 @@ Name: [username] 'settings_enableReceiptWorkflow_desc' => 'Aanzetten workflow-stappen', 'settings_enableRecursiveCount' => 'Document/ map teller herhalen toestaan', 'settings_enableRecursiveCount_desc' => 'If turned on, the number of documents and folders in the folder view will be determined by counting all objects by recursively processing the folders and counting those documents and folders the user is allowed to access.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => 'Afwijzen door één revisor', 'settings_enableRevisionOneVoteReject_desc' => 'Als dit aan staat, wordt de status van het document \'correctie nodig\' zodra de eerste revisor het document afwijst. Als deze optie uit staat, verandert de status van het document niet voordat alle revisors hun bijdrage hebben geleverd.', 'settings_enableRevisionOnVoteReject' => '', @@ -2034,6 +2040,7 @@ URL: [url]', 'view_folder' => 'Map bekijken', 'view_online' => 'Bekijk online', 'warning' => 'Waarschuwing', +'warning_remove_review_log' => '', 'webauthn_auth' => 'WebAuthn Authentificatie', 'webauthn_crossplatform_info' => 'Gebruik cross-platform: kies \'Ja\' als u een verwijderbaar device hebt (bijv. een Yubico key), dat u gebruikt om verschillende computers in te loggen. Kies \'Nee\' als uw device verbonden is met de computer. De keuze bepaalt welk(e) device(s) worden aangeboden door de browser en/of het security-system van de computer.', 'webauthn_info' => 'WebAuthn is passwordless authentification met public key cryptography. Een private-public sleutelpaar (known as a credential) wordt gecreëerd voor een website. De private key wordt veilig opgeslagen op het device van de gebruiker; een public key en een random gegenereerd credential ID wordt naar de server verzonden. De server kan die dan gebruken om de identiteit van de gebruiker vast te stellen. De private key wordt meestal opgeslagen op een hardware-token. Het token moet geregistreerd worden voordat het kan worden gebruikt voor authenticatie.', diff --git a/languages/pl_PL/lang.inc b/languages/pl_PL/lang.inc index d2666462c..709c6fca4 100644 --- a/languages/pl_PL/lang.inc +++ b/languages/pl_PL/lang.inc @@ -525,6 +525,7 @@ URL: [url]', 'error_add_aro' => 'Błąd podczas dodawania obiektu żądania dostępu', 'error_add_permission' => 'Błąd podczas dodawania uprawnienia', 'error_cleared_cache' => 'Błąd podczas czyszczenia pamięci podręcznej', +'error_document_indexed' => '', 'error_edit_task' => 'Błąd podczas zapisywania zadania', 'error_extension_getlist' => 'Błąd podczas pobierania listy rozszerzeń z repozytorium', 'error_importfs' => 'Błąd podczas importowania systemu plików formularza', @@ -662,6 +663,7 @@ URL: [url]', 'group_management' => 'Zarządzanie grupami', 'group_members' => 'Członkowie grupy', 'group_receipt_summary' => 'Podsumowanie potwierdzienia dla grupy', +'group_review_removed' => '', 'group_review_summary' => 'Podsumowanie opiniowania dla grupy', 'group_revision_summary' => 'Podsumowanie korekty dla grupy', 'guest_login' => 'Zalogowany jako gość', @@ -704,6 +706,7 @@ URL: [url]', 'index_waiting' => 'Oczekiwanie', 'individuals' => 'Indywidualni', 'individuals_in_groups' => 'Członkowie grupy', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => 'Potwierdzenie odbioru dla tej wersji dokumentu nie jest możliwe, ponieważ wersja nie została wydana.', 'info_rm_user_from_processes_user' => '', 'inherited' => 'dziedziczony', @@ -1070,6 +1073,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Usunięty workflow z wersji dokumentu', 'removeFolderFromDropFolder' => 'Usuń folder po imporcie', 'remove_marked_files' => 'Usuń zaznaczone pliki', +'remove_review_log' => '', 'repaired' => 'naprawiony', 'repairing_objects' => 'Naprawa dokumentów i katalogów.', 'replace_content_email_body' => '', @@ -1416,6 +1420,8 @@ Name: [username] 'settings_enableReceiptWorkflow_desc' => 'Włącz, aby włączyć przepływ pracy, aby potwierdzić odbiór dokumentu.', 'settings_enableRecursiveCount' => 'Włącz licznik rekurencji dokumentu/folderu', 'settings_enableRecursiveCount_desc' => 'Jeżeli jest włączone, to liczba dokumentów i folderów w widoku będzie ustalona poprzez zliczenie wszystkich obiektów przez rekurencyjnie przetwarzane foldery i policzenia tych dokumentów i folderów do których użytkownik ma dostęp', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => 'Odrzuć przez jedną korektę', 'settings_enableRevisionOneVoteReject_desc' => 'Jeśli ta opcja jest włączona, stan dokumentu zostanie ustawiony na "wymaga korekty", gdy pierwsza korekta odrzuci dokument. Jeśli jest wyłączona, stan dokumentu nie ulegnie zmianie, dopóki wszystkie zmiany nie zakończą ich rewizji.', 'settings_enableRevisionOnVoteReject' => 'Odrzuć przez korektę', @@ -1965,6 +1971,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'Obejrzyj online', 'warning' => 'Ostrzeżenie', +'warning_remove_review_log' => '', 'webauthn_auth' => 'Uwierzytelnianie WebAuthn', 'webauthn_crossplatform_info' => 'Używaj wieloplatformowego „Tak”, gdy masz urządzenie wymienne, takie jak klucz Yubico, którego chcesz użyć do logowania na różnych komputerach; Powiedz „Nie”, gdy urządzenie jest podłączone do komputera. Wybór wpływa na to, które urządzenia są oferowane przez przeglądarkę i / lub system bezpieczeństwa komputera.', 'webauthn_info' => 'WebAuthn to uwierzytelnianie bez hasła, które wykorzystuje kryptografię klucza publicznego. Dla strony internetowej tworzony jest klucz prywatny-publiczny (znany jako poświadczenie). Klucz prywatny jest bezpiecznie przechowywany na urządzeniu użytkownika; Klucz publiczny i losowo wygenerowany identyfikator poświadczenia są wysyłane do serwera w celu przechowywania. Serwer może następnie użyć tego klucza publicznego do udowodnienia tożsamości użytkownika. Klucz prywatny jest zwykle przechowywany na tokenie sprzętowym. Token musi zostać zarejestrowany, zanim będzie można go użyć do uwierzytelnienia.', diff --git a/languages/pt_BR/lang.inc b/languages/pt_BR/lang.inc index af42be387..6f818681f 100644 --- a/languages/pt_BR/lang.inc +++ b/languages/pt_BR/lang.inc @@ -549,6 +549,7 @@ URL: [url]', 'error_add_aro' => 'erro ao adicionar o objeto de solicitação de acesso', 'error_add_permission' => 'Erro ao adicionar permissão', 'error_cleared_cache' => 'Erro ao limpar o cache', +'error_document_indexed' => '', 'error_edit_task' => 'Erro ao salvar tarefa', 'error_extension_getlist' => 'Erro ao obter lista de extensões do repositório', 'error_importfs' => 'Erro ao importar do sistema de arquivos', @@ -693,6 +694,7 @@ URL: [url]', 'group_management' => 'Grupos', 'group_members' => 'Membros do Grupo', 'group_receipt_summary' => 'Resumo de recebimento de grupo', +'group_review_removed' => '', 'group_review_summary' => 'Resumo da avaliação do grupo', 'group_revision_summary' => '', 'guest_login' => 'Entre como convidado', @@ -735,6 +737,7 @@ URL: [url]', 'index_waiting' => 'Aguarde...', 'individuals' => 'Indivíduos', 'individuals_in_groups' => 'Members of a group', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => 'Confirmação de recebimento para esta versão do documento não é possível, porque a versão não é liberada.', 'info_rm_user_from_processes_user' => '', 'inherited' => 'herdado', @@ -1111,6 +1114,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Fluxo de trabalho removido da versão do documento', 'removeFolderFromDropFolder' => 'Remover pasta após a importação', 'remove_marked_files' => 'Remover arquivos marcados', +'remove_review_log' => '', 'repaired' => 'reparado', 'repairing_objects' => 'Reparando documentos e pastas', 'replace_content_email_body' => '', @@ -1492,6 +1496,8 @@ Nome: [username] 'settings_enableReceiptWorkflow_desc' => 'Habilitar para ativar o fluxo de trabalho para confirmar a entrada do documento.', 'settings_enableRecursiveCount' => 'Ativar contagem de documentos/pasta recursiva', 'settings_enableRecursiveCount_desc' => 'Se estiver ativado, o número de documentos e pastas na exibição de pasta será determinada pela contagem de todos os objetos de forma recursiva proceáando as pastas e contando eáes documentos e pastas que o usuário tem permissão de acesso.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => 'Rejeitar por um revisor', 'settings_enableRevisionOneVoteReject_desc' => 'Configurações ativam Revisão um voto rejeitar desc', 'settings_enableRevisionOnVoteReject' => 'Configurações ativam Revisão na rejeição de votação', @@ -2041,6 +2047,7 @@ URL: [url]', 'view_folder' => 'Ver detalhes da pasta', 'view_online' => 'Ver online', 'warning' => 'Aviso', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/ro_RO/lang.inc b/languages/ro_RO/lang.inc index 84cef90f0..89d6cb073 100644 --- a/languages/ro_RO/lang.inc +++ b/languages/ro_RO/lang.inc @@ -537,6 +537,7 @@ URL: [url]', 'error_add_aro' => '', 'error_add_permission' => '', 'error_cleared_cache' => '', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => '', 'error_importfs' => '', @@ -674,6 +675,7 @@ URL: [url]', 'group_management' => 'Management grupuri', 'group_members' => 'Membrii grupului', 'group_receipt_summary' => '', +'group_review_removed' => '', 'group_review_summary' => 'Sumar revizuiri grup', 'group_revision_summary' => '', 'guest_login' => 'Login ca oaspete', @@ -716,6 +718,7 @@ URL: [url]', 'index_waiting' => 'Așteptare', 'individuals' => 'Individuals', 'individuals_in_groups' => '', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '', 'info_rm_user_from_processes_user' => '', 'inherited' => 'moștenit', @@ -1082,6 +1085,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Workflow eliminat din versiunea documentului', 'removeFolderFromDropFolder' => '', 'remove_marked_files' => 'Eliminați fișierele marcate', +'remove_review_log' => '', 'repaired' => 'reparat', 'repairing_objects' => 'Reparare documente și foldere.', 'replace_content_email_body' => '', @@ -1454,6 +1458,8 @@ URL: [url]', 'settings_enableReceiptWorkflow_desc' => '', 'settings_enableRecursiveCount' => 'Activați numararea recursiva pentru documente/foldere', 'settings_enableRecursiveCount_desc' => 'Dacă este activată, numărul de documente și foldere din vizualizarea unui director va fi determinat prin numărarea tuturor obiectelor recursiv din folderele unde accesul utilizatorului este permis.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -2003,6 +2009,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'Vizualizare online', 'warning' => 'Avertisment', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/ru_RU/lang.inc b/languages/ru_RU/lang.inc index 642ef0170..c8c1fab7d 100644 --- a/languages/ru_RU/lang.inc +++ b/languages/ru_RU/lang.inc @@ -537,6 +537,7 @@ URL: [url]', 'error_add_aro' => '', 'error_add_permission' => 'Ошибка добавления разрешения', 'error_cleared_cache' => 'Ошибка очиски кеша', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => '', 'error_importfs' => 'Ошибка импорта из файловой системы', @@ -674,6 +675,7 @@ URL: [url]', 'group_management' => 'Управление группами', 'group_members' => 'Члены группы', 'group_receipt_summary' => 'Обзор подтверждений получения группой', +'group_review_removed' => '', 'group_review_summary' => 'Сводка по рецензированию группы', 'group_revision_summary' => '', 'guest_login' => 'Войти как гость', @@ -716,6 +718,7 @@ URL: [url]', 'index_waiting' => 'Ожидание', 'individuals' => 'Пользователи', 'individuals_in_groups' => 'Пользователи группы', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '', 'info_rm_user_from_processes_user' => '', 'inherited' => 'унаследованный', @@ -1084,6 +1087,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: удалён процесс из версии документа «[name]»', 'removeFolderFromDropFolder' => '', 'remove_marked_files' => 'Удалить выбранные файлы', +'remove_review_log' => '', 'repaired' => 'исправлено', 'repairing_objects' => 'Восстановление каталогов и документов', 'replace_content_email_body' => '', @@ -1461,6 +1465,8 @@ URL: [url]', 'settings_enableReceiptWorkflow_desc' => 'Включить для активации функции подтверждения получения документа', 'settings_enableRecursiveCount' => 'Рекурсивно подсчитывать
    документы и каталоги', 'settings_enableRecursiveCount_desc' => 'Если включено, количество документов и каталогов в виде каталога будет определятся рекурсивным подсчётом всех документов и каталогов разрешённых для доступа пользователя.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -2010,6 +2016,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'Просмотреть', 'warning' => 'Внимание', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/sk_SK/lang.inc b/languages/sk_SK/lang.inc index 748df9c3a..0fdff57ce 100644 --- a/languages/sk_SK/lang.inc +++ b/languages/sk_SK/lang.inc @@ -549,6 +549,7 @@ URL: [url]', 'error_add_aro' => 'Error while adding access request object', 'error_add_permission' => 'Error while add permission', 'error_cleared_cache' => 'Chyba pri vymazaní vyrovnávacej pamäte', +'error_document_indexed' => '', 'error_edit_task' => 'Chyba pri ukladaní úlohy', 'error_extension_getlist' => 'Error getting extension list from repository', 'error_importfs' => 'Chyba pri importe zo súborového systému', @@ -693,6 +694,7 @@ URL: [url]', 'group_management' => 'Skupiny', 'group_members' => 'Členovia skupiny', 'group_receipt_summary' => 'Group receipt summary', +'group_review_removed' => '', 'group_review_summary' => 'Zhrnutie skupinovej recenzie', 'group_revision_summary' => '', 'guest_login' => 'Prihlásiť sa ako hosť', @@ -735,6 +737,7 @@ URL: [url]', 'index_waiting' => 'Čakajte', 'individuals' => 'Jednotlivci', 'individuals_in_groups' => 'Členovia skupiny', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => 'Acknowledgement of reception for this document version is not possible, because the version is not released.', 'info_rm_user_from_processes_user' => '', 'inherited' => 'zdedené', @@ -1112,6 +1115,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Removed workflow from document version', 'removeFolderFromDropFolder' => 'Po importe odstrániť zložku', 'remove_marked_files' => 'Odstrániť označené súbory', +'remove_review_log' => '', 'repaired' => 'opravené', 'repairing_objects' => 'Oprava dokumentov a zložiek.', 'replace_content_email_body' => '', @@ -1494,6 +1498,8 @@ Meno: [username] 'settings_enableReceiptWorkflow_desc' => 'Enable, to turn on the workflow to acknowledge document reception.', 'settings_enableRecursiveCount' => 'Enable recursive document/folder count', 'settings_enableRecursiveCount_desc' => 'If turned on, the number of documents and folders in the folder view will be determined by counting all objects by recursively processing the folders and counting those documents and folders the user is allowed to access.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => 'Reject by one revisor', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -2043,6 +2049,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'Zobraziť online', 'warning' => 'Upozornenie', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/sv_SE/lang.inc b/languages/sv_SE/lang.inc index efb91bfc1..6d47c8605 100644 --- a/languages/sv_SE/lang.inc +++ b/languages/sv_SE/lang.inc @@ -543,6 +543,7 @@ URL: [url]', 'error_add_aro' => 'Fel vid begärd åtkomst till objekt', 'error_add_permission' => 'Fel vid tilldelning av behörighet', 'error_cleared_cache' => 'Fel vid rensning av cache', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => '', 'error_importfs' => 'Fel vid import från filsystem', @@ -680,6 +681,7 @@ URL: [url]', 'group_management' => 'Grupphantering', 'group_members' => 'Gruppmedlemmar', 'group_receipt_summary' => 'Sammanfattning av mottagningsbevis för grupp', +'group_review_removed' => '', 'group_review_summary' => 'Sammanfattning av gruppgranskning', 'group_revision_summary' => '', 'guest_login' => 'Gästinloggning', @@ -722,6 +724,7 @@ URL: [url]', 'index_waiting' => 'Väntar', 'individuals' => 'Personer', 'individuals_in_groups' => 'Medlemmar i en grupp', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '', 'info_rm_user_from_processes_user' => '', 'inherited' => 'ärvd', @@ -1085,6 +1088,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Arbetsflöde borttaget från dokumentversion', 'removeFolderFromDropFolder' => 'Radera katalog efter import', 'remove_marked_files' => 'Ta bort markerade filer', +'remove_review_log' => '', 'repaired' => 'reparerat', 'repairing_objects' => 'Reparerar dokument och kataloger.', 'replace_content_email_body' => '', @@ -1467,6 +1471,8 @@ Kommentar: [comment]', 'settings_enableReceiptWorkflow_desc' => 'Aktivera notifiering av meddelanden i arbetsflödet.', 'settings_enableRecursiveCount' => 'Aktivera rekursiv räkning av dokument/katalog', 'settings_enableRecursiveCount_desc' => 'Om detta sätts på, kommer antal dokument och kataloger i katalogvyn fastställas genom att räkna alla objekter via rekursiv hantering av alla kataloger och räkna dessa dokument och kataloger som användaren har rättigheter till.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -2016,6 +2022,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'Visa online', 'warning' => 'Varning', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/tr_TR/lang.inc b/languages/tr_TR/lang.inc index 7d34a2ab5..7b52ac4e3 100644 --- a/languages/tr_TR/lang.inc +++ b/languages/tr_TR/lang.inc @@ -531,6 +531,7 @@ URL: [url]', 'error_add_aro' => '', 'error_add_permission' => '', 'error_cleared_cache' => '', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => '', 'error_importfs' => '', @@ -668,6 +669,7 @@ URL: [url]', 'group_management' => 'Grup yönetimi', 'group_members' => 'Grup üyeleri', 'group_receipt_summary' => '', +'group_review_removed' => '', 'group_review_summary' => 'Grup gözden geçirme özeti', 'group_revision_summary' => '', 'guest_login' => 'Misafir olarak giriş yap', @@ -710,6 +712,7 @@ URL: [url]', 'index_waiting' => 'Bekliyor', 'individuals' => 'Bireysel', 'individuals_in_groups' => '', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '', 'info_rm_user_from_processes_user' => '', 'inherited' => 'devralındı', @@ -1078,6 +1081,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Doküman versiyonundan iş akışı silindi', 'removeFolderFromDropFolder' => '', 'remove_marked_files' => 'İşaretli dosyaları sil', +'remove_review_log' => '', 'repaired' => 'onarıldı', 'repairing_objects' => 'Doküman ve klasörler onarılıyor.', 'replace_content_email_body' => '', @@ -1433,6 +1437,8 @@ URL: [url]', 'settings_enableReceiptWorkflow_desc' => '', 'settings_enableRecursiveCount' => 'Özyinelenen doküman/klasör sayımını etkinleştir', 'settings_enableRecursiveCount_desc' => 'Aktif hale getirildiğinde, klasör içindeki dokümanlar ve diğer klasörlerin sayısı kullanıcının erişim hakkı olan tüm nesnelerin özyinelemeli olarak sayılması yolu ile bulunur.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -1982,6 +1988,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'Online görüntüle', 'warning' => 'Dikkat', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/uk_UA/lang.inc b/languages/uk_UA/lang.inc index 40560eec0..312396613 100644 --- a/languages/uk_UA/lang.inc +++ b/languages/uk_UA/lang.inc @@ -537,6 +537,7 @@ URL: [url]', 'error_add_aro' => '', 'error_add_permission' => '', 'error_cleared_cache' => '', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => '', 'error_importfs' => '', @@ -674,6 +675,7 @@ URL: [url]', 'group_management' => 'Керування групами', 'group_members' => 'Члени групи', 'group_receipt_summary' => 'Підсумки отримання групи', +'group_review_removed' => '', 'group_review_summary' => 'Підсумки рецензування групи', 'group_revision_summary' => '', 'guest_login' => 'Увійти як гість', @@ -716,6 +718,7 @@ URL: [url]', 'index_waiting' => '', 'individuals' => 'Користувачі', 'individuals_in_groups' => 'Користувачі групи', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '', 'info_rm_user_from_processes_user' => '', 'inherited' => 'успадкований', @@ -1084,6 +1087,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: видалено процес з версії документа «[name]»', 'removeFolderFromDropFolder' => '', 'remove_marked_files' => 'Видалити обрані файли', +'remove_review_log' => '', 'repaired' => 'виправлено', 'repairing_objects' => 'Відновлення каталогів і документів', 'replace_content_email_body' => '', @@ -1454,6 +1458,8 @@ URL: [url]', 'settings_enableReceiptWorkflow_desc' => 'Включіть для активації функції підтвердження отримання документу', 'settings_enableRecursiveCount' => 'Рекурсивно підраховувати
    документи і каталоги', 'settings_enableRecursiveCount_desc' => 'Якщо увімкнено, кількість документів і каталогів при перегляді каталогу буде підраховано рекурсивно для всіх документів до яких користувач має доступ.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -2003,6 +2009,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'Переглянути', 'warning' => 'Увага', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/zh_CN/lang.inc b/languages/zh_CN/lang.inc index 160f585ed..930183fb6 100644 --- a/languages/zh_CN/lang.inc +++ b/languages/zh_CN/lang.inc @@ -531,6 +531,7 @@ URL: [url]', 'error_add_aro' => '', 'error_add_permission' => '添加权限时出错', 'error_cleared_cache' => '清理缓存时出错', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => '', 'error_importfs' => '从文件系统导入时出错', @@ -664,6 +665,7 @@ URL: [url]', 'group_management' => '组管理', 'group_members' => '组成员', 'group_receipt_summary' => '', +'group_review_removed' => '', 'group_review_summary' => '校对组汇总', 'group_revision_summary' => '', 'guest_login' => '来宾登录', @@ -706,6 +708,7 @@ URL: [url]', 'index_waiting' => '', 'individuals' => '个人', 'individuals_in_groups' => '组成员', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '', 'info_rm_user_from_processes_user' => '', 'inherited' => '继承', @@ -1077,6 +1080,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - 已从文档版本中移除工作流', 'removeFolderFromDropFolder' => '导入后删除文件夹', 'remove_marked_files' => '删除选中的文件', +'remove_review_log' => '', 'repaired' => '已修复', 'repairing_objects' => '', 'replace_content_email_body' => '', @@ -1429,6 +1433,8 @@ URL: [url]', 'settings_enableReceiptWorkflow_desc' => '', 'settings_enableRecursiveCount' => '', 'settings_enableRecursiveCount_desc' => '', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -1969,6 +1975,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => '在线浏览', 'warning' => '警告', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/zh_TW/lang.inc b/languages/zh_TW/lang.inc index a39339c14..b347baca5 100644 --- a/languages/zh_TW/lang.inc +++ b/languages/zh_TW/lang.inc @@ -549,6 +549,7 @@ URL: [url]', 'error_add_aro' => '新增訪問請求對象時出錯', 'error_add_permission' => '新增權限時出錯', 'error_cleared_cache' => '清除緩存時出錯', +'error_document_indexed' => '', 'error_edit_task' => '保存任務時出錯', 'error_extension_getlist' => '從存儲庫獲取擴展列表時出錯', 'error_importfs' => '導入表單文件系統時出錯', @@ -693,6 +694,7 @@ URL: [url]', 'group_management' => '組管理', 'group_members' => '組成員', 'group_receipt_summary' => '群組回覆匯總', +'group_review_removed' => '', 'group_review_summary' => '校對組匯總', 'group_revision_summary' => '群組修訂匯總', 'guest_login' => '來賓登錄', @@ -735,6 +737,7 @@ URL: [url]', 'index_waiting' => '請稍後', 'individuals' => '個人', 'individuals_in_groups' => '小組成員', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '由於未發布該文檔版本,因此無法確認接收。', 'info_rm_user_from_processes_user' => '', 'inherited' => '繼承', @@ -1110,6 +1113,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - 從文檔版本中刪除了工作流程', 'removeFolderFromDropFolder' => '導入後刪除文件夾', 'remove_marked_files' => '刪除勾選的檔案', +'remove_review_log' => '', 'repaired' => '修復', 'repairing_objects' => '修復文檔和文件夾。', 'replace_content_email_body' => '', @@ -1492,6 +1496,8 @@ URL: [url]', 'settings_enableReceiptWorkflow_desc' => '啟用,打開工作流程以確認文檔接收。', 'settings_enableRecursiveCount' => '啟用遞歸文檔/文件夾計數', 'settings_enableRecursiveCount_desc' => '如果啟用,將通過遞歸處理文件夾併計數允許用戶訪問的那些文件和文件夾來計算所有對象,從而確定文件夾視圖中的文件和文件夾的數量。', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '被一名審查員拒絕', 'settings_enableRevisionOneVoteReject_desc' => '如果啟用,則在第一個修訂者拒絕文檔後,文檔狀態將設置為“需要更正”。如果禁用,則在所有修訂者完成修訂之前,文檔狀態不會更改。', 'settings_enableRevisionOnVoteReject' => '', @@ -2041,6 +2047,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => '線上流覽', 'warning' => '警告', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', From c9a842e2d0959b0daeafd78c60be64e55808a4d9 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 1 Jul 2021 12:26:43 +0200 Subject: [PATCH 15/56] add entry for 5.1.23 --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index 73454feb9..a3c8ce1b0 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -24,6 +24,7 @@ - comment of document version may not be modified when document has expired - attributes of document version may be edited if enableVersionModification is true even if the document has been released, obsoleted or has been expired +- review can be removed by admin -------------------------------------------------------------------------------- Changes in version 5.1.22 From f28153497e9d6be9a502332f4ce69fcc6461ca92 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 1 Jul 2021 12:45:36 +0200 Subject: [PATCH 16/56] add missing files to package --- SeedDMS_SQLiteFTS/package.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/SeedDMS_SQLiteFTS/package.xml b/SeedDMS_SQLiteFTS/package.xml index 9ebb706fc..a550a95b0 100644 --- a/SeedDMS_SQLiteFTS/package.xml +++ b/SeedDMS_SQLiteFTS/package.xml @@ -48,6 +48,12 @@ + + + + + +
    From 2c4dc73be3628fd352bb175d6ef74b83ca4aff44 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 2 Jul 2021 08:32:18 +0200 Subject: [PATCH 17/56] add new method removeApproval() --- SeedDMS_Core/Core/inc.ClassDocument.php | 47 +++++++++++++++++++++++++ SeedDMS_Core/package.xml | 1 + 2 files changed, 48 insertions(+) diff --git a/SeedDMS_Core/Core/inc.ClassDocument.php b/SeedDMS_Core/Core/inc.ClassDocument.php index 822eea6c6..9345e56d2 100644 --- a/SeedDMS_Core/Core/inc.ClassDocument.php +++ b/SeedDMS_Core/Core/inc.ClassDocument.php @@ -4194,6 +4194,53 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ return $approveLogID; } /* }}} */ + /** + * Add another entry to approval log which resets the status + * + * This method will not delete anything from the database, but will add + * a new review log entry which sets the status to 0. This is only allowed + * if the current status is either 1 or -1. + * + * After calling this method SeedDMS_Core_DocumentCategory::verifyStatus() + * should be called to recalculate the document status. + * + * @param SeedDMS_Core_User $user + * @return int 0 if successful + */ + public function removeApproval($approveid, $requestUser, $comment='') { /* {{{ */ + $db = $this->_document->getDMS()->getDB(); + + // Check to see if the user can be removed from the approval list. + $approvals = $this->getApprovalStatus(); + if (is_bool($approvals) && !$approvals) { + return -1; + } + $approvalStatus = null; + foreach($approvals as $approval) { + if($approval['approveID'] == $approveid) { + $approvalStatus = $approval; + break; + } + } + if(!$approvalStatus) + return -2; + + // The approval log entry may only be removed if the status is 1 or -1 + if ($approvalStatus["status"] != 1 && $approvalStatus["status"] != -1) + return -3; + + $queryStr = "INSERT INTO `tblDocumentApproveLog` (`approveID`, `status`, + `comment`, `date`, `userID`) ". + "VALUES ('". $approvalStatus["approveID"] ."', '0', ".$db->qstr($comment).", ".$db->getCurrentDatetime().", '". + $requestUser->getID() ."')"; + $res=$db->getResult($queryStr); + if (is_bool($res) && !$res) + return -1; + + return 0; + } /* }}} */ + + /** * Sets approval status of a document content for a group * The functions behaves like diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index 24e70aa76..4df5e6bdf 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -31,6 +31,7 @@ - fix checking of email addresses by using filter_var instead of regex - add new method SeedDMS_Core_Document::hasCategory() - add new method SeedDMS_Core_DocumentContent::removeReview() +- add new method SeedDMS_Core_DocumentContent::removeApproval() From 948184b5b023457590ec554b60204246a4b5cef6 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 2 Jul 2021 08:32:56 +0200 Subject: [PATCH 18/56] fix comment in header --- views/bootstrap/class.RemoveReviewLog.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/views/bootstrap/class.RemoveReviewLog.php b/views/bootstrap/class.RemoveReviewLog.php index 236c42375..de0beaeaa 100644 --- a/views/bootstrap/class.RemoveReviewLog.php +++ b/views/bootstrap/class.RemoveReviewLog.php @@ -1,6 +1,6 @@ Date: Fri, 2 Jul 2021 08:34:06 +0200 Subject: [PATCH 19/56] approvals can be removed by admins --- CHANGELOG | 2 +- op/op.RemoveApprovalLog.php | 99 +++++++++++++++ out/out.RemoveApprovalLog.php | 88 ++++++++++++++ views/bootstrap/class.RemoveApprovalLog.php | 126 ++++++++++++++++++++ views/bootstrap/class.ViewDocument.php | 6 +- 5 files changed, 318 insertions(+), 3 deletions(-) create mode 100644 op/op.RemoveApprovalLog.php create mode 100644 out/out.RemoveApprovalLog.php create mode 100644 views/bootstrap/class.RemoveApprovalLog.php diff --git a/CHANGELOG b/CHANGELOG index a3c8ce1b0..663a7d609 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -24,7 +24,7 @@ - comment of document version may not be modified when document has expired - attributes of document version may be edited if enableVersionModification is true even if the document has been released, obsoleted or has been expired -- review can be removed by admin +- reviews and approvals can be removed by admin -------------------------------------------------------------------------------- Changes in version 5.1.22 diff --git a/op/op.RemoveApprovalLog.php b/op/op.RemoveApprovalLog.php new file mode 100644 index 000000000..9aa103a2d --- /dev/null +++ b/op/op.RemoveApprovalLog.php @@ -0,0 +1,99 @@ + getMLText("invalid_request_token"))),getMLText("invalid_request_token")); +} + +if (!isset($_POST["documentid"]) || !is_numeric($_POST["documentid"]) || intval($_POST["documentid"])<1) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); +} + +$documentid = $_POST["documentid"]; +$document = $dms->getDocument($documentid); + +if (!is_object($document)) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); +} + +if (!$user->isAdmin() || $document->getAccessMode($user) < M_ALL) { + UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("access_denied")); +} + +if (!isset($_POST["version"]) || !is_numeric($_POST["version"]) || intval($_POST["version"])<1) { + UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("invalid_version")); +} + +$version = $_POST["version"]; +$content = $document->getContentByVersion($version); + +if (!is_object($content)) { + UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("invalid_version")); +} + +// operation is only allowed for the last document version +$latestContent = $document->getLatestContent(); +if ($latestContent->getVersion()!=$version) { + UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("invalid_version")); +} + +if (!isset($_POST["approveid"]) || !is_numeric($_POST["approveid"]) || intval($_POST["approveid"])<1) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_approveid")); +} +$approveid = $_POST['approveid']; +$approves = $latestContent->getApprovalStatus(); +$approveStatus = null; +foreach($approves as $approve) { + if($approve['approveID'] == $approveid) { + $approveStatus = $approve; + break; + } +} +if(!$approveStatus) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_approveid")); +} + +if($approveStatus['type'] == 0) { + $ruser = $dms->getUser($approveStatus['required']); + $msg = getMLText('ind_approval_removed', array('name'=>$ruser->getFullName())); +} elseif($approveStatus['type'] == 1) { + $rgroup = $dms->getGroup($approveStatus['required']); + $msg = getMLText('group_approval_removed', array('name'=>$rgroup->getName())); +} else + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_approveid")); + +$comment = $_POST["comment"]; +if(0 == $latestContent->removeApproval($approveid, $user, $comment)) { + $latestContent->verifyStatus(true, $user, $msg); +} +header("Location:../out/out.ViewDocument.php?documentid=".$documentid."¤ttab=revapp"); diff --git a/out/out.RemoveApprovalLog.php b/out/out.RemoveApprovalLog.php new file mode 100644 index 000000000..d310c66de --- /dev/null +++ b/out/out.RemoveApprovalLog.php @@ -0,0 +1,88 @@ + getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); +} + +$document = $dms->getDocument(intval($_GET["documentid"])); + +if (!is_object($document)) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); +} + +$folder = $document->getFolder(); + +if (!$user->isAdmin() || $document->getAccessMode($user) < M_ALL) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied")); +} + +if (!isset($_GET["version"]) || !is_numeric($_GET["version"]) || intval($_GET["version"])<1) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_version")); +} +$version = $_GET["version"]; +$content = $document->getContentByVersion($version); +if (!is_object($content)) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_version")); +} + +// operation is admitted only for last document version +$latestContent = $document->getLatestContent(); +if ($latestContent->getVersion()!=$version) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_version")); +} + +if (!isset($_GET["approveid"]) || !is_numeric($_GET["approveid"]) || intval($_GET["approveid"])<1) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_approveid")); +} +$approveid = $_GET['approveid']; + +/* Create object for checking access to certain operations */ +$accessop = new SeedDMS_AccessOperation($dms, $document, $user, $settings); + +$approvals = $content->getApprovalStatus(); +if(!$approvals) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("no_action")); +} + +$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); +$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user)); +if($view) { + $view->setParam('folder', $folder); + $view->setParam('document', $document); + $view->setParam('version', $content); + $view->setParam('approveid', $approveid); + $view->setParam('accessobject', $accessop); + $view($_GET); + exit; +} diff --git a/views/bootstrap/class.RemoveApprovalLog.php b/views/bootstrap/class.RemoveApprovalLog.php new file mode 100644 index 000000000..67d6175a4 --- /dev/null +++ b/views/bootstrap/class.RemoveApprovalLog.php @@ -0,0 +1,126 @@ + + * @copyright Copyright (C) 2002-2005 Markus Westphal, + * 2006-2008 Malcolm Cowe, 2010 Matteo Lucarelli, + * 2010-2012 Uwe Steinmann + * @version Release: @package_version@ + */ + +/** + * Include parent class + */ +//require_once("class.Bootstrap.php"); + +/** + * Class which outputs the html page for RemoveApprovalLog view + * + * @category DMS + * @package SeedDMS + * @author Markus Westphal, Malcolm Cowe, Uwe Steinmann + * @copyright Copyright (C) 2002-2005 Markus Westphal, + * 2006-2008 Malcolm Cowe, 2010 Matteo Lucarelli, + * 2010-2012 Uwe Steinmann + * @version Release: @package_version@ + */ +class SeedDMS_View_RemoveApprovalLog extends SeedDMS_Theme_Style { + + function js() { /* {{{ */ + header('Content-Type: application/javascript; charset=UTF-8'); + parent::jsTranslations(array('js_form_error', 'js_form_errors')); +?> +$(document).ready(function() { + $("#form1").validate({ + rules: { + comment: { + required: true + }, + }, + messages: { + comment: "", + }, + }); +}); +printFileChooserJs(); + } /* }}} */ + + function show() { /* {{{ */ + $dms = $this->params['dms']; + $user = $this->params['user']; + $folder = $this->params['folder']; + $document = $this->params['document']; + $content = $this->params['version']; + $approveid = $this->params['approveid']; + + $approves = $content->getApprovalStatus(); + foreach($approves as $approve) { + if($approve['approveID'] == $approveid) { + $approveStatus = $approve; + break; + } + } + + $this->htmlAddHeader(''."\n", 'js'); + $this->htmlAddHeader(''."\n", 'js'); + + $this->htmlStartPage(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName())))); + $this->globalNavigation($folder); + $this->contentStart(); + $this->pageNavigation($this->getFolderPathHTML($folder, true, $document), "view_document", $document); + $this->contentHeading(getMLText("remove_approval_log")); + $this->warningMsg(getMLText('warning_remove_approval_log')); + + // Display the Approval form. + if($approveStatus["status"]!=0) { + + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + $indUser = $dms->getUser($approveStatus["userID"]); + print ""; + print "
    ".getMLText("status")."".getMLText("comment")."".getMLText("last_update")."
    "; + printApprovalStatusText($approveStatus["status"]); + print "".htmlspecialchars($approveStatus["comment"])."".$approveStatus["date"]." - ". htmlspecialchars($indUser->getFullname()) ."

    \n"; + } +?> +
    + +contentContainerStart(); + + $this->formField( + getMLText("comment"), + array( + 'element'=>'textarea', + 'name'=>'comment', + 'required'=>true, + 'rows'=>4, + 'cols'=>80 + ) + ); + $this->contentContainerEnd(); + + $this->formSubmit(' '.getMLText('remove_approval_log')); +?> + + + +
    +contentEnd(); + $this->htmlEndPage(); + } /* }}} */ +} +?> + diff --git a/views/bootstrap/class.ViewDocument.php b/views/bootstrap/class.ViewDocument.php index 4ed5a9b16..70b389012 100644 --- a/views/bootstrap/class.ViewDocument.php +++ b/views/bootstrap/class.ViewDocument.php @@ -946,8 +946,8 @@ $(document).ready( function() { } } } - if($enableremoverevapp && $user->isAdmin() && ($r['status'] == 1 || $r['status'] == -1)) - echo '
  • '; + if($enableremoverevapp && $user->isAdmin() && ($r['status'] == 1 || $r['status'] == -1)) + echo '
  • '; print "\n"; print "\n"; @@ -1050,6 +1050,8 @@ $(document).ready( function() { } } } + if($enableremoverevapp && $user->isAdmin() && ($a['status'] == 1 || $a['status'] == -1)) + echo '
  • '; print ""; print "\n"; From 56c35b5ebaa22b8c476b9afde45b6e668cc28dea Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 2 Jul 2021 09:28:05 +0200 Subject: [PATCH 20/56] new method showConfigFolder() for selecting a folder, use for libraryFolder --- views/bootstrap/class.Settings.php | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/views/bootstrap/class.Settings.php b/views/bootstrap/class.Settings.php index 9aa54cfe4..e4226e93f 100644 --- a/views/bootstrap/class.Settings.php +++ b/views/bootstrap/class.Settings.php @@ -225,6 +225,19 @@ class SeedDMS_View_Settings extends SeedDMS_Theme_Style { params['settings']; + $dms = $this->params['dms']; +?> + "> + : + +printFolderChooserHtml($name, M_READWRITE, -1, $dms->getFolder($settings->{"_".$name}), $name);?> + + +params['extmgr']; @@ -360,10 +373,7 @@ if(($kkk = $this->callHook('getFullSearchEngine')) && is_array($kkk)) showConfigOption('settings_sortUsersInList', 'sortUsersInList', array(' '=>'settings_sortUsersInList_val_login', 'fullname'=>'settings_sortUsersInList_val_fullname'), false, true); ?> showConfigOption('settings_sortFoldersDefault', 'sortFoldersDefault', array('u'=>'settings_sortFoldersDefault_val_unsorted', 's'=>'settings_sortFoldersDefault_val_sequence', 'n'=>'settings_sortFoldersDefault_val_name'), false, true); ?> showConfigOption('settings_defaultDocPosition', 'defaultDocPosition', array('end'=>'settings_defaultDocPosition_val_end', 'start'=>'settings_defaultDocPosition_val_start'), false, true); ?> - "> - : - printFolderChooserHtml("form1", M_READWRITE, -1, $dms->getFolder($settings->_libraryFolder), 'libraryFolder');?> - +showConfigFolder('settings_libraryFolder', 'libraryFolder'); ?>