From ec5a17f4f3734187377e6393f6056e6a73913309 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 14 Dec 2020 14:32:40 +0100 Subject: [PATCH 001/276] pass attribute value to callback 'onAttributeValidate' --- SeedDMS_Core/Core/inc.ClassAttribute.php | 2 +- SeedDMS_Core/package.xml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/SeedDMS_Core/Core/inc.ClassAttribute.php b/SeedDMS_Core/Core/inc.ClassAttribute.php index 8090c915b..7c8eb3461 100644 --- a/SeedDMS_Core/Core/inc.ClassAttribute.php +++ b/SeedDMS_Core/Core/inc.ClassAttribute.php @@ -1125,7 +1125,7 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */ /* Check if 'onAttributeValidate' callback is set */ if(isset($this->_dms->callbacks['onAttributeValidate'])) { foreach($this->_dms->callbacks['onAttributeValidate'] as $callback) { - $ret = call_user_func($callback[0], $callback[1], $this); + $ret = call_user_func($callback[0], $callback[1], $this, $attrvalue); if(is_bool($ret)) return $ret; } diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index 68cf78f97..fac4ce61c 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -25,6 +25,7 @@ GPL License - SeedDMS_Folder_DMS::getAccessList() and getDefaultAccess() do not return fals anymore if the parent does not exists. They just stop inheritance. +- pass attribute value to callback 'onAttributeValidate' From c4cdf7b92ec34bd5f28e0b4982199f3720f974ba Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 14 Dec 2020 17:20:06 +0100 Subject: [PATCH 002/276] add method getDMS() --- SeedDMS_Core/Core/inc.ClassAttribute.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/SeedDMS_Core/Core/inc.ClassAttribute.php b/SeedDMS_Core/Core/inc.ClassAttribute.php index 7c8eb3461..6cae36dc2 100644 --- a/SeedDMS_Core/Core/inc.ClassAttribute.php +++ b/SeedDMS_Core/Core/inc.ClassAttribute.php @@ -96,6 +96,13 @@ class SeedDMS_Core_Attribute { /* {{{ */ $this->_dms = $dms; } /* }}} */ + /** + * Get dms of attribute + * + * @return object $dms + */ + function getDMS() { return $this->_dms; } + /** * Get internal id of attribute * @@ -469,6 +476,13 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */ $this->_dms = $dms; } /* }}} */ + /** + * Get dms of attribute definition + * + * @return object $dms + */ + function getDMS() { return $this->_dms; } + /** * Get internal id of attribute definition * From 55e02040545b2ecadcb77e8baa482ce6946786fe Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 14 Dec 2020 18:16:35 +0100 Subject: [PATCH 003/276] new parameter 'new' of SeedDMS_Core_AttributeDefinition::validate() --- SeedDMS_Core/Core/inc.ClassAttribute.php | 10 ++++++++-- SeedDMS_Core/package.xml | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/SeedDMS_Core/Core/inc.ClassAttribute.php b/SeedDMS_Core/Core/inc.ClassAttribute.php index 6cae36dc2..f36f29584 100644 --- a/SeedDMS_Core/Core/inc.ClassAttribute.php +++ b/SeedDMS_Core/Core/inc.ClassAttribute.php @@ -1131,15 +1131,21 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */ * definition. * If the validation fails the validation error will be set which * can be requested by SeedDMS_Core_Attribute::getValidationError() + * Set $new to true if the value to be checked isn't saved to the database + * already. It will just be passed to the callback onAttributeValidate where + * it could be used to, e.g. check if a value is unique once it is saved to + * the database. * * @param string|array $attrvalue attribute value + * @param boolean $new set to true if the value is new value and not taken from + * an existing attribute * @return boolean true if validation succeds, otherwise false */ - function validate($attrvalue) { /* {{{ */ + function validate($attrvalue, $new=false) { /* {{{ */ /* Check if 'onAttributeValidate' callback is set */ if(isset($this->_dms->callbacks['onAttributeValidate'])) { foreach($this->_dms->callbacks['onAttributeValidate'] as $callback) { - $ret = call_user_func($callback[0], $callback[1], $this, $attrvalue); + $ret = call_user_func($callback[0], $callback[1], $this, $attrvalue, $new); if(is_bool($ret)) return $ret; } diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index fac4ce61c..ee584ce80 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -26,6 +26,7 @@ - SeedDMS_Folder_DMS::getAccessList() and getDefaultAccess() do not return fals anymore if the parent does not exists. They just stop inheritance. - pass attribute value to callback 'onAttributeValidate' +- new paramter 'new' of methode SeedDMЅ_Core_AttributeDefinition::validate() From 5fdf6f460e8fc066e139c082499f0790a57ea406 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 14 Dec 2020 18:17:19 +0100 Subject: [PATCH 004/276] pass $new=true to $attrdef->validate() --- controllers/class.EditDocument.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controllers/class.EditDocument.php b/controllers/class.EditDocument.php index ff98965d2..680d31577 100644 --- a/controllers/class.EditDocument.php +++ b/controllers/class.EditDocument.php @@ -120,7 +120,7 @@ class SeedDMS_Controller_EditDocument extends SeedDMS_Controller_Common { if($attrdef = $dms->getAttributeDefinition($attrdefid)) { if(null === ($ret = $this->callHook('validateAttribute', $attrdef, $attribute))) { if($attribute) { - if(!$attrdef->validate($attribute)) { + if(!$attrdef->validate($attribute, true)) { $this->errormsg = getAttributeValidationError($attrdef->getValidationError(), $attrdef->getName(), $attribute); return false; } From 6e46e957024307c91c36896314ba52c5d6181cc4 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 14 Dec 2020 18:46:38 +0100 Subject: [PATCH 005/276] pass current object and $new to validate() --- SeedDMS_Core/Core/inc.ClassAttribute.php | 9 ++++++--- controllers/class.EditDocument.php | 2 +- controllers/class.EditFolder.php | 2 +- op/op.EditAttributes.php | 2 +- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/SeedDMS_Core/Core/inc.ClassAttribute.php b/SeedDMS_Core/Core/inc.ClassAttribute.php index f36f29584..b6f342295 100644 --- a/SeedDMS_Core/Core/inc.ClassAttribute.php +++ b/SeedDMS_Core/Core/inc.ClassAttribute.php @@ -1134,18 +1134,21 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */ * Set $new to true if the value to be checked isn't saved to the database * already. It will just be passed to the callback onAttributeValidate where * it could be used to, e.g. check if a value is unique once it is saved to - * the database. + * the database. $object is set to a folder, document or documentcontent + * if the attribute belongs to such an object. This will be null, if a + * new object is created. * * @param string|array $attrvalue attribute value + * @param object $object set if the current attribute is saved for this object * @param boolean $new set to true if the value is new value and not taken from * an existing attribute * @return boolean true if validation succeds, otherwise false */ - function validate($attrvalue, $new=false) { /* {{{ */ + function validate($attrvalue, $object=null, $new=false) { /* {{{ */ /* Check if 'onAttributeValidate' callback is set */ if(isset($this->_dms->callbacks['onAttributeValidate'])) { foreach($this->_dms->callbacks['onAttributeValidate'] as $callback) { - $ret = call_user_func($callback[0], $callback[1], $this, $attrvalue, $new); + $ret = call_user_func($callback[0], $callback[1], $this, $attrvalue, $object, $new); if(is_bool($ret)) return $ret; } diff --git a/controllers/class.EditDocument.php b/controllers/class.EditDocument.php index 680d31577..58ffc8a77 100644 --- a/controllers/class.EditDocument.php +++ b/controllers/class.EditDocument.php @@ -120,7 +120,7 @@ class SeedDMS_Controller_EditDocument extends SeedDMS_Controller_Common { if($attrdef = $dms->getAttributeDefinition($attrdefid)) { if(null === ($ret = $this->callHook('validateAttribute', $attrdef, $attribute))) { if($attribute) { - if(!$attrdef->validate($attribute, true)) { + if(!$attrdef->validate($attribute, $document, true)) { $this->errormsg = getAttributeValidationError($attrdef->getValidationError(), $attrdef->getName(), $attribute); return false; } diff --git a/controllers/class.EditFolder.php b/controllers/class.EditFolder.php index a2d27c34f..0110f6e06 100644 --- a/controllers/class.EditFolder.php +++ b/controllers/class.EditFolder.php @@ -54,7 +54,7 @@ class SeedDMS_Controller_EditFolder extends SeedDMS_Controller_Common { $attrdef = $dms->getAttributeDefinition($attrdefid); if(null === ($ret = $this->callHook('validateAttribute', $attrdef, $attribute))) { if($attribute) { - if(!$attrdef->validate($attribute)) { + if(!$attrdef->validate($attribute, $folder, true)) { $this->errormsg = getAttributeValidationText($attrdef->getValidationError(), $attrdef->getName(), $attribute); return false; } diff --git a/op/op.EditAttributes.php b/op/op.EditAttributes.php index 4397351a6..4181452d3 100644 --- a/op/op.EditAttributes.php +++ b/op/op.EditAttributes.php @@ -71,7 +71,7 @@ if($attributes) { foreach($attributes as $attrdefid=>$attribute) { $attrdef = $dms->getAttributeDefinition($attrdefid); if($attribute) { - if(!$attrdef->validate($attribute)) { + if(!$attrdef->validate($attribute, $version, true)) { $errmsg = getAttributeValidationText($attrdef->getValidationError(), $attrdef->getName(), $attribute); UI::exitError(getMLText("document_title", array("documentname" => $document->getName())), $errmsg); } From 0c399ced957d7c1d9a8f69706a38f5c8bb15efb9 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 15 Dec 2020 10:02:18 +0100 Subject: [PATCH 006/276] fix call of getDocumentChooserHtml() --- views/bootstrap/class.Bootstrap.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index 85ad70bdc..334844127 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -1773,7 +1773,7 @@ $(document).ready(function() { $target = $dms->getDocument($objvalue); else $target = null; - $content .= $this->getDocumentChooserHtml("attr".$attrdef->getId(), $target, $fieldname."[".$attrdef->getId()."]"); + $content .= $this->getDocumentChooserHtml("attr".$attrdef->getId(), M_READ, -1, $target, $fieldname."[".$attrdef->getId()."]"); break; case SeedDMS_Core_AttributeDefinition::type_user: $objvalue = $attribute ? (is_object($attribute) ? $attribute->getValueAsArray() : $attribute) : array(); From faf45dc2533e456b4f87fffea76ae2ac59404d95 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 15 Dec 2020 10:02:30 +0100 Subject: [PATCH 007/276] searchdocs returns only docs with at least read access --- op/op.Ajax.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/op/op.Ajax.php b/op/op.Ajax.php index 5edac3348..017b295ac 100644 --- a/op/op.Ajax.php +++ b/op/op.Ajax.php @@ -125,15 +125,21 @@ switch($command) { } break; /* }}} */ + /* Used for document chooser */ case 'searchdocument': /* {{{ */ if($user) { $query = $_GET['query']; + $status = isset($_GET['status']) ? (is_array($_GET['status']) ? $_GET['status'] : array($_GET['status'])) : array(); - $hits = $dms->search($query, $limit=0, $offset=0, $logicalmode='AND', $searchin=array(), $startFolder=null, $owner=null, $status = array(), $creationstartdate=array(), $creationenddate=array(), $modificationstartdate=array(), $modificationenddate=array(), $categories=array(), $attributes=array(), $mode=0x1, $expirationstartdate=array(), $expirationenddate=array()); + $hits = $dms->search($query, $limit=0, $offset=0, $logicalmode='AND', $searchin=array(), $startFolder=null, $owner=null, $status, $creationstartdate=array(), $creationenddate=array(), $modificationstartdate=array(), $modificationenddate=array(), $categories=array(), $attributes=array(), $mode=0x1, $expirationstartdate=array(), $expirationenddate=array()); if($hits) { $result = array(); foreach($hits['docs'] as $hit) { - $result[] = $hit->getID().'#'.$hit->getName(); + if ($hit->getAccessMode($user) >= M_READ) { + if($hit->getLatestContent()) { + $result[] = $hit->getID().'#'.$hit->getName(); + } + } } header('Content-Type: application/json'); echo json_encode($result); @@ -141,6 +147,7 @@ switch($command) { } break; /* }}} */ + /* Used for folder chooser */ case 'searchfolder': /* {{{ */ if($user) { $query = $_GET['query']; From 5261cce10cf9ac4d78219b319ecd78bd59f24692 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 15 Dec 2020 10:03:28 +0100 Subject: [PATCH 008/276] fix syntax error --- controllers/class.AddDocument.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controllers/class.AddDocument.php b/controllers/class.AddDocument.php index 482c5ec35..80e0c6213 100644 --- a/controllers/class.AddDocument.php +++ b/controllers/class.AddDocument.php @@ -147,7 +147,7 @@ class SeedDMS_Controller_AddDocument extends SeedDMS_Controller_Common { } } - if(false ==== $this->callHook('postAddDocument', $document)) { + if(false === $this->callHook('postAddDocument', $document)) { if(empty($this->errormsg)) $this->errormsg = 'hook_postAddDocument_failed'; return false; From 2d4007d62fcd17577a8a3eed7fc0b2f8b46018b8 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 15 Dec 2020 17:05:04 +0100 Subject: [PATCH 009/276] fix comment --- SeedDMS_Core/Core/inc.ClassDocument.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SeedDMS_Core/Core/inc.ClassDocument.php b/SeedDMS_Core/Core/inc.ClassDocument.php index cff7ef9a8..db73e29be 100644 --- a/SeedDMS_Core/Core/inc.ClassDocument.php +++ b/SeedDMS_Core/Core/inc.ClassDocument.php @@ -2189,8 +2189,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ * Get the latest version of document * * This function returns the latest accessible version of a document. - * If content access has been restricted by setting - * {@link SeedDMS_Core_DMS::noReadForStatus} the function will go + * If content access has been restricted by the role of the user + * the function will go * backwards in history until an accessible version is found. If none * is found null will be returned. * Access rights based on the document status are calculated for the From 70c5b90643d6ba307792d95acde2e32064f8f376 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 15 Dec 2020 17:42:07 +0100 Subject: [PATCH 010/276] add hook documentListRowBelowTitle --- views/bootstrap/class.Bootstrap.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index 79b86d7d8..7c0007865 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -2659,7 +2659,11 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) $content .= "" . htmlspecialchars($document->getName()) . ""; if(isset($extracontent['below_title'])) $content .= $extracontent['below_title']; - $content .= "
".getMLText('owner').": ".htmlspecialchars($owner->getFullName()).", ".getMLText('creation_date').": ".getReadableDate($document->getDate()).", ".getMLText('version')." ".$version." - ".getReadableDate($latestContent->getDate())."".($document->expires() ? ", ".getMLText('expires').": ".getReadableDate($document->getExpires())."" : "").""; + $content .= "
"; + if($belowtitle = $this->callHook('documentListRowBelowTitle', $document, $latestContent)) + $content .= $belowtitle; + else + $content .= "".getMLText('owner').": ".htmlspecialchars($owner->getFullName()).", ".getMLText('creation_date').": ".getReadableDate($document->getDate()).", ".getMLText('version')." ".$version." - ".getReadableDate($latestContent->getDate())."".($document->expires() ? ", ".getMLText('expires').": ".getReadableDate($document->getExpires())."" : "").""; if($comment) { $content .= "
".htmlspecialchars($comment).""; } From a3be420b88d69792ed021a560166577ac1edbad2 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 15 Dec 2020 20:20:37 +0100 Subject: [PATCH 011/276] use class_parents() instead of get_class_parent() --- inc/inc.ClassControllerCommon.php | 8 ++++++-- inc/inc.ClassViewCommon.php | 6 ++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/inc/inc.ClassControllerCommon.php b/inc/inc.ClassControllerCommon.php index dab542824..c0454150d 100644 --- a/inc/inc.ClassControllerCommon.php +++ b/inc/inc.ClassControllerCommon.php @@ -193,8 +193,12 @@ class SeedDMS_Controller_Common { $tmps = array(); $tmp = explode('_', get_class($this)); $tmps[] = $tmp[2]; - $tmp = explode('_', get_parent_class($this)); - $tmps[] = $tmp[2]; + foreach(class_parents($this) as $pc) { + $tmp = explode('_', $pc); + $tmps[] = $tmp[2]; + } +// $tmp = explode('_', get_parent_class($this)); +// $tmps[] = $tmp[2]; /* Run array_unique() in case the parent class has the same suffix */ $tmps = array_unique($tmps); foreach($tmps as $tmp) diff --git a/inc/inc.ClassViewCommon.php b/inc/inc.ClassViewCommon.php index 1d8f1245b..37b153a68 100644 --- a/inc/inc.ClassViewCommon.php +++ b/inc/inc.ClassViewCommon.php @@ -112,8 +112,10 @@ class SeedDMS_View_Common { $tmps = array(); $tmp = explode('_', get_class($this)); $tmps[] = $tmp[2]; - $tmp = explode('_', get_parent_class($this)); - $tmps[] = $tmp[2]; + foreach(class_parents($this) as $pc) { + $tmp = explode('_', $pc); + $tmps[] = $tmp[2]; + } /* Run array_unique() in case the parent class has the same suffix */ $tmps = array_unique($tmps); $ret = null; From c2783c6d7086d56e9e746aa6a9ed95a84acbff26 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 15 Dec 2020 21:39:10 +0100 Subject: [PATCH 012/276] fix calculating total of docs and folders --- out/out.Search.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/out/out.Search.php b/out/out.Search.php index 9c8ccf174..3b0e6ca11 100644 --- a/out/out.Search.php +++ b/out/out.Search.php @@ -482,7 +482,7 @@ if(((!isset($_GET["fullsearch"]) && $settings->_defaultSearchMethod == 'fulltext 'expirationenddate'=>$expirationdate ? $expstopdate : array(), 'orderby'=>$orderby )); - $total = $resArr['totalDocs'] + $res['totalFolders']; + $total = $resArr['totalDocs'] + $resArr['totalFolders']; $searchTime = getTime() - $startTime; $searchTime = round($searchTime, 2); From 5323feca9b05b253b804662b52f5e368f2645b5a Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 16 Dec 2020 10:41:52 +0100 Subject: [PATCH 013/276] add hook preRecipientsTab --- views/bootstrap/class.ViewDocument.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/views/bootstrap/class.ViewDocument.php b/views/bootstrap/class.ViewDocument.php index ef71456ae..5de7f8c21 100644 --- a/views/bootstrap/class.ViewDocument.php +++ b/views/bootstrap/class.ViewDocument.php @@ -1297,7 +1297,11 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { ".getMLText('info_recipients_tab_not_released').""; -// $this->contentContainerStart(); + + $txt = $this->callHook('preRecipientsTab', $receiptStatus); + if(is_string($txt)) + echo $txt; + print "\n"; print "\n"; From 68ae8c17a5d9103c8cabd3be8e40787855725da2 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 16 Dec 2020 16:47:49 +0100 Subject: [PATCH 014/276] check if folder/document is below rootDir can be turned on (default off) --- SeedDMS_Core/Core/inc.ClassDMS.php | 19 +++++++++++ SeedDMS_Core/Core/inc.ClassDocument.php | 2 ++ SeedDMS_Core/Core/inc.ClassFolder.php | 45 ++++++++++++++++++++----- SeedDMS_Core/package.xml | 1 + 4 files changed, 58 insertions(+), 9 deletions(-) diff --git a/SeedDMS_Core/Core/inc.ClassDMS.php b/SeedDMS_Core/Core/inc.ClassDMS.php index 88ee61414..e39ab82c8 100644 --- a/SeedDMS_Core/Core/inc.ClassDMS.php +++ b/SeedDMS_Core/Core/inc.ClassDMS.php @@ -161,6 +161,13 @@ class SeedDMS_Core_DMS { */ public $noReadForStatus; + /** + * @var boolean $checkWithinRootDir check if folder/document being accessed + * is within the rootdir + * @access public + */ + public $checkWithinRootDir; + /** * @var string $version version of pear package * @access public @@ -383,6 +390,7 @@ class SeedDMS_Core_DMS { $this->rootFolderID = 1; $this->maxDirID = 0; //31998; $this->forceRename = false; + $this->checkWithinRootDir = false; $this->enableConverting = false; $this->convertFileTypes = array(); $this->noReadForStatus = array(); @@ -1472,6 +1480,10 @@ class SeedDMS_Core_DMS { $searchFolder = ""; if ($startFolder) { $searchFolder = "`tblFolders`.`folderList` LIKE '%:".$startFolder->getID().":%'"; + if($this->checkWithinRootDir) + $searchFolder = '('.$searchFolder." AND `tblFolders`.`folderList` LIKE '%:".$this->rootFolderID.":%')"; + } elseif($this->checkWithinRootDir) { + $searchFolder = "`tblFolders`.`folderList` LIKE '%:".$this->rootFolderID.":%'"; } // Check to see if the search has been restricted to a particular @@ -1634,6 +1646,10 @@ class SeedDMS_Core_DMS { $searchFolder = ""; if ($startFolder) { $searchFolder = "`tblDocuments`.`folderList` LIKE '%:".$startFolder->getID().":%'"; + if($this->checkWithinRootDir) + $searchFolder = '('.$searchFolder." AND `tblDocuments`.`folderList` LIKE '%:".$this->rootFolderID.":%')"; + } elseif($this->checkWithinRootDir) { + $searchFolder = "`tblDocuments`.`folderList` LIKE '%:".$this->rootFolderID.":%'"; } // Check to see if the search has been restricted to a particular @@ -1920,6 +1936,9 @@ class SeedDMS_Core_DMS { * @return SeedDMS_Core_Folder|boolean found folder or false */ function getFolderByName($name, $folder=null) { /* {{{ */ + $classname = $this->classnames['folder']; + return $classname::getInstanceByName($name, $folder, $this); + if (!$name) return false; $queryStr = "SELECT * FROM `tblFolders` WHERE `name` = " . $this->db->qstr($name); diff --git a/SeedDMS_Core/Core/inc.ClassDocument.php b/SeedDMS_Core/Core/inc.ClassDocument.php index 343b0c94b..5b155171b 100644 --- a/SeedDMS_Core/Core/inc.ClassDocument.php +++ b/SeedDMS_Core/Core/inc.ClassDocument.php @@ -294,6 +294,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ // $queryStr = "SELECT * FROM `tblDocuments` WHERE `id` = " . (int) $id; $queryStr = "SELECT `tblDocuments`.*, `tblDocumentLocks`.`userID` as `lock` FROM `tblDocuments` LEFT JOIN `tblDocumentLocks` ON `tblDocuments`.`id` = `tblDocumentLocks`.`document` WHERE `id` = " . (int) $id; + if($dms->checkWithinRootDir) + $queryStr .= " AND `folderList` LIKE '%:".$dms->rootFolderID.":%'"; $resArr = $db->getResultArray($queryStr); if (is_bool($resArr) && $resArr == false) return false; diff --git a/SeedDMS_Core/Core/inc.ClassFolder.php b/SeedDMS_Core/Core/inc.ClassFolder.php index 3602a4f54..25b01e6f1 100644 --- a/SeedDMS_Core/Core/inc.ClassFolder.php +++ b/SeedDMS_Core/Core/inc.ClassFolder.php @@ -205,21 +205,48 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { $db = $dms->getDB(); $queryStr = "SELECT * FROM `tblFolders` WHERE `id` = " . (int) $id; + if($dms->checkWithinRootDir && ($id != $dms->rootFolderID)) + $queryStr .= " AND `folderList` LIKE '%:".$dms->rootFolderID.":%'"; $resArr = $db->getResultArray($queryStr); if (is_bool($resArr) && $resArr == false) return false; - else if (count($resArr) != 1) + elseif (count($resArr) != 1) return null; return self::getInstanceByData($resArr[0], $dms); - - $resArr = $resArr[0]; - $classname = $dms->getClassname('folder'); - /** @var SeedDMS_Core_Folder $folder */ - $folder = new $classname($resArr["id"], $resArr["name"], $resArr["parent"], $resArr["comment"], $resArr["date"], $resArr["owner"], $resArr["inheritAccess"], $resArr["defaultAccess"], $resArr["sequence"]); - $folder->setDMS($dms); - $folder = $folder->applyDecorators(); - return $folder; + } /* }}} */ + + /** + * Return a folder by its name + * + * This function retrieves a folder from the database by its name. The + * search covers the whole database. If + * the parameter $folder is not null, it will search for the name + * only within this parent folder. It will not be done recursively. + * + * @param string $name name of the folder + * @param SeedDMS_Core_Folder $folder parent folder + * @return SeedDMS_Core_Folder|boolean found folder or false + */ + public static function getInstanceByName($name, $folder=null, $dms) { /* {{{ */ + if (!$name) return false; + + $db = $dms->getDB(); + $queryStr = "SELECT * FROM `tblFolders` WHERE `name` = " . $db->qstr($name); + if($folder) + $queryStr .= " AND `parent` = ". $folder->getID(); + if($dms->checkWithinRootDir && ($id != $dms->rootFolderID)) + $queryStr .= " AND `folderList` LIKE '%:".$dms->rootFolderID.":%'"; + $queryStr .= " LIMIT 1"; + $resArr = $db->getResultArray($queryStr); + + if (is_bool($resArr) && $resArr == false) + return false; + + if(!$resArr) + return false; + + return self::getInstanceByData($resArr[0], $dms); } /* }}} */ /** diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index ee584ce80..87fc2511f 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -27,6 +27,7 @@ - SeedDMS_Folder_DMS::getAccessList() and getDefaultAccess() do not return fals anymore if the parent does not exists. They just stop inheritance. - pass attribute value to callback 'onAttributeValidate' - new paramter 'new' of methode SeedDMЅ_Core_AttributeDefinition::validate() +- check if folder/document is below rootDir can be turned on (default off) From 22cf24250c25824685839f076db4e84bc991798f Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 16 Dec 2020 16:48:30 +0100 Subject: [PATCH 015/276] check if getting document succeeded --- views/bootstrap/class.Tasks.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/views/bootstrap/class.Tasks.php b/views/bootstrap/class.Tasks.php index cbc919f72..86492413f 100644 --- a/views/bootstrap/class.Tasks.php +++ b/views/bootstrap/class.Tasks.php @@ -55,7 +55,7 @@ class SeedDMS_View_Tasks extends SeedDMS_Bootstrap_Style { $docs = array(); foreach ($resArr as $res) { $document = $dms->getDocument($res["id"]); - if($document->getAccessMode($user) >= M_READ && $document->getLatestContent()) { + if($document && $document->getAccessMode($user) >= M_READ && $document->getLatestContent()) { $docs[] = $document; // $tasks['approval'][] = array('id'=>$res['id'], 'name'=>$res['name']); } @@ -71,7 +71,7 @@ class SeedDMS_View_Tasks extends SeedDMS_Bootstrap_Style { $docs = array(); foreach ($resArr as $res) { $document = $dms->getDocument($res["id"]); - if($document->getAccessMode($user) >= M_READ && $document->getLatestContent()) { + if($document && $document->getAccessMode($user) >= M_READ && $document->getLatestContent()) { $docs[] = $document; // $tasks['review'][] = array('id'=>$res['id'], 'name'=>$res['name']); } @@ -88,7 +88,7 @@ class SeedDMS_View_Tasks extends SeedDMS_Bootstrap_Style { $docs = array(); foreach ($resArr as $res) { $document = $dms->getDocument($res["id"]); - if($document->getAccessMode($user) >= M_READ && $document->getLatestContent()) { + if($document && $document->getAccessMode($user) >= M_READ && $document->getLatestContent()) { $docs[] = $document; // $tasks['workflow'][] = array('id'=>$res['id'], 'name'=>$res['name']); } @@ -104,7 +104,7 @@ class SeedDMS_View_Tasks extends SeedDMS_Bootstrap_Style { $docs = array(); foreach ($resArr as $res) { $document = $dms->getDocument($res["id"]); - if($document->getAccessMode($user) >= M_READ && $document->getLatestContent()) { + if($document && $document->getAccessMode($user) >= M_READ && $document->getLatestContent()) { $docs[] = $document; } } From 2c008bafeeb934ac7baf5b1c5fd48d681c7f4bbd Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 17 Dec 2020 09:37:50 +0100 Subject: [PATCH 016/276] allow editAttributes in S_IN_REVISION and S_DRAFT_APP --- inc/inc.ClassAccessOperation.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/inc.ClassAccessOperation.php b/inc/inc.ClassAccessOperation.php index a43530c10..c09101d25 100644 --- a/inc/inc.ClassAccessOperation.php +++ b/inc/inc.ClassAccessOperation.php @@ -275,7 +275,7 @@ class SeedDMS_AccessOperation { if($latestContent = $document->getLatestContent()) { $status = $latestContent->getStatus(); $workflow = $latestContent->getWorkflow(); - if ((($this->settings->_enableVersionModification && ($document->getAccessMode($this->user) >= M_READWRITE)) || $this->user->isAdmin()) && ($status["status"]==S_DRAFT_REV || ($workflow && $workflow->getInitState()->getID() == $latestContent->getWorkflowState()->getID()))) { + if ((($this->settings->_enableVersionModification && ($document->getAccessMode($this->user) >= M_READWRITE)) || $this->user->isAdmin()) && (in_array($status["status"], array(S_DRAFT_REV, S_DRAFT_APP, S_IN_REVISION)) || ($workflow && $workflow->getInitState()->getID() == $latestContent->getWorkflowState()->getID()))) { return true; } } From 2cc6ca95e9a138989a5788c8a73cab54b213e823 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 17 Dec 2020 09:41:48 +0100 Subject: [PATCH 017/276] allow edit attributes in S_DRAFT_APP --- inc/inc.ClassAccessOperation.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/inc.ClassAccessOperation.php b/inc/inc.ClassAccessOperation.php index 352c7cead..0b838d546 100644 --- a/inc/inc.ClassAccessOperation.php +++ b/inc/inc.ClassAccessOperation.php @@ -226,7 +226,7 @@ class SeedDMS_AccessOperation { $latestContent = $this->obj->getLatestContent(); $status = $latestContent->getStatus(); $workflow = $latestContent->getWorkflow(); - if ((($this->settings->_enableVersionModification && ($this->obj->getAccessMode($this->user) >= M_READWRITE)) || $this->user->isAdmin()) && ($status["status"]==S_DRAFT_REV || ($workflow && $workflow->getInitState()->getID() == $latestContent->getWorkflowState()->getID()))) { + if ((($this->settings->_enableVersionModification && ($this->obj->getAccessMode($this->user) >= M_READWRITE)) || $this->user->isAdmin()) && (in_array($status["status"], array(S_DRAFT_REV, S_DRAFT_APP)) || ($workflow && $workflow->getInitState()->getID() == $latestContent->getWorkflowState()->getID()))) { return true; } } From b9ad6e250fdebec16493b4c0e2504fdf5ceb5dd6 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 17 Dec 2020 11:42:20 +0100 Subject: [PATCH 018/276] add function getConvertDateFormat() --- inc/inc.Utils.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/inc/inc.Utils.php b/inc/inc.Utils.php index 49cef3443..0747c4abe 100644 --- a/inc/inc.Utils.php +++ b/inc/inc.Utils.php @@ -26,6 +26,21 @@ function formatted_size($size_bytes) { /* {{{ */ return number_format($size_bytes,0,"","")." Bytes"; } /* }}} */ +/* Date picker needs a different syntax for date formats using + * yyyy for %Y + * yy for %y + * mm for %m + * dd for %d + * This functions returns the converted format + */ +function getConvertDateFormat() { + global $settings; + if($settings->_dateformat) { + return str_replace(['y', 'Y', 'm', 'M', 'F', 'd', 'l', 'D'], ['yy', 'yyyy', 'mm', 'M', 'MM', 'dd', 'DD', 'D'], $settings->_dateformat); + } else + return 'yyyy-mm-dd'; +} + function getReadableDate($timestamp) { /* {{{ */ global $settings; if(!is_numeric($timestamp)) From 88f3205be70a31a12c2173086911b06852e09af1 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 17 Dec 2020 11:43:31 +0100 Subject: [PATCH 019/276] dateformat of date picker is created from configured date format --- views/bootstrap/class.Bootstrap.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index 7c0007865..658bf4a91 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -1199,11 +1199,13 @@ $(document).ready(function() { echo self::getFileChooserHtml($varname, $multiple, $accept); } /* }}} */ - function printDateChooser($defDate = '', $varName, $lang='', $dateformat='yyyy-mm-dd', $startdate='', $enddate='') { /* {{{ */ + function printDateChooser($defDate = '', $varName, $lang='', $dateformat='', $startdate='', $enddate='') { /* {{{ */ echo self::getDateChooser($defDate, $varName, $lang, $dateformat, $startdate, $enddate); } /* }}} */ - function getDateChooser($defDate = '', $varName, $lang='', $dateformat='yyyy-mm-dd', $startdate='', $enddate='') { /* {{{ */ + function getDateChooser($defDate = '', $varName, $lang='', $dateformat='', $startdate='', $enddate='') { /* {{{ */ + if(!$dateformat) + $dateformat = getConvertDateFormat(); $content = ' From efe6fe085d7f169191db5ea3593e661c7e75605a Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 17 Dec 2020 11:44:19 +0100 Subject: [PATCH 020/276] add support for using configured date format --- op/op.SetExpires.php | 10 ++++++++-- styles/bootstrap/application.js | 2 +- views/bootstrap/class.SetExpires.php | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/op/op.SetExpires.php b/op/op.SetExpires.php index 20fc29011..067aaf23c 100644 --- a/op/op.SetExpires.php +++ b/op/op.SetExpires.php @@ -49,8 +49,9 @@ if (!isset($_POST["presetexpdate"]) || $_POST["presetexpdate"] == "") { switch($_POST["presetexpdate"]) { case "date": - $tmp = explode('-', $_POST["expdate"]); - $expires = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]); + $expires = strtotime($_POST["expdate"]); +// $tmp = explode('-', $_POST["expdate"]); +// $expires = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]); break; case "1w": $tmp = explode('-', date('Y-m-d')); @@ -88,6 +89,11 @@ if(isset($GLOBALS['SEEDDMS_HOOKS']['setExpires'])) { if (!$document->setExpires($expires)){ UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured")); +} else { + if($expires) + $session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_expiration_date_set', array('date'=>getReadableDate($expires))))); + else + $session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_expiration_date_cleared'))); } $document->verifyLastestContentExpriry(); diff --git a/styles/bootstrap/application.js b/styles/bootstrap/application.js index 297376c36..b6e349dbf 100644 --- a/styles/bootstrap/application.js +++ b/styles/bootstrap/application.js @@ -63,7 +63,7 @@ $(document).ready( function() { $('body').on('touchstart.dropdown', '.dropdown-menu', function (e) { e.stopPropagation(); }); - $('.datepicker, #expirationdate, #fromdate, #todate, #createstartdate, #createenddate, #expirationstartdate, #expirationenddate') + $('.datepicker, #expirationdate, #createstartdate, #createenddate, #expirationstartdate, #expirationenddate') .datepicker({todayHighlight: true, toggleActive: true}) .on('changeDate', function(ev){ if(ev.date && $(ev.target).data('selectmenu')) { diff --git a/views/bootstrap/class.SetExpires.php b/views/bootstrap/class.SetExpires.php index 426388f2e..d560e1d93 100644 --- a/views/bootstrap/class.SetExpires.php +++ b/views/bootstrap/class.SetExpires.php @@ -59,7 +59,7 @@ $(document).ready( function() { $this->contentContainerStart(); if($document->expires()) - $expdate = date('Y-m-d', $document->getExpires()); + $expdate = getReadableDate($document->getExpires()); else $expdate = ''; ?> From d624b3c9efb22638b943002a153329504dcbe26a Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 17 Dec 2020 13:40:04 +0100 Subject: [PATCH 021/276] parameter of getReadableDate() is optional, add makeTsFromDate() --- inc/inc.Utils.php | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/inc/inc.Utils.php b/inc/inc.Utils.php index 0747c4abe..4e90b65c2 100644 --- a/inc/inc.Utils.php +++ b/inc/inc.Utils.php @@ -41,9 +41,11 @@ function getConvertDateFormat() { return 'yyyy-mm-dd'; } -function getReadableDate($timestamp) { /* {{{ */ +function getReadableDate($timestamp=0) { /* {{{ */ global $settings; - if(!is_numeric($timestamp)) + if(!$timestamp) + $timestamp = time(); + elseif(!is_numeric($timestamp)) $timestamp = strtotime($timestamp); if($settings->_dateformat) return date($settings->_dateformat, $timestamp); @@ -84,6 +86,16 @@ function getPeriodOfTime($timestamp) { /* {{{ */ } } /* }}} */ +/* + * Converts a date string into a timestamp + * + * @param $date string date in format understood by strftime + * @return integer/boolean unix timestamp or false in case of an error + */ +function makeTsFromDate($date) { /* {{{ */ + return strtotime($date); +} /* }}} */ + /* * Converts a date/time string into a timestamp * @@ -91,6 +103,7 @@ function getPeriodOfTime($timestamp) { /* {{{ */ * @return integer/boolean unix timestamp or false in case of an error */ function makeTsFromLongDate($date) { /* {{{ */ + return strtotime($date); $tmp = explode(' ', $date); if(count($tmp) != 2) return false; From d9fa86758266db509a4121a2829871da431ee61a Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 17 Dec 2020 13:41:00 +0100 Subject: [PATCH 022/276] add support for configurable date format --- controllers/class.AddDocument.php | 10 ++++++++++ controllers/class.EditDocument.php | 5 +++++ op/op.AddDocument.php | 9 +++++---- op/op.AddEvent.php | 10 ++++++---- op/op.EditAttributes.php | 5 +++++ op/op.EditDocument.php | 5 +++-- op/op.EditEvent.php | 12 +++++++----- op/op.SetExpires.php | 2 +- op/op.UpdateDocument.php | 10 ++++++++-- views/bootstrap/class.AddDocument.php | 2 +- views/bootstrap/class.AddEvent.php | 2 +- views/bootstrap/class.Bootstrap.php | 4 +++- views/bootstrap/class.Calendar.php | 4 ++-- views/bootstrap/class.EditDocument.php | 2 +- views/bootstrap/class.Timeline.php | 19 ++----------------- views/bootstrap/class.UpdateDocument.php | 2 +- 16 files changed, 61 insertions(+), 42 deletions(-) diff --git a/controllers/class.AddDocument.php b/controllers/class.AddDocument.php index 80e0c6213..d3ecb2679 100644 --- a/controllers/class.AddDocument.php +++ b/controllers/class.AddDocument.php @@ -59,6 +59,11 @@ class SeedDMS_Controller_AddDocument extends SeedDMS_Controller_Common { if($attrdef = $dms->getAttributeDefinition($attrdefid)) { if(null === ($ret = $this->callHook('validateAttribute', $attrdef, $attribute))) { if($attribute) { + switch($attrdef->getType()) { + case SeedDMS_Core_AttributeDefinition::type_date: + $attribute = date('Y-m-d', makeTsFromDate($attribute)); + break; + } if(!$attrdef->validate($attribute)) { $this->errormsg = getAttributeValidationError($attrdef->getValidationError(), $attrdef->getName(), $attribute); return false; @@ -78,6 +83,11 @@ class SeedDMS_Controller_AddDocument extends SeedDMS_Controller_Common { if($attrdef = $dms->getAttributeDefinition($attrdefid)) { if(null === ($ret = $this->callHook('validateAttribute', $attrdef, $attribute))) { if($attribute) { + switch($attrdef->getType()) { + case SeedDMS_Core_AttributeDefinition::type_date: + $attribute = date('Y-m-d', makeTsFromDate($attribute)); + break; + } if(!$attrdef->validate($attribute)) { $this->errormsg = getAttributeValidationError($attrdef->getValidationError(), $attrdef->getName(), $attribute); return false; diff --git a/controllers/class.EditDocument.php b/controllers/class.EditDocument.php index 58ffc8a77..ef91be1c0 100644 --- a/controllers/class.EditDocument.php +++ b/controllers/class.EditDocument.php @@ -120,6 +120,11 @@ class SeedDMS_Controller_EditDocument extends SeedDMS_Controller_Common { if($attrdef = $dms->getAttributeDefinition($attrdefid)) { if(null === ($ret = $this->callHook('validateAttribute', $attrdef, $attribute))) { if($attribute) { + switch($attrdef->getType()) { + case SeedDMS_Core_AttributeDefinition::type_date: + $attribute = date('Y-m-d', makeTsFromDate($attribute)); + break; + } if(!$attrdef->validate($attribute, $document, true)) { $this->errormsg = getAttributeValidationError($attrdef->getValidationError(), $attrdef->getName(), $attribute); return false; diff --git a/op/op.AddDocument.php b/op/op.AddDocument.php index 7a559f826..f76224216 100644 --- a/op/op.AddDocument.php +++ b/op/op.AddDocument.php @@ -135,10 +135,11 @@ if (!is_numeric($sequence)) { switch($_POST["presetexpdate"]) { case "date": - $tmp = explode('-', $_POST["expdate"]); - if(count($tmp) != 3) - UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),getMLText("malformed_expiration_date")); - $expires = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]); + $expires = makeTsFromDate($_POST["expdate"]); +// $tmp = explode('-', $_POST["expdate"]); +// if(count($tmp) != 3) +// UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),getMLText("malformed_expiration_date")); +// $expires = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]); break; case "1w": $tmp = explode('-', date('Y-m-d')); diff --git a/op/op.AddEvent.php b/op/op.AddEvent.php index c18aac653..b5ce57a54 100644 --- a/op/op.AddEvent.php +++ b/op/op.AddEvent.php @@ -49,14 +49,16 @@ if (!isset($_POST["name"]) || !isset($_POST["comment"]) ) { $name = $_POST["name"]; $comment = $_POST["comment"]; if(isset($_POST["from"])) { - $tmp = explode('-', $_POST["from"]); - $from = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]); + $from = makeTsFromDate($_POST["from"]); +// $tmp = explode('-', $_POST["from"]); +// $from = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]); } else { $from = mktime(0,0,0, intval($_POST["frommonth"]), intval($_POST["fromday"]), intval($_POST["fromyear"])); } if(isset($_POST["to"])) { - $tmp = explode('-', $_POST["to"]); - $to = mktime(23,59,59, $tmp[1], $tmp[2], $tmp[0]); + $to = makeTsFromDate($_POST["to"])+86400; +// $tmp = explode('-', $_POST["to"]); +// $to = mktime(23,59,59, $tmp[1], $tmp[2], $tmp[0]); } else { $to = mktime(23,59,59, intval($_POST["tomonth"]), intval($_POST["today"]), intval($_POST["toyear"])); } diff --git a/op/op.EditAttributes.php b/op/op.EditAttributes.php index 4181452d3..cde0f86e4 100644 --- a/op/op.EditAttributes.php +++ b/op/op.EditAttributes.php @@ -71,6 +71,11 @@ if($attributes) { foreach($attributes as $attrdefid=>$attribute) { $attrdef = $dms->getAttributeDefinition($attrdefid); if($attribute) { + switch($attrdef->getType()) { + case SeedDMS_Core_AttributeDefinition::type_date: + $attribute = date('Y-m-d', makeTsFromDate($attribute)); + break; + } if(!$attrdef->validate($attribute, $version, true)) { $errmsg = getAttributeValidationText($attrdef->getValidationError(), $attrdef->getName(), $attribute); UI::exitError(getMLText("document_title", array("documentname" => $document->getName())), $errmsg); diff --git a/op/op.EditDocument.php b/op/op.EditDocument.php index 2911cbbe9..44e4556a1 100644 --- a/op/op.EditDocument.php +++ b/op/op.EditDocument.php @@ -79,8 +79,9 @@ else if(isset($_POST['presetexpdate'])) { switch($_POST["presetexpdate"]) { case "date": - $tmp = explode('-', $_POST["expdate"]); - $expires = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]); + $expires = makeTsFromDate($_POST["expdate"]); +// $tmp = explode('-', $_POST["expdate"]); +// $expires = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]); break; case "1w": $tmp = explode('-', date('Y-m-d')); diff --git a/op/op.EditEvent.php b/op/op.EditEvent.php index 55dc8cf84..7f73a438e 100644 --- a/op/op.EditEvent.php +++ b/op/op.EditEvent.php @@ -61,15 +61,17 @@ else $comment = $_POST["comment"]; if(isset($_POST["from"])) { - $from = explode('T', $_POST["from"]); - $tmp = explode('-', $from[0]); - $from = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]); + $from = makeTsFromDate($_POST["from"]); +// $from = explode('T', $_POST["from"]); +// $tmp = explode('-', $from[0]); +// $from = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]); } else { UI::exitError(getMLText("edit_event"),getMLText("error_occured")); } if(isset($_POST["to"])) { - $tmp = explode('-', $_POST["to"]); - $to = mktime(23,59,59, $tmp[1], $tmp[2], $tmp[0]); + $to = makeTsFromDate($_POST["to"])+86400; +// $tmp = explode('-', $_POST["to"]); +// $to = mktime(23,59,59, $tmp[1], $tmp[2], $tmp[0]); } else { $to = $event['stop'] - $event['start'] + $from;; } diff --git a/op/op.SetExpires.php b/op/op.SetExpires.php index 067aaf23c..8dc626487 100644 --- a/op/op.SetExpires.php +++ b/op/op.SetExpires.php @@ -49,7 +49,7 @@ if (!isset($_POST["presetexpdate"]) || $_POST["presetexpdate"] == "") { switch($_POST["presetexpdate"]) { case "date": - $expires = strtotime($_POST["expdate"]); + $expires = makeTsFromDate($_POST["expdate"]); // $tmp = explode('-', $_POST["expdate"]); // $expires = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]); break; diff --git a/op/op.UpdateDocument.php b/op/op.UpdateDocument.php index 91da9f50e..ea2751fef 100644 --- a/op/op.UpdateDocument.php +++ b/op/op.UpdateDocument.php @@ -141,8 +141,9 @@ else $oldexpires = $document->getExpires(); switch($_POST["presetexpdate"]) { case "date": - $tmp = explode('-', $_POST["expdate"]); - $expires = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]); + $expires = makeTsFromDate($_POST["expdate"]); +// $tmp = explode('-', $_POST["expdate"]); +// $expires = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]); break; case "1w": $tmp = explode('-', date('Y-m-d')); @@ -270,6 +271,11 @@ default: foreach($attributes as $attrdefid=>$attribute) { $attrdef = $dms->getAttributeDefinition($attrdefid); if($attribute) { + switch($attrdef->getType()) { + case SeedDMS_Core_AttributeDefinition::type_date: + $attribute = date('Y-m-d', makeTsFromDate($attribute)); + break; + } if(!$attrdef->validate($attribute)) { $errmsg = getAttributeValidationText($attrdef->getValidationError(), $attrdef->getName(), $attribute); UI::exitError(getMLText("document_title", array("documentname" => $document->getName())), $errmsg); diff --git a/views/bootstrap/class.AddDocument.php b/views/bootstrap/class.AddDocument.php index fa5c53a18..a6bce56f1 100644 --- a/views/bootstrap/class.AddDocument.php +++ b/views/bootstrap/class.AddDocument.php @@ -286,7 +286,7 @@ $(document).ready(function() { ); $this->formField( getMLText("expires"), - $this->getDateChooser(($expts ? date('Y-m-d', $expts) : ''), "expdate", $this->params['session']->getLanguage()) + $this->getDateChooser(($expts ? getReadableDate($expts) : ''), "expdate", $this->params['session']->getLanguage()) ); } if($user->isAdmin()) { diff --git a/views/bootstrap/class.AddEvent.php b/views/bootstrap/class.AddEvent.php index 014fe2e69..ec8a62e36 100644 --- a/views/bootstrap/class.AddEvent.php +++ b/views/bootstrap/class.AddEvent.php @@ -80,7 +80,7 @@ $(document).ready(function() { $this->contentHeading(getMLText("add_event")); $this->contentContainerStart(); - $expdate = date('Y-m-d'); + $expdate = getReadableDate(); ?>
diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index 658bf4a91..0890f9929 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -1567,7 +1567,9 @@ $(document).ready(function() { break; case SeedDMS_Core_AttributeDefinition::type_date: $objvalue = $attribute ? (is_object($attribute) ? $attribute->getValue() : $attribute) : ''; - $content .= ' + if(!$dateformat) + $dateformat = getConvertDateFormat(); + $content .= ' '; diff --git a/views/bootstrap/class.Calendar.php b/views/bootstrap/class.Calendar.php index 42d2a7b60..342b3eb73 100644 --- a/views/bootstrap/class.Calendar.php +++ b/views/bootstrap/class.Calendar.php @@ -74,11 +74,11 @@ class SeedDMS_View_Calendar extends SeedDMS_Bootstrap_Style { formField( getMLText("from"), - $this->getDateChooser(date('Y-m-d', $event["start"]), "from") + $this->getDateChooser(getReadableDate($event["start"]), "from") ); $this->formField( getMLText("to"), - $this->getDateChooser(date('Y-m-d', $event["stop"]), "to") + $this->getDateChooser(getReadableDate($event["stop"]-86400), "to") ); $this->formField( getMLText("name"), diff --git a/views/bootstrap/class.EditDocument.php b/views/bootstrap/class.EditDocument.php index d05626805..c94c1c356 100644 --- a/views/bootstrap/class.EditDocument.php +++ b/views/bootstrap/class.EditDocument.php @@ -85,7 +85,7 @@ $(document).ready( function() { $this->contentContainerStart(); if($document->expires()) - $expdate = date('Y-m-d', $document->getExpires()); + $expdate = getReadableDate($document->getExpires()); else $expdate = ''; ?> diff --git a/views/bootstrap/class.Timeline.php b/views/bootstrap/class.Timeline.php index 209f27c23..82e9425cc 100644 --- a/views/bootstrap/class.Timeline.php +++ b/views/bootstrap/class.Timeline.php @@ -236,28 +236,13 @@ div.timeline-event-selected { ?> params['session']->getLanguage()).'"> - - - - - - - - '; - $this->formField( - getMLText("date"), - $html - ); -*/ $this->formField( getMLText("from"), - $this->getDateChooser(date('Y-m-d', $from), 'fromdate', $this->params['session']->getLanguage()) + $this->getDateChooser(getReadableDate($from), 'fromdate', $this->params['session']->getLanguage()) ); $this->formField( getMLText("to"), - $this->getDateChooser(date('Y-m-d', $to), 'todate', $this->params['session']->getLanguage()) + $this->getDateChooser(getReadableDate($to), 'todate', $this->params['session']->getLanguage()) ); $html = ' '.getMLText('timeline_skip_add_file').'
diff --git a/views/bootstrap/class.UpdateDocument.php b/views/bootstrap/class.UpdateDocument.php index b58e14391..b855d89ee 100644 --- a/views/bootstrap/class.UpdateDocument.php +++ b/views/bootstrap/class.UpdateDocument.php @@ -273,7 +273,7 @@ console.log(element); ); $this->formField( getMLText("expires"), - $this->getDateChooser(($expts ? date('Y-m-d', $expts) : ''), "expdate", $this->params['session']->getLanguage()) + $this->getDateChooser(($expts ? getReadableDate($expts) : ''), "expdate", $this->params['session']->getLanguage()) ); } $attrdefs = $dms->getAllAttributeDefinitions(array(SeedDMS_Core_AttributeDefinition::objtype_documentcontent, SeedDMS_Core_AttributeDefinition::objtype_all)); From b6b2b7e9a20098aa9c7e6d69aa0f09b09d98b7f5 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 17 Dec 2020 18:33:16 +0100 Subject: [PATCH 023/276] add path to index --- SeedDMS_Lucene/Lucene/IndexedDocument.php | 1 + SeedDMS_Lucene/Lucene/Search.php | 15 +++++++++++++++ SeedDMS_SQLiteFTS/SQLiteFTS/IndexedDocument.php | 1 + SeedDMS_SQLiteFTS/SQLiteFTS/Indexer.php | 12 +++++++----- SeedDMS_SQLiteFTS/SQLiteFTS/Search.php | 14 ++++++++++++++ 5 files changed, 38 insertions(+), 5 deletions(-) diff --git a/SeedDMS_Lucene/Lucene/IndexedDocument.php b/SeedDMS_Lucene/Lucene/IndexedDocument.php index 91fee036e..45ba309b8 100644 --- a/SeedDMS_Lucene/Lucene/IndexedDocument.php +++ b/SeedDMS_Lucene/Lucene/IndexedDocument.php @@ -128,6 +128,7 @@ class SeedDMS_Lucene_IndexedDocument extends Zend_Search_Lucene_Document { if($comment = $document->getComment()) { $this->addField(Zend_Search_Lucene_Field::Text('comment', $comment, 'utf-8')); } + $this->addField(Zend_Search_Lucene_Field::Keyword('path', $document->getFolderList())); if($document->isType('document')) { $this->addField(Zend_Search_Lucene_Field::Keyword('document_id', 'D'.$document->getID())); diff --git a/SeedDMS_Lucene/Lucene/Search.php b/SeedDMS_Lucene/Lucene/Search.php index 5911360e3..2d13d3e73 100644 --- a/SeedDMS_Lucene/Lucene/Search.php +++ b/SeedDMS_Lucene/Lucene/Search.php @@ -110,6 +110,21 @@ class SeedDMS_Lucene_Search { $querystr .= implode('" || users:"', $fields['user']); $querystr .= '")'; } + if(!empty($fields['rootFolder']) && $fields['rootFolder']->getFolderList()) { + if($querystr) + $querystr .= ' && '; + $querystr .= '(path:"'; + $querystr .= $fields['rootFolder']->getFolderList().$fields['rootFolder']->getID().':'; + $querystr .= '")'; + } + if(!empty($fields['startFolder']) && $fields['startFolder']->getFolderList()) { + if($querystr) + $querystr .= ' && '; + $querystr .= '(path:"'; + $querystr .= $fields['startFolder']->getFolderList().$fields['startFolder']->getID().':'; + $querystr .= '")'; + } + echo $querystr; try { $query = Zend_Search_Lucene_Search_QueryParser::parse($querystr); try { diff --git a/SeedDMS_SQLiteFTS/SQLiteFTS/IndexedDocument.php b/SeedDMS_SQLiteFTS/SQLiteFTS/IndexedDocument.php index fe567583d..d01297242 100644 --- a/SeedDMS_SQLiteFTS/SQLiteFTS/IndexedDocument.php +++ b/SeedDMS_SQLiteFTS/SQLiteFTS/IndexedDocument.php @@ -119,6 +119,7 @@ class SeedDMS_SQLiteFTS_IndexedDocument extends SeedDMS_SQLiteFTS_Document { } $owner = $document->getOwner(); $this->addField('owner', $owner->getLogin()); + $this->addField('path', $document->getFolderList()); if($comment = $document->getComment()) { $this->addField('comment', $comment); } diff --git a/SeedDMS_SQLiteFTS/SQLiteFTS/Indexer.php b/SeedDMS_SQLiteFTS/SQLiteFTS/Indexer.php index 0f135b208..6b209cb58 100644 --- a/SeedDMS_SQLiteFTS/SQLiteFTS/Indexer.php +++ b/SeedDMS_SQLiteFTS/SQLiteFTS/Indexer.php @@ -63,9 +63,9 @@ class SeedDMS_SQLiteFTS_Indexer { */ $version = SQLite3::version(); if($version['versionNumber'] >= 3008000) - $sql = 'CREATE VIRTUAL TABLE docs USING fts4(documentid, title, comment, keywords, category, mimetype, origfilename, owner, content, created, users, status, notindexed=created, matchinfo=fts3)'; + $sql = 'CREATE VIRTUAL TABLE docs USING fts4(documentid, title, comment, keywords, category, mimetype, origfilename, owner, content, created, users, status, path, notindexed=created, matchinfo=fts3)'; else - $sql = 'CREATE VIRTUAL TABLE docs USING fts4(documentid, title, comment, keywords, category, mimetype, origfilename, owner, content, created, users, status, matchinfo=fts3)'; + $sql = 'CREATE VIRTUAL TABLE docs USING fts4(documentid, title, comment, keywords, category, mimetype, origfilename, owner, content, created, users, status, path, matchinfo=fts3)'; $res = $index->_conn->exec($sql); if($res === false) { return null; @@ -96,7 +96,7 @@ 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) 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'))/*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($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()*/.")"; $res = $this->_conn->exec($sql); if($res === false) { return false; @@ -204,7 +204,7 @@ class SeedDMS_SQLiteFTS_Indexer { if(!$this->_conn) return false; - $sql = "SELECT docid, documentid, title, comment, owner, keywords, category, mimetype, origfilename, created, users, status FROM docs WHERE docid=".$id; + $sql = "SELECT docid, documentid, title, comment, owner, keywords, category, mimetype, origfilename, created, users, status, path FROM docs WHERE docid=".$id; $res = $this->_conn->query($sql); $doc = false; if($res) { @@ -222,6 +222,7 @@ class SeedDMS_SQLiteFTS_Indexer { $doc->addField('created', $rec['created']); $doc->addField('users', $rec['users']); $doc->addField('status', $rec['status']); + $doc->addField('path', $rec['path']); } return $doc; } /* }}} */ @@ -236,7 +237,7 @@ class SeedDMS_SQLiteFTS_Indexer { if(!$this->_conn) return false; - $sql = "SELECT docid, documentid, title, comment, owner, keywords, category, mimetype, origfilename, created, users, status FROM docs WHERE documentid='F".$id."'"; + $sql = "SELECT docid, 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) { @@ -249,6 +250,7 @@ class SeedDMS_SQLiteFTS_Indexer { $doc->addField('owner', $rec['owner']); $doc->addField('created', $rec['created']); $doc->addField('users', $rec['users']); + $doc->addField('path', $rec['path']); } return $doc; } /* }}} */ diff --git a/SeedDMS_SQLiteFTS/SQLiteFTS/Search.php b/SeedDMS_SQLiteFTS/SQLiteFTS/Search.php index 75b840b1e..0d951aad6 100644 --- a/SeedDMS_SQLiteFTS/SQLiteFTS/Search.php +++ b/SeedDMS_SQLiteFTS/SQLiteFTS/Search.php @@ -111,6 +111,20 @@ class SeedDMS_SQliteFTS_Search { $querystr .= implode(' OR users:', $fields['user']); $querystr .= ')'; } + if(!empty($fields['rootFolder']) && $fields['rootFolder']->getFolderList()) { + if($querystr) + $querystr .= ' '; + $querystr .= '(path:'; + $querystr .= $fields['rootFolder']->getFolderList().$fields['rootFolder']->getID().':'; + $querystr .= ')'; + } + if(!empty($fields['startFolder']) && $fields['startFolder']->getFolderList()) { + if($querystr) + $querystr .= ' '; + $querystr .= '(path:'; + $querystr .= $fields['startFolder']->getFolderList().$fields['startFolder']->getID().':'; + $querystr .= ')'; + } try { $result = $this->index->find($querystr, $limit); $recs = array(); From 14cf90a5bb8c145cdfae60c9a0077ab390613d4c Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 17 Dec 2020 18:34:40 +0100 Subject: [PATCH 024/276] pass start and root folder to fulltext search --- out/out.Search.php | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/out/out.Search.php b/out/out.Search.php index 3b0e6ca11..f694589f0 100644 --- a/out/out.Search.php +++ b/out/out.Search.php @@ -166,6 +166,19 @@ if(((!isset($_GET["fullsearch"]) && $settings->_defaultSearchMethod == 'fulltext $status[] = S_EXPIRED; } + // Check to see if the search has been restricted to a particular sub-tree in + // the folder hierarchy. + $startFolder = null; + if (isset($_GET["targetid"]) && is_numeric($_GET["targetid"]) && $_GET["targetid"]>0) { + $targetid = $_GET["targetid"]; + $startFolder = $dms->getFolder($targetid); + if (!is_object($startFolder)) { + UI::exitError(getMLText("search"),getMLText("invalid_folder_id")); + } + } + + $rootFolder = $dms->getFolder($settings->_rootFolderID); + $startTime = getTime(); if($settings->_fullSearchEngine == 'lucene') { Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('utf-8'); @@ -183,7 +196,7 @@ if(((!isset($_GET["fullsearch"]) && $settings->_defaultSearchMethod == 'fulltext if($index) { $limit = 20; $lucenesearch = $fulltextservice->Search(); - $searchresult = $lucenesearch->search($query, array('owner'=>$owner, 'status'=>$status, 'category'=>$categorynames, 'user'=>$user->isAdmin() ? [] : [$user->getLogin()], 'mimetype'=>$mimetype), ($pageNumber == 'all' ? array() : array('limit'=>$limit, 'offset'=>$limit * ($pageNumber-1)))); + $searchresult = $lucenesearch->search($query, array('owner'=>$owner, 'status'=>$status, 'category'=>$categorynames, 'user'=>$user->isAdmin() ? [] : [$user->getLogin()], 'mimetype'=>$mimetype, 'startFolder'=>$startFolder, 'rootFolder'=>$rootFolder), ($pageNumber == 'all' ? array() : array('limit'=>$limit, 'offset'=>$limit * ($pageNumber-1)))); if($searchresult === false) { $session->setSplashMsg(array('type'=>'error', 'msg'=>getMLText('splash_invalid_searchterm'))); $dcount = 0; From 309867ac4853d284580058b2cfe7a86574314024 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 17 Dec 2020 18:37:32 +0100 Subject: [PATCH 025/276] add entry for 5.1.21 --- CHANGELOG | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 272400188..63ac932bc 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -22,7 +22,8 @@ - add filter function to notification service - reindex document after it was edited - show preview images in drop folder menu after mouse over -- add support for indexing folders +- add support for indexing folders in fulltext search +- add support for start folder in fulltext search - always call hook postAddSubFolder and postEditDocument -------------------------------------------------------------------------------- From 7746fb72db0bb2b3ee7c54a3f367e1bf18fa6bb5 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 17 Dec 2020 21:31:03 +0100 Subject: [PATCH 026/276] replace rootFolderId with $dms->getHomeFolder() --- op/op.Ajax.php | 8 +++----- out/out.Charts.php | 3 --- out/out.DocumentChooser.php | 5 ++--- out/out.FolderChooser.php | 5 ++--- out/out.Timeline.php | 1 - out/out.ViewFolder.php | 10 ++++------ views/bootstrap/class.Charts.php | 1 - 7 files changed, 11 insertions(+), 22 deletions(-) diff --git a/op/op.Ajax.php b/op/op.Ajax.php index ee4f4f4fa..6c265ba48 100644 --- a/op/op.Ajax.php +++ b/op/op.Ajax.php @@ -155,9 +155,10 @@ switch($command) { case 'subtree': /* {{{ */ if($user) { if(empty($_GET['node'])) - $nodeid = $settings->_rootFolderID; + $folder = $dms->getHomeFolder(); else - $nodeid = (int) $_GET['node']; + $folder = $dms->getFolder((int) $_GET['node']); + if (!is_object($folder)) return ''; if(empty($_GET['showdocs'])) $showdocs = false; else @@ -167,9 +168,6 @@ switch($command) { else $orderby = $_GET['orderby']; - $folder = $dms->getFolder($nodeid); - if (!is_object($folder)) return ''; - $subfolders = $folder->getSubFolders($orderby); $subfolders = SeedDMS_Core_DMS::filterAccess($subfolders, $user, M_READ); $tree = array(); diff --git a/out/out.Charts.php b/out/out.Charts.php index cd505da87..ad06a2d29 100644 --- a/out/out.Charts.php +++ b/out/out.Charts.php @@ -35,8 +35,6 @@ if (!$user->isAdmin()) { UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); } -$rootfolder = $dms->getFolder($settings->_rootFolderID); - $type = 'docsperuser'; if(!empty($_GET['type'])) { $type = $_GET['type']; @@ -52,7 +50,6 @@ if($data = $dms->getStatisticalData($type)) { } if($view) { - $view->setParam('rootfolder', $rootfolder); $view->setParam('type', $type); $view->setParam('data', $data); $view($_GET); diff --git a/out/out.DocumentChooser.php b/out/out.DocumentChooser.php index 08948390e..77fe21698 100644 --- a/out/out.DocumentChooser.php +++ b/out/out.DocumentChooser.php @@ -31,12 +31,11 @@ require_once("inc/inc.Authentication.php"); if(isset($_GET['action']) && $_GET['action'] == 'subtree') { if (!isset($_GET["node"]) || !is_numeric($_GET["node"]) || intval($_GET["node"])<1) { - $nodeid = $settings->_rootFolderID; + $node = $dms->getRootFolder(); } else { - $nodeid = intval($_GET["node"]); + $node = $dms->getFolder(intval($_GET["node"])); } - $node = $dms->getFolder($nodeid); if (!is_object($node)) { UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_folder_id"))), getMLText("invalid_folder_id")); } diff --git a/out/out.FolderChooser.php b/out/out.FolderChooser.php index 47f0946cf..d45c13c73 100644 --- a/out/out.FolderChooser.php +++ b/out/out.FolderChooser.php @@ -30,12 +30,11 @@ require_once("inc/inc.Authentication.php"); if(isset($_GET['action']) && $_GET['action'] == 'subtree') { if (!isset($_GET["node"]) || !is_numeric($_GET["node"]) || intval($_GET["node"])<1) { - $nodeid = $settings->_rootFolderID; + $node = $dms->getRootFolder(); } else { - $nodeid = intval($_GET["node"]); + $node = $dms->getFolder(intval($_GET["node"])); } - $node = $dms->getFolder($nodeid); if (!is_object($node)) { UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_folder_id"))), getMLText("invalid_folder_id")); } diff --git a/out/out.Timeline.php b/out/out.Timeline.php index 2b07ab5b1..82f394588 100644 --- a/out/out.Timeline.php +++ b/out/out.Timeline.php @@ -34,7 +34,6 @@ $view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user)); if (!$user->isAdmin()) { UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); } -$rootfolder = $dms->getFolder($settings->_rootFolderID); if(isset($_GET['skip'])) $skip = $_GET['skip']; diff --git a/out/out.ViewFolder.php b/out/out.ViewFolder.php index b30329feb..af5f6db69 100644 --- a/out/out.ViewFolder.php +++ b/out/out.ViewFolder.php @@ -34,25 +34,23 @@ $tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); $view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user)); if (!isset($_GET["folderid"]) || !is_numeric($_GET["folderid"]) || intval($_GET["folderid"])<1) { - $folderid = $settings->_rootFolderID; + $folder = $dms->getRootFolder(); } else { - $folderid = intval($_GET["folderid"]); + $folder = $dms->getFolder(intval($_GET["folderid"])); } -$folder = $dms->getFolder($folderid); if (!is_object($folder)) { UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_folder_id"))), getMLText("invalid_folder_id")); } if(isset($_GET['action']) && $_GET['action'] == 'subtree') { if (!isset($_GET["node"]) || !is_numeric($_GET["node"]) || intval($_GET["node"])<1) { - $nodeid = $settings->_rootFolderID; + $node = $dms->getRootFolder(); } else { - $nodeid = intval($_GET["node"]); + $node = $dms->getFolder(intval($_GET["node"])); } - $node = $dms->getFolder($nodeid); if (!is_object($node)) { UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_folder_id"))), getMLText("invalid_folder_id")); } diff --git a/views/bootstrap/class.Charts.php b/views/bootstrap/class.Charts.php index 96d7e5d72..de8c3be69 100644 --- a/views/bootstrap/class.Charts.php +++ b/views/bootstrap/class.Charts.php @@ -191,7 +191,6 @@ $(document).ready( function() { function show() { /* {{{ */ $this->dms = $this->params['dms']; $user = $this->params['user']; - $rootfolder = $this->params['rootfolder']; $data = $this->params['data']; $type = $this->params['type']; From 924a125d88be32ce95b4071f6ade959627c5e043 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 18 Dec 2020 06:24:28 +0100 Subject: [PATCH 027/276] remove old scripts for searching --- op/op.SearchFulltext.php | 241 ------------------- out/out.Search.php | 9 - out/out.SearchForm.php | 59 ----- views/bootstrap/class.SearchForm.php | 291 ----------------------- views/bootstrap/class.SearchFulltext.php | 130 ---------- 5 files changed, 730 deletions(-) delete mode 100644 op/op.SearchFulltext.php delete mode 100644 out/out.SearchForm.php delete mode 100644 views/bootstrap/class.SearchForm.php delete mode 100644 views/bootstrap/class.SearchFulltext.php diff --git a/op/op.SearchFulltext.php b/op/op.SearchFulltext.php deleted file mode 100644 index da8874f33..000000000 --- a/op/op.SearchFulltext.php +++ /dev/null @@ -1,241 +0,0 @@ -_rootFolderID; -} else { - $folderid = $_GET["folderid"]; -} - -$folder = $dms->getFolder($folderid); -if (!is_object($folder)) { - UI::exitError(getMLText("search_results"),getMLText("invalid_folder_id")); -} - -// Create the keyword search string. This search spans up to three columns -// in the database: keywords, name and comment. - -if (isset($_GET["query"]) && is_string($_GET["query"])) { - $query = $_GET["query"]; -} -else { - $query = ""; -} - -// category -$categories = array(); -if(isset($_GET['categoryids']) && $_GET['categoryids']) { - foreach($_GET['categoryids'] as $catid) { - if($catid > 0) { - $category = $dms->getDocumentCategory($catid); - $categories[] = $category->getName(); - } - } -} - -// -// Get the page number to display. If the result set contains more than -// 25 entries, it is displayed across multiple pages. -// -// This requires that a page number variable be used to track which page the -// user is interested in, and an extra clause on the select statement. -// -// Default page to display is always one. -$pageNumber=1; -if (isset($_GET["pg"])) { - if (is_numeric($_GET["pg"]) && $_GET["pg"]>0) { - $pageNumber = (integer)$_GET["pg"]; - } - else if (!strcasecmp($_GET["pg"], "all")) { - $pageNumber = "all"; - } -} - - -// --------------- Suche starten -------------------------------------------- - -// Check to see if the search has been restricted to a particular -// document owner. -$owner = null; -if (isset($_GET["ownerid"]) && is_numeric($_GET["ownerid"]) && $_GET["ownerid"]!=-1) { - $owner = $dms->getUser($_GET["ownerid"]); - if (!is_object($owner)) { - UI::exitError(getMLText("search_results"),getMLText("unknown_owner")); - } -} - -$pageNumber=1; -if (isset($_GET["pg"])) { - if (is_numeric($_GET["pg"]) && $_GET["pg"]>0) { - $pageNumber = (integer)$_GET["pg"]; - } - else if (!strcasecmp($_GET["pg"], "all")) { - $pageNumber = "all"; - } -} - -$startTime = getTime(); -if($settings->_enableFullSearch) { - if(!empty($settings->_luceneClassDir)) - require_once($settings->_luceneClassDir.'/Lucene.php'); - else - require_once('SeedDMS/Lucene.php'); -} - -Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('utf-8'); -$index = Zend_Search_Lucene::open($settings->_luceneDir); -$lucenesearch = new SeedDMS_Lucene_Search($index); -$hits = $lucenesearch->search($query, $owner ? $owner->getLogin() : '', '', $categories); -$totalDocs = count($hits); -$limit = 20; -$resArr = array(); -if($pageNumber != 'all' && count($hits) > $limit) { - $resArr['totalPages'] = (int) (count($hits) / $limit); - if ((count($hits)%$limit) > 0) - $resArr['totalPages']++; - $hits = array_slice($hits, ($pageNumber-1)*$limit, $limit); -} else { - $resArr['totalPages'] = 1; -} - -$resArr['docs'] = array(); -if($hits) { - foreach($hits as $hit) { - if($tmp = $dms->getDocument($hit['document_id'])) { - $resArr['docs'][] = $tmp; - } - } -} -$searchTime = getTime() - $startTime; -$searchTime = round($searchTime, 2); - -// -------------- Output results -------------------------------------------- - -$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); -$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user, 'folder'=>$folder, 'searchhits'=>$resArr['docs'], 'totalpages'=>$resArr['totalPages'], 'totaldocs'=>$totalDocs, 'pagenumber'=>$pageNumber, 'searchtime'=>$searchTime, 'urlparams'=>$_GET)); -if($view) { - $view->show(); - exit; -} - -UI::htmlStartPage(getMLText("search_results")); -UI::globalNavigation($folder); -UI::pageNavigation(getFolderPathHTML($folder, true), "", $folder); -UI::contentHeading(getMLText("search_results")); - -UI::contentContainerStart(); -?> -
- - - - -
- $totalDocs)); -} -?> - $searchTime));?>
- -"; -print "\n\n"; -//print "\n"; -print "".getMLText("name")."\n"; -print "".getMLText("owner")."\n"; -print "".getMLText("status")."\n"; -print "".getMLText("version")."\n"; -print "".getMLText("comment")."\n"; -//print "".getMLText("reviewers")."\n"; -//print "".getMLText("approvers")."\n"; -print "\n\n\n"; - -$resultsFilteredByAccess = false; -foreach ($resArr['docs'] as $document) { - if ($document->getAccessMode($user) < M_READ) { - $resultsFilteredByAccess = true; - } - else { - $lc = $document->getLatestContent(); - print ""; - $docName = htmlspecialchars($document->getName()); - print "getID()."\">/"; - $folder = $document->getFolder(); - $path = $folder->getPath(); - for ($i = 1; $i < count($path); $i++) { - print htmlspecialchars($path[$i]->getName())."/"; - } - print $docName; - print ""; - - $owner = $document->getOwner(); - print "".htmlspecialchars($owner->getFullName()).""; - $display_status=$lc->getStatus(); - print "".getOverallStatusText($display_status["status"]). ""; - - print "".$lc->getVersion().""; - - $comment = htmlspecialchars($document->getComment()); - if (strlen($comment) > 50) $comment = substr($comment, 0, 47) . "..."; - print "".$comment.""; - print "\n"; - } -} -if ($resultsFilteredByAccess) { - print "". getMLText("search_results_access_filtered") . ""; -} -print "\n"; - -UI::pageList($pageNumber, $resArr['totalPages'], "../op/op.Search.php", $_GET); - -UI::contentContainerEnd(); -UI::htmlEndPage(); -?> diff --git a/out/out.Search.php b/out/out.Search.php index f694589f0..98ea6d2a3 100644 --- a/out/out.Search.php +++ b/out/out.Search.php @@ -47,15 +47,6 @@ if (isset($_GET["navBar"])) { } else { $folderid = $_GET["folderid"]; } - /* - if(strlen($_GET["query"])==0) { - header("Location: ../out/out.SearchForm.php?folderid=".$folderid); - } else { - if(isset($_GET["fullsearch"]) && $_GET["fullsearch"]) { - header("Location: ../op/op.SearchFulltext.php?folderid=".$folderid."&query=".$_GET["query"]); - } - } - */ } $accessop = new SeedDMS_AccessOperation($dms, null, $user, $settings); diff --git a/out/out.SearchForm.php b/out/out.SearchForm.php deleted file mode 100644 index fd18d9dca..000000000 --- a/out/out.SearchForm.php +++ /dev/null @@ -1,59 +0,0 @@ -_rootFolderID; - $folder = $dms->getFolder($folderid); -} -else { - $folderid = $_GET["folderid"]; - $folder = $dms->getFolder($folderid); -} -if (!is_object($folder)) { - UI::exitError(getMLText("search"),getMLText("invalid_folder_id")); -} - -$attrdefs = $dms->getAllAttributeDefinitions(array(SeedDMS_Core_AttributeDefinition::objtype_document, SeedDMS_Core_AttributeDefinition::objtype_documentcontent/*, SeedDMS_Core_AttributeDefinition::objtype_all*/)); -$allCats = $dms->getDocumentCategories(); -$allUsers = $dms->getAllUsers($settings->_sortUsersInList); - -$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('attrdefs', $attrdefs); - $view->setParam('allcategories', $allCats); - $view->setParam('allusers', $allUsers); - $view->setParam('enablefullsearch', $settings->_enableFullSearch); - $view($_GET); - exit; -} diff --git a/views/bootstrap/class.SearchForm.php b/views/bootstrap/class.SearchForm.php deleted file mode 100644 index 1e89729f6..000000000 --- a/views/bootstrap/class.SearchForm.php +++ /dev/null @@ -1,291 +0,0 @@ - - * @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 SearchForm 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_SearchForm extends SeedDMS_Bootstrap_Style { - - function js() { /* {{{ */ - header('Content-Type: application/javascript; charset=UTF-8'); -?> -function checkForm() -{ - msg = new Array() - if (document.form1.query.value == "") - { - if (!document.form1.creationdate.checked && !document.form1.lastupdate.checked && - !document.form1.pendingReview.checked && !document.form1.pendingApproval.checked) - msg.push(""); - } - - if (msg != "") { - noty({ - text: msg.join('
'), - type: 'error', - dismissQueue: true, - layout: 'topRight', - theme: 'defaultTheme', - _timeout: 1500, - }); - return false; - } - else - return true; -} - -$(document).ready(function() { - $('body').on('submit', '#form1', function(ev){ - if(checkForm()) return; - ev.preventDefault(); - }); -}); -printFolderChooserJs("form1"); - } /* }}} */ - - function show() { /* {{{ */ - $dms = $this->params['dms']; - $user = $this->params['user']; - $folder = $this->params['folder']; - $attrdefs = $this->params['attrdefs']; - $allCats = $this->params['allcategories']; - $allUsers = $this->params['allusers']; - $enablefullsearch = $this->params['enablefullsearch']; - $workflowmode = $this->params['workflowmode']; - - $this->htmlStartPage(getMLText("search")); - $this->globalNavigation($folder); - $this->contentStart(); - $this->pageNavigation(getMLText("search"), ""); -?> - - -
-
-contentContainerStart(); -?> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - - -
: - - - - -
getName()); ?>printAttributeEditField($attrdef, '') ?>
:
()
- -
:
()
- - - - - - - - - - -
: - -
:printFolderChooserHtml("form1", M_READ, -1, $folder);?>
: - - - - -   - - - - - -
:
()
- - - - -   - - - - - -
- -contentContainerEnd(); -?> -
- -
-contentContainerStart(); -?> -
- - - - - - - - - - - - - - - - -
: - - -
: - -
: - -
- -
-contentContainerEnd(); - } -?> -
-
- -contentEnd(); - $this->htmlEndPage(); - } /* }}} */ -} -?> diff --git a/views/bootstrap/class.SearchFulltext.php b/views/bootstrap/class.SearchFulltext.php deleted file mode 100644 index e80145e6e..000000000 --- a/views/bootstrap/class.SearchFulltext.php +++ /dev/null @@ -1,130 +0,0 @@ - - * @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 Search result 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_SearchFulltext extends SeedDMS_Bootstrap_Style { - - function show() { /* {{{ */ - $dms = $this->params['dms']; - $user = $this->params['user']; - $folder = $this->params['folder']; - $entries = $this->params['searchhits']; - $totalpages = $this->params['totalpages']; - $totaldocs = $this->params['totaldocs']; - $pageNumber = $this->params['pagenumber']; - $urlparams = $this->params['urlparams']; - $searchTime = $this->params['searchtime']; - - $this->htmlStartPage(getMLText("search_results")); - $this->globalNavigation($folder); - $this->contentStart(); - $this->pageNavigation(getMLText("search_results"), ""); -?> -
- $totaldocs)); - } - echo ". "; - printMLText("search_time", array("time" => $searchTime)); -?> -
- -pageList($pageNumber, $totalpages, "../op/op.SearchFulltext.php", $_GET); - $this->contentContainerStart(); - if ($numResults == 0) { - $this->contentContainerEnd(); - $this->contentEnd(); - $this->htmlEndPage(); - exit; - } - - - print ""; - print "\n\n"; - print "\n"; - print "\n"; - print "\n"; - print "\n"; - print "\n"; - print "\n"; - //print "\n"; - //print "\n"; - print "\n\n\n"; - - $resultsFilteredByAccess = false; - foreach ($entries as $document) { - if ($document->getAccessMode($user) < M_READ) { - $resultsFilteredByAccess = true; - } - else { - $lc = $document->getLatestContent(); - print ""; - print ""; - $docName = htmlspecialchars($document->getName()); - print ""; - - $owner = $document->getOwner(); - print ""; - $display_status=$lc->getStatus(); - print ""; - - print ""; - - $comment = htmlspecialchars($document->getComment()); - if (strlen($comment) > 50) $comment = substr($comment, 0, 47) . "..."; - print ""; - print "\n"; - } - } - if ($resultsFilteredByAccess) { - print ""; - } - print "
".getMLText("name")."".getMLText("owner")."".getMLText("status")."".getMLText("version")."".getMLText("comment")."".getMLText("reviewers")."".getMLText("approvers")."
getID()."&version=".$lc->getVersion()."\">getMimeIcon($lc->getFileType())."\" title=\"".htmlspecialchars($lc->getMimeType())."\">getID()."\">/"; - $folder = $document->getFolder(); - $path = $folder->getPath(); - for ($i = 1; $i < count($path); $i++) { - print htmlspecialchars($path[$i]->getName())."/"; - } - print $docName; - print "".htmlspecialchars($owner->getFullName())."".getOverallStatusText($display_status["status"]). "".$lc->getVersion()."".$comment."
". getMLText("search_results_access_filtered") . "
\n"; - - $this->contentContainerEnd(); - $this->pageList($pageNumber, $totalpages, "../op/op.Search.php", $_GET); - $this->contentEnd(); - $this->htmlEndPage(); - } /* }}} */ -} -?> From 56627d8df041ce7a8aaf8941e982823af2e35e7b Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 18 Dec 2020 06:32:44 +0100 Subject: [PATCH 028/276] do not redirect to a specific folder --- op/op.ResetSu.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/op/op.ResetSu.php b/op/op.ResetSu.php index a8898cb8d..12af8d57c 100644 --- a/op/op.ResetSu.php +++ b/op/op.ResetSu.php @@ -30,6 +30,4 @@ $session->resetSu(); $session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_switched_back_user'))); add_log_line(""); -header("Location: ../".(isset($settings->_siteDefaultPage) && strlen($settings->_siteDefaultPage)>0 ? $settings->_siteDefaultPage : "out/out.ViewFolder.php?folderid=".$settings->_rootFolderID)); - -?> +header("Location: ".$settings->_httpRoot.(isset($settings->_siteDefaultPage) && strlen($settings->_siteDefaultPage)>0 ? $settings->_siteDefaultPage : "out/out.ViewFolder.php")); From 41584479b79f6f6ccd5aa89da387ecfcdbe9d7a9 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 18 Dec 2020 06:41:56 +0100 Subject: [PATCH 029/276] echo number of pending reviews at right place in code --- views/bootstrap/class.GroupMgr.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/bootstrap/class.GroupMgr.php b/views/bootstrap/class.GroupMgr.php index 4cb97d4a9..aff4f2a29 100644 --- a/views/bootstrap/class.GroupMgr.php +++ b/views/bootstrap/class.GroupMgr.php @@ -128,9 +128,9 @@ $(document).ready( function() { $i++; } } + echo "".getMLText('pending_reviews')."".$i.""; } if($workflowmode == "traditional" || $workflowmode == 'traditional_only_approval') { - echo "".getMLText('pending_reviews')."".$i.""; $approvalstatus = $selgroup->getApprovalStatus(); $i = 0; foreach($approvalstatus as $rv) { From 02a0ef95f94aea5afc9ed6485769424a441b3aec Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 18 Dec 2020 06:42:35 +0100 Subject: [PATCH 030/276] check if document != null --- views/bootstrap/class.UsrMgr.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/views/bootstrap/class.UsrMgr.php b/views/bootstrap/class.UsrMgr.php index 45a5d8a00..2af3c7927 100644 --- a/views/bootstrap/class.UsrMgr.php +++ b/views/bootstrap/class.UsrMgr.php @@ -120,7 +120,7 @@ $(document).ready( function() { if($resArr) { foreach ($resArr as $res) { $document = $dms->getDocument($res["id"]); - if($document->getAccessMode($user) >= M_READ && $document->getLatestContent()) { + if($document && $document->getAccessMode($user) >= M_READ && $document->getLatestContent()) { $tasks['review'][] = array('id'=>$res['id'], 'name'=>$res['name']); } } @@ -132,7 +132,7 @@ $(document).ready( function() { if($resArr) { foreach ($resArr as $res) { $document = $dms->getDocument($res["id"]); - if($document->getAccessMode($user) >= M_READ && $document->getLatestContent()) { + if($document && $document->getAccessMode($user) >= M_READ && $document->getLatestContent()) { $tasks['approval'][] = array('id'=>$res['id'], 'name'=>$res['name']); } } From 9c97564cb4248294d709c54ac259234939215577 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 18 Dec 2020 07:51:13 +0100 Subject: [PATCH 031/276] use $dms->getDocument() in function for checking objects --- SeedDMS_Core/Core/inc.ClassDMS.php | 43 +++++++++++++++++++----------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/SeedDMS_Core/Core/inc.ClassDMS.php b/SeedDMS_Core/Core/inc.ClassDMS.php index e39ab82c8..807da2020 100644 --- a/SeedDMS_Core/Core/inc.ClassDMS.php +++ b/SeedDMS_Core/Core/inc.ClassDMS.php @@ -2934,11 +2934,14 @@ class SeedDMS_Core_DMS { /** @var SeedDMS_Core_Document[] $versions */ $versions = array(); foreach($resArr as $row) { - /** @var SeedDMS_Core_Document $document */ - $document = new $this->classnames['document']($row['document'], '', '', '', '', '', '', '', '', '', '', ''); - $document->setDMS($this); - $version = new $this->classnames['documentcontent']($row['id'], $document, $row['version'], $row['comment'], $row['date'], $row['createdBy'], $row['dir'], $row['orgFileName'], $row['fileType'], $row['mimeType'], $row['fileSize'], $row['checksum'], $row['fileSize'], $row['checksum']); - $versions[] = $version; + $document = $this->getDocument($row['document']); + /* getting the document can fail if it is outside the root folder + * and checkWithinRootDir is enabled. + */ + if($document) { + $version = new $this->classnames['documentcontent']($row['id'], $document, $row['version'], $row['comment'], $row['date'], $row['createdBy'], $row['dir'], $row['orgFileName'], $row['fileType'], $row['mimeType'], $row['fileSize'], $row['checksum'], $row['fileSize'], $row['checksum']); + $versions[] = $version; + } } return $versions; @@ -2961,11 +2964,14 @@ class SeedDMS_Core_DMS { /** @var SeedDMS_Core_Document[] $versions */ $versions = array(); foreach($resArr as $row) { - /** @var SeedDMS_Core_Document $document */ - $document = new $this->classnames['document']($row['document'], '', '', '', '', '', '', '', '', '', '', ''); - $document->setDMS($this); - $version = new $this->classnames['documentcontent']($row['id'], $document, $row['version'], $row['comment'], $row['date'], $row['createdBy'], $row['dir'], $row['orgFileName'], $row['fileType'], $row['mimeType'], $row['fileSize'], $row['checksum']); - $versions[] = $version; + $document = $this->getDocument($row['document']); + /* getting the document can fail if it is outside the root folder + * and checkWithinRootDir is enabled. + */ + if($document) { + $version = new $this->classnames['documentcontent']($row['id'], $document, $row['version'], $row['comment'], $row['date'], $row['createdBy'], $row['dir'], $row['orgFileName'], $row['fileType'], $row['mimeType'], $row['fileSize'], $row['checksum']); + $versions[] = $version; + } } return $versions; @@ -2989,12 +2995,17 @@ class SeedDMS_Core_DMS { $versions = array(); foreach($resArr as $row) { $document = $this->getDocument($row['document']); - $version = new $this->classnames['documentcontent']($row['id'], $document, $row['version'], $row['comment'], $row['date'], $row['createdBy'], $row['dir'], $row['orgFileName'], $row['fileType'], $row['mimeType'], $row['fileSize'], $row['checksum']); - if(!isset($versions[$row['dupid']])) { - $versions[$row['id']]['content'] = $version; - $versions[$row['id']]['duplicates'] = array(); - } else - $versions[$row['dupid']]['duplicates'][] = $version; + /* getting the document can fail if it is outside the root folder + * and checkWithinRootDir is enabled. + */ + if($document) { + $version = new $this->classnames['documentcontent']($row['id'], $document, $row['version'], $row['comment'], $row['date'], $row['createdBy'], $row['dir'], $row['orgFileName'], $row['fileType'], $row['mimeType'], $row['fileSize'], $row['checksum']); + if(!isset($versions[$row['dupid']])) { + $versions[$row['id']]['content'] = $version; + $versions[$row['id']]['duplicates'] = array(); + } else + $versions[$row['dupid']]['duplicates'][] = $version; + } } return $versions; From 4e0452265c6b77b8e510b2eca55bd890fe17aacc Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 18 Dec 2020 07:52:14 +0100 Subject: [PATCH 032/276] call getRootFolder() instead of using _roofFolderId --- out/out.ObjectCheck.php | 4 ++-- out/out.Statistic.php | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/out/out.ObjectCheck.php b/out/out.ObjectCheck.php index d03953b96..ee27b537d 100644 --- a/out/out.ObjectCheck.php +++ b/out/out.ObjectCheck.php @@ -61,7 +61,7 @@ if(isset($_GET['setchecksum']) && $_GET['setchecksum'] == 1) { $setchecksum = 0; } -$folder = $dms->getFolder($settings->_rootFolderID); +$folder = $dms->getRootFolder(); //getFolder($settings->_rootFolderID); $unlinkedversions = $dms->getUnlinkedDocumentContent(); $unlinkedfolders = $dms->checkFolders(); $unlinkeddocuments = $dms->checkDocuments(); @@ -73,7 +73,7 @@ foreach(array('review', 'approval') as $process) { $processwithoutusergroup[$process][$ug] = $dms->getProcessWithoutUserGroup($process, $ug); } } -$rootfolder = $dms->getFolder($settings->_rootFolderID); +$rootfolder = $dms->getRootFolder(); //getFolder($settings->_rootFolderID); if($view) { $view->setParam('folder', $folder); diff --git a/out/out.Statistic.php b/out/out.Statistic.php index d676b7aae..38248a267 100644 --- a/out/out.Statistic.php +++ b/out/out.Statistic.php @@ -33,7 +33,8 @@ $view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user)); if (!$user->isAdmin()) { UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); } -$rootfolder = $dms->getFolder($settings->_rootFolderID); +//$rootfolder = $dms->getFolder($settings->_rootFolderID); +$rootfolder = $dms->getRootFolder(); if($view) { $view->setParam('rootfolder', $rootfolder); From 613d234d865b2ee703b8078c6cdfcc88a25949b2 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 18 Dec 2020 07:53:07 +0100 Subject: [PATCH 033/276] set folder id in global nav to $dms->getRootFolder() --- views/bootstrap/class.Bootstrap.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index 0890f9929..a10517a88 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -294,7 +294,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);; echo "\n"; @@ -308,7 +308,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);; echo " \n"; echo " \n"; echo " \n"; - echo " params['rootfolderid']."\">".(strlen($this->params['sitename'])>0 ? $this->params['sitename'] : "SeedDMS")."\n"; + echo " params['dms']->getRootFolder()->getId()."\">".(strlen($this->params['sitename'])>0 ? $this->params['sitename'] : "SeedDMS")."\n"; if(isset($this->params['session']) && isset($this->params['user']) && $this->params['user']) { echo "
\n"; echo "
    \n"; From 4708e8b393662bdb5b05bd782326531a0effcdcd Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 18 Dec 2020 08:06:01 +0100 Subject: [PATCH 034/276] add new config var _useHomeAsRootFolder --- 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 3b14e6889..230ed9465 100644 --- a/inc/inc.ClassSettings.php +++ b/inc/inc.ClassSettings.php @@ -36,6 +36,8 @@ class Settings { /* {{{ */ var $_guestID = 2; // ID of root-folder var $_rootFolderID = 1; + // use home folder as root-folder + var $_useHomeAsRootFolder = false; // If you want anybody to login as guest, set the following line to true var $_enableGuestLogin = false; // If you even want guest to be logged in automatically, set the following to true @@ -664,6 +666,7 @@ class Settings { /* {{{ */ $tab = $node[0]->attributes(); $this->_siteDefaultPage = strval($tab["siteDefaultPage"]); $this->_rootFolderID = intval($tab["rootFolderID"]); + $this->_useHomeAsRootFolder = Settings::boolval($tab["useHomeAsRootFolder"]); $this->_titleDisplayHack = Settings::boolval($tab["titleDisplayHack"]); $this->_showMissingTranslations = Settings::boolval($tab["showMissingTranslations"]); } @@ -1003,6 +1006,7 @@ class Settings { /* {{{ */ $node = $this->getXMLNode($xml, '/configuration/advanced', 'display'); $this->setXMLAttributValue($node, "siteDefaultPage", $this->_siteDefaultPage); $this->setXMLAttributValue($node, "rootFolderID", $this->_rootFolderID); + $this->setXMLAttributValue($node, "useHomeAsRootFolder", $this->_useHomeAsRootFolder); $this->setXMLAttributValue($node, "titleDisplayHack", $this->_titleDisplayHack); $this->setXMLAttributValue($node, "showMissingTranslations", $this->_showMissingTranslations); diff --git a/op/op.Settings.php b/op/op.Settings.php index 5a45bef32..f7bbdfaf5 100644 --- a/op/op.Settings.php +++ b/op/op.Settings.php @@ -179,6 +179,7 @@ if ($action == "saveSettings") // SETTINGS -ADVANCED - DISPLAY $settings->_siteDefaultPage = $_POST["siteDefaultPage"]; $settings->_rootFolderID = intval($_POST["rootFolderID"]); + $settings->_useHomeAsRootFolder = getBoolValue($_POST["useHomeAsRootFolder"]); $settings->_titleDisplayHack = getBoolValue("titleDisplayHack"); $settings->_showMissingTranslations = getBoolValue("showMissingTranslations"); diff --git a/views/bootstrap/class.Settings.php b/views/bootstrap/class.Settings.php index 5733c6302..43928b1ed 100644 --- a/views/bootstrap/class.Settings.php +++ b/views/bootstrap/class.Settings.php @@ -436,6 +436,7 @@ if(($kkk = $this->callHook('getFullSearchEngine')) && is_array($kkk)) showConfigHeadline('settings_Display'); ?> showConfigText('settings_siteDefaultPage', 'siteDefaultPage'); ?> showConfigText('settings_rootFolderID', 'rootFolderID'); ?> +showConfigCheckbox('settings_useHomeAsRootFolder', 'useHomeAsRootFolder'); ?> showConfigCheckbox('settings_titleDisplayHack', 'titleDisplayHack'); ?> showConfigCheckbox('settings_showMissingTranslations', 'showMissingTranslations'); ?> From f6af24c2abd0dd7012f0ad8691ac1b2dd1dd394e Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 18 Dec 2020 08:11:40 +0100 Subject: [PATCH 035/276] fix saving _useHomeAsRootFolder --- op/op.Settings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/op/op.Settings.php b/op/op.Settings.php index f7bbdfaf5..8b3772e19 100644 --- a/op/op.Settings.php +++ b/op/op.Settings.php @@ -179,7 +179,7 @@ if ($action == "saveSettings") // SETTINGS -ADVANCED - DISPLAY $settings->_siteDefaultPage = $_POST["siteDefaultPage"]; $settings->_rootFolderID = intval($_POST["rootFolderID"]); - $settings->_useHomeAsRootFolder = getBoolValue($_POST["useHomeAsRootFolder"]); + $settings->_useHomeAsRootFolder = getBoolValue("useHomeAsRootFolder"); $settings->_titleDisplayHack = getBoolValue("titleDisplayHack"); $settings->_showMissingTranslations = getBoolValue("showMissingTranslations"); From ead4ad45e70b99a192d2b11c2757fe96660e7728 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 18 Dec 2020 10:05:04 +0100 Subject: [PATCH 036/276] fix clearing home folder of user --- SeedDMS_Core/Core/inc.ClassUser.php | 3 ++- SeedDMS_Core/package.xml | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/SeedDMS_Core/Core/inc.ClassUser.php b/SeedDMS_Core/Core/inc.ClassUser.php index 1716ff84b..cdf46ebe6 100644 --- a/SeedDMS_Core/Core/inc.ClassUser.php +++ b/SeedDMS_Core/Core/inc.ClassUser.php @@ -618,7 +618,8 @@ class SeedDMS_Core_User { /* {{{ */ $db = $this->_dms->getDB(); $homefolder = intval($homefolder); - $queryStr = "UPDATE `tblUsers` SET `homefolder` = " . ($homefolder ? $homefolder : NULL) . " WHERE `id` = " . $this->_id; + $queryStr = "UPDATE `tblUsers` SET `homefolder` = " . ($homefolder ? $homefolder : 'NULL') . " WHERE `id` = " . $this->_id; + echo $queryStr; if (!$db->getResult($queryStr)) return false; diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index 87fc2511f..24ec9e12a 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -28,6 +28,7 @@ - pass attribute value to callback 'onAttributeValidate' - new paramter 'new' of methode SeedDMЅ_Core_AttributeDefinition::validate() - check if folder/document is below rootDir can be turned on (default off) +- SeedDMS_Core_User::setHomeFolder() can be used to unset the home folder From 61a68f83250b4d0a2a86d1ccec97c323e22012d8 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 18 Dec 2020 10:08:30 +0100 Subject: [PATCH 037/276] check if home folder shall be used as root folder --- inc/inc.Authentication.php | 4 ++++ op/op.Ajax.php | 11 ++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/inc/inc.Authentication.php b/inc/inc.Authentication.php index c5d3f066c..63b5b9d01 100644 --- a/inc/inc.Authentication.php +++ b/inc/inc.Authentication.php @@ -90,6 +90,10 @@ $theme = $resArr["theme"]; $lang = $resArr["language"]; $dms->setUser($user); +if($settings->_useHomeAsRootFolder && !$user->isAdmin() && $user->getHomeFolder()) { + $dms->checkWithinRootDir = true; + $dms->setRootFolderID($user->getHomeFolder()); +} $notifier = new SeedDMS_NotificationService(); diff --git a/op/op.Ajax.php b/op/op.Ajax.php index 6c265ba48..cb70295e9 100644 --- a/op/op.Ajax.php +++ b/op/op.Ajax.php @@ -52,12 +52,17 @@ if (isset($_COOKIE["mydms_session"])) { echo json_encode(array('error'=>1)); exit; } - $dms->setUser($user); if($user->isAdmin()) { if($resArr["su"]) { $user = $dms->getUser($resArr["su"]); } } + $dms->setUser($user); + if($settings->_useHomeAsRootFolder && !$user->isAdmin() && $user->getHomeFolder()) { + $dms->checkWithinRootDir = true; + $dms->setRootFolderID($user->getHomeFolder()); + } + $notifier = new SeedDMS_NotificationService(); if(isset($GLOBALS['SEEDDMS_HOOKS']['notification'])) { foreach($GLOBALS['SEEDDMS_HOOKS']['notification'] as $notificationObj) { @@ -123,7 +128,7 @@ switch($command) { if($user) { $query = $_GET['query']; - $hits = $dms->search($query, $limit=0, $offset=0, $logicalmode='AND', $searchin=array(), $startFolder=null, $owner=null, $status = array(), $creationstartdate=array(), $creationenddate=array(), $modificationstartdate=array(), $modificationenddate=array(), $categories=array(), $attributes=array(), $mode=0x1, $expirationstartdate=array(), $expirationenddate=array()); + $hits = $dms->search($query, $limit=0, $offset=0, $logicalmode='AND', $searchin=array(), $startFolder=$dms->getRootFolder(), $owner=null, $status = array(), $creationstartdate=array(), $creationenddate=array(), $modificationstartdate=array(), $modificationenddate=array(), $categories=array(), $attributes=array(), $mode=0x1, $expirationstartdate=array(), $expirationenddate=array()); if($hits) { $result = array(); foreach($hits['docs'] as $hit) { @@ -139,7 +144,7 @@ switch($command) { if($user) { $query = $_GET['query']; - $hits = $dms->search($query, $limit=0, $offset=0, $logicalmode='AND', $searchin=array(), $startFolder=null, $owner=null, $status = array(), $creationstartdate=array(), $creationenddate=array(), $modificationstartdate=array(), $modificationenddate=array(), $categories=array(), $attributes=array(), $mode=0x2, $expirationstartdate=array(), $expirationenddate=array()); + $hits = $dms->search($query, $limit=0, $offset=0, $logicalmode='AND', $searchin=array(), $startFolder=$dms->getRootFolder(), $owner=null, $status = array(), $creationstartdate=array(), $creationenddate=array(), $modificationstartdate=array(), $modificationenddate=array(), $categories=array(), $attributes=array(), $mode=0x2, $expirationstartdate=array(), $expirationenddate=array()); if($hits) { $result = array(); foreach($hits['folders'] as $hit) { From 15810437146d6ff68b664e25b1ec4e1bc003d073 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 18 Dec 2020 10:16:34 +0100 Subject: [PATCH 038/276] propperly set date format for date chooser used by attributes --- views/bootstrap/class.Bootstrap.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index a10517a88..503d9e1bc 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -1567,8 +1567,7 @@ $(document).ready(function() { break; case SeedDMS_Core_AttributeDefinition::type_date: $objvalue = $attribute ? (is_object($attribute) ? $attribute->getValue() : $attribute) : ''; - if(!$dateformat) - $dateformat = getConvertDateFormat(); + $dateformat = getConvertDateFormat($this->params['settings']->_dateformat); $content .= ' From 6da57affb0bcbec82ce0cf32e88524d5e1927011 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 18 Dec 2020 10:17:37 +0100 Subject: [PATCH 039/276] set link behind brand to out.ViewFolder.php without a specific folderid --- views/bootstrap/class.Bootstrap.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index 503d9e1bc..e904d9d9b 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -294,7 +294,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);; echo "\n"; From 7d37ef3ae28179069471e3c509d0e49f1656b447 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 18 Dec 2020 10:18:55 +0100 Subject: [PATCH 040/276] pass $dms->getRootFolder() to DocumentChooser --- views/bootstrap/class.Bootstrap.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index e904d9d9b..b42e00940 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -1299,7 +1299,7 @@ $(document).ready(function() { $content .= $this->getModalBoxLink( array( 'target' => 'docChooser'.$formid, - 'remote' => "../out/out.DocumentChooser.php?form=".$formid."&folderid=".$this->params['rootfolderid'], + 'remote' => "../out/out.DocumentChooser.php?form=".$formid."&folderid=".$this->params['dms']->getRootFolder()->getId(), 'title' => getMLText('document') )); $content .= "
\n"; From 760265d136ac6652958681a0571baceec88c5c87 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 18 Dec 2020 10:19:49 +0100 Subject: [PATCH 041/276] check if folder for jstree is actually accesible --- views/bootstrap/class.Bootstrap.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index b42e00940..9d686bbfd 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -1899,8 +1899,7 @@ $(document).ready(function() { } /* }}} */ $orderdir = (isset($orderby[1]) ? ($orderby[1] == 'd' ? 'desc' : 'asc') : 'asc'); - if($folderid) { - $folder = $this->params['dms']->getFolder($folderid); + if($folderid && ($folder = $this->params['dms']->getFolder($folderid))) { if(!$partialtree) { $path = $folder->getPath(); /* Get the first folder (root folder) of path */ @@ -1930,8 +1929,10 @@ $(document).ready(function() { } } else { - $root = $this->params['dms']->getFolder($this->params['rootfolderid']); - $tree = array(array('label'=>$root->getName(), 'id'=>$root->getID(), 'load_on_demand'=>false, 'is_folder'=>true)); + if($root = $this->params['dms']->getFolder($this->params['rootfolderid'])) + $tree = array(array('label'=>$root->getName(), 'id'=>$root->getID(), 'load_on_demand'=>false, 'is_folder'=>true)); + else + $tree = array(); } ?> var data = ; From 28bbff0cc7a3b99f49e8afd635333df4551d7ed6 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 18 Dec 2020 10:20:46 +0100 Subject: [PATCH 042/276] check if root folder is accessible --- views/bootstrap/class.DocumentChooser.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/views/bootstrap/class.DocumentChooser.php b/views/bootstrap/class.DocumentChooser.php index a22b1253a..801bfdc7a 100644 --- a/views/bootstrap/class.DocumentChooser.php +++ b/views/bootstrap/class.DocumentChooser.php @@ -45,7 +45,8 @@ class SeedDMS_View_DocumentChooser extends SeedDMS_Bootstrap_Style { $orderby = $this->params['orderby']; header('Content-Type: application/javascript'); - $this->printNewTreeNavigationJs($folder->getID(), M_READ, 1, $form, '', $orderby); + if($folder) + $this->printNewTreeNavigationJs($folder->getID(), M_READ, 1, $form, '', $orderby); } /* }}} */ function show() { /* {{{ */ @@ -58,8 +59,10 @@ class SeedDMS_View_DocumentChooser extends SeedDMS_Bootstrap_Style { // $this->htmlStartPage(getMLText("choose_target_document")); // $this->contentContainerStart(); // $this->printNewTreeNavigationHtml($folder->getID(), M_READ, 1, $form); - $this->printNewTreeNavigationHtml($folder->getID(), M_READ, 1, $form, 0, $orderby); - echo ''."\n"; + if($folder) { + $this->printNewTreeNavigationHtml($folder->getID(), M_READ, 1, $form, 0, $orderby); + echo ''."\n"; + } // $this->contentContainerEnd(); // $this->htmlEndPage(true); } /* }}} */ From 24a919aed1c63a4da4626f5a98d59042bf6ed318 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 18 Dec 2020 10:21:32 +0100 Subject: [PATCH 043/276] init task list before using it --- views/bootstrap/class.UsrMgr.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/views/bootstrap/class.UsrMgr.php b/views/bootstrap/class.UsrMgr.php index 2af3c7927..e3885ec52 100644 --- a/views/bootstrap/class.UsrMgr.php +++ b/views/bootstrap/class.UsrMgr.php @@ -118,6 +118,7 @@ $(document).ready( function() { if($workflowmode == "traditional") { $resArr = $dms->getDocumentList('ReviewByMe', $seluser); if($resArr) { + $tasks['review'] = array(); foreach ($resArr as $res) { $document = $dms->getDocument($res["id"]); if($document && $document->getAccessMode($user) >= M_READ && $document->getLatestContent()) { @@ -130,6 +131,7 @@ $(document).ready( function() { if($workflowmode == "traditional" || $workflowmode == 'traditional_only_approval') { $resArr = $dms->getDocumentList('ApproveByMe', $seluser); if($resArr) { + $tasks['approval'] = array(); foreach ($resArr as $res) { $document = $dms->getDocument($res["id"]); if($document && $document->getAccessMode($user) >= M_READ && $document->getLatestContent()) { From 19afdb9dc3756f107ba8237fa817bd38088b9b9c Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 18 Dec 2020 10:22:29 +0100 Subject: [PATCH 044/276] use $dms->getRootFolder() instead of $settings->_rootFolderId --- views/bootstrap/class.FolderChooser.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/views/bootstrap/class.FolderChooser.php b/views/bootstrap/class.FolderChooser.php index 88d9bc0c2..b6265bd59 100644 --- a/views/bootstrap/class.FolderChooser.php +++ b/views/bootstrap/class.FolderChooser.php @@ -40,13 +40,14 @@ class SeedDMS_View_FolderChooser extends SeedDMS_Bootstrap_Style { } /* }}} */ function js() { /* {{{ */ + $dms = $this->params['dms']; $rootfolderid = $this->params['rootfolderid']; $form = $this->params['form']; $mode = $this->params['mode']; $orderby = $this->params['orderby']; header('Content-Type: application/javascript'); - $this->printNewTreeNavigationJs($rootfolderid, $mode, 0, $form, 0, $orderby); + $this->printNewTreeNavigationJs($dms->getRootFolder()->getId()/*$rootfolderid*/, $mode, 0, $form, 0, $orderby); } /* }}} */ function show() { /* {{{ */ @@ -59,7 +60,7 @@ class SeedDMS_View_FolderChooser extends SeedDMS_Bootstrap_Style { $rootfolderid = $this->params['rootfolderid']; // $this->htmlStartPage(getMLText("choose_target_folder")); - $this->printNewTreeNavigationHtml($rootfolderid, $mode, 0, $form, 0, $orderby); + $this->printNewTreeNavigationHtml($dms->getRootFolder()->getId()/*$rootfolderid*/, $mode, 0, $form, 0, $orderby); echo ''."\n"; // $this->htmlEndPage(true); } /* }}} */ From d339aad6aef22fa65c2088062081c5e8a7b758f3 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 18 Dec 2020 10:54:53 +0100 Subject: [PATCH 045/276] init $limit and $total early, use $dms->getRootFolder() --- out/out.Search.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/out/out.Search.php b/out/out.Search.php index 98ea6d2a3..92b622171 100644 --- a/out/out.Search.php +++ b/out/out.Search.php @@ -183,16 +183,16 @@ if(((!isset($_GET["fullsearch"]) && $settings->_defaultSearchMethod == 'fulltext $searchTime = 0; } else { $startTime = getTime(); + $limit = 20; + $total = 0; $index = $fulltextservice->Indexer(); if($index) { - $limit = 20; $lucenesearch = $fulltextservice->Search(); $searchresult = $lucenesearch->search($query, array('owner'=>$owner, 'status'=>$status, 'category'=>$categorynames, 'user'=>$user->isAdmin() ? [] : [$user->getLogin()], 'mimetype'=>$mimetype, 'startFolder'=>$startFolder, 'rootFolder'=>$rootFolder), ($pageNumber == 'all' ? array() : array('limit'=>$limit, 'offset'=>$limit * ($pageNumber-1)))); if($searchresult === false) { $session->setSplashMsg(array('type'=>'error', 'msg'=>getMLText('splash_invalid_searchterm'))); $dcount = 0; $fcount = 0; - $total = 0; $totalPages = 0; $entries = array(); $facets = array(); @@ -302,8 +302,7 @@ if(((!isset($_GET["fullsearch"]) && $settings->_defaultSearchMethod == 'fulltext $startFolder = $dms->getFolder($targetid); } else { - $targetid = $settings->_rootFolderID; - $startFolder = $dms->getFolder($targetid); + $startFolder = $dms->getRootFolder(); } if (!is_object($startFolder)) { UI::exitError(getMLText("search"),getMLText("invalid_folder_id")); From 9e239a3c659e43bd0db2d0ea505c1012cb1dff3a Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 18 Dec 2020 12:43:07 +0100 Subject: [PATCH 046/276] put full name into first line of user selector makes it possible to search for it --- views/bootstrap/class.UsrMgr.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/bootstrap/class.UsrMgr.php b/views/bootstrap/class.UsrMgr.php index e3885ec52..21d93c22b 100644 --- a/views/bootstrap/class.UsrMgr.php +++ b/views/bootstrap/class.UsrMgr.php @@ -542,7 +542,7 @@ $(document).ready( function() { $options[] = array("-1", getMLText("choose_user")); $options[] = array("0", getMLText("add_user")); foreach ($users as $currUser) { - $options[] = array($currUser->getID(), htmlspecialchars($currUser->getLogin()), $seluser && $currUser->getID()==$seluser->getID(), array(array('data-subtitle', htmlspecialchars($currUser->getFullName())))); + $options[] = array($currUser->getID(), htmlspecialchars($currUser->getLogin().' - '.$currUser->getFullName()), $seluser && $currUser->getID()==$seluser->getID(), array(array('data-subtitle', htmlspecialchars($currUser->getEmail())))); } $this->formField( null, //getMLText("selection"), From 405f1796e441f79809f192bb7cd797eb42e0b83c Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 18 Dec 2020 14:36:51 +0100 Subject: [PATCH 047/276] call each notification service --- CHANGELOG | 1 + inc/inc.ClassNotificationService.php | 42 +++++++++++++++++++++++++--- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 63ac932bc..98bc73ec3 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -25,6 +25,7 @@ - add support for indexing folders in fulltext search - add support for start folder in fulltext search - always call hook postAddSubFolder and postEditDocument +- call each notification service even if one of them fails -------------------------------------------------------------------------------- Changes in version 5.1.20 diff --git a/inc/inc.ClassNotificationService.php b/inc/inc.ClassNotificationService.php index bb1ff71c2..e7bea6347 100644 --- a/inc/inc.ClassNotificationService.php +++ b/inc/inc.ClassNotificationService.php @@ -26,40 +26,74 @@ class SeedDMS_NotificationService { */ protected $services; + /* + * List of servives with errors + */ + protected $errors; + public function __construct() { $this->services = array(); + $this->errors = array(); } public function addService($service, $name='') { - $this->services[$name ? $name : md5(uniqid())] = $service; + if(!$name) + $name = md5(uniqid()); + $this->services[$name] = $service; + $this->errors[$name] = true; } public function getServices() { return $this->services; } + public function getErrors() { + return $this->errors; + } + public function toIndividual($sender, $recipient, $subject, $message, $params=array()) { + $error = true; foreach($this->services as $name => $service) { if(!is_callable([$service, 'filter']) || $service->filter($sender, $recipient, $subject, $message, $params)) { - return $service->toIndividual($sender, $recipient, $subject, $message, $params); + if(!$service->toIndividual($sender, $recipient, $subject, $message, $params)) { + $error = false; + $this->errors[$name] = false; + } else { + $this->errors[$name] = true; + } } } + return $error; } public function toGroup($sender, $groupRecipient, $subject, $message, $params=array()) { + $error = true; foreach($this->services as $name => $service) { if(!is_callable([$service, 'filter']) || $service->filter($sender, $groupRecipient, $subject, $message, $params)) { - return $service->toGroup($sender, $groupRecipient, $subject, $message, $params); + if(!$service->toGroup($sender, $groupRecipient, $subject, $message, $params)) { + $error = false; + $this->errors[$name] = false; + } else { + $this->errors[$name] = true; + } } } + return $error; } public function toList($sender, $recipients, $subject, $message, $params=array()) { + $error = true; foreach($this->services as $name => $service) { if(!is_callable([$service, 'filter']) || $service->filter($sender, $recipients, $subject, $message, $params)) { - return $service->toList($sender, $recipients, $subject, $message, $params); + if(!$service->toList($sender, $recipients, $subject, $message, $params)) { + $error = false; + $this->errors[$name] = false; + } else { + $this->errors[$name] = true; + } } } + return $error; } } From 835e3d2561201dceec3199e225def6fa2e45ef35 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 18 Dec 2020 14:57:41 +0100 Subject: [PATCH 048/276] add path to term list --- SeedDMS_SQLiteFTS/SQLiteFTS/Term.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SeedDMS_SQLiteFTS/SQLiteFTS/Term.php b/SeedDMS_SQLiteFTS/SQLiteFTS/Term.php index 8fa4d398b..a996ee962 100644 --- a/SeedDMS_SQLiteFTS/SQLiteFTS/Term.php +++ b/SeedDMS_SQLiteFTS/SQLiteFTS/Term.php @@ -59,7 +59,8 @@ class SeedDMS_SQLiteFTS_Term { 8 => 'content', 9 => 'created', 10 => 'user', - 11 => 'status' + 11 => 'status', + 12 => 'path' ); $this->field = $fields[$col]; $this->_occurrence = $occurrence; From 13fbd10d45001982c0d71d3a18079012298768a4 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 21 Dec 2020 08:14:54 +0100 Subject: [PATCH 049/276] use 'x' to seperate path ids --- SeedDMS_SQLiteFTS/SQLiteFTS/IndexedDocument.php | 2 +- SeedDMS_SQLiteFTS/SQLiteFTS/Search.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/SeedDMS_SQLiteFTS/SQLiteFTS/IndexedDocument.php b/SeedDMS_SQLiteFTS/SQLiteFTS/IndexedDocument.php index d01297242..7c235976b 100644 --- a/SeedDMS_SQLiteFTS/SQLiteFTS/IndexedDocument.php +++ b/SeedDMS_SQLiteFTS/SQLiteFTS/IndexedDocument.php @@ -119,7 +119,7 @@ class SeedDMS_SQLiteFTS_IndexedDocument extends SeedDMS_SQLiteFTS_Document { } $owner = $document->getOwner(); $this->addField('owner', $owner->getLogin()); - $this->addField('path', $document->getFolderList()); + $this->addField('path', str_replace(':', 'x', $document->getFolderList())); if($comment = $document->getComment()) { $this->addField('comment', $comment); } diff --git a/SeedDMS_SQLiteFTS/SQLiteFTS/Search.php b/SeedDMS_SQLiteFTS/SQLiteFTS/Search.php index 0d951aad6..78b5ed86c 100644 --- a/SeedDMS_SQLiteFTS/SQLiteFTS/Search.php +++ b/SeedDMS_SQLiteFTS/SQLiteFTS/Search.php @@ -115,14 +115,14 @@ class SeedDMS_SQliteFTS_Search { if($querystr) $querystr .= ' '; $querystr .= '(path:'; - $querystr .= $fields['rootFolder']->getFolderList().$fields['rootFolder']->getID().':'; + $querystr .= str_replace(':', 'x', $fields['rootFolder']->getFolderList().$fields['rootFolder']->getID().':'); $querystr .= ')'; } if(!empty($fields['startFolder']) && $fields['startFolder']->getFolderList()) { if($querystr) $querystr .= ' '; $querystr .= '(path:'; - $querystr .= $fields['startFolder']->getFolderList().$fields['startFolder']->getID().':'; + $querystr .= str_replace(':', 'x', $fields['startFolder']->getFolderList().$fields['startFolder']->getID().':'); $querystr .= ')'; } try { From 90b3298b60c8b58f89964616001ce570f10d8042 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 21 Dec 2020 11:46:55 +0100 Subject: [PATCH 050/276] save folder id as path (not fully working) --- SeedDMS_Lucene/Lucene/IndexedDocument.php | 5 ++++- SeedDMS_Lucene/Lucene/Search.php | 11 ++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/SeedDMS_Lucene/Lucene/IndexedDocument.php b/SeedDMS_Lucene/Lucene/IndexedDocument.php index 45ba309b8..f4ef10432 100644 --- a/SeedDMS_Lucene/Lucene/IndexedDocument.php +++ b/SeedDMS_Lucene/Lucene/IndexedDocument.php @@ -128,7 +128,10 @@ class SeedDMS_Lucene_IndexedDocument extends Zend_Search_Lucene_Document { if($comment = $document->getComment()) { $this->addField(Zend_Search_Lucene_Field::Text('comment', $comment, 'utf-8')); } - $this->addField(Zend_Search_Lucene_Field::Keyword('path', $document->getFolderList())); + $tmp = explode(':', substr($document->getFolderList(), 1, -1)); + foreach($tmp as $t) + $this->addField(Zend_Search_Lucene_Field::Keyword('path', $t)); +// $this->addField(Zend_Search_Lucene_Field::Keyword('path', str_replace(':', 'x', $document->getFolderList()))); if($document->isType('document')) { $this->addField(Zend_Search_Lucene_Field::Keyword('document_id', 'D'.$document->getID())); diff --git a/SeedDMS_Lucene/Lucene/Search.php b/SeedDMS_Lucene/Lucene/Search.php index 2d13d3e73..c25ba678a 100644 --- a/SeedDMS_Lucene/Lucene/Search.php +++ b/SeedDMS_Lucene/Lucene/Search.php @@ -114,17 +114,22 @@ class SeedDMS_Lucene_Search { if($querystr) $querystr .= ' && '; $querystr .= '(path:"'; - $querystr .= $fields['rootFolder']->getFolderList().$fields['rootFolder']->getID().':'; + $tmp[] = $fields['rootFolder']->getID(); + $querystr .= implode('" && path:"', $tmp); + //$querystr .= $fields['rootFolder']->getFolderList().$fields['rootFolder']->getID().':'; $querystr .= '")'; } if(!empty($fields['startFolder']) && $fields['startFolder']->getFolderList()) { if($querystr) $querystr .= ' && '; $querystr .= '(path:"'; - $querystr .= $fields['startFolder']->getFolderList().$fields['startFolder']->getID().':'; +// $querystr .= str_replace(':', 'x', $fields['startFolder']->getFolderList().$fields['startFolder']->getID().':'); + $tmp = array();//explode(':', substr($fields['startFolder']->getFolderList(), 1, -1)); + $tmp[] = $fields['startFolder']->getID(); + $querystr .= implode('" && path:"', $tmp); +// $querystr .= str_replace(':', ' ', $fields['startFolder']->getFolderList().$fields['startFolder']->getID()); $querystr .= '")'; } - echo $querystr; try { $query = Zend_Search_Lucene_Search_QueryParser::parse($querystr); try { From 73f136b41d3876a24a4e452cc6e2188616efd05d Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 21 Dec 2020 15:48:58 +0100 Subject: [PATCH 051/276] total number of hits is returned in $searchresult['count'] --- out/out.Search.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/out/out.Search.php b/out/out.Search.php index 92b622171..75d70ff68 100644 --- a/out/out.Search.php +++ b/out/out.Search.php @@ -231,8 +231,8 @@ if(((!isset($_GET["fullsearch"]) && $settings->_defaultSearchMethod == 'fulltext } else { $totalPages = 1; } + $total = $searchresult['count']; } - $total = $searchresult['total']; $searchTime = getTime() - $startTime; $searchTime = round($searchTime, 2); } else { From ac3cc32bb4ed362af0aae67dd1308137c6b60f96 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 21 Dec 2020 15:50:34 +0100 Subject: [PATCH 052/276] various translation updates --- languages/ar_EG/lang.inc | 8 ++++++++ languages/bg_BG/lang.inc | 8 ++++++++ languages/ca_ES/lang.inc | 14 +++++++++++--- languages/cs_CZ/lang.inc | 8 ++++++++ languages/de_DE/lang.inc | 10 +++++++++- languages/el_GR/lang.inc | 32 ++++++++++++++++++++------------ languages/en_GB/lang.inc | 14 +++++++++++--- languages/es_ES/lang.inc | 20 ++++++++++++++------ languages/fr_FR/lang.inc | 8 ++++++++ languages/hr_HR/lang.inc | 12 ++++++++++-- languages/hu_HU/lang.inc | 8 ++++++++ languages/it_IT/lang.inc | 12 ++++++++++-- languages/ko_KR/lang.inc | 8 ++++++++ languages/lo_LA/lang.inc | 8 ++++++++ languages/nb_NO/lang.inc | 8 ++++++++ languages/nl_NL/lang.inc | 8 ++++++++ languages/pl_PL/lang.inc | 8 ++++++++ languages/pt_BR/lang.inc | 12 ++++++++++-- languages/ro_RO/lang.inc | 8 ++++++++ languages/ru_RU/lang.inc | 8 ++++++++ languages/sk_SK/lang.inc | 8 ++++++++ languages/sv_SE/lang.inc | 8 ++++++++ languages/tr_TR/lang.inc | 12 ++++++++++-- languages/uk_UA/lang.inc | 8 ++++++++ languages/zh_CN/lang.inc | 8 ++++++++ languages/zh_TW/lang.inc | 8 ++++++++ 26 files changed, 241 insertions(+), 33 deletions(-) diff --git a/languages/ar_EG/lang.inc b/languages/ar_EG/lang.inc index ad62f7e8e..a7ee4090a 100644 --- a/languages/ar_EG/lang.inc +++ b/languages/ar_EG/lang.inc @@ -1270,6 +1270,10 @@ URL: [url]', 'settings_createdirectory' => 'انشاء دليل', 'settings_currentvalue' => 'القيمة الحالية', 'settings_Database' => 'قاعدة البيانات', +'settings_dateformat' => '', +'settings_dateformat_desc' => '', +'settings_datetimeformat' => '', +'settings_datetimeformat_desc' => '', 'settings_dbDatabase' => 'قاعدة البيانات', 'settings_dbDatabase_desc' => 'قاعدة البيانات', 'settings_dbDriver' => 'القرص', @@ -1588,6 +1592,8 @@ URL: [url]', 'settings_updateNotifyTime' => 'تحديث وقت التنبيه', 'settings_updateNotifyTime_desc' => 'تحديث وقت التنبيه', 'settings_upgrade_php' => 'تطوير php', +'settings_useHomeAsRootFolder' => '', +'settings_useHomeAsRootFolder_desc' => '', 'settings_versioningFileName' => 'اسم ملف الاصدار', 'settings_versioningFileName_desc' => 'اسم ملف الاصدار', 'settings_versiontolow' => 'نسخة منخفضة الجودة', @@ -1651,6 +1657,8 @@ URL: [url]', 'splash_error_add_to_transmittal' => 'خطأ الإضافة إلى الإحالة', 'splash_error_rm_download_link' => 'خطأ في إزالة رابط التنزيل', 'splash_error_send_download_link' => 'خطأ في إرسال رابط التنزيل', +'splash_expiration_date_cleared' => '', +'splash_expiration_date_set' => '', 'splash_extension_getlist' => 'قائمة التمديد', 'splash_extension_import' => 'استيراد', 'splash_extension_refresh' => 'تحديث', diff --git a/languages/bg_BG/lang.inc b/languages/bg_BG/lang.inc index c1840a18c..90463cdc0 100644 --- a/languages/bg_BG/lang.inc +++ b/languages/bg_BG/lang.inc @@ -1133,6 +1133,10 @@ $text = array( 'settings_createdirectory' => 'Създаи папка', 'settings_currentvalue' => 'Текущо значение', 'settings_Database' => 'Настройки БД', +'settings_dateformat' => '', +'settings_dateformat_desc' => '', +'settings_datetimeformat' => '', +'settings_datetimeformat_desc' => '', 'settings_dbDatabase' => 'БД', 'settings_dbDatabase_desc' => 'Има на БД, въведена в процеса на инсталацията. Не променяй без нужда, само например, ако БД е преместена.', 'settings_dbDriver' => 'Тип БД', @@ -1451,6 +1455,8 @@ $text = array( 'settings_updateNotifyTime' => 'Интервал за уведомяване за изменения', 'settings_updateNotifyTime_desc' => 'Потребителите се уведомяват за изменения в документите за последните \'Update Notify Time\' секунди', 'settings_upgrade_php' => '', +'settings_useHomeAsRootFolder' => '', +'settings_useHomeAsRootFolder_desc' => '', 'settings_versioningFileName' => 'Име на файла с версиите', 'settings_versioningFileName_desc' => 'Име на файла с версиите, създаван от инструмента за бекъп', 'settings_versiontolow' => '', @@ -1514,6 +1520,8 @@ $text = array( 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', 'splash_error_send_download_link' => '', +'splash_expiration_date_cleared' => '', +'splash_expiration_date_set' => '', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', diff --git a/languages/ca_ES/lang.inc b/languages/ca_ES/lang.inc index 70fc001c9..432ca5013 100644 --- a/languages/ca_ES/lang.inc +++ b/languages/ca_ES/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 (762) +// Translators: Admin (764) $text = array( '2_factor_auth' => '', @@ -1048,7 +1048,7 @@ URL: [url]', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', 'select_category' => 'Prem per seleccionar la categoria', -'select_group' => '', +'select_group' => 'Seleccionar grup', 'select_groups' => '', 'select_grp_approvers' => '', 'select_grp_ind_approvers' => '', @@ -1068,7 +1068,7 @@ URL: [url]', 'select_mimetype' => '', 'select_one' => 'Seleccionar un', 'select_owner' => '', -'select_user' => '', +'select_user' => 'Seleccionar usuari', 'select_users' => 'Prem per seleccionar els usuaris', 'select_value' => 'Selecciona un valor', 'select_workflow' => '', @@ -1138,6 +1138,10 @@ URL: [url]', 'settings_createdirectory' => '', 'settings_currentvalue' => 'Current value', 'settings_Database' => 'Database settings', +'settings_dateformat' => '', +'settings_dateformat_desc' => '', +'settings_datetimeformat' => '', +'settings_datetimeformat_desc' => '', 'settings_dbDatabase' => 'Database', 'settings_dbDatabase_desc' => '', 'settings_dbDriver' => 'Database Type', @@ -1456,6 +1460,8 @@ URL: [url]', 'settings_updateNotifyTime' => 'Update Notify Time', 'settings_updateNotifyTime_desc' => 'Users are notified about document-changes that took place within the last \'Update Notify Time\' seconds', 'settings_upgrade_php' => '', +'settings_useHomeAsRootFolder' => '', +'settings_useHomeAsRootFolder_desc' => '', 'settings_versioningFileName' => 'Versioning filename', 'settings_versioningFileName_desc' => 'The name of the versioning info file created by the backup tool', 'settings_versiontolow' => '', @@ -1519,6 +1525,8 @@ URL: [url]', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', 'splash_error_send_download_link' => '', +'splash_expiration_date_cleared' => '', +'splash_expiration_date_set' => '', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', diff --git a/languages/cs_CZ/lang.inc b/languages/cs_CZ/lang.inc index e7ddcc9e1..b61609a68 100644 --- a/languages/cs_CZ/lang.inc +++ b/languages/cs_CZ/lang.inc @@ -1342,6 +1342,10 @@ Jméno: [username] 'settings_createdirectory' => 'Vytvořit adresář', 'settings_currentvalue' => 'Současná hodnota', 'settings_Database' => 'Nastavení databáze', +'settings_dateformat' => '', +'settings_dateformat_desc' => '', +'settings_datetimeformat' => '', +'settings_datetimeformat_desc' => '', 'settings_dbDatabase' => 'Databáze', 'settings_dbDatabase_desc' => 'Název databáze zadaný během procesu instalace. Toto pole neupravujte, pokud není nutné, například pokud byla databáze přesunuta.', 'settings_dbDriver' => 'Typ databáze', @@ -1660,6 +1664,8 @@ Jméno: [username] 'settings_updateNotifyTime' => 'Update Notify Time', 'settings_updateNotifyTime_desc' => 'Uživatelé jsou informováni o změnách dokumentů, ke kterým došlo v posledních sekundách \'Aktualizace upozornění\'', 'settings_upgrade_php' => 'Aktualizujte PHP alespoň na verzi 5.6.38', +'settings_useHomeAsRootFolder' => '', +'settings_useHomeAsRootFolder_desc' => '', 'settings_versioningFileName' => 'Verzování názvu souboru', 'settings_versioningFileName_desc' => 'Název souboru s informacemi o verzích vytvořeném nástrojem pro zálohování', 'settings_versiontolow' => 'Příliš nízká verze', @@ -1723,6 +1729,8 @@ Jméno: [username] 'splash_error_add_to_transmittal' => 'Chyba při přidávání dokumentu k přenosu', 'splash_error_rm_download_link' => 'Chyba při odstranění odkazu ke stažení', 'splash_error_send_download_link' => 'Chyba při odesílání odkazu ke stažení', +'splash_expiration_date_cleared' => '', +'splash_expiration_date_set' => '', 'splash_extension_getlist' => 'Aktualizovaný seznam rozšíření z úložiště', 'splash_extension_import' => 'Importováno rozšíření', 'splash_extension_refresh' => 'Aktualizovaný seznam rozšíření', diff --git a/languages/de_DE/lang.inc b/languages/de_DE/lang.inc index 5ce70c694..9e2de373a 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 (2839), dgrutsch (22) +// Translators: Admin (2847), dgrutsch (22) $text = array( '2_factor_auth' => '2-Faktor Authentifizierung', @@ -1353,6 +1353,10 @@ Name: [username] 'settings_createdirectory' => 'Verzeichnis erzeugen', 'settings_currentvalue' => 'Aktueller Wert', 'settings_Database' => 'Datenbank-Einstellungen', +'settings_dateformat' => 'Datumsformat', +'settings_dateformat_desc' => 'Das Datumsformat verwendet die Syntax der PHP-Funktion date()', +'settings_datetimeformat' => 'Datums/Zeitformat', +'settings_datetimeformat_desc' => 'Das Datumsformat verwendet die Syntax der PHP-Funktion date()', 'settings_dbDatabase' => 'Datenbank', 'settings_dbDatabase_desc' => 'Der Name der Datenbank, die bei der Installation von SeedDMS eingerichtet wurde. Ändern Sie diese Feld nicht, es sei denn es ist notwendig, weil Sie die Datenbank umbenannt haben.', 'settings_dbDriver' => 'Datenbank-Typ', @@ -1671,6 +1675,8 @@ Name: [username] 'settings_updateNotifyTime' => 'Update Notify Time', 'settings_updateNotifyTime_desc' => 'Users are notified about document-changes that took place within the last \'Update Notify Time\' seconds', 'settings_upgrade_php' => 'Aktualisiere PHP auf mindestens version 5.6.38', +'settings_useHomeAsRootFolder' => 'Benutze Home-Ordner als Wurzelordner', +'settings_useHomeAsRootFolder_desc' => 'Wenn dies eingeschaltet ist, wird der Home-Ordner eines Benutzer (kein Admin) als Wurzelordner verwendet (experimentell).', 'settings_versioningFileName' => 'Versionsinfo-Datei', 'settings_versioningFileName_desc' => 'Der Name der Datei mit Versionsinformationen, wie sie durch das Backup-Tool erzeugt werden.', 'settings_versiontolow' => 'Version zu gering', @@ -1734,6 +1740,8 @@ Name: [username] 'splash_error_add_to_transmittal' => 'Fehler beim Hinzufügen zur Dokumentenliste', 'splash_error_rm_download_link' => 'Fehler beim Löschen des Download-Links', 'splash_error_send_download_link' => 'Fehler beim Verschicken des Download-Links', +'splash_expiration_date_cleared' => 'Ablaufdatum gelöscht', +'splash_expiration_date_set' => 'Ablaufdatum auf [date] gesetzt', 'splash_extension_getlist' => 'Liste der Erweiterungen im Repositorium aktualisiert.', 'splash_extension_import' => 'Erweiterung installiert', 'splash_extension_refresh' => 'Liste der Erweiterungen neu geladen', diff --git a/languages/el_GR/lang.inc b/languages/el_GR/lang.inc index c1da94464..95947424f 100644 --- a/languages/el_GR/lang.inc +++ b/languages/el_GR/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 (331) +// Translators: Admin (343) $text = array( '2_factor_auth' => '', @@ -33,8 +33,8 @@ $text = array( 'abbr_week' => '', 'abbr_year' => '', 'accept' => '', -'access_control' => '', -'access_control_is_off' => '', +'access_control' => 'Έλεγχος Πρόσβασης', +'access_control_is_off' => 'Ο προηγμένος έλεγχος πρόσβασης είναι απενεργοποιημένος', 'access_denied' => '', 'access_inheritance' => 'Κληρονομικότητα πρόσβασης', 'access_mode' => 'Είδος πρόσβασης', @@ -246,7 +246,7 @@ $text = array( 'choose_attrdefgroup' => '', 'choose_category' => 'Επιλέξτε', 'choose_group' => 'Επιλέξτε Ομάδα', -'choose_role' => '', +'choose_role' => 'Επιλογή Ρόλου', 'choose_target_category' => 'Επιλογή κατηγορίας', 'choose_target_document' => 'Επιλογή εγγράφου', 'choose_target_file' => 'Επιλογή αρχείου', @@ -296,7 +296,7 @@ $text = array( 'converter_new_mimetype' => '', 'copied_to_checkout_as' => '', 'create_download_link' => '', -'create_fulltext_index' => '', +'create_fulltext_index' => 'Δημιούργησε Αρίθμηση των Κειμένων', 'create_fulltext_index_warning' => '', 'creation_date' => 'Δημιουργήθηκε', 'cs_CZ' => 'Τσέχικα', @@ -528,7 +528,7 @@ $text = array( 'filter_for_folders' => '', 'folder' => 'Φάκελος', 'folders' => 'Φάκελοι', -'folders_and_documents_statistic' => '', +'folders_and_documents_statistic' => 'στατιστικά Φακέλλων και Αρχείων', 'folders_with_notification' => '', 'folder_attribute_changed_email_body' => '', 'folder_attribute_changed_email_subject' => '', @@ -557,7 +557,7 @@ $text = array( 'fullsearch_hint' => '', 'fulltextsearch_disabled' => '', 'fulltext_converters' => '', -'fulltext_info' => '', +'fulltext_info' => 'Πληροφορίες Κειμένου', 'global_attributedefinitiongroups' => '', 'global_attributedefinitions' => 'Ιδιότητες', 'global_default_keywords' => 'Λέξεις Κλειδιά', @@ -747,7 +747,7 @@ $text = array( 'move_folder' => 'Μετακίνηση φακέλου', 'my_account' => 'Ο Λογαριασμός μου', 'my_documents' => 'Τα έγγραφα μου', -'my_transmittals' => '', +'my_transmittals' => 'Οι Διαβιβάσεις μου', 'name' => 'Όνομα', 'nb_NO' => 'Νορβηγικά', 'needs_correction' => '', @@ -1010,11 +1010,11 @@ URL: [url]', 'rm_workflow_action' => '', 'rm_workflow_state' => '', 'rm_workflow_warning' => '', -'role' => '', +'role' => 'Ρόλος', 'role_admin' => '', 'role_guest' => 'Επισκέπτης', 'role_info' => '', -'role_management' => '', +'role_management' => 'Διαχείριση Ρόλων', 'role_name' => '', 'role_type' => '', 'role_user' => 'Χρήστης', @@ -1030,7 +1030,7 @@ URL: [url]', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', 'scheduler_class_tasks' => '', -'scheduler_task_mgr' => '', +'scheduler_task_mgr' => 'Διαχειριστής Προγραμματισμού Εργασιών', 'search' => 'Αναζήτηση', 'search_fulltext' => '', 'search_in' => '', @@ -1144,6 +1144,10 @@ URL: [url]', 'settings_createdirectory' => '', 'settings_currentvalue' => '', 'settings_Database' => '', +'settings_dateformat' => '', +'settings_dateformat_desc' => '', +'settings_datetimeformat' => '', +'settings_datetimeformat_desc' => '', 'settings_dbDatabase' => '', 'settings_dbDatabase_desc' => '', 'settings_dbDriver' => '', @@ -1462,6 +1466,8 @@ URL: [url]', 'settings_updateNotifyTime' => '', 'settings_updateNotifyTime_desc' => '', 'settings_upgrade_php' => '', +'settings_useHomeAsRootFolder' => '', +'settings_useHomeAsRootFolder_desc' => '', 'settings_versioningFileName' => '', 'settings_versioningFileName_desc' => '', 'settings_versiontolow' => '', @@ -1525,6 +1531,8 @@ URL: [url]', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', 'splash_error_send_download_link' => '', +'splash_expiration_date_cleared' => '', +'splash_expiration_date_set' => '', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', @@ -1709,7 +1717,7 @@ URL: [url]', 'update' => 'Ενημέρωση', 'update_approvers' => '', 'update_document' => 'Ενημέρωση εγγράφου', -'update_fulltext_index' => '', +'update_fulltext_index' => 'Ενημέρωση της Αρίθμησης Κειμένων', 'update_info' => '', 'update_locked_msg' => '', 'update_recipients' => '', diff --git a/languages/en_GB/lang.inc b/languages/en_GB/lang.inc index d3a3d3564..8e716e9c1 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 (1945), archonwang (3), dgrutsch (9), netixw (14) +// Translators: Admin (1955), archonwang (3), dgrutsch (9), netixw (14) $text = array( '2_factor_auth' => '2-factor authentication', @@ -136,7 +136,7 @@ Status: [status] Comment: [comment] User: [username] URL: [url]', -'approval_submit_email_subject' => '[sitename]: [name] - Submitted approval', +'approval_submit_email_subject' => '[sitename]: [name] - Approval submitted', 'approval_summary' => 'Approval Summary', 'approval_update_failed' => 'Error updating approval status. Update failed.', 'approvers' => 'Approvers', @@ -1347,6 +1347,10 @@ Name: [username] 'settings_createdirectory' => 'Create directory', 'settings_currentvalue' => 'Current value', 'settings_Database' => 'Database settings', +'settings_dateformat' => 'Date format', +'settings_dateformat_desc' => 'This date format uses the syntax of php\'s date() function', +'settings_datetimeformat' => 'Date/Time format', +'settings_datetimeformat_desc' => 'This date format uses the syntax of php\'s date() function', 'settings_dbDatabase' => 'Database', 'settings_dbDatabase_desc' => 'The name for your database entered during the installation process. Do not edit this field unless necessary, if for example the database has been moved.', 'settings_dbDriver' => 'Database Type', @@ -1651,7 +1655,7 @@ Name: [username] 'settings_tasksInMenu_desc' => 'Select those tasks which are to be counted. If none is selected, then all tasks will be counted.', 'settings_tasksInMenu_needscorrection' => 'Correction needed', 'settings_tasksInMenu_receipt' => 'Receipts', -'settings_tasksInMenu_rejected' => '', +'settings_tasksInMenu_rejected' => 'Rejected', 'settings_tasksInMenu_review' => 'Reviews', 'settings_tasksInMenu_revision' => 'Revisions', 'settings_tasksInMenu_workflow' => 'Workflow', @@ -1665,6 +1669,8 @@ Name: [username] 'settings_updateNotifyTime' => 'Update Notify Time', 'settings_updateNotifyTime_desc' => 'Users are notified about document-changes that took place within the last \'Update Notify Time\' seconds', 'settings_upgrade_php' => 'Upgrade PHP to at least version 5.6.38', +'settings_useHomeAsRootFolder' => 'Use home folder as root folder', +'settings_useHomeAsRootFolder_desc' => 'Enable this if the user\'s home folder (no admin) shall be used as the root folder (experimental)', 'settings_versioningFileName' => 'Versioning FileName', 'settings_versioningFileName_desc' => 'The name of the versioning info file created by the backup tool', 'settings_versiontolow' => 'Version to low', @@ -1728,6 +1734,8 @@ Name: [username] 'splash_error_add_to_transmittal' => 'Error while adding document to transmittal', 'splash_error_rm_download_link' => 'Error when removing download link', 'splash_error_send_download_link' => 'Error while sending download link', +'splash_expiration_date_cleared' => 'Cleared expiration date', +'splash_expiration_date_set' => 'Set expiration date on [date]', 'splash_extension_getlist' => 'Updated list of extensions from repository', 'splash_extension_import' => 'Extension installed', 'splash_extension_refresh' => 'Refreshed list of extensions', diff --git a/languages/es_ES/lang.inc b/languages/es_ES/lang.inc index f19e2551a..5b1faf5f7 100644 --- a/languages/es_ES/lang.inc +++ b/languages/es_ES/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: acabello (20), Admin (1287), angel (123), francisco (2), jaimem (14) +// Translators: acabello (20), Admin (1292), angel (123), francisco (2), jaimem (14) $text = array( '2_factor_auth' => '', @@ -74,7 +74,7 @@ URL: [url]', 'add_multiple_files' => 'Añadir múltiples ficheros (Se usará el nombre de fichero como nombre de documento)', 'add_receipt' => '', 'add_review' => 'Enviar revisión', -'add_revision' => '', +'add_revision' => 'Añadir revisión', 'add_role' => 'Agregar Usuario', 'add_subfolder' => 'Añadir subcarpeta', 'add_task' => 'Agregar nueva tarea a esta clase', @@ -171,10 +171,10 @@ URL: [url]', 'attrdef_type' => 'Tipo', 'attrdef_type_boolean' => 'Lógico (booleano)', 'attrdef_type_date' => 'Fecha', -'attrdef_type_document' => '', +'attrdef_type_document' => 'Documento', 'attrdef_type_email' => 'E-mail', 'attrdef_type_float' => 'Número decimal', -'attrdef_type_folder' => '', +'attrdef_type_folder' => 'Carpeta', 'attrdef_type_group' => 'Grupo', 'attrdef_type_int' => 'Número entero', 'attrdef_type_string' => 'Texto', @@ -679,7 +679,7 @@ URL: [url]', 'include_subdirectories' => 'Incluir subcarpetas', 'indexing_tasks_in_queue' => 'Tareas de indexación en cola', 'index_converters' => '', -'index_document_unchanged' => '', +'index_document_unchanged' => 'documento sin cambios', 'index_done' => '', 'index_error' => '', 'index_folder' => 'Índice de carpetas', @@ -1285,6 +1285,10 @@ URL: [url]', 'settings_createdirectory' => 'Crear carpeta', 'settings_currentvalue' => 'Valor actual', 'settings_Database' => 'Configuración de Base de datos', +'settings_dateformat' => '', +'settings_dateformat_desc' => '', +'settings_datetimeformat' => '', +'settings_datetimeformat_desc' => '', 'settings_dbDatabase' => 'Base de datos', 'settings_dbDatabase_desc' => 'Nombre para su base de datos introducido durante el proceso de instalación. No edite este campo a menos que sea necesario, por ejemplo si la base de datos se traslada.', 'settings_dbDriver' => 'Tipo de Base de datos', @@ -1603,6 +1607,8 @@ URL: [url]', 'settings_updateNotifyTime' => 'Tiempo de notificación de actualización', 'settings_updateNotifyTime_desc' => 'Se notificará a los usuarios sobre los cambios en documentos que tengan lugar en los próximos segundos de «Tiempo de notificación de actualización»', 'settings_upgrade_php' => 'Actualice PHP a una versión igual o mayor a 5.6.38', +'settings_useHomeAsRootFolder' => '', +'settings_useHomeAsRootFolder_desc' => '', 'settings_versioningFileName' => 'Archivo de versionado', 'settings_versioningFileName_desc' => 'Nombre de archivo de información de versionado creado por la herramienta de copia de respaldo', 'settings_versiontolow' => 'Versión antigua', @@ -1666,6 +1672,8 @@ URL: [url]', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', 'splash_error_send_download_link' => '', +'splash_expiration_date_cleared' => '', +'splash_expiration_date_set' => '', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', @@ -1906,7 +1914,7 @@ URL: [url]', 'version_deleted_email_subject' => '[sitename]: [name] - Versión eliminada', 'version_info' => 'Información de versión', 'view' => 'Vista', -'view_document' => '', +'view_document' => 'Ver detalles del documento', 'view_folder' => '', 'view_online' => 'Ver online', 'warning' => 'Advertencia', diff --git a/languages/fr_FR/lang.inc b/languages/fr_FR/lang.inc index 470505b8a..d54452ee2 100644 --- a/languages/fr_FR/lang.inc +++ b/languages/fr_FR/lang.inc @@ -1345,6 +1345,10 @@ Nom : [username] 'settings_createdirectory' => 'Créer répertoire', 'settings_currentvalue' => 'Valeur actuelle', 'settings_Database' => 'Paramètres base de données', +'settings_dateformat' => '', +'settings_dateformat_desc' => '', +'settings_datetimeformat' => '', +'settings_datetimeformat_desc' => '', 'settings_dbDatabase' => 'Base de données', 'settings_dbDatabase_desc' => 'Le nom de votre base de données entré pendant le processus d\'installation. Ne pas modifier le champ sauf si absolument nécessaire, par exemple si la base de données a été déplacé.', 'settings_dbDriver' => 'Type base de données', @@ -1663,6 +1667,8 @@ Nom : [username] 'settings_updateNotifyTime' => 'Délai de notification des modifications', 'settings_updateNotifyTime_desc' => 'Les utilisateurs sont informés des modifications apportées aux documents qui ont eu lieu durant le délai précisé (en secondes).', 'settings_upgrade_php' => 'Mettez à jour PHP vers une version au moins égale à 5.6.38', +'settings_useHomeAsRootFolder' => '', +'settings_useHomeAsRootFolder_desc' => '', 'settings_versioningFileName' => 'Nom des fichiers de versionnage', 'settings_versioningFileName_desc' => 'Nom des fichiers textes d’information créés depuis les outils de sauvegarde', 'settings_versiontolow' => 'Version trop ancienne', @@ -1726,6 +1732,8 @@ Nom : [username] 'splash_error_add_to_transmittal' => 'Erreur lors de l’ajout du document à la transmission', 'splash_error_rm_download_link' => 'Erreur lors de la suppression du lien de téléchargement', 'splash_error_send_download_link' => 'Erreur lors de l’envoi du lien de téléchargement', +'splash_expiration_date_cleared' => '', +'splash_expiration_date_set' => '', 'splash_extension_getlist' => 'Liste des extensions du dépôt actualisée', 'splash_extension_import' => 'Extension installée', 'splash_extension_refresh' => 'Liste des extensions actualisée', diff --git a/languages/hr_HR/lang.inc b/languages/hr_HR/lang.inc index d4e2f080d..f1c3eb7b2 100644 --- a/languages/hr_HR/lang.inc +++ b/languages/hr_HR/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 (1241), marbanas (16) +// Translators: Admin (1242), marbanas (16) $text = array( '2_factor_auth' => '', @@ -136,7 +136,7 @@ Status: [status] Komentar: [comment] Korisnik: [username] Internet poveznica: [url]', -'approval_submit_email_subject' => 'Podnešeno odobrenje', +'approval_submit_email_subject' => '[sitename] : [name] - Podnešeno odobrenje', 'approval_summary' => 'Pregled odobrenja', 'approval_update_failed' => 'Greška pri ažuriranju statusa odobrenja. Ažuriranje nije uspjelo.', 'approvers' => 'Validatori', @@ -1306,6 +1306,10 @@ Internet poveznica: [url]', 'settings_createdirectory' => 'Izradi mapu', 'settings_currentvalue' => 'Trenutna vrijednost', 'settings_Database' => 'Postavke baze podataka', +'settings_dateformat' => '', +'settings_dateformat_desc' => '', +'settings_datetimeformat' => '', +'settings_datetimeformat_desc' => '', 'settings_dbDatabase' => 'Baza podataka', 'settings_dbDatabase_desc' => 'Naziv vaše baze podataka unijet tijekom postupka instalacije. Ne uređujte ovo polje dok se ne pojavi potreba, ako npr. premjestite bazu podataka.', 'settings_dbDriver' => 'Vrsta baze podataka', @@ -1624,6 +1628,8 @@ Internet poveznica: [url]', 'settings_updateNotifyTime' => 'Ažuriraj vrijeme obavijesti', 'settings_updateNotifyTime_desc' => 'Korisnici se obavještavaju o promjenama dokumenta koje su se dogodile unutar zadnjih \'Update Notify Time\' sekundi', 'settings_upgrade_php' => 'Ažuriraj PHP najmanje na verziju 5.6.38', +'settings_useHomeAsRootFolder' => '', +'settings_useHomeAsRootFolder_desc' => '', 'settings_versioningFileName' => 'Naziv datoteke verzije dokumenta', 'settings_versioningFileName_desc' => 'Naziv datoteke s informacijom o verziji kreirane alatom za stvaranje sigurnosne kopije', 'settings_versiontolow' => 'Na nižu verziju', @@ -1687,6 +1693,8 @@ Internet poveznica: [url]', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', 'splash_error_send_download_link' => '', +'splash_expiration_date_cleared' => '', +'splash_expiration_date_set' => '', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', diff --git a/languages/hu_HU/lang.inc b/languages/hu_HU/lang.inc index 34da09171..ac6179bbb 100644 --- a/languages/hu_HU/lang.inc +++ b/languages/hu_HU/lang.inc @@ -1284,6 +1284,10 @@ URL: [url]', 'settings_createdirectory' => 'Könyvtár létrehozása', 'settings_currentvalue' => 'Aktuális érték', 'settings_Database' => 'Adatbázis beállítások', +'settings_dateformat' => '', +'settings_dateformat_desc' => '', +'settings_datetimeformat' => '', +'settings_datetimeformat_desc' => '', 'settings_dbDatabase' => 'Adatbázis', 'settings_dbDatabase_desc' => 'Az adatbázis nevét a telepítési folyamat során kell megadni. Ne szerkessze ezt a mezőt ha nem szükséges, ha például az adatbázis áthelyezésre kerül.', 'settings_dbDriver' => 'Adatbázis típus', @@ -1602,6 +1606,8 @@ URL: [url]', 'settings_updateNotifyTime' => 'Értesítési idő frissítése', 'settings_updateNotifyTime_desc' => 'Felhasználók értesítést kapnak az \'Értesítés frissítési idő\' által meghatározott másodperc alatt történt dokumentum változásokról', 'settings_upgrade_php' => 'Frissítse a PHP-t legalább 5.6.38 verzióra', +'settings_useHomeAsRootFolder' => '', +'settings_useHomeAsRootFolder_desc' => '', 'settings_versioningFileName' => 'Változatkezelő állománynév', 'settings_versioningFileName_desc' => 'A változáskezelő információs állomány neve létrehozva a mentő eszközzel', 'settings_versiontolow' => 'túl alacsony verzió', @@ -1665,6 +1671,8 @@ URL: [url]', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', 'splash_error_send_download_link' => '', +'splash_expiration_date_cleared' => '', +'splash_expiration_date_set' => '', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', diff --git a/languages/it_IT/lang.inc b/languages/it_IT/lang.inc index d3208489e..597d7e0d9 100644 --- a/languages/it_IT/lang.inc +++ b/languages/it_IT/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 (2048), rickr (144), s.pnt (26) +// Translators: Admin (2049), rickr (144), s.pnt (26) $text = array( '2_factor_auth' => 'Autorizzazione a due fattori', @@ -1333,6 +1333,10 @@ Name: [username] 'settings_createdirectory' => 'Crea cartella', 'settings_currentvalue' => 'Valore corrente', 'settings_Database' => 'Impostazioni database', +'settings_dateformat' => '', +'settings_dateformat_desc' => '', +'settings_datetimeformat' => '', +'settings_datetimeformat_desc' => '', 'settings_dbDatabase' => 'Database', 'settings_dbDatabase_desc' => 'Il nome del database inserito durante il processo di installazione. Non modificare questo campo se non assolutamente necessario, ad esempio nel trasferimento del database su un nuovo Host.', 'settings_dbDriver' => 'Tipo database', @@ -1651,6 +1655,8 @@ Name: [username] 'settings_updateNotifyTime' => 'Intervallo notifica di aggiornamento', 'settings_updateNotifyTime_desc' => 'Intervallo di tempo in secondi durante il quale ogni modifica ad un documento verrà notificata agli utenti', 'settings_upgrade_php' => 'Aggiornare PHP alla versione 5.6.38 o superiori', +'settings_useHomeAsRootFolder' => '', +'settings_useHomeAsRootFolder_desc' => '', 'settings_versioningFileName' => 'Nome file di versione', 'settings_versioningFileName_desc' => 'Nome attribuito al file di versione creato dallo strumento di backup.', 'settings_versiontolow' => 'Versione obsoleta', @@ -1714,6 +1720,8 @@ Name: [username] 'splash_error_add_to_transmittal' => 'Errore durante l\'aggiunta di documento per la trasmissione', 'splash_error_rm_download_link' => 'Errore durante la rimozione del collegamento di scaricamento', 'splash_error_send_download_link' => 'Errore durante l\'invio del collegamento di scaricamento', +'splash_expiration_date_cleared' => '', +'splash_expiration_date_set' => '', 'splash_extension_getlist' => 'Elenco estensioni aggiornate dal repository', 'splash_extension_import' => 'Extensition installed', 'splash_extension_refresh' => 'Refreshed list of extensions', @@ -1850,7 +1858,7 @@ Name: [username] 'to' => 'A', 'toggle_manager' => 'Gestore', 'toggle_qrcode' => 'Mostri/nascondi codice QR', -'total' => '', +'total' => 'Totale', 'to_before_from' => 'La data di fine non può essere antecedente a quella di inizio', 'transfer_content' => 'Trasferisci contenuto', 'transfer_document' => 'Trasferisci documento', diff --git a/languages/ko_KR/lang.inc b/languages/ko_KR/lang.inc index 4655b4fa5..c0bef7667 100644 --- a/languages/ko_KR/lang.inc +++ b/languages/ko_KR/lang.inc @@ -1300,6 +1300,10 @@ URL : [url]', 'settings_createdirectory' => '디렉토리 만들기', 'settings_currentvalue' => '현재 값', 'settings_Database' => '데이터베이스 설정', +'settings_dateformat' => '', +'settings_dateformat_desc' => '', +'settings_datetimeformat' => '', +'settings_datetimeformat_desc' => '', 'settings_dbDatabase' => '데이터베이스', 'settings_dbDatabase_desc' => '설치 과정에서 입력 한 데이터베이스 액세스를 위한 데이터베이스 이름 . 필요한 경우가 아니면이 필드를 편집하지 마십시오.', 'settings_dbDriver' => '데이터베이스 유형', @@ -1618,6 +1622,8 @@ URL : [url]', 'settings_updateNotifyTime' => '업데이트 시간 알림', 'settings_updateNotifyTime_desc' => '사용자가 마지막으로 발생한 문서 변경에 대한 알림 \'Update Notify Time\' 초', 'settings_upgrade_php' => '최소 버전 5.2.0 PHP 이상 요구', +'settings_useHomeAsRootFolder' => '', +'settings_useHomeAsRootFolder_desc' => '', 'settings_versioningFileName' => '버전 파일 이름', 'settings_versioningFileName_desc' => '백업 도구에 의해 생성 된 버전 정보 파일 이름', 'settings_versiontolow' => '낮은 버전', @@ -1681,6 +1687,8 @@ URL : [url]', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', 'splash_error_send_download_link' => '', +'splash_expiration_date_cleared' => '', +'splash_expiration_date_set' => '', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', diff --git a/languages/lo_LA/lang.inc b/languages/lo_LA/lang.inc index b8975c1d8..a45649032 100644 --- a/languages/lo_LA/lang.inc +++ b/languages/lo_LA/lang.inc @@ -1326,6 +1326,10 @@ URL: [url]', 'settings_createdirectory' => 'ການສ້າງໄດ້ເລັກທໍລີ', 'settings_currentvalue' => 'ມູນຕ່າປະຈຸບັນ', 'settings_Database' => 'ການຕັ້ງຄ່າຖານຂໍ້ມູນ', +'settings_dateformat' => '', +'settings_dateformat_desc' => '', +'settings_datetimeformat' => '', +'settings_datetimeformat_desc' => '', 'settings_dbDatabase' => 'ຖານຂໍ້ມູນ', 'settings_dbDatabase_desc' => 'ຊື່ຂອງຖານຂໍ້ມູນຂອງເຈົ້າປ້ອນລະຫວ່າງຂັ້ນຕອນການຕິດຕັ້ງ, ບໍ່ໃຫ້ແກ້ໄຂຂໍ້ມູນນີ້ເວັ້ນແຕ່ວ່າມີຄວາມຈໍາເປັນ, ຍົກຕົວຢ່າງເຊັ່ນວ່າຍ້າຍຖານຂໍ້ມູນແລ້ວ', 'settings_dbDriver' => 'ປະເພດຖານຂໍ້ມູນ', @@ -1644,6 +1648,8 @@ URL: [url]', 'settings_updateNotifyTime' => 'ອັບເດດເວລາການແຈ້ງເຕືອນ', 'settings_updateNotifyTime_desc' => 'ຜູ້ໄຊ້ຈະໄດ້ຮັບການແຈ້ງກ່ຽວກັບການປ່ຽນແປງເອກະສານທີ່ເກີດຂື້ນພາຍໃນວິນາທີສຸດທ້າຍ "ແຈ້ງເຕືອນເວລາ "', 'settings_upgrade_php' => 'ອັບເກດ PHP ຢ່າງນ້ອຍຕ້ອງເປັນເວີຊັ້ນ 5.6.38', +'settings_useHomeAsRootFolder' => '', +'settings_useHomeAsRootFolder_desc' => '', 'settings_versioningFileName' => 'ການກຳນົດຊື່ໄຟລ', 'settings_versioningFileName_desc' => 'ຊື່ຂອງແຟ້ມຂໍ້ມູນການກຳນົດເວີຊັນທີ່ສ້າງໂດຍເຄື່ອງມືສຳຮອງຂໍ້ມູນ', 'settings_versiontolow' => 'ເວີຊັນເກົ່າ', @@ -1707,6 +1713,8 @@ URL: [url]', 'splash_error_add_to_transmittal' => 'ເກີດຂໍ້ຜິດພາດໃນຂະນະທີ່ເພີ່ມເອກະສານເພື່ອຕິດຕໍ່', 'splash_error_rm_download_link' => 'ຂໍ້ຜິດພາດໃນການລົບລິງການດາວໂຫລດ', 'splash_error_send_download_link' => 'ຂໍ້ຜິດພາດໃນການລົບລິງການດາວໂຫລດ', +'splash_expiration_date_cleared' => '', +'splash_expiration_date_set' => '', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', diff --git a/languages/nb_NO/lang.inc b/languages/nb_NO/lang.inc index 1fea0e9eb..c2fe2dd65 100644 --- a/languages/nb_NO/lang.inc +++ b/languages/nb_NO/lang.inc @@ -1339,6 +1339,10 @@ Bruker: [username] 'settings_createdirectory' => 'Lag mappe', 'settings_currentvalue' => 'Nåværende verdi', 'settings_Database' => 'Databaseinnstillinger', +'settings_dateformat' => '', +'settings_dateformat_desc' => '', +'settings_datetimeformat' => '', +'settings_datetimeformat_desc' => '', 'settings_dbDatabase' => 'Database', 'settings_dbDatabase_desc' => 'Navnet på databasen som ble lagt inn under installasjonsprosessen. Ikke rediger dette feltet med mindre det er nødvendig, hvis databasen for eksempel er flyttet.', 'settings_dbDriver' => 'Databasetype', @@ -1657,6 +1661,8 @@ Bruker: [username] 'settings_updateNotifyTime' => 'Oppdater varslingstid', 'settings_updateNotifyTime_desc' => 'Brukere får beskjed om dokumentendringer som skjedde i løpet av de siste \'Update Notify Time\' sekunder', 'settings_upgrade_php' => 'Oppgrader PHP til minst versjon 5.6.38', +'settings_useHomeAsRootFolder' => '', +'settings_useHomeAsRootFolder_desc' => '', 'settings_versioningFileName' => 'Versjon av filnavn', 'settings_versioningFileName_desc' => 'Navnet på den versjonsfil som er laget av sikkerhetskopieringsverktøyet.', 'settings_versiontolow' => 'Versjonen for lav', @@ -1720,6 +1726,8 @@ Bruker: [username] 'splash_error_add_to_transmittal' => 'Feil under tilføyelse av dokument til overføringen', 'splash_error_rm_download_link' => 'Feil ved fjerning av nedlastingslenke', 'splash_error_send_download_link' => 'Feil under sending av nedlastingslenke', +'splash_expiration_date_cleared' => '', +'splash_expiration_date_set' => '', 'splash_extension_getlist' => 'Oppdatert liste over utvidelser fra oppbevaringsted', 'splash_extension_import' => 'Utvidelse installert', 'splash_extension_refresh' => 'Oppdaterte liste over utvidelser', diff --git a/languages/nl_NL/lang.inc b/languages/nl_NL/lang.inc index c58a88aa2..4ee5489ff 100644 --- a/languages/nl_NL/lang.inc +++ b/languages/nl_NL/lang.inc @@ -1323,6 +1323,10 @@ Name: [username] 'settings_createdirectory' => 'Maak map', 'settings_currentvalue' => 'Huidige waarde', 'settings_Database' => 'Database instellingen', +'settings_dateformat' => '', +'settings_dateformat_desc' => '', +'settings_datetimeformat' => '', +'settings_datetimeformat_desc' => '', 'settings_dbDatabase' => 'Database', 'settings_dbDatabase_desc' => 'De naam van de database ingevoerd tijdens het installatie proces. Verander de waarde niet tenzij noodzakelijk, als bijvoorbeeld de database is verplaatst.', 'settings_dbDriver' => 'Database Type', @@ -1641,6 +1645,8 @@ Name: [username] 'settings_updateNotifyTime' => 'Update Notificatie Tijd', 'settings_updateNotifyTime_desc' => 'Gebruikers worden niet genotificeerd over documentwijzigingen die plaats vinden binnen de laatste \'Update Notificatie Tijd\' seconden', 'settings_upgrade_php' => 'Upgrade PHP minimaal naar versie 5.6.38', +'settings_useHomeAsRootFolder' => '', +'settings_useHomeAsRootFolder_desc' => '', 'settings_versioningFileName' => 'Versie-informatie Bestandsnaam', 'settings_versioningFileName_desc' => 'De naam van het versie informatie bestand gemaakt door het backupgereedschap', 'settings_versiontolow' => 'Versie te laag', @@ -1704,6 +1710,8 @@ Name: [username] 'splash_error_add_to_transmittal' => 'Fout: toevoeging aan verzending', 'splash_error_rm_download_link' => 'Fout bij verwijderen download-link', 'splash_error_send_download_link' => 'Fout bij verzenden download-link', +'splash_expiration_date_cleared' => '', +'splash_expiration_date_set' => '', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', diff --git a/languages/pl_PL/lang.inc b/languages/pl_PL/lang.inc index fb329140d..15ff0987d 100644 --- a/languages/pl_PL/lang.inc +++ b/languages/pl_PL/lang.inc @@ -1269,6 +1269,10 @@ Name: [username] 'settings_createdirectory' => 'Utwórz katalog', 'settings_currentvalue' => 'Bieżąca wartość', 'settings_Database' => 'Ustawienia bazy danych', +'settings_dateformat' => '', +'settings_dateformat_desc' => '', +'settings_datetimeformat' => '', +'settings_datetimeformat_desc' => '', 'settings_dbDatabase' => 'Baza danych', 'settings_dbDatabase_desc' => 'Nazwa dla bazy danych podana w procesie instalacji. Nie zmieniaj tego pola bez konieczności, na przykład kiedy baza danych została przeniesiona.', 'settings_dbDriver' => 'Typ bazy danych', @@ -1587,6 +1591,8 @@ Name: [username] 'settings_updateNotifyTime' => 'Okres powiadamiania o zmianach', 'settings_updateNotifyTime_desc' => 'Użytkownicy są powiadamiani o zmianach w dokumentach, które miały miejsce w ciągu ostatnich \'Update Notify Time\' sekund', 'settings_upgrade_php' => 'Uaktualnij PHP do wersji przynajmniej 5.6.38', +'settings_useHomeAsRootFolder' => '', +'settings_useHomeAsRootFolder_desc' => '', 'settings_versioningFileName' => 'Nazwa pliku z wersjonowaniem', 'settings_versioningFileName_desc' => 'Nazwa pliku, zawierającego informacje o wersjonowaniu, utworzonego przez narzędzie kopii zapasowej.', 'settings_versiontolow' => 'Za niska wersja', @@ -1650,6 +1656,8 @@ Name: [username] 'splash_error_add_to_transmittal' => 'Błąd podczas dodawania dokumentu do przekazu', 'splash_error_rm_download_link' => 'Błąd podczas usuwania linku do pobrania', 'splash_error_send_download_link' => 'Błąd podczas wysyłania linku do pobrania', +'splash_expiration_date_cleared' => '', +'splash_expiration_date_set' => '', 'splash_extension_getlist' => 'Zaktualizowana lista rozszerzeń z repozytorium', 'splash_extension_import' => 'Rozszerzenie zainstalowane', 'splash_extension_refresh' => 'Odświeżona lista rozszerzeń', diff --git a/languages/pt_BR/lang.inc b/languages/pt_BR/lang.inc index a1d85f234..9af96b3b9 100644 --- a/languages/pt_BR/lang.inc +++ b/languages/pt_BR/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 (1844), flaviove (627), lfcristofoli (352) +// Translators: Admin (1845), flaviove (627), lfcristofoli (352) $text = array( '2_factor_auth' => 'Autenticação de dois fatores', @@ -336,7 +336,7 @@ URL: [url]', 'daily' => 'Diariamente', 'databasesearch' => 'Pesquisar Base de dados', 'database_schema_version' => '', -'data_loading' => '', +'data_loading' => 'Aguarde o carregamento', 'date' => 'Data', 'days' => 'dias', 'debug' => 'Debug', @@ -1345,6 +1345,10 @@ Nome: [username] 'settings_createdirectory' => 'Criar diretório', 'settings_currentvalue' => 'Valor atual', 'settings_Database' => 'Configurações do banco de dados', +'settings_dateformat' => '', +'settings_dateformat_desc' => '', +'settings_datetimeformat' => '', +'settings_datetimeformat_desc' => '', 'settings_dbDatabase' => 'Banco de dados', 'settings_dbDatabase_desc' => 'O nome para o seu banco de dados, informado durante o processo de instalação. Não edite este campo a menos que necessário, por exemplo, se o banco de dados foi movido.', 'settings_dbDriver' => 'Tipo do Banco de dados', @@ -1663,6 +1667,8 @@ Nome: [username] 'settings_updateNotifyTime' => 'Atualizar Tempo de Notificação', 'settings_updateNotifyTime_desc' => 'Usuários são notificados sobe mudanças em documentos que se realizaram nos últimos segundos \'Tempo de Atualização de Notificação\'', 'settings_upgrade_php' => 'Atualize PHP para pelo menos a versão 5.6.38', +'settings_useHomeAsRootFolder' => '', +'settings_useHomeAsRootFolder_desc' => '', 'settings_versioningFileName' => 'Versionando NomedoArquivo', 'settings_versioningFileName_desc' => 'O nome do arquivo de informações de versões criadas pela ferramenta de backup', 'settings_versiontolow' => 'Versão para baixo', @@ -1726,6 +1732,8 @@ Nome: [username] 'splash_error_add_to_transmittal' => 'Erro ao adicionar documento à transmissão', 'splash_error_rm_download_link' => 'Erro ao remover o link de download', 'splash_error_send_download_link' => 'Erro ao enviar o link de download', +'splash_expiration_date_cleared' => '', +'splash_expiration_date_set' => '', 'splash_extension_getlist' => 'Lista atualizada de extensões do repositório', 'splash_extension_import' => 'Extensão instalada', 'splash_extension_refresh' => 'Lista atualizada de extensões', diff --git a/languages/ro_RO/lang.inc b/languages/ro_RO/lang.inc index caad21606..edc491e38 100644 --- a/languages/ro_RO/lang.inc +++ b/languages/ro_RO/lang.inc @@ -1307,6 +1307,10 @@ URL: [url]', 'settings_createdirectory' => 'Creare director', 'settings_currentvalue' => 'Valoare curentă', 'settings_Database' => 'Setări Bază de date', +'settings_dateformat' => '', +'settings_dateformat_desc' => '', +'settings_datetimeformat' => '', +'settings_datetimeformat_desc' => '', 'settings_dbDatabase' => 'Baza de date', 'settings_dbDatabase_desc' => 'Numele bazei de date introdus în timpul procesului de instalare. Nu editați acest câmp decât dacă este necesar, dacă de exemplu baza de date a fost mutată.', 'settings_dbDriver' => 'Tip Baza de date', @@ -1625,6 +1629,8 @@ URL: [url]', 'settings_updateNotifyTime' => 'Timpul de actualizare a notificarilor', 'settings_updateNotifyTime_desc' => 'Utilizatorii sunt notificați cu privire la schimbările suferite de un documentul în ultima perioadă a \'Timpul de actualizare a notificarilor\' în secunde', 'settings_upgrade_php' => 'Upgrade PHP cel puțin la versiunea 5.6.38', +'settings_useHomeAsRootFolder' => '', +'settings_useHomeAsRootFolder_desc' => '', 'settings_versioningFileName' => 'Nume Fișier versionare', 'settings_versioningFileName_desc' => 'Numele fișierului cu informatii ale versiunilor creat de către instrumentul de backup', 'settings_versiontolow' => 'Versiunea e prea mică(veche)', @@ -1688,6 +1694,8 @@ URL: [url]', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', 'splash_error_send_download_link' => '', +'splash_expiration_date_cleared' => '', +'splash_expiration_date_set' => '', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', diff --git a/languages/ru_RU/lang.inc b/languages/ru_RU/lang.inc index 05a0257b4..f4be2620d 100644 --- a/languages/ru_RU/lang.inc +++ b/languages/ru_RU/lang.inc @@ -1314,6 +1314,10 @@ URL: [url]', 'settings_createdirectory' => 'Создать каталог', 'settings_currentvalue' => 'Текущее значение', 'settings_Database' => 'Настройки базы данных', +'settings_dateformat' => '', +'settings_dateformat_desc' => '', +'settings_datetimeformat' => '', +'settings_datetimeformat_desc' => '', 'settings_dbDatabase' => 'База данных (БД)', 'settings_dbDatabase_desc' => 'Название базы данных (БД), введённое в ходе установки. Не изменять без необходимости, только, например, если БД перемещена.', 'settings_dbDriver' => 'Тип БД', @@ -1632,6 +1636,8 @@ URL: [url]', 'settings_updateNotifyTime' => 'Период уведомлений об изменениях', 'settings_updateNotifyTime_desc' => 'Пользователи уведомляются об изменениях документов за указанные последние секунды.', 'settings_upgrade_php' => 'Обновите PHP до версии не ниже 5.6.38', +'settings_useHomeAsRootFolder' => '', +'settings_useHomeAsRootFolder_desc' => '', 'settings_versioningFileName' => 'Название файла версий', 'settings_versioningFileName_desc' => 'Названия файла версий, создаваемого инструментом резервного копирования.', 'settings_versiontolow' => 'Слишком старая версия', @@ -1695,6 +1701,8 @@ URL: [url]', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', 'splash_error_send_download_link' => '', +'splash_expiration_date_cleared' => '', +'splash_expiration_date_set' => '', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', diff --git a/languages/sk_SK/lang.inc b/languages/sk_SK/lang.inc index f9d1cb683..acd1bfb2c 100644 --- a/languages/sk_SK/lang.inc +++ b/languages/sk_SK/lang.inc @@ -1347,6 +1347,10 @@ Meno: [username] 'settings_createdirectory' => 'Vytvoriť zložku', 'settings_currentvalue' => 'Aktuálna hodnota', 'settings_Database' => 'Nastavenia databazy', +'settings_dateformat' => '', +'settings_dateformat_desc' => '', +'settings_datetimeformat' => '', +'settings_datetimeformat_desc' => '', 'settings_dbDatabase' => 'Databáza', 'settings_dbDatabase_desc' => 'The name for your database entered during the installation process. Do not edit this field unless necessary, if for example the database has been moved.', 'settings_dbDriver' => 'Typ databázy', @@ -1665,6 +1669,8 @@ Meno: [username] 'settings_updateNotifyTime' => 'Aktualizovať čas notifikácie', 'settings_updateNotifyTime_desc' => 'Users are notified about document-changes that took place within the last \'Update Notify Time\' seconds', 'settings_upgrade_php' => 'Upgrade PHP to at least version 5.6.38', +'settings_useHomeAsRootFolder' => '', +'settings_useHomeAsRootFolder_desc' => '', 'settings_versioningFileName' => 'Versioning FileName', 'settings_versioningFileName_desc' => 'The name of the versioning info file created by the backup tool', 'settings_versiontolow' => 'Verzia je nízka', @@ -1728,6 +1734,8 @@ Meno: [username] 'splash_error_add_to_transmittal' => 'Error while adding document to transmittal', 'splash_error_rm_download_link' => 'Error when removing download link', 'splash_error_send_download_link' => 'Error while sending download link', +'splash_expiration_date_cleared' => '', +'splash_expiration_date_set' => '', 'splash_extension_getlist' => 'Updated list of extensions from repository', 'splash_extension_import' => 'Extensition installed', 'splash_extension_refresh' => 'Refreshed list of extensions', diff --git a/languages/sv_SE/lang.inc b/languages/sv_SE/lang.inc index fdd4bcfaf..43bde5252 100644 --- a/languages/sv_SE/lang.inc +++ b/languages/sv_SE/lang.inc @@ -1320,6 +1320,10 @@ Kommentar: [comment]', 'settings_createdirectory' => 'Skapa katalog', 'settings_currentvalue' => 'Aktuellt värde', 'settings_Database' => 'Databasinställningar', +'settings_dateformat' => '', +'settings_dateformat_desc' => '', +'settings_datetimeformat' => '', +'settings_datetimeformat_desc' => '', 'settings_dbDatabase' => 'Databas', 'settings_dbDatabase_desc' => 'Namnet på din databas som angavs under installationsprocessen. Ändra inte om det inte är nödvändigt, t.ex. om databasen har flyttats.', 'settings_dbDriver' => 'Databastyp', @@ -1638,6 +1642,8 @@ Kommentar: [comment]', 'settings_updateNotifyTime' => 'Tid för uppdateringsmeddelande', 'settings_updateNotifyTime_desc' => 'Användare meddelas om att ändringar i dokumentet har genomförts inom de senaste \'Tid för uppdateringsmeddelande\' sekunder.', 'settings_upgrade_php' => 'Uppdatera PHP till åtminstone version 5.6.38', +'settings_useHomeAsRootFolder' => '', +'settings_useHomeAsRootFolder_desc' => '', 'settings_versioningFileName' => 'Versionsinfo-filnamn', 'settings_versioningFileName_desc' => 'Namnet på versionsinfo-fil som skapas med backup-verktyget', 'settings_versiontolow' => 'Version för låg', @@ -1701,6 +1707,8 @@ Kommentar: [comment]', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => 'Fel vid borttagande av nedladdningslänk', 'splash_error_send_download_link' => 'Fel vid sändning av nedladdningslänk', +'splash_expiration_date_cleared' => '', +'splash_expiration_date_set' => '', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', diff --git a/languages/tr_TR/lang.inc b/languages/tr_TR/lang.inc index 87137fc6a..b628f4c85 100644 --- a/languages/tr_TR/lang.inc +++ b/languages/tr_TR/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 (1119), aydin (83) +// Translators: Admin (1120), aydin (83) $text = array( '2_factor_auth' => 'İki faktörlü yetkilendirme', @@ -868,7 +868,7 @@ URL: [url]', 'next_state' => 'Yeni durum', 'nl_NL' => 'Hollandaca', 'no' => 'Hayır', -'notification' => '', +'notification' => 'Notlar', 'notify_added_email' => 'Bildirim listesine eklendiniz', 'notify_added_email_body' => 'Bildirim listesine eklendiniz İsim: [name] @@ -1286,6 +1286,10 @@ URL: [url]', 'settings_createdirectory' => 'Dizin oluştur', 'settings_currentvalue' => 'Mevcut değer', 'settings_Database' => 'Veritabanı ayarları', +'settings_dateformat' => '', +'settings_dateformat_desc' => '', +'settings_datetimeformat' => '', +'settings_datetimeformat_desc' => '', 'settings_dbDatabase' => 'Veritabanı', 'settings_dbDatabase_desc' => 'Kurulum sırasında girilen veritabanı adı. Bu alanı gerekmedikçe değiştirmeyin.', 'settings_dbDriver' => 'Veritabanı Tipi', @@ -1604,6 +1608,8 @@ URL: [url]', 'settings_updateNotifyTime' => 'Güncelleme Bildirim Zamanı', 'settings_updateNotifyTime_desc' => 'Kullanıcılara doküman güncellemelerinin \'Update Notify Time\' saniyede gerçekleştiği bildirilir.', 'settings_upgrade_php' => 'PHP versiyonu en az 5.6.38 olmalıdır', +'settings_useHomeAsRootFolder' => '', +'settings_useHomeAsRootFolder_desc' => '', 'settings_versioningFileName' => 'Versiyonlama DosyaAdı', 'settings_versioningFileName_desc' => 'Yedekleme aracı tarafından oluşturulan versiyon bilgisi dosyasının adı', 'settings_versiontolow' => 'Versiyon düşük', @@ -1667,6 +1673,8 @@ URL: [url]', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', 'splash_error_send_download_link' => '', +'splash_expiration_date_cleared' => '', +'splash_expiration_date_set' => '', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', diff --git a/languages/uk_UA/lang.inc b/languages/uk_UA/lang.inc index 3389534b2..cf5029305 100644 --- a/languages/uk_UA/lang.inc +++ b/languages/uk_UA/lang.inc @@ -1307,6 +1307,10 @@ URL: [url]', 'settings_createdirectory' => 'Створити каталог', 'settings_currentvalue' => 'Поточне значення', 'settings_Database' => 'Налаштування бази даних', +'settings_dateformat' => '', +'settings_dateformat_desc' => '', +'settings_datetimeformat' => '', +'settings_datetimeformat_desc' => '', 'settings_dbDatabase' => 'База даних (БД)', 'settings_dbDatabase_desc' => 'Ім\'я бази даних (БД), введене при встановленні. Не змінювати без потреби, лише, наприклад, якщо БД переміщено.', 'settings_dbDriver' => 'Тип БД', @@ -1625,6 +1629,8 @@ URL: [url]', 'settings_updateNotifyTime' => 'Період сповіщень про зміни', 'settings_updateNotifyTime_desc' => 'Користувачі отримують сповіщення за вказані останні секунди.', 'settings_upgrade_php' => 'Оновіть PHP до версії не нижче 5.6.38', +'settings_useHomeAsRootFolder' => '', +'settings_useHomeAsRootFolder_desc' => '', 'settings_versioningFileName' => 'Назва файлу версій', 'settings_versioningFileName_desc' => 'Назва файлу версій, створеного інструментами резервного копіювання.', 'settings_versiontolow' => 'Надто стара версія', @@ -1688,6 +1694,8 @@ URL: [url]', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', 'splash_error_send_download_link' => '', +'splash_expiration_date_cleared' => '', +'splash_expiration_date_set' => '', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', diff --git a/languages/zh_CN/lang.inc b/languages/zh_CN/lang.inc index 17ffb0e6a..913dc05cc 100644 --- a/languages/zh_CN/lang.inc +++ b/languages/zh_CN/lang.inc @@ -1282,6 +1282,10 @@ URL: [url]', 'settings_createdirectory' => '创建目录', 'settings_currentvalue' => '当前值', 'settings_Database' => '数据库设置', +'settings_dateformat' => '', +'settings_dateformat_desc' => '', +'settings_datetimeformat' => '', +'settings_datetimeformat_desc' => '', 'settings_dbDatabase' => '数据库名称', 'settings_dbDatabase_desc' => '设置连接的数据库', 'settings_dbDriver' => '数据库类型', @@ -1600,6 +1604,8 @@ URL: [url]', 'settings_updateNotifyTime' => '更新时间通知', 'settings_updateNotifyTime_desc' => '通知用户有关文档的变化,采取了最后的内地方“更新通知时间”秒', 'settings_upgrade_php' => '', +'settings_useHomeAsRootFolder' => '', +'settings_useHomeAsRootFolder_desc' => '', 'settings_versioningFileName' => '文件名版本', 'settings_versioningFileName_desc' => '', 'settings_versiontolow' => '', @@ -1663,6 +1669,8 @@ URL: [url]', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '移除下载链接时报错', 'splash_error_send_download_link' => '发送下载链接时报错', +'splash_expiration_date_cleared' => '', +'splash_expiration_date_set' => '', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', diff --git a/languages/zh_TW/lang.inc b/languages/zh_TW/lang.inc index 22b7dfc37..1e8bd1fd6 100644 --- a/languages/zh_TW/lang.inc +++ b/languages/zh_TW/lang.inc @@ -1345,6 +1345,10 @@ URL: [url]', 'settings_createdirectory' => '創建目錄', 'settings_currentvalue' => '當前值', 'settings_Database' => '資料庫設定', +'settings_dateformat' => '', +'settings_dateformat_desc' => '', +'settings_datetimeformat' => '', +'settings_datetimeformat_desc' => '', 'settings_dbDatabase' => '資料庫', 'settings_dbDatabase_desc' => '在安裝過程中輸入的數據庫名稱。除非必要,否則請勿編輯此字段,例如,如果數據庫已移動。', 'settings_dbDriver' => '資料庫類型', @@ -1663,6 +1667,8 @@ URL: [url]', 'settings_updateNotifyTime' => '更新時間通知', 'settings_updateNotifyTime_desc' => '通知使用者有關文件的變化,採取了最後的內地方“更新通知時間”秒', 'settings_upgrade_php' => '將PHP升級到至少5.6.38版本', +'settings_useHomeAsRootFolder' => '', +'settings_useHomeAsRootFolder_desc' => '', 'settings_versioningFileName' => '檔案名版本', 'settings_versioningFileName_desc' => '備份工具創建的版本資訊文件的名稱', 'settings_versiontolow' => '版本低', @@ -1726,6 +1732,8 @@ URL: [url]', 'splash_error_add_to_transmittal' => '將文件添加到傳送時出錯', 'splash_error_rm_download_link' => '刪除下載鏈接時出錯', 'splash_error_send_download_link' => '發送下載鏈接時出錯', +'splash_expiration_date_cleared' => '', +'splash_expiration_date_set' => '', 'splash_extension_getlist' => '來自存儲庫的擴展名更新列表', 'splash_extension_import' => '安裝擴展', 'splash_extension_refresh' => '刷新的擴展名列表', From 8c8ce0494f0a8be8dc4bfe8965c3778875310128 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 22 Dec 2020 11:18:27 +0100 Subject: [PATCH 053/276] updating -> upgrading --- doc/README.Install.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/README.Install.md b/doc/README.Install.md index ff16da785..c7f300aa5 100644 --- a/doc/README.Install.md +++ b/doc/README.Install.md @@ -128,7 +128,7 @@ Just open the settings in the admin tools and empty the currently set encryption key on the tab 'System'. Save the settings and check the key again. It should be new one. Save the settings again -UPDATING FROM A PREVIOUS VERSION OR SEEDDMS +UPGRATING FROM A PREVIOUS VERSION OR SEEDDMS ============================================= As SeedDMS is a smooth continuation of LetoDMS there is no difference From 5678444a288638e6b7e67c58595dcf127d5ef802 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 22 Dec 2020 11:38:58 +0100 Subject: [PATCH 054/276] updating -> upgrading --- doc/README.Install.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/README.Install.md b/doc/README.Install.md index c7f300aa5..81ebac299 100644 --- a/doc/README.Install.md +++ b/doc/README.Install.md @@ -173,7 +173,7 @@ Fresh installation and take over of data contain database updates. - test your new installation. -Updating your current installation +Upgrading your current installation ----------------------------------- - make a backup of your data folder and the configuration file settings.xml From 5247508fabc307a10ef33f5c291c5a82c9dc6a5d Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 22 Dec 2020 17:04:39 +0100 Subject: [PATCH 055/276] more info on how xsendfile is detected --- doc/README.xsendfile | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/doc/README.xsendfile b/doc/README.xsendfile index 96ec5653b..bdf40aef6 100644 --- a/doc/README.xsendfile +++ b/doc/README.xsendfile @@ -24,3 +24,13 @@ XSendFilePath /var/www/seeddms51x/data/ If the XSendFilePath is not set propperly, you will notice an error message in your apache log file, probably telling you that the download file could not be found. + +A positive side effect of xsendfile is support for content ranges which are +currently *not* supported by seeddms' Download and ViewOnline scripts. This is +especially usefull when previewing videos. Without content ranges it is not +possible to jump to certain time in the video. + +In order to check if the xsendfile module is loaded, php uses apache_get_modules() +which is only available if php is loaded as an apache module. Running php in fpm +mode will prevent php from checking for xsendfile and consequently xsendfile support +will not be available. From 6971a46be8aa1429a6dc0a19e8555fc78fd6e3aa Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 22 Dec 2020 17:05:45 +0100 Subject: [PATCH 056/276] show a list of apache extensions --- views/bootstrap/class.Info.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/views/bootstrap/class.Info.php b/views/bootstrap/class.Info.php index be46390fd..c47298029 100644 --- a/views/bootstrap/class.Info.php +++ b/views/bootstrap/class.Info.php @@ -106,6 +106,19 @@ class SeedDMS_View_Info extends SeedDMS_Bootstrap_Style { foreach(array_diff($requiredext, $phpextensions) as $extname) echo "".$extname.""."\n"; echo "\n\n"; + + if(function_exists('apache_get_modules')) { + $this->contentHeading(getMLText("installed_apache_extensions")); + $apacheextensions = apache_get_modules(); + echo "\n"; + echo "\n\n"; + echo "\n"; + echo "\n\n\n"; + foreach($apacheextensions as $extname) + echo "\n"; + echo "\n
".getMLText("name"); + echo "
".$extname.""."
\n"; + } } $this->columnEnd(); $this->rowEnd(); From 62d19aa8085ecdcc424ae26e6db0468c47eab805 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 23 Dec 2020 06:19:52 +0100 Subject: [PATCH 057/276] set header Content-Length --- SeedDMS_Preview/Preview/Base.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/SeedDMS_Preview/Preview/Base.php b/SeedDMS_Preview/Preview/Base.php index f34359e7e..59aa7b703 100644 --- a/SeedDMS_Preview/Preview/Base.php +++ b/SeedDMS_Preview/Preview/Base.php @@ -172,6 +172,8 @@ class SeedDMS_Preview_Base { if($this->xsendfile && function_exists('apache_get_modules') && in_array('mod_xsendfile',apache_get_modules())) { header("X-Sendfile: ".$filename); } else { + $size = filesize($filename); + header("Content-Length: " . $size); /* Make sure output buffering is off */ if (ob_get_level()) { ob_end_clean(); From a4636071c734d0519b9a548d56baac94cdaceb6b Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 23 Dec 2020 06:20:07 +0100 Subject: [PATCH 058/276] new version 1.3.2 --- SeedDMS_Preview/package.xml | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/SeedDMS_Preview/package.xml b/SeedDMS_Preview/package.xml index 9bb36ad03..715278e1a 100644 --- a/SeedDMS_Preview/package.xml +++ b/SeedDMS_Preview/package.xml @@ -4,17 +4,17 @@ pear.php.net Create thumbnails from document content for SeedDMS SeedDMS is a web based document management system (DMS). These - are the classes to create preview images from the document content. + are the classes to create preview images and pdf file from the document content. Uwe Steinmann steinm uwe@steinmann.cx yes - 2020-03-21 + 2020-12-23 - 1.3.1 + 1.3.2 1.3.1 @@ -23,7 +23,8 @@ GPL License -add parameter $target to SeedDMS_Preview_pdfPreviewer::hasRawPreview() and SeedDMS_Preview_pdfPreviewer::getRawPreview() +set header Content-Length +update package description @@ -436,5 +437,21 @@ fix creation of pdf preview if document content class is not SeedDMS_Core_Docume add new methode getPreviewFile() + + 2020-03-21 + + + 1.3.1 + 1.3.1 + + + stable + stable + + GPL License + +add parameter $target to SeedDMS_Preview_pdfPreviewer::hasRawPreview() and SeedDMS_Preview_pdfPreviewer::getRawPreview() + + From 3b0eafd5aa64f662ab9e6876467abe06c0f7284e Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 23 Dec 2020 06:20:58 +0100 Subject: [PATCH 059/276] sendFile() can handle partial downloads --- inc/inc.Utils.php | 66 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 62 insertions(+), 4 deletions(-) diff --git a/inc/inc.Utils.php b/inc/inc.Utils.php index 4e90b65c2..f3b0fb372 100644 --- a/inc/inc.Utils.php +++ b/inc/inc.Utils.php @@ -644,11 +644,69 @@ function sendFile($filename) { /* {{{ */ if($settings->_enableXsendfile && function_exists('apache_get_modules') && in_array('mod_xsendfile',apache_get_modules())) { header("X-Sendfile: ".$filename); } else { - /* Make sure output buffering is off */ - if (ob_get_level()) { - ob_end_clean(); + + $size = filesize($filename); + header("Content-Length: " . $size); + if (isset($_SERVER['HTTP_RANGE'])) { + $fp = @fopen($filename, 'rb'); + $length = $size; // Content length + $start = 0; // Start byte + $end = $size - 1; // End byte + + header("Accept-Ranges: 0-$length"); + + $c_start = $start; + $c_end = $end; + + list($unit, $range) = explode('=', $_SERVER['HTTP_RANGE'], 2); + if (trim($unit) !== 'bytes') { + header('HTTP/1.1 416 Requested Range Not Satisfiable'); + header("Content-Range: bytes $start-$end/$size"); + exit; + } + if (strpos($range, ',') !== false) { + header('HTTP/1.1 416 Requested Range Not Satisfiable'); + header("Content-Range: bytes $start-$end/$size"); + exit; + } + if ($range == '-') { + $c_start = $size - substr($range, 1); + } else { + $range = explode('-', $range); + $c_start = $range[0]; + $c_end = (isset($range[1]) && is_numeric($range[1])) ? $range[1] : $size; + } + $c_end = ($c_end > $end) ? $end : $c_end; + if ($c_start > $c_end || $c_start > $size - 1 || $c_end >= $size) { + header('HTTP/1.1 416 Requested Range Not Satisfiable'); + header("Content-Range: bytes $start-$end/$size"); + exit; + } + $start = $c_start; + $end = $c_end; + $length = $end - $start + 1; + fseek($fp, $start); + header('HTTP/1.1 206 Partial Content'); + header("Content-Range: bytes $start-$end/$size"); + + $buffer = 1024 * 8; + while(!feof($fp) && ($p = ftell($fp)) <= $end) { + if ($p + $buffer > $end) { + $buffer = $end - $p + 1; + } + set_time_limit(0); + echo fread($fp, $buffer); + flush(); + } + + fclose($fp); + } else { + /* Make sure output buffering is off */ + if (ob_get_level()) { + ob_end_clean(); + } + readfile($filename); } - readfile($filename); } } /* }}} */ From 8b2e8e0c0d9f61b0608925a3afdf9a3fe49fdf27 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 23 Dec 2020 06:21:24 +0100 Subject: [PATCH 060/276] Content-Length is now set in sendFile() --- controllers/class.Download.php | 1 - controllers/class.ExtensionMgr.php | 1 - controllers/class.ViewOnline.php | 1 - 3 files changed, 3 deletions(-) diff --git a/controllers/class.Download.php b/controllers/class.Download.php index 9f8c0d2f9..839ddb66c 100644 --- a/controllers/class.Download.php +++ b/controllers/class.Download.php @@ -54,7 +54,6 @@ class SeedDMS_Controller_Download extends SeedDMS_Controller_Common { if(null === $this->callHook('version')) { if(file_exists($dms->contentDir . $content->getPath())) { header("Content-Transfer-Encoding: binary"); - header("Content-Length: " . filesize($dms->contentDir . $content->getPath() )); $efilename = rawurlencode($content->getOriginalFileName()); header("Content-Disposition: attachment; filename=\"" . $efilename . "\"; filename*=UTF-8''".$efilename); header("Content-Type: " . $content->getMimeType()); diff --git a/controllers/class.ExtensionMgr.php b/controllers/class.ExtensionMgr.php index 306e521f8..755baf186 100644 --- a/controllers/class.ExtensionMgr.php +++ b/controllers/class.ExtensionMgr.php @@ -41,7 +41,6 @@ class SeedDMS_Controller_ExtensionMgr extends SeedDMS_Controller_Common { if(null === $this->callHook('download')) { if(file_exists($filename)) { header("Content-Transfer-Encoding: binary"); - header("Content-Length: " . filesize($filename)); header("Content-Disposition: attachment; filename=\"" . utf8_basename($filename) . "\"; filename*=UTF-8''".utf8_basename($filename)); header("Content-Type: application/zip"); header("Cache-Control: must-revalidate"); diff --git a/controllers/class.ViewOnline.php b/controllers/class.ViewOnline.php index b4c01be66..7d071db17 100644 --- a/controllers/class.ViewOnline.php +++ b/controllers/class.ViewOnline.php @@ -56,7 +56,6 @@ class SeedDMS_Controller_ViewOnline extends SeedDMS_Controller_Common { } else { header("Content-Disposition: filename=\"" . $efilename . "\"; filename*=UTF-8''".$efilename); } - header("Content-Length: " . filesize($dms->contentDir . $content->getPath())); header("Cache-Control: must-revalidate"); sendFile($dms->contentDir.$content->getPath()); From 75e68c75d98f2b7145226de8a70d3c42f9641bc5 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 23 Dec 2020 06:22:00 +0100 Subject: [PATCH 061/276] replace phrase documents_to_trigger_rejected by document_rejected --- views/bootstrap/class.Tasks.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/bootstrap/class.Tasks.php b/views/bootstrap/class.Tasks.php index 86492413f..58a402cd6 100644 --- a/views/bootstrap/class.Tasks.php +++ b/views/bootstrap/class.Tasks.php @@ -210,7 +210,7 @@ class SeedDMS_View_Tasks extends SeedDMS_Bootstrap_Style { } if(!empty($tasks['rejected'])) { $content .= "
  • \n"; - $content .= " ".getMLText("documents_to_trigger_rejected")."\n"; + $content .= " ".getMLText("documents_rejected")."\n"; $content .= "
      \n"; foreach($tasks['rejected'] as $t) { $doc = $dms->getDocument($t['id']); From 14f9ed09726cc46b758a355bd9d874a7e7ac3b50 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 23 Dec 2020 07:02:53 +0100 Subject: [PATCH 062/276] add note for 5.1.21 --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index 98bc73ec3..1b37cca20 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -26,6 +26,7 @@ - add support for start folder in fulltext search - always call hook postAddSubFolder and postEditDocument - call each notification service even if one of them fails +- support partial content downloads (useful for embedding videos) -------------------------------------------------------------------------------- Changes in version 5.1.20 From 0a8ca01615ca6a3b1eae1e731cf0a9d6090646b5 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 23 Dec 2020 12:19:49 +0100 Subject: [PATCH 063/276] place preview of drop folder menu left of menu --- views/bootstrap/class.DropFolderChooser.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/bootstrap/class.DropFolderChooser.php b/views/bootstrap/class.DropFolderChooser.php index 3fc9f7766..1773469a8 100644 --- a/views/bootstrap/class.DropFolderChooser.php +++ b/views/bootstrap/class.DropFolderChooser.php @@ -85,7 +85,7 @@ $('.folderselect').click(function(ev) { if($previewwidth) { $previewer->createRawPreview($dir.'/'.$entry, 'dropfolder/', $mimetype); if($previewer->hasRawPreview($dir.'/'.$entry, 'dropfolder/')) { - $filecontent .= "
      "; + $filecontent .= "
      "; } } $filecontent .= "
      ".$entry."
      ".SeedDMS_Core_File::format_filesize(filesize($dir.'/'.$entry)).", ".date('Y-m-d H:i:s', filectime($dir.'/'.$entry))."
      \n"; From 269431779a8d2d81813650089c551c96b2bc0449 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 23 Dec 2020 16:09:14 +0100 Subject: [PATCH 064/276] fix typo --- CHANGELOG | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 1b37cca20..79b0cbe85 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -21,7 +21,7 @@ - output format for dates can be configured - add filter function to notification service - reindex document after it was edited -- show preview images in drop folder menu after mouse over +- show preview images in drop folder menu on mouse over - add support for indexing folders in fulltext search - add support for start folder in fulltext search - always call hook postAddSubFolder and postEditDocument From 9f7933f0306286530ec3c23a4dbc74ba2c187a59 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 23 Dec 2020 16:09:29 +0100 Subject: [PATCH 065/276] place preview icons left of menu item on mouse over --- views/bootstrap/class.DropFolderChooser.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/bootstrap/class.DropFolderChooser.php b/views/bootstrap/class.DropFolderChooser.php index 1773469a8..688d2785d 100644 --- a/views/bootstrap/class.DropFolderChooser.php +++ b/views/bootstrap/class.DropFolderChooser.php @@ -85,7 +85,7 @@ $('.folderselect').click(function(ev) { if($previewwidth) { $previewer->createRawPreview($dir.'/'.$entry, 'dropfolder/', $mimetype); if($previewer->hasRawPreview($dir.'/'.$entry, 'dropfolder/')) { - $filecontent .= "
      "; + $filecontent .= "
      "; } } $filecontent .= "
      ".$entry."
      ".SeedDMS_Core_File::format_filesize(filesize($dir.'/'.$entry)).", ".date('Y-m-d H:i:s', filectime($dir.'/'.$entry))."
      \n"; From 144d35849ba1b2aff9184fe7c02c55a2510810de Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 28 Dec 2020 08:14:05 +0100 Subject: [PATCH 066/276] check if attr def exists when setting attribute value --- SeedDMS_Core/Core/inc.ClassDocument.php | 11 +++++++++-- SeedDMS_Core/Core/inc.ClassFolder.php | 18 +++++++++++++++--- SeedDMS_Core/package.xml | 1 + 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/SeedDMS_Core/Core/inc.ClassDocument.php b/SeedDMS_Core/Core/inc.ClassDocument.php index 5b155171b..90a490921 100644 --- a/SeedDMS_Core/Core/inc.ClassDocument.php +++ b/SeedDMS_Core/Core/inc.ClassDocument.php @@ -1551,12 +1551,19 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ if($attributes) { foreach($attributes as $attrdefid=>$attribute) { /* $attribute can be a string or an array */ - if($attribute) - if(!$content->setAttributeValue($this->_dms->getAttributeDefinition($attrdefid), $attribute)) { + if($attribute) { + if($attrdef = $this->_dms->getAttributeDefinition($attrdefid)) { + if(!$content->setAttributeValue($attrdef, $attribute)) { + $this->_removeContent($content); + $db->rollbackTransaction(); + return false; + } + } else { $this->_removeContent($content); $db->rollbackTransaction(); return false; } + } } } diff --git a/SeedDMS_Core/Core/inc.ClassFolder.php b/SeedDMS_Core/Core/inc.ClassFolder.php index 25b01e6f1..2ad0a365e 100644 --- a/SeedDMS_Core/Core/inc.ClassFolder.php +++ b/SeedDMS_Core/Core/inc.ClassFolder.php @@ -700,7 +700,12 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { if($attributes) { foreach($attributes as $attrdefid=>$attribute) { if($attribute) - if(!$newFolder->setAttributeValue($this->_dms->getAttributeDefinition($attrdefid), $attribute)) { + if($attrdef = $this->_dms->getAttributeDefinition($attrdefid)) { + if(!$newFolder->setAttributeValue($attrdef, $attribute)) { + $db->rollbackTransaction(); + return false; + } + } else { $db->rollbackTransaction(); return false; } @@ -1026,12 +1031,19 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { if($attributes) { foreach($attributes as $attrdefid=>$attribute) { /* $attribute can be a string or an array */ - if($attribute) - if(!$document->setAttributeValue($this->_dms->getAttributeDefinition($attrdefid), $attribute)) { + if($attribute) { + if($attrdef = $this->_dms->getAttributeDefinition($attrdefid)) { + if(!$document->setAttributeValue($attrdef, $attribute)) { + $document->remove(); + $db->rollbackTransaction(); + return false; + } + } else { $document->remove(); $db->rollbackTransaction(); return false; } + } } } diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index 24ec9e12a..bd8ff243e 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -29,6 +29,7 @@ - new paramter 'new' of methode SeedDMЅ_Core_AttributeDefinition::validate() - check if folder/document is below rootDir can be turned on (default off) - SeedDMS_Core_User::setHomeFolder() can be used to unset the home folder +- check if attribute definition exists when setting attributes of folders and documents From ac0347939175e8ce6a504324ba4ac6d5bae7ce59 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 28 Dec 2020 19:43:36 +0100 Subject: [PATCH 067/276] unfold all folders within current path --- views/bootstrap/class.Bootstrap.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index 9d686bbfd..beaa916cc 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -1871,7 +1871,8 @@ $(document).ready(function() { } foreach($subfolders as $subfolder) { $node = array('label'=>$subfolder->getName(), 'id'=>$subfolder->getID(), 'load_on_demand'=>(1 && ($subfolder->hasSubFolders() || ($subfolder->hasDocuments() && $showdocs))) ? true : false, 'is_folder'=>true); - if(/*$expandtree>=$level ||*/ $pathfolder->getID() == $subfolder->getID()) { + /* if the subfolder is in the path then further unfold the tree. */ + if(/*$expandtree>=$level ||*/ $path && ($path[0]->getID() == $subfolder->getID())) { $node['children'] = jqtree($path, $subfolder, $user, $accessmode, $showdocs, $expandtree, $orderby, $level+1); if($showdocs) { $documents = $subfolder->getDocuments(isset($orderby[0]) ? $orderby[0] : '', $orderdir); From f353ac645e033d76c5e26a1388d047c90c90d591 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 28 Dec 2020 19:44:34 +0100 Subject: [PATCH 068/276] add item for 5.1.21 --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index 79b0cbe85..eccc241c7 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -27,6 +27,7 @@ - always call hook postAddSubFolder and postEditDocument - call each notification service even if one of them fails - support partial content downloads (useful for embedding videos) +- unfold all folders within current path in jqtree -------------------------------------------------------------------------------- Changes in version 5.1.20 From 6d609a44061ea545ebbd8ed4f5c18cb13e78d9b8 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 29 Dec 2020 08:19:06 +0100 Subject: [PATCH 069/276] major overhaul of dutch, various new translations --- languages/ar_EG/lang.inc | 2 + languages/bg_BG/lang.inc | 2 + languages/ca_ES/lang.inc | 2 + languages/cs_CZ/lang.inc | 2 + languages/de_DE/lang.inc | 4 +- languages/el_GR/lang.inc | 12 +- languages/en_GB/lang.inc | 4 +- languages/es_ES/lang.inc | 2 + languages/fr_FR/lang.inc | 2 + languages/hr_HR/lang.inc | 2 + languages/hu_HU/lang.inc | 2 + languages/it_IT/lang.inc | 2 + languages/ko_KR/lang.inc | 2 + languages/lo_LA/lang.inc | 2 + languages/nb_NO/lang.inc | 2 + languages/nl_NL/lang.inc | 803 ++++++++++++++++++++------------------- languages/pl_PL/lang.inc | 2 + languages/pt_BR/lang.inc | 2 + languages/ro_RO/lang.inc | 2 + languages/ru_RU/lang.inc | 2 + languages/sk_SK/lang.inc | 2 + languages/sv_SE/lang.inc | 2 + languages/tr_TR/lang.inc | 2 + languages/uk_UA/lang.inc | 2 + languages/zh_CN/lang.inc | 6 +- languages/zh_TW/lang.inc | 2 + 26 files changed, 469 insertions(+), 402 deletions(-) diff --git a/languages/ar_EG/lang.inc b/languages/ar_EG/lang.inc index a7ee4090a..1e45b8332 100644 --- a/languages/ar_EG/lang.inc +++ b/languages/ar_EG/lang.inc @@ -350,6 +350,7 @@ URL: [url]', 'documents_locked' => 'مستندات مغلقة', 'documents_locked_by_you' => 'المستندات محمية من التعديل بواسطتك', 'documents_only' => 'مستندات فقط', +'documents_rejected' => '', 'documents_to_approve' => 'مستندات في انتظار الموافقة', 'documents_to_correct' => 'مستندات للتصحيح', 'documents_to_process' => 'مستندات للمعالجة', @@ -391,6 +392,7 @@ Parent folder: [folder_path] 'document_duplicate_name' => 'اسم المستند متكرر', 'document_has_no_workflow' => 'المستند لايحتوى مسار عمل', 'document_infos' => 'معلومات المستند', +'document_is_checked_out' => '', 'document_is_checked_out_remove' => '', 'document_is_checked_out_update' => 'تم سحب المستند', 'document_is_not_locked' => 'هذا المستند غير محمي ضد التعديل', diff --git a/languages/bg_BG/lang.inc b/languages/bg_BG/lang.inc index 90463cdc0..624565b9a 100644 --- a/languages/bg_BG/lang.inc +++ b/languages/bg_BG/lang.inc @@ -333,6 +333,7 @@ $text = array( 'documents_locked' => '', 'documents_locked_by_you' => 'Документи, блокирани от Вас', 'documents_only' => 'Само документи', +'documents_rejected' => '', 'documents_to_approve' => 'Документи, чакащи Вашето утвърждаване', 'documents_to_correct' => '', 'documents_to_process' => '', @@ -365,6 +366,7 @@ $text = array( 'document_duplicate_name' => 'Дублирано име на документ', 'document_has_no_workflow' => 'Документът няма процес', 'document_infos' => 'Информация за документа', +'document_is_checked_out' => '', 'document_is_checked_out_remove' => '', 'document_is_checked_out_update' => '', 'document_is_not_locked' => 'Документът не е блокиран', diff --git a/languages/ca_ES/lang.inc b/languages/ca_ES/lang.inc index 432ca5013..d2b319ba9 100644 --- a/languages/ca_ES/lang.inc +++ b/languages/ca_ES/lang.inc @@ -338,6 +338,7 @@ URL: [url]', 'documents_locked' => '', 'documents_locked_by_you' => 'Documents bloquejats per vostè', 'documents_only' => 'Només documents', +'documents_rejected' => '', 'documents_to_approve' => 'Documents en espera d\'aprovació d\'usuaris', 'documents_to_correct' => '', 'documents_to_process' => '', @@ -370,6 +371,7 @@ URL: [url]', 'document_duplicate_name' => '', 'document_has_no_workflow' => '', 'document_infos' => 'Informacions', +'document_is_checked_out' => '', 'document_is_checked_out_remove' => '', 'document_is_checked_out_update' => '', 'document_is_not_locked' => 'Aquest document no està bloquejat', diff --git a/languages/cs_CZ/lang.inc b/languages/cs_CZ/lang.inc index b61609a68..b531c6a1d 100644 --- a/languages/cs_CZ/lang.inc +++ b/languages/cs_CZ/lang.inc @@ -362,6 +362,7 @@ URL: [url]', 'documents_locked' => 'Uzamčené dokumenty', 'documents_locked_by_you' => 'Vámi uzamčené dokumenty', 'documents_only' => 'Pouze dokumenty', +'documents_rejected' => '', 'documents_to_approve' => 'Dokumenty čekající na schválení uživatele', 'documents_to_correct' => 'Dokumenty, které potřebují opravu', 'documents_to_process' => 'Dokumenty, které potřebují zpracování', @@ -410,6 +411,7 @@ Uživatel: [username]', 'document_duplicate_name' => 'Duplicitní název dokumentu', 'document_has_no_workflow' => 'Dokument nemá workflow', 'document_infos' => 'Informace o dokumentu', +'document_is_checked_out' => '', 'document_is_checked_out_remove' => '', 'document_is_checked_out_update' => 'Dokument je aktuálně zkontrolován. Pokud nahrajete novou verzi, nemůžete již kontrolovanou verzi zkontrolovat.', 'document_is_not_locked' => 'Tento dokument není zamčený', diff --git a/languages/de_DE/lang.inc b/languages/de_DE/lang.inc index 9e2de373a..a34f7d44b 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 (2847), dgrutsch (22) +// Translators: Admin (2848), dgrutsch (22) $text = array( '2_factor_auth' => '2-Faktor Authentifizierung', @@ -362,6 +362,7 @@ URL: [url]', 'documents_locked' => 'Gesperrte Dokumente', 'documents_locked_by_you' => 'Von mir gesperrte Dokumente', 'documents_only' => 'Nur Dokumente', +'documents_rejected' => 'Abgelehnt', 'documents_to_approve' => 'Freigabe erforderlich', 'documents_to_correct' => 'Korrektur erforderlich', 'documents_to_process' => 'Dokumente, die bearbeitet werden müssen', @@ -410,6 +411,7 @@ Benutzer: [username]', 'document_duplicate_name' => 'Doppelter Dokumentenname', 'document_has_no_workflow' => 'Dokument hat keinen Workflow', 'document_infos' => 'Informationen', +'document_is_checked_out' => '', 'document_is_checked_out_remove' => 'Das Dokument ist zur Zeit ausgecheckt. Wenn Sie das Dokument löschen kann die ausgecheckte Version nicht mehr hochgeladen werden und verbleibt im Auscheck-Bereich.', 'document_is_checked_out_update' => 'Das Dokument ist zur Zeit ausgecheckt. Wenn Sie eine neue Version hochladen, werden Sie die ausgecheckte Version nicht mehr einchecken können.', 'document_is_not_locked' => 'Dieses Dokument ist nicht gesperrt', diff --git a/languages/el_GR/lang.inc b/languages/el_GR/lang.inc index 95947424f..b4cb4fc10 100644 --- a/languages/el_GR/lang.inc +++ b/languages/el_GR/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 (343) +// Translators: Admin (347) $text = array( '2_factor_auth' => '', @@ -307,7 +307,7 @@ $text = array( 'daily' => '', 'databasesearch' => '', 'database_schema_version' => '', -'data_loading' => '', +'data_loading' => 'Αναμονή φόρτωσης δεδομένων...', 'date' => 'Ημερομηνία', 'days' => 'μέρες', 'debug' => '', @@ -333,6 +333,7 @@ $text = array( 'documents_locked' => '', 'documents_locked_by_you' => '', 'documents_only' => 'Έγγραφα μόνο', +'documents_rejected' => '', 'documents_to_approve' => '', 'documents_to_correct' => '', 'documents_to_process' => '', @@ -365,6 +366,7 @@ $text = array( 'document_duplicate_name' => '', 'document_has_no_workflow' => '', 'document_infos' => 'Πληροφορίες Εγγράφου', +'document_is_checked_out' => '', 'document_is_checked_out_remove' => '', 'document_is_checked_out_update' => '', 'document_is_not_locked' => '', @@ -426,7 +428,7 @@ $text = array( 'dump_remove' => '', 'duplicates' => '', 'duplicate_content' => '', -'edit' => '', +'edit' => 'Επεξεργασία', 'edit_attributes' => '', 'edit_comment' => 'Επεξερασία σχόλιου', 'edit_default_keywords' => '', @@ -683,7 +685,7 @@ $text = array( 'linked_documents' => 'Σχετικά Έγγραφα', 'linked_files' => 'Συνδεμένα αρχεία', 'linked_to_current_version' => '', -'linked_to_document' => '', +'linked_to_document' => 'Συνδεδεμένο με το έγγραφο', 'linked_to_this_version' => '', 'link_alt_updatedocument' => '', 'link_document' => '', @@ -758,7 +760,7 @@ $text = array( 'new_attrdef' => '', 'new_default_keywords' => '', 'new_default_keyword_category' => 'Προσθήκη Κατηγορίας', -'new_document_category' => '', +'new_document_category' => 'Προσθήκη κατηγορίας', 'new_document_email' => 'Νέο Έγγραφο', 'new_document_email_body' => 'Νέο έγγραφο Name: [name] diff --git a/languages/en_GB/lang.inc b/languages/en_GB/lang.inc index 8e716e9c1..28f117828 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 (1955), archonwang (3), dgrutsch (9), netixw (14) +// Translators: Admin (1956), archonwang (3), dgrutsch (9), netixw (14) $text = array( '2_factor_auth' => '2-factor authentication', @@ -362,6 +362,7 @@ URL: [url]', 'documents_locked' => 'Locked documents', 'documents_locked_by_you' => 'Documents locked by you', 'documents_only' => 'Documents only', +'documents_rejected' => 'Rejected', 'documents_to_approve' => 'Documents awaiting your approval', 'documents_to_correct' => 'Documents that need correction', 'documents_to_process' => 'Documents that need processing', @@ -410,6 +411,7 @@ User: [username]', 'document_duplicate_name' => 'Duplicate document name', 'document_has_no_workflow' => 'Document has no workflow', 'document_infos' => 'Document Information', +'document_is_checked_out' => '', 'document_is_checked_out_remove' => 'Document is currently checked out. If you delete the document, the checked out version can not be added anymore and remains in the checkout area.', 'document_is_checked_out_update' => 'Document is currently checked out. If you upload a new version, then the checked out version cannot be checked back in anymore.', 'document_is_not_locked' => 'This document is not locked', diff --git a/languages/es_ES/lang.inc b/languages/es_ES/lang.inc index 5b1faf5f7..03c596068 100644 --- a/languages/es_ES/lang.inc +++ b/languages/es_ES/lang.inc @@ -357,6 +357,7 @@ URL: [url]', 'documents_locked' => '', 'documents_locked_by_you' => 'Documentos bloqueados por usted', 'documents_only' => 'Solo documentos', +'documents_rejected' => '', 'documents_to_approve' => 'Documentos en espera de aprobación de usuarios', 'documents_to_correct' => '', 'documents_to_process' => '', @@ -398,6 +399,7 @@ Usuario: [username]', 'document_duplicate_name' => 'Nombre de documento duplicado', 'document_has_no_workflow' => 'Documento sin flujo de trabajo', 'document_infos' => 'Informaciones', +'document_is_checked_out' => '', 'document_is_checked_out_remove' => '', 'document_is_checked_out_update' => '', 'document_is_not_locked' => 'Este documento no está bloqueado', diff --git a/languages/fr_FR/lang.inc b/languages/fr_FR/lang.inc index d54452ee2..9eaa41622 100644 --- a/languages/fr_FR/lang.inc +++ b/languages/fr_FR/lang.inc @@ -362,6 +362,7 @@ URL: [url]', 'documents_locked' => 'Documents verrouillés', 'documents_locked_by_you' => 'Documents verrouillés', 'documents_only' => 'Documents uniquement', +'documents_rejected' => '', 'documents_to_approve' => 'Documents en attente d\'approbation', 'documents_to_correct' => 'Documents à corriger', 'documents_to_process' => 'Documents à traiter', @@ -410,6 +411,7 @@ Utilisateur : [username]', 'document_duplicate_name' => 'Un document porte déjà ce nom !', 'document_has_no_workflow' => 'Le document n\'a pas de workflow', 'document_infos' => 'Informations sur le document', +'document_is_checked_out' => '', 'document_is_checked_out_remove' => '', 'document_is_checked_out_update' => 'Le document est actuellement bloqué. Si vous ajoutez une nouvelle version, la version bloquée ne pourra plus être débloquée.', 'document_is_not_locked' => 'Ce document n\'est pas verrouillé', diff --git a/languages/hr_HR/lang.inc b/languages/hr_HR/lang.inc index f1c3eb7b2..e237696b1 100644 --- a/languages/hr_HR/lang.inc +++ b/languages/hr_HR/lang.inc @@ -362,6 +362,7 @@ Internet poveznica: [url]', 'documents_locked' => '', 'documents_locked_by_you' => 'Dokumenti koje ste vi zaključali', 'documents_only' => 'Samo dokumenti', +'documents_rejected' => '', 'documents_to_approve' => 'Dokumenti koji čekaju vaše odobrenje', 'documents_to_correct' => '', 'documents_to_process' => '', @@ -403,6 +404,7 @@ Korisnik: [username]', 'document_duplicate_name' => 'Duplicate document name', 'document_has_no_workflow' => 'Dokument nema tok rada', 'document_infos' => 'Informacije o dokumentu', +'document_is_checked_out' => '', 'document_is_checked_out_remove' => '', 'document_is_checked_out_update' => 'Dokument je trenutno odjavljen. Ako učitate novu verziju, tada odjavljena verzija ne može više biti ponovno prijavljena.', 'document_is_not_locked' => 'Ovaj dokument nije zaključan', diff --git a/languages/hu_HU/lang.inc b/languages/hu_HU/lang.inc index ac6179bbb..f58b0a8e3 100644 --- a/languages/hu_HU/lang.inc +++ b/languages/hu_HU/lang.inc @@ -357,6 +357,7 @@ URL: [url]', 'documents_locked' => 'dokumentum zárolva', 'documents_locked_by_you' => 'Ön által zárolt dokumentumok', 'documents_only' => 'Csak dokumentumok', +'documents_rejected' => '', 'documents_to_approve' => 'Jóváhagyására váró dokumentumok', 'documents_to_correct' => '', 'documents_to_process' => '', @@ -398,6 +399,7 @@ Felhasználó: [username]', 'document_duplicate_name' => 'Duplikált dokumentum név', 'document_has_no_workflow' => 'Dokumentumhoz nincs munkafolyamat', 'document_infos' => 'Dokumentum információ', +'document_is_checked_out' => '', 'document_is_checked_out_remove' => '', 'document_is_checked_out_update' => '', 'document_is_not_locked' => 'Ez a dokumentum NEM zßrolt', diff --git a/languages/it_IT/lang.inc b/languages/it_IT/lang.inc index 597d7e0d9..7c84f2649 100644 --- a/languages/it_IT/lang.inc +++ b/languages/it_IT/lang.inc @@ -362,6 +362,7 @@ URL: [url]', 'documents_locked' => 'Documenti bloccati', 'documents_locked_by_you' => 'Documenti bloccati da te', 'documents_only' => 'Solo documenti', +'documents_rejected' => '', 'documents_to_approve' => 'Documenti in attesa della tua approvazione', 'documents_to_correct' => 'Documenti in attesa della tua correzione', 'documents_to_process' => 'I documenti che necessitano di trattamento', @@ -403,6 +404,7 @@ Utente: [username]', 'document_duplicate_name' => 'Nome del Documento duplicato', 'document_has_no_workflow' => 'Il documento non ha un flusso di lavoro', 'document_infos' => 'Informazioni documento', +'document_is_checked_out' => '', 'document_is_checked_out_remove' => '', 'document_is_checked_out_update' => 'Il documento é approvato. Se aggiorni il documento, la versione approvata verrà sovrascritta definitivamente', 'document_is_not_locked' => 'Questo documento non è bloccato', diff --git a/languages/ko_KR/lang.inc b/languages/ko_KR/lang.inc index c0bef7667..fc2160321 100644 --- a/languages/ko_KR/lang.inc +++ b/languages/ko_KR/lang.inc @@ -365,6 +365,7 @@ URL: [url]', 'documents_locked' => '잠긴 문서', 'documents_locked_by_you' => '당신에 의해 잠긴 문서', 'documents_only' => '문서', +'documents_rejected' => '', 'documents_to_approve' => '당신의 승인을 기다리는 문서들', 'documents_to_correct' => '', 'documents_to_process' => '문서처리', @@ -406,6 +407,7 @@ URL: [url]', 'document_duplicate_name' => '중복 문서 이름', 'document_has_no_workflow' => '문서에 워크플로우가 없습니다', 'document_infos' => '문서 정보', +'document_is_checked_out' => '', 'document_is_checked_out_remove' => '', 'document_is_checked_out_update' => '문서가 현재 체크아웃 되어 있습니다. 새 버전을 업로드하면 체크아웃된 버전은 더 이상 확인 할 수 없습니다.', 'document_is_not_locked' => '잠겨 있지 않은 문서', diff --git a/languages/lo_LA/lang.inc b/languages/lo_LA/lang.inc index a45649032..9b1633fec 100644 --- a/languages/lo_LA/lang.inc +++ b/languages/lo_LA/lang.inc @@ -360,6 +360,7 @@ URL: [url]', 'documents_locked' => 'ເອກະສານທີ່ຖືກລັອກ', 'documents_locked_by_you' => 'ເອກະສານນີ້ແມ່ນເຈົ້າເປັນຄົນລັອກ', 'documents_only' => 'ເອກະສານຢ່າງດຽວ', +'documents_rejected' => '', 'documents_to_approve' => 'ເອກະສານທີ່ລໍຖ້າອະນຸມັດຈາກທ່ານ', 'documents_to_correct' => '', 'documents_to_process' => 'ເອກະສານທີ່ຢູ່ໃນຂັ້ນຕອນການດຳເນີນງານ', @@ -401,6 +402,7 @@ URL: [url]', 'document_duplicate_name' => 'ຊື່ເອກະສານຊໍ້າ', 'document_has_no_workflow' => 'ເອກະສານບໍ່ມີເວີກໂຟ', 'document_infos' => 'ຂໍ້ມູນເອກະສານ', +'document_is_checked_out' => '', 'document_is_checked_out_remove' => '', 'document_is_checked_out_update' => 'ຂະນະນີ້ມີການກວດສອບເອກະສານ ຫາກເຈົ້າອັບໂຫລດເວີຊັນໄຫມ່ລະບົບຈະບໍ່ສາມາດກວດສອບລະບົບທີປິດອອກໄດ້ອີກຕໍ່ໄປ', 'document_is_not_locked' => 'ເອກະສານນີ້ແມ່ນບໍ່ໄດ້ລັອກ', diff --git a/languages/nb_NO/lang.inc b/languages/nb_NO/lang.inc index c2fe2dd65..9f9a47c03 100644 --- a/languages/nb_NO/lang.inc +++ b/languages/nb_NO/lang.inc @@ -362,6 +362,7 @@ URL: [url]', 'documents_locked' => 'Låste dokumenter', 'documents_locked_by_you' => 'Dokumenter som du har låst', 'documents_only' => 'Bare dokumenter', +'documents_rejected' => '', 'documents_to_approve' => 'Dokumenter som venter på din godkjenning', 'documents_to_correct' => 'Dokumenter som trenger dine rettelser', 'documents_to_process' => 'Dokumenter som trenger din behandling', @@ -410,6 +411,7 @@ Bruker: [username]', 'document_duplicate_name' => 'Dupliser dokumentnavn', 'document_has_no_workflow' => 'Dokumentet har ingen arbeidsflyt', 'document_infos' => 'Dokumentinformation', +'document_is_checked_out' => '', 'document_is_checked_out_remove' => '', 'document_is_checked_out_update' => 'Dokumentet er allerede utsjekket. Hvis du laster opp en ny version kan den utsjekkede versionen ikke sjekkes inn igen.', 'document_is_not_locked' => 'Dette dokumentet er ikke låst', diff --git a/languages/nl_NL/lang.inc b/languages/nl_NL/lang.inc index 4ee5489ff..96aa7d2d3 100644 --- a/languages/nl_NL/lang.inc +++ b/languages/nl_NL/lang.inc @@ -19,11 +19,11 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (781), gijsbertush (651), pepijn (45), reinoutdijkstra@hotmail.com (270) +// Translators: Admin (1167), gijsbertush (651), pepijn (45), reinoutdijkstra@hotmail.com (270) $text = array( '2_factor_auth' => '2-factor-authenticatie', -'2_factor_auth_info' => 'Dit systeem werkt met 2-factor-authenticatie. U heeft de Google Authenticator nodig op uf mobiele telfoon. Hieronder staan 2 QR-codes. De rechter is uw huidige geheime code. Met de linker kunt u een nieuwe geheime code instellen. Denk erom de nieuwe code opnieuw te scannen met Googke Authenticator.', +'2_factor_auth_info' => 'Dit systeem werkt met 2-factor-authenticatie. U heeft de Google Authenticator nodig op uw mobiele telfoon. Hieronder staan 2 QR-codes. De rechter is uw huidige geheime code. Met de linker kunt u een nieuwe geheime code instellen. Denk erom de nieuwe code opnieuw te scannen met Googke Authenticator.', '2_fact_auth_secret' => 'Toegangscode 2-factor-authenticatie', 'abbr_day' => '', 'abbr_hour' => '', @@ -41,14 +41,14 @@ $text = array( 'access_mode_all' => 'Alle machtigingen', 'access_mode_none' => 'Geen toegang', 'access_mode_read' => 'Leesrechten', -'access_mode_readwrite' => 'Lees- en Schrijf rechten', +'access_mode_readwrite' => 'Lees- en Schrijfrechten', 'access_permission_changed_email' => 'Machtigingen gewijzigd', -'access_permission_changed_email_body' => 'Toestemming veranderd -Document: [naam] -Bovenliggende map: [folder_pad] -Gebruiker: [gebruikersnaam] +'access_permission_changed_email_body' => 'Permission changed +Document: [name] +Parent folder: [folder_path] +User: [username] URL: [url]', -'access_permission_changed_email_subject' => '[naam site]: [naam] - Toestemming gewijzigd', +'access_permission_changed_email_subject' => '[sitename]: [name] - Toestemming gewijzigd', 'according_settings' => 'volgens instellingen', 'action' => 'Actie', 'actions' => 'Acties', @@ -60,12 +60,12 @@ URL: [url]', 'action_review' => 'Beoordelen', 'action_revise' => 'Nog herzien', 'add' => 'Toevoegen', -'add_approval' => 'Verzend [Goedkeuring]', +'add_approval' => 'Verzend goedkeuring', 'add_attrdefgroup' => 'Voeg een nieuwe attribuutgroep toe', 'add_document' => 'Document toevoegen', 'add_document_link' => 'Link toevoegen', 'add_document_notify' => 'Notificatie toekennen', -'add_doc_reviewer_approver_warning' => 'N.B. Documenten zijn automatisch gemarkeeerd als [Gepubliceerd] als geen [Autoriseerder] of [Controleur] is toegewezen.', +'add_doc_reviewer_approver_warning' => 'N.B. Documenten zijn automatisch gemarkeeerd als \'Gepubliceerd\' als geen goedkeurder of beoordelaaris toegewezen.', 'add_doc_workflow_warning' => 'N.B. Documenten worden automatisch gemarkeerd als vrijgegeven, indien er geen workflow is toegewezen.', 'add_event' => 'Activiteit toevoegen', 'add_group' => 'Nieuwe groep toevoegen', @@ -97,18 +97,18 @@ URL: [url]', 'and' => 'en', 'apply' => 'Toepassen', 'approvals_accepted' => '[no_approvals] goedkeuringen', -'approvals_accepted_latest' => '', +'approvals_accepted_latest' => 'Er zijn [no_approvals] goedkeuringen', 'approvals_and_reviews_accepted' => '[no_approvals] goedkeuringen en [no_reviews] geaccepteerde reviews', 'approvals_and_reviews_not_touched' => '[no_approvals] goedkeuringen [no_reviews] reviews nog niet behandeld', 'approvals_and_reviews_rejected' => '[no_approvals] goedkeuringen en [no_reviews] reviews afgekeurd', 'approvals_not_touched' => '[no_approvals] goedkeuringen nog niet behandeld', -'approvals_not_touched_latest' => '', +'approvals_not_touched_latest' => 'Er zijn [no_approvals] goedkeuringen', 'approvals_rejected' => '[no_approvals] goedkeuringen afgekeurd', -'approvals_rejected_latest' => '', +'approvals_rejected_latest' => 'Er zijn [no_approvals] in de laatste versie', 'approvals_without_group' => 'Goedkeuringen zonder groep', 'approvals_without_user' => 'Goedkeuringen zonder gebruiker', 'approval_deletion_email' => 'Goedkeuringsverzoek verwijderd', -'approval_deletion_email_body' => 'Approval request deleted +'approval_deletion_email_body' => 'Goedkeuringsverzoek verwijderd Document: [name] Version: [version] Parent folder: [folder_path] @@ -117,7 +117,7 @@ URL: [url]', 'approval_deletion_email_subject' => '[sitename]: [name] - Verzoek om goedkeuring verwijderd', 'approval_file' => 'Goedkeuring bestand', 'approval_group' => 'Goedkeuring Groep', -'approval_log' => 'Goedkeuring overzicht', +'approval_log' => 'Overzicht van goedkeuringen', 'approval_request_email' => 'Goedkeuring verzoek', 'approval_request_email_body' => 'Toestemming vereist Document: [name] @@ -125,7 +125,7 @@ Versie: [version] Bovenliggende map: [folder_path] User: [username] URL: [url]', -'approval_request_email_subject' => '[Naam site]: [naam] - Toestemming vereist', +'approval_request_email_subject' => '[sitename]: [name] - Toestemming vereist', 'approval_status' => 'Goedkeuring Status', 'approval_submit_email' => 'Goedkeuringings-email versturen', 'approval_submit_email_body' => 'Goedkeuringings-email versturen', @@ -138,25 +138,25 @@ URL: [url]', 'april' => 'april', 'archive' => 'Archief', 'archive_creation' => 'Archief aanmaken', -'archive_creation_warning' => 'Met deze handeling maakt U een Archief aan van alle bestanden in het DMS. Na het aanmaken van het Archief, wordt deze opgeslagen in de data-map van uw server.
      Waarschuwing: een leesbaar Archief kan niet worden gebruikt voor server back-up doeleinde.', +'archive_creation_warning' => 'Met deze handeling maakt U een Archief aan van alle bestanden in het DMS. Na het aanmaken van het Archief, wordt dit opgeslagen in de data-map van uw server.
      Waarschuwing: een leesbaar Archief kan niet worden gebruikt voor server back-up doeleinde.', 'ar_EG' => 'Arabisch', -'assign_approvers' => 'Aangewezen [Goedkeurders]', +'assign_approvers' => 'Wijs goedkeurders aan', 'assign_recipients' => 'Wijs ontvangers aan', -'assign_reviewers' => 'Aangewezen [Controleurs]', -'assign_user_property_to' => 'Wijs gebruikers machtigingen toe aan', +'assign_reviewers' => 'Wijs beoordelaars aan', +'assign_user_property_to' => 'Wijs gebruikersmachtigingen toe aan', 'assumed_released' => 'vermoedelijke status: Gepubliceerd', 'attrdefgroup_management' => 'Beheer attribuut-definiities', 'attrdefgrp_show_detail' => 'Details Beheer attribuut-definiities', 'attrdefgrp_show_list' => 'Lijst van attribuut-definiities', 'attrdefgrp_show_search' => 'Zoeken naar attribuut-definiities', 'attrdefgrp_show_searchlist' => 'Lijst van gezochte attribuut-definiities', -'attrdef_exists' => 'Kenmerkdefinitie bestaat al', -'attrdef_info' => 'Kenmerk info', -'attrdef_in_use' => 'Kenmerkdefinitie nog in gebruikt', -'attrdef_management' => 'Kenmerkdefinitie-beheer', +'attrdef_exists' => 'Attribuut-definitie bestaat al', +'attrdef_info' => 'attribuut info', +'attrdef_in_use' => 'attribuutdefinitie nog in gebruikt', +'attrdef_management' => 'Attribuut-definities beheren', 'attrdef_maxvalues' => 'Max. aantal waarden', 'attrdef_minvalues' => 'Min. aantal waarden', -'attrdef_minvalues_help' => '', +'attrdef_minvalues_help' => 'Minimum aantal waardes. Zet het op 1.', 'attrdef_min_greater_max' => 'Het minimum aantal is groter dan het maximum aantal', 'attrdef_multiple' => 'Meerdere waarden toegestaan', 'attrdef_multiple_needs_valueset' => 'Meerdere waarden nodig', @@ -165,21 +165,21 @@ URL: [url]', 'attrdef_noname' => 'Geen naam voor attribuut definitie', 'attrdef_objtype' => 'Object type', 'attrdef_regex' => 'Veelgebruikte uitdrukking', -'attrdef_regex_help' => '', +'attrdef_regex_help' => 'Regular expression (Regex) passend bij de attribuutwaarde (type is string)', 'attrdef_type' => 'Type', 'attrdef_type_boolean' => 'attribuut: boolean', 'attrdef_type_date' => 'attribuut: datum', -'attrdef_type_document' => '', +'attrdef_type_document' => 'Type Document', 'attrdef_type_email' => 'attribuut: email', 'attrdef_type_float' => 'attribuut: decimaal getal', -'attrdef_type_folder' => '', -'attrdef_type_group' => '', +'attrdef_type_folder' => 'Type Map', +'attrdef_type_group' => 'Type Groep', 'attrdef_type_int' => 'attribuut: geheel getal', 'attrdef_type_string' => 'attribuut: string', 'attrdef_type_url' => 'attribuut: url', -'attrdef_type_user' => '', -'attrdef_valueset' => 'Verzameling waarden', -'attrdef_valueset_help' => '', +'attrdef_type_user' => 'Type gebruiker', +'attrdef_valueset' => 'Verzameling waardes', +'attrdef_valueset_help' => 'Een lijst van waardes gescheiden door een willekeurig teken, dat ook het eerste teken van de string is: bijvoorbeeld #yes#no#maybe', 'attributes' => 'Attributen', 'attribute_changed_email_body' => 'Attribuut gewijzigd Document: [name] @@ -195,11 +195,11 @@ URL: [url]', 'attribute_value' => 'Waarde van het attribuut', 'attribute_value_not_in_valueset' => 'Waarde van attribuut bestaat niet', 'attr_malformed_boolean' => 'Foute vormgeving boolean', -'attr_malformed_date' => 'Foute vormgeving datum', -'attr_malformed_email' => 'Foute vormgeving email', -'attr_malformed_float' => 'Foute vormgeving getal', -'attr_malformed_int' => 'Foute vormgeving geheel getal', -'attr_malformed_url' => 'Foute vormgeving url', +'attr_malformed_date' => 'Foute vormgeving van datum', +'attr_malformed_email' => 'Foute vormgeving van email', +'attr_malformed_float' => 'Foute vormgeving van getal', +'attr_malformed_int' => 'Foute vormgeving van geheel getal', +'attr_malformed_url' => 'Foute vormgeving van url', 'attr_max_values' => 'attribuut: maximale waarde', 'attr_min_values' => 'attribuut: minimale waarde', 'attr_not_in_valueset' => 'Attribuut bestaat niet', @@ -210,12 +210,12 @@ URL: [url]', 'authentication' => 'Authentificatie', 'authentication_failed' => 'Authenticatie mislukte', 'author' => 'Auteur', -'automatic_status_update' => 'Automatische Status wijziging', +'automatic_status_update' => 'Automatische statuswijziging', 'back' => 'Terug', -'backup_list' => 'Bestaande backup lijst', +'backup_list' => 'Bestaande backuplijst', 'backup_log_management' => 'Backup/loggen', -'backup_remove' => 'Verwijder backup bestand', -'backup_tools' => 'Backup gereedschap', +'backup_remove' => 'Verwijder backupbestand', +'backup_tools' => 'Backup-gereedschap', 'between' => 'tussen', 'bg_BG' => 'Bulgaars', 'browse' => 'Browse', @@ -224,14 +224,14 @@ URL: [url]', 'cancel' => 'Annuleren', 'cancel_checkout' => '', 'cancel_checkout_warning' => '', -'cannot_assign_invalid_state' => 'Kan document niet aanpassen in deze status', +'cannot_assign_invalid_state' => 'Kan het document niet aanpassen in deze status', 'cannot_change_final_states' => 'Waarschuwing: U kunt de Status [afgewezen], [vervallen], [in afwachting van] (nog) niet wijzigen.', -'cannot_delete_user' => 'Kan gebruiker niet verwijderen', -'cannot_delete_yourself' => 'Kan uzelf niet verwijderen', -'cannot_move_root' => 'Foutmelding: U kunt de basis map niet verplaatsen.', -'cannot_retrieve_approval_snapshot' => 'Niet mogelijk om [Goedgekeurde] status voor de huidige versie van dit document te verkrijgen.', -'cannot_retrieve_review_snapshot' => 'Niet mogelijk om Beoordeling status voor de huidige versie van dit document te verkrijgen.', -'cannot_rm_root' => 'Foutmelding: U kunt de basis map niet verwijderen.', +'cannot_delete_user' => 'Kan deze gebruiker niet verwijderen', +'cannot_delete_yourself' => 'U kunt uzelf niet verwijderen', +'cannot_move_root' => 'Foutmelding: U kunt de basismap niet verplaatsen.', +'cannot_retrieve_approval_snapshot' => 'Het is niet mogelijk om [Goedgekeurde] status voor de huidige versie van dit document te verkrijgen.', +'cannot_retrieve_review_snapshot' => 'niet mogelijk om Beoordelingsstatus voor de huidige versie van dit document te verkrijgen.', +'cannot_rm_root' => 'Foutmelding: U kunt de basismap niet verwijderen.', 'categories' => 'Categorieen', 'categories_loading' => 'Categorieën worden geladen', 'category' => 'Categorie', @@ -241,7 +241,7 @@ URL: [url]', 'category_in_use' => 'Categorie is in gebruik door documenten.', 'category_noname' => 'Geen Categorienaam opgegeven.', 'ca_ES' => 'Catalaans', -'changelog_loading' => '', +'changelog_loading' => 'De change log word geladen …', 'change_assignments' => 'Wijzig taken/toewijzingen', 'change_password' => 'Wijzig wachtwoord', 'change_password_message' => 'Wachtwoord is gewijzigd.', @@ -255,7 +255,7 @@ URL: [url]', 'chart_docspermonth_title' => 'Nieuwe documenten per maand', 'chart_docsperstatus_title' => 'Documenten per status', 'chart_docsperuser_title' => 'Documenten per gebruiker', -'chart_selection' => 'Kies grafiek', +'chart_selection' => 'Kies een grafiek', 'chart_sizeperuser_title' => 'Schijfruimte per gebruiker', 'checkedout_file_has_different_version' => 'Checkout-document is een andere versie', 'checkedout_file_has_disappeared' => 'File is onvindbaar', @@ -264,8 +264,8 @@ URL: [url]', 'checkoutpath_does_not_exist' => 'Checkout-pad bestaat niet', 'checkout_document' => 'Checkout-document', 'checkout_is_disabled' => 'Checkout is niet mogelijk', -'choose_attrdef' => 'Kies een kenmerkdefinitie', -'choose_attrdefgroup' => 'Kies een kenmerkdefinitie-groep', +'choose_attrdef' => 'Kies een attribuutdefinitie', +'choose_attrdefgroup' => 'Kies een attribuutdefinitie-groep', 'choose_category' => 'Selecteer a.u.b.', 'choose_group' => 'Selecteer Groep', 'choose_role' => 'Selecteer een rol', @@ -289,7 +289,7 @@ URL: [url]', 'comment_for_current_version' => 'Versie van het commentaar', 'configure_extension' => 'Configureer extensie', 'confirm_clear_cache' => 'Ja, ik wil de cache opschonen!', -'confirm_create_fulltext_index' => 'Ja, Ik wil de volledigetekst index opnieuw maken!', +'confirm_create_fulltext_index' => 'Ja, Ik wil de fulltext index opnieuw maken!', 'confirm_move_document' => 'Bevestig verplaatsing van document', 'confirm_move_folder' => 'Bevestig de verplaatsing van de map', 'confirm_pwd' => 'Bevestig wachtwoord', @@ -303,13 +303,13 @@ URL: [url]', 'confirm_rm_folder_files' => 'Weet U zeker dat U alle bestanden en submappen van de map "[foldername]" wilt verwijderen?
      Let op: deze actie kan niet ongedaan worden gemaakt.', 'confirm_rm_group' => 'Weet U zeker dat U de Groep "[groupname]" wilt verwijderen?
      Let op: deze handeling kan niet ongedaan worden gemaakt.', 'confirm_rm_log' => 'Weet U zeker dat U het logbestand "[logname]" wilt verwijderen?
      Let op: deze handeling kan niet ongedaan worden gemaakt.', -'confirm_rm_task' => '', +'confirm_rm_task' => 'Bevestig de verwijdering van deze taak', 'confirm_rm_transmittal' => 'Bestig de verwijdering van de verzending', 'confirm_rm_transmittalitem' => 'Bevestig te verzenden item', 'confirm_rm_user' => 'Weet U zeker dat U de Gebruiker "[username]" wilt verwijderen?
      Let op: deze handeling kan niet ongedaan worden gemaakt.', 'confirm_rm_user_from_processes' => 'Weet U zeker dat U de Gebruiker "[username]" wilt verwijderen uit dit proces?
      Let op: deze handeling kan niet ongedaan worden gemaakt.', 'confirm_rm_version' => 'Weet U zeker dat U deze versie van het document "[documentname]" wilt verwijderen?
      Pas op: deze handeling kan niet ongedaan worden gemaakt.', -'confirm_transfer_link_document' => '', +'confirm_transfer_link_document' => 'Versleep het document naar een document als a nieuwe versie. Alleen documenten met 1 versie zijn hiervoor geschikt.Het versleepte document wordt verwijderd', 'confirm_transfer_objects' => 'Weet U zeker dat U de documenten, mappen etc. van gebruiker "[username]" wilt overzetten?
      Let op: deze handeling kan niet ongedaan worden gemaakt.', 'confirm_update_transmittalitem' => 'Bevestig verandering van te verzenden item', 'content' => 'Welkomstpagina', @@ -317,9 +317,9 @@ URL: [url]', 'converter_new_cmd' => 'Wijziging: nieuw commando', 'converter_new_mimetype' => 'Wijziging: nieuw mimetype', 'copied_to_checkout_as' => 'Gekopieerd naar checkout als:', -'create_download_link' => '', -'create_fulltext_index' => 'Creeer volledige tekst index', -'create_fulltext_index_warning' => 'U staat op het punt de volledigetekst opnieuw te indexeren. Dit kan behoorlijk veel tijd en snelheid vergen van het systeem. Als u zeker bent om opnieuw te indexeren, bevestig deze actie.', +'create_download_link' => 'Maak een download-link', +'create_fulltext_index' => 'Creëer de index voor de fulltext search', +'create_fulltext_index_warning' => 'U staat op het punt de volledige tekst opnieuw te indexeren. Dit kan behoorlijk veel tijd en snelheid vergen van het systeem. Als u echt opnieuw wilt indexeren, bevestig dan deze actie.', 'creation_date' => 'Aangemaakt', 'cs_CZ' => 'Tsjechisch', 'current_password' => 'Huidige wachtwoord', @@ -328,7 +328,7 @@ URL: [url]', 'current_version' => 'Huidige versie', 'daily' => 'Dagelijks', 'databasesearch' => 'Zoek in Database', -'database_schema_version' => '', +'database_schema_version' => 'Versie van het database-schema', 'data_loading' => 'Even geduld tot de data geladen is', 'date' => 'Datum', 'days' => 'Dagen', @@ -341,7 +341,7 @@ URL: [url]', 'details' => 'Details', 'details_version' => 'Details voor versie: [version]', 'de_DE' => 'Duits', -'disable_extension' => '', +'disable_extension' => 'Schakel de extensie uit', 'disclaimer' => 'Dit is een beveiligde omgeving. Gebruik is alleen toegestaan voor geautoriseerde leden. Ongeautoriseerde toegang kan worden bestraft overeenkomstig (inter)nationale wetgeving.', 'discspace' => 'Schijfruimte', 'docs_in_reception_no_access' => 'Documenten zonder toegang ontvanger', @@ -353,15 +353,16 @@ URL: [url]', 'documents_expired' => 'Verlopen documenten', 'documents_in_process' => 'Documenten in behandeling', 'documents_locked' => 'Geblokkeerde documenten', -'documents_locked_by_you' => 'Documenten door U geblokkeerd', +'documents_locked_by_you' => 'Documenten door u geblokkeerd', 'documents_only' => 'Alleen documenten', +'documents_rejected' => '', 'documents_to_approve' => 'Documenten die wachten op uw goedkeuring', 'documents_to_correct' => 'Te corrigeren documenten', 'documents_to_process' => 'Te verwerken documenten', 'documents_to_receipt' => 'documenten te ontvangen', 'documents_to_review' => 'Documenten die wachten op uw controle', 'documents_to_revise' => 'Te reviseren documenten', -'documents_to_trigger_workflow' => '', +'documents_to_trigger_workflow' => 'Documenten in de workflow', 'documents_user_draft' => 'Concepten', 'documents_user_expiration' => 'Verlopen documenten', 'documents_user_needs_correction' => 'Documenten die verbeterd dienen te worden.', @@ -373,8 +374,15 @@ URL: [url]', 'documents_with_notification' => 'Documenten met notificatie', 'document_already_checkedout' => 'Al in behandeling genomen documenten', 'document_already_locked' => 'Dit document is al geblokkeerd', -'document_attribute_changed_email_body' => '', -'document_attribute_changed_email_subject' => '', +'document_attribute_changed_email_body' => 'Attribute changed +Document: [name] +Attribute: [attribute_name] +Old value: [attribute_old_value] +New value: [attribute_new_value] +Parent folder: [folder_path] +User: [username] +URL: [url]', +'document_attribute_changed_email_subject' => '[sitename]: [name] - Attribute changed', 'document_comment_changed_email' => 'Commentaar gewijzigd', 'document_comment_changed_email_body' => 'Commentaar gewijzigd Document: [name] @@ -384,7 +392,7 @@ Bovenliggende map: [folder_path] Gebruiker: [username] URL: [url]', 'document_comment_changed_email_subject' => '[sitename]: [name] - Commentaar gewijzigd', -'document_content_missing' => '', +'document_content_missing' => 'Inhoud document ontbreekt', 'document_count' => 'Aantal documenten', 'document_deleted' => 'Document verwijderd', 'document_deleted_email' => 'Document verwijderd', @@ -395,7 +403,8 @@ Gebruiker: [username]', 'document_deleted_email_subject' => '[sitename]: [name] - Document verwijderd', 'document_duplicate_name' => 'Dupliceer documentnaam', 'document_has_no_workflow' => 'Document bevat geen workflow', -'document_infos' => 'Document Informatie', +'document_infos' => 'Document-informatie', +'document_is_checked_out' => 'Document is uitgecheckt.', 'document_is_checked_out_remove' => '', 'document_is_checked_out_update' => 'Document is uitgecheckt.', 'document_is_not_locked' => 'Dit document is niet geblokkeerd', @@ -427,8 +436,13 @@ Gebruiker: [username] URL: [url]', 'document_status_changed_email_subject' => '[sitename]: [name] - Document status gewijzigd', 'document_title' => 'Document \'[documentname]\'', -'document_transfered_email_body' => '', -'document_transfered_email_subject' => '', +'document_transfered_email_body' => 'Document transfer to other user +Document: [name] +New owner: [newuser] +Parent folder: [folder_path] +User: [username] +URL: [url]', +'document_transfered_email_subject' => '[sitename]: [name] - Transfer Document', 'document_updated_email' => 'Document bijgewerkt', 'document_updated_email_body' => 'Document geupdate Document: [name] @@ -437,30 +451,30 @@ Gebruiker: [username] Commentaar: [comment] Commentaar versie: [version_comment] URL: [url]', -'document_updated_email_subject' => '[sitename]: [name] - Document geupdate', +'document_updated_email_subject' => '[sitename]: [name] - Document geüpdated', 'does_not_expire' => 'Verloopt niet', 'does_not_inherit_access_msg' => 'Erft toegang', 'download' => 'Download', 'download_extension' => 'Download extensie als zip file', -'download_header_approval_comment' => '', -'download_header_approval_date' => '', -'download_header_approval_state' => '', -'download_header_approver' => '', -'download_header_document_name' => '', -'download_header_document_no' => '', -'download_header_filename' => '', -'download_header_internal_version' => '', -'download_header_reviewer' => '', -'download_header_review_comment' => '', -'download_header_review_date' => '', -'download_header_review_state' => '', -'download_header_state' => '', +'download_header_approval_comment' => 'Commentaar bij goedkeuring', +'download_header_approval_date' => 'Datum goedkeuring', +'download_header_approval_state' => 'Status goedkeuring', +'download_header_approver' => 'Goedkeuring door', +'download_header_document_name' => 'Naam document', +'download_header_document_no' => 'Document nr.', +'download_header_filename' => 'Filenaam', +'download_header_internal_version' => 'Interne versie', +'download_header_reviewer' => 'Beoordelaar', +'download_header_review_comment' => 'Commentaar bij beoordeling', +'download_header_review_date' => 'Datum beoordeling', +'download_header_review_state' => 'Status beoordeling', +'download_header_state' => 'Status', 'download_links' => 'Download-links', -'do_no_transfer_to_user' => '', +'do_no_transfer_to_user' => 'Niet overdragen aan gebruiker', 'do_object_repair' => 'Repareer alle mappen en documenten.', 'do_object_setchecksum' => 'Set checksum', 'do_object_setfilesize' => 'Voer bestandgrootte in', -'do_object_setfiletype' => '', +'do_object_setfiletype' => 'Stel filetype in', 'do_object_unlink' => 'Verwijdere documentversie', 'draft' => 'Concept', 'draft_pending_approval' => 'Draft - in afwachting van goedkeuring', @@ -469,14 +483,14 @@ URL: [url]', 'dropfolderdir_missing' => 'Uw persoonlijke map om files te droppen (dropfolder) bestaat niet op de server! Vraag de administrator om deze aan te maken.', 'dropfolder_file' => 'Bestand in dropfolder', 'dropfolder_folder' => 'Map in dropfolder', -'dropfolder_metadata' => '', +'dropfolder_metadata' => 'eigenschappen vd dropfolder', 'dropupload' => 'Snel toevoegen', 'drop_files_here' => 'Sleep bestanden hierheen', 'dump_creation' => 'DB-dump aanmaken', 'dump_creation_warning' => 'M.b.v. deze functie maakt U een DB dump file. het bestand wordt opgeslagen in uw data-map op de Server', 'dump_list' => 'Bestaande dump bestanden', 'dump_remove' => 'Verwijder dump bestand', -'duplicates' => 'Dubbelen', +'duplicates' => 'Doublures', 'duplicate_content' => 'Dubbele inhoud', 'edit' => 'Wijzigen', 'edit_attributes' => 'Bewerk attributen', @@ -495,7 +509,7 @@ URL: [url]', 'edit_folder_props' => 'Wijzig Map eigenschappen', 'edit_group' => 'Wijzig Groep', 'edit_online' => 'Online bewerken', -'edit_online_warning' => '', +'edit_online_warning' => 'Waarschuwing: als u de wijzigingen opslaat, wordt de bestaande versie van het document overschreven. Er wordt dus geen nieuwe versie gemaakt.', 'edit_task' => 'Taak bewerken', 'edit_transmittal_props' => 'Opmerkingen bij verzending', 'edit_user' => 'Wijzig gebruiker', @@ -511,15 +525,15 @@ URL: [url]', 'empty_folder_list' => 'Geen documenten of mappen', 'empty_list' => 'Lijst is leeg', 'empty_notify_list' => 'Geen gegevens', -'enable_extension' => '', +'enable_extension' => 'Activeer de extensie', 'en_GB' => 'Engels (GB)', 'equal_transition_states' => 'Begin- en eind-status zijn hetzelfde', 'error' => 'Fout', 'error_add_aro' => 'Verzoek om toegang toegevoegd', 'error_add_permission' => 'Voeg permissie toe', 'error_cleared_cache' => 'Fout bij het leegmaken van de cache', -'error_edit_task' => '', -'error_extension_getlist' => '', +'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', 'error_no_document_selected' => 'Geen document geselecteerd', 'error_no_folder_selected' => 'Geen map geselecteerd', @@ -527,30 +541,30 @@ URL: [url]', 'error_remove_document' => 'Fout bij het verwijderen van document', 'error_remove_folder' => 'Fout bij het verwijderen van map', 'error_remove_permission' => 'Verwijder permissie', -'error_rm_workflow' => '', -'error_rm_workflow_action' => '', -'error_rm_workflow_state' => '', -'error_toogle_permission' => 'Wijzig permissie', -'error_transfer_document' => '', -'error_trigger_workflow' => '', -'error_update_document' => '', -'error_uploading_reviewer_only' => '', +'error_rm_workflow' => 'Fout bij het verwijderen van de workflow', +'error_rm_workflow_action' => 'Fout bij het verwijderen van een handeling uit de workflow', +'error_rm_workflow_state' => 'Fout bij het verwijderen van de workflow-status', +'error_toogle_permission' => 'Fout bij wijzigen van permissie', +'error_transfer_document' => 'Fout bij het overdragen van document', +'error_trigger_workflow' => 'Fout bij het triggeren van de workflow', +'error_update_document' => 'Fout tijdens updaten van het document', +'error_uploading_reviewer_only' => 'Fout bij het creëren van het document. Er is alleen een beoordelaar, geen goedkeurder.', 'es_ES' => 'Spaans', 'event_details' => 'Activiteit-details', 'exclude_items' => 'Sluit iets uit', 'expired' => 'Verlopen', 'expired_at_date' => 'Verloopdatum', -'expired_documents' => '', +'expired_documents' => 'Verlopen documenten', 'expires' => 'Verloopt', 'expire_by_date' => 'Vervaldatum', -'expire_in_1d' => 'Vervalt binnen 1 dag', -'expire_in_1h' => 'Vervalt binnen 1 uur', -'expire_in_1m' => 'Vervalt binnen 1 maand', -'expire_in_1w' => 'Vervalt binnen 1 week', -'expire_in_1y' => 'Vervalt binnen 1 jaar', -'expire_in_2h' => 'Vervalt binnen 2 uur', -'expire_in_2y' => 'Vervalt binnen 2 jaar', -'expire_in_3y' => '', +'expire_in_1d' => 'Vervalt over 1 dag', +'expire_in_1h' => 'Vervalt over 1 uur', +'expire_in_1m' => 'Vervalt over 1 maand', +'expire_in_1w' => 'Vervalt over 1 week', +'expire_in_1y' => 'Vervalt over 1 jaar', +'expire_in_2h' => 'Vervalt over 2 uur', +'expire_in_2y' => 'Vervalt over 2 jaar', +'expire_in_3y' => 'Vervalt over 3 jaar', 'expire_today' => 'Vervalt vandaag', 'expire_tomorrow' => 'Vervalt morgen', 'expiry_changed_email' => 'Verloopdatum gewijzigd', @@ -561,24 +575,24 @@ Gebruiker: [username] URL: [url]', 'expiry_changed_email_subject' => '[sitename]: [name] - Vervaldatum gewijzigd', 'export' => 'export', -'export_user_list_csv' => '', -'extension_archive' => '', -'extension_changelog' => 'Overzicht wijzigingen', +'export_user_list_csv' => 'Exporteer gebruikers in csv-formaat', +'extension_archive' => 'Extensies', +'extension_changelog' => 'Overzicht van wijzigingen', 'extension_loading' => 'Laden van extensies ...', -'extension_manager' => 'Beheer uitbreidingen', -'extension_mgr_error_upload' => '', +'extension_manager' => 'Extensies beheren', +'extension_mgr_error_upload' => 'Fout bij het uploaden van de extensie', 'extension_mgr_installed' => 'Geïnstalleerd', 'extension_mgr_no_upload' => 'Installeren nieuwe extensies is niet mogelijk omdat de extensies map niet schrijfbaar is.', -'extension_mgr_no_zipfile' => '', +'extension_mgr_no_zipfile' => 'Fout bij uploaden extensie: is geen zipfile', 'extension_mgr_repository' => 'Beschikbaar', 'extension_version_list' => 'Versies', 'february' => 'februari', 'file' => 'Bestand', 'files' => 'Bestanden', 'files_deletion' => 'Bestanden verwijderen', -'files_deletion_warning' => 'Met deze handeling verwijdert U ALLE bestanden uit het DMS. Versie informatie blijft beschikbaar', +'files_deletion_warning' => 'Met deze handeling verwijdert U ALLE bestanden uit het DMS. Versie-informatie blijft beschikbaar', 'files_loading' => 'Even geduld. De lijst met bestanden wordt geladen ...', -'filetype' => '', +'filetype' => 'Type file', 'file_size' => 'Bestandsomvang', 'filter_for_documents' => 'Extra filter voor documenten', 'filter_for_folders' => 'Extra filter voor mappen', @@ -586,8 +600,15 @@ URL: [url]', 'folders' => 'Mappen', 'folders_and_documents_statistic' => 'Inhoudsopgave', 'folders_with_notification' => 'Mappen met notificatie', -'folder_attribute_changed_email_body' => '', -'folder_attribute_changed_email_subject' => '', +'folder_attribute_changed_email_body' => 'Attribute changed +Folder: [name] +Attribute: [attribute_name] +Old value: [attribute_old_value] +New value: [attribute_new_value] +Parent folder: [folder_path] +User: [username] +URL: [url]', +'folder_attribute_changed_email_subject' => '[sitename]: [name] - Attribute changed', 'folder_comment_changed_email' => 'Commentaar gewijzigd', 'folder_comment_changed_email_body' => 'Commentaar gewijzigd Map: [name] @@ -623,19 +644,19 @@ Gebruiker: [username] URL: [url]', 'folder_renamed_email_subject' => '[sitename]: [name] - Folder hernoemd', 'folder_title' => 'Map naam \'[foldername]\'', -'foot_note' => '', +'foot_note' => 'Voetnoot', 'force_update' => 'Bijwerken', -'friday' => 'Vrijdag', -'friday_abbr' => 'FR', +'friday' => 'vrijdag', +'friday_abbr' => 'vr', 'from' => 'Van', 'fr_FR' => 'Frans', -'fullsearch' => 'Zoek in volledige tekst', -'fullsearch_hint' => 'Volledige tekst index', -'fulltextsearch_disabled' => 'Fulltext-zoeken uitgeschakeld', -'fulltext_converters' => 'Index document conversie', -'fulltext_info' => 'Volledige tekst index info', -'global_attributedefinitiongroups' => 'Kennmerk-definitie groepen', -'global_attributedefinitions' => 'Kenmerkdefinities', +'fullsearch' => 'Fulltext search', +'fullsearch_hint' => 'Index voor fulltext search', +'fulltextsearch_disabled' => 'Fulltext search uitgeschakeld', +'fulltext_converters' => 'Conversie t.b.v. indexering fulltext search', +'fulltext_info' => 'Inhoud van de fulltext index', +'global_attributedefinitiongroups' => 'Attribuut-definities in groepen', +'global_attributedefinitions' => 'attribuutdefinities', 'global_default_keywords' => 'Algemene sleutelwoorden', 'global_document_categories' => 'Categorieën', 'global_workflows' => 'Workflows', @@ -643,16 +664,16 @@ URL: [url]', 'global_workflow_states' => 'Workflow-status', 'group' => 'Groep', 'groups' => 'Groepen', -'group_approval_summary' => 'Groep [Goedkeuring] samenvatting', -'group_exists' => 'Groep bestaat reeds.', +'group_approval_summary' => 'Groepsgoedkeuring (samenvatting)', +'group_exists' => 'Groep bestaat reeds', 'group_info' => 'Info over de groep', 'group_management' => 'Groepenbeheer', 'group_members' => 'Groepsleden', 'group_receipt_summary' => 'Overzicht van ontvangst per groep', -'group_review_summary' => 'Groep Beoordeling samenvatting', -'group_revision_summary' => '', +'group_review_summary' => 'Samenvatting beoordeling per groep', +'group_revision_summary' => 'Samenvatting van de beoordelingen', 'guest_login' => 'Login als Gast', -'guest_login_disabled' => 'Gast login is uitgeschakeld.', +'guest_login_disabled' => 'Gast-login is uitgeschakeld.', 'hash' => 'Hashcode', 'help' => 'Help', 'home_folder' => 'Thuismap', @@ -663,58 +684,58 @@ URL: [url]', 'human_readable' => 'Leesbaar archief', 'hu_HU' => 'Hongaars', 'id' => 'ID', -'identical_version' => 'Nieuwe versie is identiek aan de huidige versie', +'identical_version' => 'Nieuwe versie is identiek aan de bestaande versie', 'import' => 'Importeer', 'importfs' => 'Importeer van bestandssysteem', -'import_extension' => '', +'import_extension' => 'Import-extensie', 'import_fs' => 'Importeer van bestandssysteem', 'import_fs_warning' => 'Dit werkt alleen in de dropfolder. Mappen en bestanden worden recursief geïmporteerd. Bestanden worden direct ter beschikking gesteld.', 'import_users' => 'Gebruikers importeren', -'import_users_addnew' => '', -'import_users_update' => '', +'import_users_addnew' => 'Voeg nieuwe gebruikers toe', +'import_users_update' => 'Werk gebruikers bij', 'include_content' => 'inclusief inhoud', 'include_documents' => 'Inclusief documenten', 'include_subdirectories' => 'Inclusief submappen', -'indexing_tasks_in_queue' => 'Indexerings taken in wachtrij', -'index_converters' => '', -'index_document_unchanged' => '', -'index_done' => 'Indexering gereed', +'indexing_tasks_in_queue' => 'Percentage indexeringstaken in wachtrij', +'index_converters' => 'Converters tbv de index', +'index_document_unchanged' => 'Document is niet gewijzigd', +'index_done' => 'Indexering is gereed', 'index_error' => 'Fout bij indexering', 'index_folder' => 'Inhoud', -'index_no_content' => '', +'index_no_content' => 'Index heeft geen inhoud', 'index_pending' => 'Indexering moet nog gebeuren', 'index_waiting' => 'Indexering wacht', 'individuals' => 'Individuen', 'individuals_in_groups' => 'Individuen in groepen', -'info_recipients_tab_not_released' => '', -'inherited' => 'overgeerfd', -'inherits_access_copy_msg' => 'Kopie lijst overerfde toegang', -'inherits_access_empty_msg' => 'Begin met lege toegangslijst', -'inherits_access_msg' => 'Toegang is (over/ge)erfd.', -'installed_php_extensions' => '', +'info_recipients_tab_not_released' => 'Ontvangstbevestiging van deze versie van het document is niet mogelijk omdat de versie nog niet is vrijgegeven.', +'inherited' => 'overgeërfd', +'inherits_access_copy_msg' => 'Lijst van overgeërfde toegang', +'inherits_access_empty_msg' => 'Begin met een lege toegangslijst', +'inherits_access_msg' => 'Toegang is overgeërfd.', +'installed_php_extensions' => 'Geïnstalleerde PHP-extensies', 'internal_error' => 'Interne fout', -'internal_error_exit' => 'Interne fout. Niet mogelijk om verzoek uit de voeren.', +'internal_error_exit' => 'Interne fout. niet mogelijk om verzoek uit de voeren.', 'invalid_access_mode' => 'Foutmelding: verkeerde toegangsmode', 'invalid_action' => 'Foutieve actie', 'invalid_approval_status' => 'Foutieve autorisatie status', 'invalid_create_date_end' => 'Foutieve eind-datum voor het maken van een periode.', 'invalid_create_date_start' => 'Foutieve begin-datum voor het maken van een periode.', -'invalid_doc_id' => 'Foutief Document ID', +'invalid_doc_id' => 'Foutief Document-ID', 'invalid_dropfolder_folder' => 'Ongeldige dropfolder-map', 'invalid_expiration_date_end' => 'Foute expiratiedatum', 'invalid_expiration_date_start' => 'Foute startdatum', 'invalid_file_id' => 'Foutief Bestand ID', -'invalid_folder_id' => 'Foutief Map ID', +'invalid_folder_id' => 'Foutief Map-ID', 'invalid_group_id' => 'Foutief Groep ID', -'invalid_link_id' => 'Foutief link ID', +'invalid_link_id' => 'Foutief link-ID', 'invalid_request_token' => 'Foutief Verzoek Token', 'invalid_review_status' => 'Foutief Controle Status', 'invalid_sequence' => 'Foutief volgwaarde', 'invalid_status' => 'Foutief Document Status', -'invalid_target_doc_id' => 'Foutief Doel Document ID', -'invalid_target_folder' => 'Foutief Doel Map ID', -'invalid_user_id' => 'Foutief Gebruiker ID', -'invalid_version' => 'Foutief Document Versie', +'invalid_target_doc_id' => 'Foutief Doel Document-ID', +'invalid_target_folder' => 'Foutief Doel Map-ID', +'invalid_user_id' => 'Foutief Gebruiker-ID', +'invalid_version' => 'Foutieve Document-versie', 'in_folder' => 'In map', 'in_revision' => 'In herziening', 'in_workflow' => 'In workflow', @@ -725,8 +746,8 @@ URL: [url]', 'js_form_error' => 'Fout in JavaScript', 'js_form_errors' => 'Fouten in JavaScript', 'js_invalid_email' => 'Ongeldige email', -'js_no_approval_group' => 'Selecteer a.u.b. een Goedkeuring Groep', -'js_no_approval_status' => 'Selecteer a.u.b. een Goedkeuring Status', +'js_no_approval_group' => 'Selecteer a.u.b. een goedkeuringsGroep', +'js_no_approval_status' => 'Selecteer a.u.b. een goedkeuringsStatus', 'js_no_comment' => 'Er zijn geen commentaren', 'js_no_currentpwd' => 'Geen geldig wachtwoord', 'js_no_email' => 'Voer uw e-mail adres in', @@ -737,8 +758,8 @@ URL: [url]', 'js_no_override_status' => 'Selecteer de nieuwe [override] status', 'js_no_pwd' => 'U moet uw wachtwoord invoeren', 'js_no_query' => 'Voer een zoekvraag in', -'js_no_review_group' => 'Selecteer a.u.b. een Controleursgroep', -'js_no_review_status' => 'Selecteer a.u.b. een Controle status', +'js_no_review_group' => 'Selecteer a.u.b. een beoordelaarsgroep', +'js_no_review_status' => 'Selecteer a.u.b. een beoordelingsFstatus', 'js_pwd_not_conf' => 'Wachtwoord en bevestigingswachtwoord zijn niet identiek', 'js_select_user' => 'Selecteer een Gebruiker', 'js_select_user_or_group' => 'Selecteer tenminste een Gebruiker of Groep', @@ -762,30 +783,30 @@ URL: [url]', 'linked_to_document' => 'Bijlage(n) bij document', 'linked_to_this_version' => 'Bijlage bij deze versie', 'link_alt_updatedocument' => 'Als u bestanden wilt uploaden groter dan het huidige maximum, gebruik aub de alternatieve upload pagina.', -'link_document' => '', +'link_document' => 'Link naar document', 'link_to_version' => 'Bijlage(n) bij versie', 'list_access_rights' => 'Toegangsrechten', 'list_contains_no_access_docs' => 'Geen toegankelijke documenten', 'list_hooks' => 'Hooks', -'list_tasks' => '', +'list_tasks' => 'Taken', 'local_file' => 'Lokaal bestand', 'locked_by' => 'In gebruik door', 'lock_document' => 'Blokkeer', 'lock_message' => 'Dit document is geblokkeerd door [username]. Alleen geautoriseerde Gebruikers kunnen het de-blokeren.', 'lock_status' => 'Status', -'logfile_loading' => '', +'logfile_loading' => 'De logfile wordt geladen...', 'login' => 'Login', -'login_disabled_text' => 'Uw account is gedeactiveerd, mogelijk door teveel foutieve inlogpogingen.', +'login_disabled_text' => 'Uw account is gedeactiveerd, mogelijk door te veel foutieve inlogpogingen.', 'login_disabled_title' => 'Account is gedeactiveerd', 'login_error_text' => 'Invoer fout: Gebruikersnaam en/of wachtwoord is fout.', 'login_error_title' => 'Login fout', 'login_not_given' => 'Er is geen Gebruikersnaam ingevoerd', 'login_ok' => 'Login geslaagd', -'login_restrictions_apply' => '', +'login_restrictions_apply' => 'Login mislukt vanwege restricties', 'logout' => 'Log uit', -'log_management' => 'Logbestanden beheer', +'log_management' => 'Logbestanden beheren', 'lo_LA' => 'Laotiaans', -'malformed_expiration_date' => '', +'malformed_expiration_date' => 'Verkeerde verloopdatum', 'manager' => 'Beheerder', 'manager_of_group' => 'U bent beheerder van deze groep', 'mandatory_approvergroups' => 'Verplichte groep \'[group]\'', @@ -800,15 +821,15 @@ URL: [url]', 'max_upload_size' => 'Maximale upload omvang voor ieder bestand', 'may' => 'mei', 'menu_dropfolder' => 'Dropfolder', -'menu_upload_from_dropfolder' => '', -'message' => '', +'menu_upload_from_dropfolder' => 'Dit bestand importeren', +'message' => 'Bericht', 'mimetype' => 'MIME Type', 'minutes' => 'minuten', 'misc' => 'Diversen', 'missing_checksum' => 'Controlesom ontbreekt', 'missing_file' => 'File ontbreekt', 'missing_filesize' => 'Bestandsgrootte ontbreekt', -'missing_php_extensions' => '', +'missing_php_extensions' => 'Ontbrekende PHP-extensies', 'missing_reception' => 'Ontvanger ontbreekt', 'missing_request_object' => 'Gevraagd object ontbreekt', 'missing_transition_user_group' => 'Gebruiker / groep ontbreekt voor de overdracht', @@ -816,7 +837,7 @@ URL: [url]', 'monday_abbr' => 'ma', 'monthly' => 'Maandelijks', 'month_view' => 'Maandoverzicht', -'more_objects_loading' => '', +'more_objects_loading' => 'Er wordt nog meer geladen...', 'move' => 'Verplaats', 'move_clipboard' => 'Verplaats klembord', 'move_document' => 'Verplaats document', @@ -825,13 +846,13 @@ URL: [url]', 'my_documents' => 'Mijn Documenten', 'my_transmittals' => 'Mijn zendingen', 'name' => 'Naam', -'nb_NO' => 'Noorweegs', -'needs_correction' => '', -'needs_workflow_action' => 'Dit document vereist uw aandacht. Bekijk deze onder het tabblad workflows.', +'nb_NO' => 'Noors', +'needs_correction' => 'Correctie nodig', +'needs_workflow_action' => 'Dit document vereist uw aandacht. Bekijk het onder het tabblad workflows.', 'network_drive' => 'Networkdrive', 'never' => 'Nooit', 'new' => 'Nieuw', -'new_attrdef' => 'Voeg een kenmerkdefinitie toe', +'new_attrdef' => 'Voeg een attribuutdefinitie toe', 'new_default_keywords' => 'Sleutelwoorden toevoegen', 'new_default_keyword_category' => 'Categorie Toevoegen', 'new_document_category' => 'Categorie toevoegen', @@ -862,11 +883,11 @@ Gebruikers: [username] URL: [url]', 'new_subfolder_email_subject' => '[sitename]: [name] - Nieuwe map', 'new_user_image' => 'Nieuwe afbeelding', -'next_revision_abbr' => '', +'next_revision_abbr' => 'Volgende beoord.', 'next_state' => 'Nieuwe status', 'nl_NL' => 'Nederlands', 'no' => 'Nee', -'notification' => '', +'notification' => 'Bericht', 'notify_added_email' => 'U bent toegevoegd aan de [notificatie lijst]', 'notify_added_email_body' => 'Toegevoegd aan notificatielijst Naam: [name] @@ -886,14 +907,14 @@ URL: [url]', 'no_action' => 'Geen actie nodig', 'no_approval_needed' => 'Geen goedkeuring gaande.', 'no_attached_files' => 'Geen bijlagen', -'no_attribute_definitions' => '', -'no_backup_dir' => '', +'no_attribute_definitions' => 'Geen attribuut-definities', +'no_backup_dir' => 'De backup-map is niet ingesteld.', 'no_current_version' => 'U werkt met een oude versie van SeedDMS. De laatste versie beschikbaar is [latestversion].', -'no_default_keywords' => 'Geen Sleutelwoorden beschikbaar', +'no_default_keywords' => 'Geen sleutelwoorden beschikbaar', 'no_docs_checked_out' => 'Geen documenten in gebruik genomen', -'no_docs_expired' => '', +'no_docs_expired' => 'Geen documenten verlopen.', 'no_docs_locked' => 'Geen documenten in gebruik.', -'no_docs_needs_correction' => '', +'no_docs_needs_correction' => 'Geen documenten te corrigeren', 'no_docs_rejected' => 'Geen documenten geweigerd', 'no_docs_to_approve' => 'Er zijn momenteel geen documenten die goedkeuring behoeven.', 'no_docs_to_look_at' => 'Geen documenten die aandacht behoeven.', @@ -915,7 +936,7 @@ URL: [url]', 'no_version_check' => 'Controle op een nieuwe versie van SeedDMS is mislukt! Dit kan komen omdat allow_url_fopen is ingesteld op 0 in uw PHP configuratie.', 'no_version_modification' => 'Geen versiewijziging', 'no_workflow_available' => 'Geen workflow beschikbaar', -'objectcheck' => 'Map/Document controle', +'objectcheck' => 'Mappen en documenten controleren', 'object_check_critical' => 'Ernstige fouten', 'object_check_warning' => 'Waarschuwingen', 'obsolete' => 'verouderd', @@ -925,7 +946,7 @@ URL: [url]', 'operation_disallowed' => '', 'order_by_sequence_off' => 'Volgorde uit', 'original_filename' => 'Originele bestandsnaam', -'overall_indexing_progress' => 'Indexerings voortgang totaal', +'overall_indexing_progress' => 'Voortgang van de indexering', 'owner' => 'Eigenaar', 'ownership_changed_email' => 'Eigenaar gewijzigd', 'ownership_changed_email_body' => 'Eigenaar gewijzigd @@ -970,7 +991,7 @@ Mocht u de komende minuten geen email ontvangen, probeer het dan nogmaals en con 'pending_revision' => 'Wachten op herziening', 'pending_workflows' => 'Wachten op workflow', 'personal_default_keywords' => 'Persoonlijke sleutelwoorden', -'php_info' => '', +'php_info' => 'Informatie over PHP', 'pl_PL' => 'Pools', 'possible_substitutes' => 'Mogelijke alternatieven', 'preset_expires' => 'Preset verloopt', @@ -978,7 +999,7 @@ Mocht u de komende minuten geen email ontvangen, probeer het dan nogmaals en con 'preview_converters' => 'Converters', 'preview_images' => 'Voorbeelden', 'preview_markdown' => 'Voorbeeld in Markdown', -'preview_pdf' => 'Beeld vd PDF', +'preview_pdf' => 'Inhoud van het document', 'preview_plain' => 'Voorbeeld in platte tekst', 'previous_state' => 'Vorige staat', 'previous_versions' => 'Vorige versies', @@ -990,11 +1011,11 @@ Mocht u de komende minuten geen email ontvangen, probeer het dan nogmaals en con 'quota_is_disabled' => 'Quota support is momenteel niet actief in de eigenschappen. Een user-quotum instellen zal geen effect hebben tot quota actief zijn', 'quota_warning' => 'Uw maximale datagebruik is overschreden met [bytes]. Gelieve documenten of eerdere versies te verwijderen.', 'receipts_accepted' => '[no_receipts] ontvangen en geaccepteerd', -'receipts_accepted_latest' => '', +'receipts_accepted_latest' => '(er zijn [no_receipts] in de nieuwste versie)', 'receipts_not_touched' => '[no_receipts] ontvangen, nog niet behandeld', -'receipts_not_touched_latest' => '', +'receipts_not_touched_latest' => '(er zijn [no_receipts] in de nieuwste versie)', 'receipts_rejected' => '[no_receipts] ontvangen, geweigerd', -'receipts_rejected_latest' => '', +'receipts_rejected_latest' => '(er zijn [no_receipts] in de nieuwste versie)', 'receipts_without_group' => '[no_receipts] ontvangen, geen groep', 'receipts_without_user' => '[no_receipts] ontvangen, geen gebruiker', 'receipt_deletion_email_body' => 'Gebruiker is verwijderd uit de lijst van ontvangers @@ -1022,7 +1043,7 @@ URL: [url]', 'reception_noaction' => 'Geen actie', 'reception_rejected' => 'bestemming geweigerd', 'recipients' => 'Ontvangers', -'recipient_already_removed' => '', +'recipient_already_removed' => 'Ontvanger is al verwijderd', 'redraw' => 'Nogmaals weergeven', 'refresh' => 'Verversen', 'rejected' => 'Afgewezen', @@ -1045,7 +1066,7 @@ Gebruiker: [username] URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Workflow verwijderd van document versie', 'removeFolderFromDropFolder' => 'Map verwijderen uit Dropfilder', -'remove_marked_files' => 'Geselecteerde bestanden zijn verwijderd', +'remove_marked_files' => 'Geselecteerde bestanden worden verwijderd', 'repaired' => 'Gerepareerd', 'repairing_objects' => 'Documenten en mappen repareren.', 'request_workflow_action_email_body' => 'De workflow vereist actie van uw kant. @@ -1075,11 +1096,11 @@ URL: [url]', 'reviewer_already_assigned' => 'is reeds aangewezen als beoordelaar', 'reviewer_already_removed' => 'is reeds verwijderd uit het beoordelingsproces of heeft reeds een beoordeling uitgevoerd', 'reviews_accepted' => '[no_reviews] reviews geaccepteerd', -'reviews_accepted_latest' => '', +'reviews_accepted_latest' => '(er zijn [no_reviews] in de nieuwste versie)', 'reviews_not_touched' => '[no_reviews] reviews niet geopend', -'reviews_not_touched_latest' => '', +'reviews_not_touched_latest' => '(er zijn [no_reviews] in de nieuwste versie)', 'reviews_rejected' => '[no_reviews] reviews geweigerd', -'reviews_rejected_latest' => '', +'reviews_rejected_latest' => '(er zijn [no_reviews] in de nieuwste versie)', 'reviews_without_group' => 'reviews zonder groep', 'reviews_without_user' => 'reviews zonder gebruiker', 'review_deletion_email' => 'Beoordelingsverzoek verwijderd', @@ -1092,7 +1113,7 @@ URL: [url]', 'review_deletion_email_subject' => '[sitename]: [name] - Beoordelingsverzoek verwijderd', 'review_file' => 'Bestand', 'review_group' => 'Beoordelaarsgroep', -'review_log' => 'Reviseer overzicht', +'review_log' => 'Overzicht van beoordelingen', 'review_request_email' => 'Verzoek om beoordeling', 'review_request_email_body' => 'Verzoek om beoordeling Document: [name] @@ -1116,13 +1137,13 @@ URL: [url]', 'revise_document' => 'Document herzien', 'revise_document_on' => 'Volgende herziening van document op [date]', 'revisions_accepted' => '[no_revisions] revisies geaccepteerd', -'revisions_accepted_latest' => '', +'revisions_accepted_latest' => '(er zijn [no_revisions] in de nieuwste versie)', 'revisions_not_touched' => '[no_revisions] revisies geopend', -'revisions_not_touched_latest' => '', +'revisions_not_touched_latest' => '(er zijn [no_revisions] in de nieuwste versie)', 'revisions_pending' => '[no_revisions] revisies in afwachting', -'revisions_pending_latest' => '', +'revisions_pending_latest' => '(er zijn [no_revisions] in de nieuwste versie)', 'revisions_rejected' => '[no_revisions] revisies geweigerd', -'revisions_rejected_latest' => '', +'revisions_rejected_latest' => '(er zijn [no_revisions] in de nieuwste versie)', 'revisions_without_group' => '[no_revisions] revisies zonder groep', 'revisions_without_user' => '[no_revisions] revisies zonder gebruiker', 'revision_date' => 'Datum revisie', @@ -1151,9 +1172,9 @@ Gebruiker: [username] URL: [url]', 'rewind_workflow_email_subject' => '[sitename]: [name] - Workflow is teruggezet', 'rewind_workflow_warning' => 'Als u de workflow terugzet naar oorspronkelijke staat, dan wordt de workflow historie voor dit document verwijderd en onherstelbaar.', -'rm_attrdef' => 'Verwijder kenmerkdefinitie', -'rm_attrdefgroup' => 'Verwijder kenmerkdefinitie-groep', -'rm_attr_value' => '', +'rm_attrdef' => 'Verwijder attribuutdefinitie', +'rm_attrdefgroup' => 'Verwijder attribuutdefinitie-groep', +'rm_attr_value' => 'Verwijder waarde vh attribuut', 'rm_default_keyword_category' => 'Verwijder categorie', 'rm_document' => 'Verwijder document', 'rm_document_category' => 'Verwijder categorie', @@ -1163,7 +1184,7 @@ URL: [url]', 'rm_from_clipboard' => 'Verwijder van klembord', 'rm_group' => 'Verwijder deze Groep', 'rm_role' => 'Verwijder deze rol', -'rm_task' => '', +'rm_task' => 'Verwijder deze taak', 'rm_transmittal' => 'Verwijder de verzending', 'rm_transmittalitem' => 'Verwijder verzonden item', 'rm_user' => 'Verwijder deze Gebruiker', @@ -1193,14 +1214,14 @@ Gebruikers: [username] URL: [url]', 'run_subworkflow_email_subject' => '[sitename]: [name] - Subworkflow is gestart', 'ru_RU' => 'Russisch', -'saturday' => 'Zaterdag', -'saturday_abbr' => 'ZA', +'saturday' => 'zaterdag', +'saturday_abbr' => 'za', 'save' => 'Opslaan', -'scheduler_class' => '', -'scheduler_class_description' => '', -'scheduler_class_parameter' => '', -'scheduler_class_tasks' => '', -'scheduler_task_mgr' => '', +'scheduler_class' => 'Klasse', +'scheduler_class_description' => 'Beschrijving', +'scheduler_class_parameter' => 'Parameter', +'scheduler_class_tasks' => 'Taken', +'scheduler_task_mgr' => 'Scheduler', 'search' => 'Zoeken', 'search_fulltext' => 'Zoek in volledige tekst', 'search_in' => 'Zoek in', @@ -1218,20 +1239,20 @@ URL: [url]', 'search_results_access_filtered' => 'Zoekresultaten kunnen inhoud bevatten waar U geen toegang toe heeft.', 'search_time' => 'Verstreken tijd: [time] sec.', 'seconds' => 'seconden', -'seeddms_info' => '', -'seeddms_version' => '', +'seeddms_info' => 'Informatie over SeedDMS', +'seeddms_version' => 'De versie van SeedDMS', 'selection' => 'Selectie', -'select_attrdefgrp_show' => 'Toon attribut definities-groep', -'select_attribute_value' => '', +'select_attrdefgrp_show' => 'Toon attribuut-definities-groep', +'select_attribute_value' => 'Kies een waarde voor het attribuut', 'select_category' => 'klik om categorie te selecteren', 'select_group' => 'Selecteer groep', 'select_groups' => 'Klik om groep te selecteren', 'select_grp_approvers' => 'Klik om beoordelaars te selecteren', 'select_grp_ind_approvers' => 'Klik om beoordelaars te selecteren', -'select_grp_ind_notification' => 'Selecteerd de groep', -'select_grp_ind_recipients' => 'Selecteer de groep', -'select_grp_ind_reviewers' => 'Selecteer de groep', -'select_grp_ind_revisors' => '', +'select_grp_ind_notification' => 'Selecteer de groep voor notificatie', +'select_grp_ind_recipients' => 'Selecteer de groep ontvangers', +'select_grp_ind_reviewers' => 'Selecteer de groep beoordelaars', +'select_grp_ind_revisors' => 'Selecteer de groepredacteuren', 'select_grp_notification' => 'Klik voor groepsnotificatiebeoordelaars', 'select_grp_recipients' => 'Klik om groep beoordelaar te selecteren', 'select_grp_reviewers' => 'Klik om groep beoordelaars te selecteren', @@ -1241,9 +1262,9 @@ URL: [url]', 'select_ind_recipients' => 'Klik voor individuele ontvnagers', 'select_ind_reviewers' => 'Klik om individuele beoordelaar te selecteren', 'select_ind_revisors' => 'Klik voor individuele herziners', -'select_mimetype' => '', -'select_one' => 'Selecteer een', -'select_owner' => '', +'select_mimetype' => 'Selecteer het mime-type', +'select_one' => 'Kies er een', +'select_owner' => 'Kies de eigenaar', 'select_user' => 'Selecteer gebruiker', 'select_users' => 'Klik om gebruikers te selecteren', 'select_value' => 'selecteer waarde', @@ -1265,8 +1286,8 @@ Name: [username] 'seq_keep' => 'Behoud Positie', 'seq_start' => 'Eerste positie', 'sessions' => 'sessies', -'setDateFromFile' => '', -'setDateFromFolder' => '', +'setDateFromFile' => 'Gebruik de datum van de geïmporteerde file', +'setDateFromFolder' => 'Gebruik de datum van de geïmporteerde map', 'settings' => 'Instellingen', 'settings_activate_module' => 'Activeer module', 'settings_activate_php_extension' => 'Activeer PHP uitbreiding', @@ -1275,32 +1296,28 @@ Name: [username] 'settings_Advanced' => 'Uitgebreid', 'settings_advancedAcl' => 'Advanced Access control', 'settings_advancedAcl_desc' => 'Advanced Access control staat het uit- en inschakelen van bepaalde modules toe. Het kan niet gebruikt worden voor het beheer van toegangsrechten van documenten en mappen.', -'settings_allowChangeRevAppInProcess' => '', -'settings_allowChangeRevAppInProcess_desc' => '', +'settings_allowChangeRevAppInProcess' => 'Sta toe dat de beoordelaar/goedkeurder verandert na de start van het proces', +'settings_allowChangeRevAppInProcess_desc' => 'De default is dat beoordelaars en goedkeurders niet meer veranderen nadat er al een beoordeling of goedkeuring is verzonden. Deze optie stelt administrators in staat veranderingen aan te brengen zolang het document niet is afgewezen of vrijgegeven.', 'settings_allowReviewerOnly' => 'Alleen reviewer toestaan', -'settings_allowReviewerOnly_desc' => 'Aanzetten als wel de reviewe, maar niet de goedkeurder toegewezen kan worden.', +'settings_allowReviewerOnly_desc' => 'Aanzetten als wel de reviewer, maar niet de goedkeurder toegewezen kan worden.', 'settings_apache_mod_rewrite' => 'Apache - Module Rewrite', -'settings_apiKey' => '', -'settings_apiKey_desc' => '', -'settings_apiOrigin' => '', -'settings_apiOrigin_desc' => '', -'settings_apiUserId' => '', -'settings_apiUserId_desc' => '', -'settings_Authentication' => 'Authenticatie instellingen', +'settings_apiKey' => 'Authentification key voor REST api', +'settings_apiKey_desc' => 'Deze sleutel wordt gebruikt als alternatieve authenticatie voor de REST api. Kies een tekst-string van 32 tekens.', +'settings_apiOrigin' => 'Toegestane afkomst van api calls', +'settings_apiOrigin_desc' => 'Een lijst van adressen gescheiden door puntkomma\'s. Ieder adres heeft de vorm ://[:]. De poort is optioneel. Als dit veld wordt leeggelaten, volgen geen restricties.', +'settings_apiUserId' => 'Gebruiker voor de REST api', +'settings_apiUserId_desc' => 'Deze gebruiker wordt gebruikt door de REST api als de authenticatie gebeurt met de REST api key.', +'settings_Authentication' => 'Authenticatie-instellingen', 'settings_autoLoginUser' => 'Automatische login', -'settings_autoLoginUser_desc' => 'Gebruik dit gebruikers-ID als de gebruiker nog niet is ingelogd. Zo, - => , - => , - => , - =>', +'settings_autoLoginUser_desc' => 'Gebruik dit gebruikers-ID als de gebruiker nog niet is ingelogd in de basismap. Via zo\'n toegang wordt geen sessie gestart.', 'settings_available_languages' => 'Beschikbare vertalingen', 'settings_available_languages_desc' => 'Alleen de geselecteerde vertalingen worden beschikbaar in het taal-selectie-menu. De default-taal (EN) wordt altijd geladen.', 'settings_backupDir' => 'Instellingen backupmap', -'settings_backupDir_desc' => 'Instellingen backupmap', +'settings_backupDir_desc' => 'Instellingen vd backupmap', 'settings_cacheDir' => 'cache directory', -'settings_cacheDir_desc' => 'Waar de voorbeeld afbeeldingen zijn opgeslagen (het is het beste om te kiezen voor een pad, welke niet toegankelijk is door uw webserver)', +'settings_cacheDir_desc' => 'De map waar de voorbeeldafbeeldingen zijn opgeslagen (het is het beste om te kiezen voor een map die niet toegankelijk voor uw webserver)', 'settings_Calendar' => 'Instellingen van de agenda', -'settings_calendarDefaultView' => 'Standaard overzicht agenda', +'settings_calendarDefaultView' => 'Standaard-overzicht vd agenda', 'settings_calendarDefaultView_desc' => 'Pagina per dag/week/maand', 'settings_cannot_disable' => 'Bestand ENABLE_INSTALL_TOOL kon niet verwijderd worden', 'settings_checkOutDir' => 'Instellingen Checkoutmap', @@ -1323,7 +1340,7 @@ Name: [username] 'settings_createdirectory' => 'Maak map', 'settings_currentvalue' => 'Huidige waarde', 'settings_Database' => 'Database instellingen', -'settings_dateformat' => '', +'settings_dateformat' => 'Datum formaat', 'settings_dateformat_desc' => '', 'settings_datetimeformat' => '', 'settings_datetimeformat_desc' => '', @@ -1340,10 +1357,10 @@ Name: [username] 'settings_dbVersion' => 'Database schema te oud', 'settings_defaultAccessDocs' => 'Standaard toegangsrechten voor nieuwe documenten', 'settings_defaultAccessDocs_desc' => 'Als een nieuw document wordt gecreëerd, worden dit de nieuwe toegangsrechten.', -'settings_defaultDocPosition' => '', -'settings_defaultDocPosition_desc' => '', -'settings_defaultDocPosition_val_end' => '', -'settings_defaultDocPosition_val_start' => '', +'settings_defaultDocPosition' => 'Standaard positie nieuw document', +'settings_defaultDocPosition_desc' => 'Dit is de standaardplaats binnen een map waar een document wordt gecreëerd.', +'settings_defaultDocPosition_val_end' => 'aan het einde', +'settings_defaultDocPosition_val_start' => 'aan het begin', 'settings_defaultSearchMethod' => 'Standaard zoekmethode', 'settings_defaultSearchMethod_desc' => 'Default zoekmethode = op documentnaam / fulltext-search', 'settings_defaultSearchMethod_valdatabase' => 'Default zoekmethode (Documentnaam)', @@ -1355,7 +1372,7 @@ Name: [username] 'settings_Display' => 'Scherm instellingen', 'settings_dropFolderDir' => 'Pad voor drop folder', 'settings_dropFolderDir_desc' => 'Dit pad kan gebruikt worden voor dropfiles op de server en hier vanaf te importeren in plaats van uploaden via de browser.', -'settings_Edition' => 'Uitgave instellingen', +'settings_Edition' => 'Instellingen van deze editie', 'settings_editOnlineFileTypes' => 'Online bewerken van de volgende filetypes', 'settings_editOnlineFileTypes_desc' => 'Bestanden met één van de volgende extensies kunnen online bewerkt worden (ALLEEN KLEINE LETTERS GEBRUIKEN!)', 'settings_enable2FactorAuthentication' => 'Schakel 2-factor-authenticatie in', @@ -1365,7 +1382,7 @@ Name: [username] 'settings_enableAdminReceipt' => 'Sta ontvangst van documenten door admins toe', 'settings_enableAdminReceipt_desc' => 'Inschakelen als u admins documenten wilt laten ontvangen', 'settings_enableAdminRevApp' => 'Inschakelen Beheer Contr/Beoord', -'settings_enableAdminRevApp_desc' => 'Uitvinken om beheerder niet te tonen als controleerder/beoordeler', +'settings_enableAdminRevApp_desc' => 'Uitvinken om beheerder niette tonen als controleerder/beoordeler', 'settings_enableCalendar' => 'Agenda inschakelen', 'settings_enableCalendar_desc' => 'Inschakelen/uitschakelen agenda', 'settings_enableCancelCheckout' => '', @@ -1374,23 +1391,23 @@ Name: [username] 'settings_enableClipboard_desc' => 'Activeer/ blokkeer het klembord', 'settings_enableConverting' => 'Documenten converteren', 'settings_enableConverting_desc' => 'Inschakelen/uitschakelen conversie van bestanden naar PDF', -'settings_enableDebugMode' => '', -'settings_enableDebugMode_desc' => '', +'settings_enableDebugMode' => 'Stel Debug Mode in', +'settings_enableDebugMode_desc' => 'In Debug Mode komt er een extra menu in de beheerpagina\'s.', 'settings_enableDropFolderList' => 'Inschakelen van de lijst van files in dropfolder.', 'settings_enableDropFolderList_desc' => 'De lijst van files in Dropfolder zichtbaar maken in het menu', 'settings_enableDropUpload' => 'Inschakelen Snelle Upload', 'settings_enableDropUpload_desc' => 'Aanzetten DropUpload', 'settings_enableDuplicateDocNames' => 'Sta duplicaten van documentnamen toe', -'settings_enableDuplicateDocNames_desc' => 'Staat het toe om documentnamen te dupliceren in een folder.', -'settings_enableDuplicateSubFolderNames' => '', -'settings_enableDuplicateSubFolderNames_desc' => '', +'settings_enableDuplicateDocNames_desc' => 'Staat het toe om documentnamen te dupliceren in een map.', +'settings_enableDuplicateSubFolderNames' => 'Sta duplicaten van mapnamen toe', +'settings_enableDuplicateSubFolderNames_desc' => 'Staat het toe om mapnamen te dupliceren in een map.', 'settings_enableEmail' => 'E-mail inschakelen', 'settings_enableEmail_desc' => 'Inschakelen/uitschakelen automatische email notificatie', -'settings_enableFilterReceipt' => '', -'settings_enableFilterReceipt_desc' => '', +'settings_enableFilterReceipt' => 'Filter de eigenaar, beoordelaar .... weg uit de ontvangerslijst', +'settings_enableFilterReceipt_desc' => 'Sommige ontvangers / leden van de groep worden weggefilterd uit de lijst van ontvangers.', 'settings_enableFolderTree' => 'Mappenstructuur tonen', -'settings_enableFolderTree_desc' => 'Uitschakelen om de mappenstructuur niet te tonen', -'settings_enableFullSearch' => 'Volledige-tekst zoeken', +'settings_enableFolderTree_desc' => 'Uitschakelen om de mappenstructuur niette tonen', +'settings_enableFullSearch' => 'Fulltext search', 'settings_enableFullSearch_desc' => 'Inschakelen zoeken in volledigetekst', 'settings_enableGuestAutoLogin' => 'Gastlogin automatisch aanzetten', 'settings_enableGuestAutoLogin_desc' => 'Gastlogin automatisch aanzetten', @@ -1418,20 +1435,20 @@ Name: [username] 'settings_enableOwnerRevApp_desc' => 'Activeer dit als de eigenaar van een document genoteerd staat as beoordelaar/ goedkeurder en voor workflow overdrachten.', 'settings_enablePasswordForgotten' => '\'wachtwoord vergeten\' aanzetten', 'settings_enablePasswordForgotten_desc' => 'Inschakelen om een wachtwoord via mail te versturen als de gebruiker een nieuw wachtwoord heeft ingesteld.', -'settings_enableReceiptReject' => '', -'settings_enableReceiptReject_desc' => '', +'settings_enableReceiptReject' => 'Maak het weigeren van ontvangen berichten mogelijk', +'settings_enableReceiptReject_desc' => 'Maak het weigeren van ontvangen berichten mogelijk', 'settings_enableReceiptWorkflow' => 'Aanzetten Workflow-stappen', '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_enableRevisionOneVoteReject' => '', -'settings_enableRevisionOneVoteReject_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' => '', 'settings_enableRevisionOnVoteReject_desc' => '', 'settings_enableRevisionWorkflow' => 'Herzieningsworkflow aanzetten', 'settings_enableRevisionWorkflow_desc' => 'Herzieningsworkflow aanzetten', -'settings_enableSelfReceipt' => '', -'settings_enableSelfReceipt_desc' => '', +'settings_enableSelfReceipt' => 'Ontvangst van eigen documenten mogelijk', +'settings_enableSelfReceipt_desc' => 'Als dit \'aan\' staat komt de ingelogde gebruiker op de ontvangerslijst', 'settings_enableSelfRevApp' => 'Beoordeling/ goedkeuring toestaan voor ingelogde gebruikers', 'settings_enableSelfRevApp_desc' => 'Schakel in indien the huidig ingelogde gebruiker wordt toegewezen als goedkeurder/ beoordelaar en voor workflow overgangen.', 'settings_enableSessionList' => 'Lijst van gebruikers online', @@ -1442,19 +1459,19 @@ Name: [username] 'settings_enableUpdateReceipt_desc' => 'Mag de gebruiker die een bestemming heeft opgesteld, zijn beslissing wijzigen?', 'settings_enableUpdateRevApp' => 'Wijzig bestaande review/goedkeuring', 'settings_enableUpdateRevApp_desc' => 'Mag de gebruiker die een review//goedkeuring heeft gegeven, zijn beslissing wijzigen (zolang de huidige stap in de workflow nog duurt)?', -'settings_enableUserImage' => 'Inschakelen Gebruikersplaatjes', +'settings_enableUserImage' => 'Eigen plaatje', 'settings_enableUserImage_desc' => 'Inschakelen Gebruikerplaatjes', -'settings_enableUsersView' => 'Inschakelen Gebruikers overzicht', +'settings_enableUsersView' => 'Inschakelen overzicht van gebruikers', 'settings_enableUsersView_desc' => 'Inschakelen/uitschakelen groeps en gebruikers overzicht voor alle gebruikers', 'settings_enableVersionDeletion' => 'Inschakelen verwijderen voorgaande versies', 'settings_enableVersionDeletion_desc' => 'Inschakelen/uitschakelen verwijderen van voorgaande documentversies door normale gebruikers. Beheerder mag altijd oude versies verwijderen.', 'settings_enableVersionModification' => 'Inschakelen van versiebewerking', 'settings_enableVersionModification_desc' => 'Inschakelen/uitschakelen van bewerkingen op documentversies door normale gebruikers na een versie upload. Beheerder mag altijd de versie wijzigen na upload.', 'settings_enableWebdavReplaceDoc' => 'Oud document vervangen bij opslaan', -'settings_enableWebdavReplaceDoc_desc' => '', -'settings_enableXsendfile' => '', -'settings_enableXsendfile_desc' => '', -'settings_encryptionKey' => 'Encryptie sleutel', +'settings_enableWebdavReplaceDoc_desc' => 'Een nieuwe versie van het document vervangt de oude versie, i.p.v. dat er een nieuwe versie gecreëerd wordt, onder voorwaarde dat gebruiker, mimetype en bestandsnaam gelijk zijn aan de laatste versie. Dit kan nuttig zijn als bepaalde applicaties regelmatig een nieuwe versie van het document opslaan.', +'settings_enableXsendfile' => 'Gebruik de Apache xsendfile module', +'settings_enableXsendfile_desc' => 'Als de Apache module xsendfile geïnstallleerd is, wordt deze gebruikt om afbeeldingen te verzenden.', +'settings_encryptionKey' => 'Sleutel voor encryptie', 'settings_encryptionKey_desc' => 'Deze string wordt gebruikt om een unieke identificatie als onzichtbaar veld aan een formulier toe te voegen om CSRF aanvallen tegen te gaan.', 'settings_error' => 'Fout', 'settings_expandFolderTree' => 'Uitvouwen mappenstructuur', @@ -1469,35 +1486,35 @@ Name: [username] 'settings_firstDayOfWeek_desc' => 'Eerste dag van de (werk)week', 'settings_footNote' => 'Subtitel', 'settings_footNote_desc' => 'Bericht om onderop elke pagina te tonen', -'settings_fullSearchEngine' => 'Instellingen Fulltextsearch', -'settings_fullSearchEngine_desc' => 'Instellingen Fulltextsearch', +'settings_fullSearchEngine' => 'Instellingen Fulltext search', +'settings_fullSearchEngine_desc' => 'Instellingen Fulltext search', 'settings_fullSearchEngine_vallucene' => 'Zend Lucene', 'settings_fullSearchEngine_valsqlitefts' => 'SQLiteFTS', 'settings_guestID' => 'Gast ID', 'settings_guestID_desc' => 'ID van gastgebruiker gebruikt indien ingelogd als gast (meestal geen wijziging nodig)', 'settings_httpRoot' => 'Http Basis', 'settings_httpRoot_desc' => 'Het relatieve pad in de URL, na het domeindeel. Voeg geen http:// toe aan het begin of de websysteemnaam. Bijv: Als de volledige URL http://www.example.com/letodms/ is, voer \'/letodms/\' in. Als de URL http://www.example.com/ is, voer \'/\' in', -'settings_incItemsPerPage' => 'Aantal items ,geladen aan einde pagina', -'settings_incItemsPerPage_desc' => '', +'settings_incItemsPerPage' => 'Aantal items, geladen aan einde pagina', +'settings_incItemsPerPage_desc' => 'Als het aantal mappen en documenten beperkt is, stelt deze optie het aantal toegevoegde objecten, wanneer je naar het einde van de detailpagina scrollt. Op 0 stellen verandert heet aantal objecten niet.', 'settings_initialDocumentStatus' => 'Beginstatus document', 'settings_initialDocumentStatus_desc' => 'De beginstatus van een document wordt ingesteld wanneer het document wordt toegevoegd.', 'settings_initialDocumentStatus_draft' => 'Initieel document als concept', 'settings_initialDocumentStatus_released' => 'Initieel document-status: gepubliceerd', -'settings_inlineEditing' => '', -'settings_inlineEditing_desc' => '', +'settings_inlineEditing' => 'Inline editing', +'settings_inlineEditing_desc' => 'Inline editing: bewerk het document op de detailpagina.', 'settings_installADOdb' => 'Installeer ADOdb', 'settings_install_disabled' => 'Bestand ENABLE_INSTALL_TOOL is verwijderd. U kunt nu inloggen in SeedDMS en verdere configuratie uitvoeren.', 'settings_install_pear_package_log' => 'Installeer Pear package \'Log\'', 'settings_install_pear_package_webdav' => 'Installeer Pear package \'HTTP_WebDAV_Server\', als u van plan bent om webdav interface te gebruiken', 'settings_install_success' => 'De installatie is succesvol beeindigd.', -'settings_install_welcome_text' => '

      Wees er zeker van dat u een bestand, genaamd \'ENABLE_INSTALL_TOOL\', gemaakt heeft in de configuratiemap, voordat u de installatie van letDMS begint, anders zal de installatie niet werken. Op een Unix-Syteem kan dit makkelijk gedaan worden met \'touch conf/ENABLE_INSTALL_TOOL\'. Verwijder het bestand nadat de installatie afgerond is.

      letoDMS heeft weinig installatievoorwaarden. U heeft een mysql database en een php-geschikte web server nodig. Voor de lucene volledige tekst zoekfunctie, moet Zend framework geinstalleerd zijn op schijf en gevonden worden door php. Vanaf versie 3.2.0 van letoDMS zal ADOdb geen deel meer uitmaken van de uitgave. Een kopie kan van http://adodb.sourceforge.net gehaald en geinstalleerd worden. Het pad kan later opgegeven worden tijdens de installatie.

      Als u de database voor de installatie wilt aanmaken, dan kunt u het handmatig met uw favoriete gereedschap aanmaken. optioneel kan een database met gebruikerstoegang gemaakt worden en importeer een van de database dumps in de configuratiemap. Met het installatiescript kan dit ook, maar hiervoor is database toegang nodig met voldoende rechten om een database aan te maken.

      ', +'settings_install_welcome_text' => '

      Wees er zeker van dat u een bestand, genaamd \'ENABLE_INSTALL_TOOL\', gemaakt heeft in de configuratiemap, voordat u de installatie van letDMS begint, anders zal de installatie nietwerken. Op een Unix-Syteem kan dit makkelijk gedaan worden met \'touch conf/ENABLE_INSTALL_TOOL\'. Verwijder het bestand nadat de installatie afgerond is.

      letoDMS heeft weinig installatievoorwaarden. U heeft een mysql database en een php-geschikte web server nodig. Voor de lucene volledige tekst zoekfunctie, moet Zend framework geinstalleerd zijn op schijf en gevonden worden door php. Vanaf versie 3.2.0 van letoDMS zal ADOdb geen deel meer uitmaken van de uitgave. Een kopie kan van http://adodb.sourceforge.net gehaald en geinstalleerd worden. Het pad kan later opgegeven worden tijdens de installatie.

      Als u de database voor de installatie wilt aanmaken, dan kunt u het handmatig met uw favoriete gereedschap aanmaken. optioneel kan een database met gebruikerstoegang gemaakt worden en importeer een van de database dumps in de configuratiemap. Met het installatiescript kan dit ook, maar hiervoor is database toegang nodig met voldoende rechten om een database aan te maken.

      ', 'settings_install_welcome_title' => 'Welkom bij de installatie van letoDMS', 'settings_install_zendframework' => 'Installeer Zend Framework, als u volledigetekst zoekmechanisme wilt gebruiken', 'settings_language' => 'Standaardtaal', 'settings_language_desc' => 'Standaardtaal (naam van de submap in map "languages")', 'settings_libraryFolder' => 'Bibliotheekmap', 'settings_libraryFolder_desc' => 'In deze map kunnen documenten worden opgeslagen. Hiermee worden nieuwe documenten gecreëerd.', -'settings_logFileEnable' => 'Inschakelen Logbestand', +'settings_logFileEnable' => 'Inschakelen logbestand', 'settings_logFileEnable_desc' => 'Inschakelen/uitschakelen logbestand', 'settings_logFileRotation' => 'Rotering Logbestand', 'settings_logFileRotation_desc' => 'Rotering Logbestand', @@ -1507,33 +1524,33 @@ Name: [username] 'settings_luceneClassDir_desc' => 'Pad naar SeedDMS_Lucene (optioneel)', 'settings_luceneDir' => 'Map voor volledigetekst index', 'settings_luceneDir_desc' => 'Pad naar Lucene index', -'settings_maxDirID' => 'Max Map ID', +'settings_maxDirID' => 'Max Map-ID', 'settings_maxDirID_desc' => 'Maximaal toegestane aantal submappen per bovenliggende map. Standaard: 0.', 'settings_maxExecutionTime' => 'Max Uitvoertijd (s)', 'settings_maxExecutionTime_desc' => 'Dit bepaald de maximale tijd in seconden waarin een script mag worden uitgevoerd, voordat het afgebroken wordt', 'settings_maxItemsPerPage' => 'Max aantal items per pagina', -'settings_maxItemsPerPage_desc' => '', +'settings_maxItemsPerPage_desc' => 'Max aantal items per pagina', 'settings_maxRecursiveCount' => 'Max. nummers of recursieve document/map telling', -'settings_maxRecursiveCount_desc' => 'Dit is het maximum aantal documenten of mappen dat zal worden gecontroleerd voor toegangsrechten bij recursieve objecten telling. Als dit aantal is overschreden, zal het aantal documenten en mappen in de het map overzicht worden geschat.', +'settings_maxRecursiveCount_desc' => 'Dit is het maximum aantal documenten of mappen dat zal worden gecontroleerd voor toegangsrechten bij recursieve objecten telling. Als dit aantal is overschreden, zal het aantal documenten en mappen in de het mappenoverzicht worden geschat.', 'settings_maxSizeForFullText' => 'Maximum bestandsgrootte voor onmiddellijke indexering', 'settings_maxSizeForFullText_desc' => 'Alle nieuwe documenten kleiner dan deze waarde worden direct na het uploaden geïndexeerd. In alle andere gevallen worden alleen de metadata geïndexeerd.', 'settings_maxUploadSize' => 'Maximale omvang voor uploaden', 'settings_maxUploadSize_desc' => 'Dit is de maximale omvang voor te uploaden bestanden. Dat geldt voor bestanden en bijlagen.', -'settings_more_settings' => 'Meer instellingen. Standaard login: admin/admin', -'settings_noDocumentFormFields' => '', -'settings_noDocumentFormFields_desc' => '', -'settings_notfound' => 'Niet gevonden', -'settings_Notification' => 'Notificatie instellingen', -'settings_notwritable' => 'De configuratie kan niet opgeslagen worden omdat het configuratiebestand niet beschrijfbaar is.', +'settings_more_settings' => 'Meer instellingen. Standaardlogin: admin/admin', +'settings_noDocumentFormFields' => 'Deze velden niet tonen', +'settings_noDocumentFormFields_desc' => 'Deze velden niet laten zien bij toevoegen of bewerken van een document. Bestaande waardes worden bewaard.', +'settings_notfound' => 'nietgevonden', +'settings_Notification' => 'Notificatie-instellingen', +'settings_notwritable' => 'De configuratie kan nietopgeslagen worden omdat het configuratiebestand nietbeschrijfbaar is.', 'settings_no_content_dir' => 'Inhoud map', -'settings_onePageMode' => '', -'settings_onePageMode_desc' => '', +'settings_onePageMode' => 'Eén-pagina modus', +'settings_onePageMode_desc' => 'Eén-pagina modus activeert javascript code op de ViewFolder pagina. Deze pagina houdt de lijst van mappen en documenten bij, de navigatie, de volgorde etc.', 'settings_overrideMimeType' => 'Override MimeType', 'settings_overrideMimeType_desc' => 'Override MimeType', 'settings_overrideTheme' => '', 'settings_overrideTheme_desc' => '', 'settings_partitionSize' => 'Partitie-grootte', -'settings_partitionSize_desc' => 'Omvang van de partitie in bytes, geüpload door jumploader. Zet de waarde niet hoger dan de maximum upload grootte van de server.', +'settings_partitionSize_desc' => 'Omvang van de partitie in bytes, geüpload door jumploader. Zet de waarde niethoger dan de maximum upload grootte van de server.', 'settings_passwordExpiration' => 'Wachtwoord verloopt', 'settings_passwordExpiration_desc' => 'Het aantal dagen waarna een wachtwoord verloopt? en gereset moet worden. 0 zet het verlopen van het wachtwoord uit.', 'settings_passwordHistory' => 'Wachtwoord geschiedenis', @@ -1556,25 +1573,25 @@ Name: [username] 'settings_previewWidthDetail' => 'Breedte van het voorbeeld (detail)', 'settings_previewWidthDetail_desc' => 'weergegeven op de detail pagina', 'settings_previewWidthDropFolderList' => 'Breedte van het voorbeeld in de dropfolder-lijst', -'settings_previewWidthDropFolderList_desc' => '', +'settings_previewWidthDropFolderList_desc' => 'Breedte van het voorbeeld in de dropfolder-lijst', 'settings_previewWidthList' => 'Breedte van het voorbeeld (lijst)', 'settings_previewWidthList_desc' => 'Breedte van het voorbeeld weergegeven in lijsten', 'settings_previewWidthMenuList' => 'Breedte van het voorbeeld (menu-lijst)', 'settings_previewWidthMenuList_desc' => 'Breedte van het voorbeeld als dropfolder', 'settings_printDisclaimer' => 'Vrijwaring afdrukken', 'settings_printDisclaimer_desc' => 'Indien ingeschakeld zal het vrijwaringsbericht bestanden worden getoond onderaan de pagina', -'settings_proxyUPassword' => '', -'settings_proxyUPassword_desc' => '', -'settings_proxyUrl' => '', -'settings_proxyUrl_desc' => '', -'settings_proxyUser' => '', -'settings_proxyUser_desc' => '', +'settings_proxyUPassword' => 'Password voor de proxy', +'settings_proxyUPassword_desc' => 'Password dat gebruikt wordt om in te loggen bij de proxy', +'settings_proxyUrl' => 'URL van de proxy', +'settings_proxyUrl_desc' => 'URL van de proxy die gebruikt wordt voor het benaderen van de extension repository.', +'settings_proxyUser' => 'Gebruikersnaam van de proxy', +'settings_proxyUser_desc' => 'Gebruikersnaam voor authenticatie bij de proxy', 'settings_quota' => 'Gebruikersquotum', 'settings_quota_desc' => 'Het maximum aantal bytes een gebruiker op de schijf mag schrijven. Stel deze in op 0 voor een onbeperkte schijfruimte. Deze waarde kan worden overschreven voor elk gebruik in zijn profiel.', 'settings_removeFromDropFolder' => 'Verwijder het bestand uit de dropfolder na een succesvolle upload', 'settings_removeFromDropFolder_desc' => 'Verwijder het bestand uit de dropfolder na een succesvolle upload', 'settings_repositoryUrl' => 'URL van repository', -'settings_repositoryUrl_desc' => '', +'settings_repositoryUrl_desc' => 'URL van repository', 'settings_restricted' => 'Beperkte toegang', 'settings_restricted_desc' => 'Sta alleen gebruiker toe om in te loggen die in de database zijn opgenomen (ongeacht succesvolle authenticatie met LDAP)', 'settings_rootDir' => 'Basismap', @@ -1586,7 +1603,7 @@ Name: [username] 'settings_showFullPreview' => 'Toon volledige document', 'settings_showFullPreview_desc' => 'In/Uitschakelen preview van alle pagina\'s van het document.', 'settings_showMissingTranslations' => 'Ontbrekende vertalingen weergeven', -'settings_showMissingTranslations_desc' => 'Geef alle ontbrekende vertalingen onder aan de pagina weer. De gebruiker kan een verzoek tot vertaling indienen dat wordt opgeslagen als csv bestand. Let op! Zet deze functie niet aan in productieomgevingen!', +'settings_showMissingTranslations_desc' => 'Geef alle ontbrekende vertalingen onder aan de pagina weer. De gebruiker kan een verzoek tot vertaling indienen dat wordt opgeslagen als csv bestand. Let op! Zet deze functie nietaan in productieomgevingen!', 'settings_showSingleSearchHit' => 'Spring rechtstreeks naar het enkele zoekresultaat', 'settings_showSingleSearchHit_desc' => 'Als er maar één zoekresultaat is, wordt dat in detail getoond.', 'settings_Site' => 'WebLocatie', @@ -1602,7 +1619,7 @@ Name: [username] 'settings_smtpSendFrom' => 'Send from', 'settings_smtpSendFrom_desc' => 'Send from', 'settings_smtpSendTestMail' => 'Testmail versturen', -'settings_smtpSendTestMail_desc' => '', +'settings_smtpSendTestMail_desc' => 'Testmail versturen', 'settings_smtpServer' => 'SMTP Server hostname', 'settings_smtpServer_desc' => 'SMTP Server hostname', 'settings_smtpUser' => 'SMTP Server gebruiker', @@ -1611,7 +1628,7 @@ Name: [username] 'settings_sortFoldersDefault_desc' => 'Stel de sorteervolgorde voor mappen en documenten in de mapweergave in.', 'settings_sortFoldersDefault_val_name' => 'op naam', 'settings_sortFoldersDefault_val_sequence' => 'op volgorde', -'settings_sortFoldersDefault_val_unsorted' => 'niet gesorteerd', +'settings_sortFoldersDefault_val_unsorted' => 'nietgesorteerd', 'settings_sortUsersInList' => 'Sorteer gebruikers in de lijst', 'settings_sortUsersInList_desc' => 'Bepaald of gebruikers in keuzemenus gesorteerd worden op loginnaam of volledige naam', 'settings_sortUsersInList_val_fullname' => 'Sorteer op volledige name', @@ -1619,36 +1636,36 @@ Name: [username] 'settings_stagingDir' => 'Map voor gedeeltelijke uploads', 'settings_stagingDir_desc' => 'De directory waar jumploader de delen van een bestand upload voordat het weer in elkaar wordt gezet.', 'settings_start_install' => 'Begin installatie', -'settings_stopWordsFile' => 'Pad naar bestand met niet-index woorden', -'settings_stopWordsFile_desc' => 'Als volledigetekst zoekopdracht is ingeschakeld, bevat dit bestand woorden die niet geindexeerd zullen worden.', +'settings_stopWordsFile' => 'Pad naar bestand met basismap -index woorden', +'settings_stopWordsFile_desc' => 'Als volledigetekst zoekopdracht is ingeschakeld, bevat dit bestand woorden die nietgeindexeerd zullen worden.', 'settings_strictFormCheck' => 'Strikte formaatcontrole', 'settings_strictFormCheck_desc' => 'Strikte controle op het juiste formaat. Indien ingeschakeld, worden alle velden in het formulier gecontroleer op een waarde. Indien uitgeschakeld, worden de meeste commentaar en invoervelden opgevat als optioneel. Commentaren zijn altijd nodig bij een review of modificatie van een documentstatus', 'settings_suggestionvalue' => 'Voorgestelde waarde', 'settings_System' => 'Systeem', -'settings_tasksInMenu' => '', -'settings_tasksInMenu_approval' => '', +'settings_tasksInMenu' => 'Taken', +'settings_tasksInMenu_approval' => 'Goedgekeuring', 'settings_tasksInMenu_checkedout' => '', -'settings_tasksInMenu_desc' => '', -'settings_tasksInMenu_needscorrection' => '', -'settings_tasksInMenu_receipt' => '', +'settings_tasksInMenu_desc' => 'Selecteer de taken die goedgekeurd zijn. Als je niets selecteert, worden alle taken meegeteld', +'settings_tasksInMenu_needscorrection' => 'Correctie nodig', +'settings_tasksInMenu_receipt' => 'Ontvangen', 'settings_tasksInMenu_rejected' => '', -'settings_tasksInMenu_review' => '', -'settings_tasksInMenu_revision' => '', -'settings_tasksInMenu_workflow' => '', +'settings_tasksInMenu_review' => 'Beoordeling', +'settings_tasksInMenu_revision' => 'Herziening', +'settings_tasksInMenu_workflow' => 'Workflow', 'settings_theme' => 'Standaard thema', 'settings_theme_desc' => 'Standaard stijl (name of a subfolder in folder "styles")', 'settings_titleDisplayHack' => 'Titel Tonen Oplossing', 'settings_titleDisplayHack_desc' => 'Oplossing voor paginatitels die verspreid zijn over 2 regels.', -'settings_undelUserIds' => 'Niet verwijderbare gebruiker ID\'s', -'settings_undelUserIds_desc' => 'Komma\'s gescheiden lijst van gebruikers-ID\'s, die niet verwijderd kunnen worden.', +'settings_undelUserIds' => 'nietverwijderbare gebruiker-ID\'s', +'settings_undelUserIds_desc' => 'Komma\'s gescheiden lijst van gebruikers-ID\'s, die nietverwijderd kunnen worden.', 'settings_updateDatabase' => 'Voer schema update scripts uit op database', 'settings_updateNotifyTime' => 'Update Notificatie Tijd', -'settings_updateNotifyTime_desc' => 'Gebruikers worden niet genotificeerd over documentwijzigingen die plaats vinden binnen de laatste \'Update Notificatie Tijd\' seconden', +'settings_updateNotifyTime_desc' => 'Gebruikers worden nietgenotificeerd over documentwijzigingen die plaats vinden binnen de laatste \'Update Notificatie Tijd\' seconden', 'settings_upgrade_php' => 'Upgrade PHP minimaal naar versie 5.6.38', 'settings_useHomeAsRootFolder' => '', 'settings_useHomeAsRootFolder_desc' => '', 'settings_versioningFileName' => 'Versie-informatie Bestandsnaam', -'settings_versioningFileName_desc' => 'De naam van het versie informatie bestand gemaakt door het backupgereedschap', +'settings_versioningFileName_desc' => 'De naam van het versie-informatie bestand gemaakt door het backupgereedschap', 'settings_versiontolow' => 'Versie te laag', 'settings_viewOnlineFileTypes' => 'De volgende bestandstypen online bekijken', 'settings_viewOnlineFileTypes_desc' => 'Bestanden met een van de volgende extensies kunnen online bekeken worden (GEBRUIK ALLEEN KLEINE LETTERS)', @@ -1656,7 +1673,7 @@ Name: [username] 'settings_workflowMode' => 'Workflow mode', 'settings_workflowMode_desc' => 'De uitgebreide workflow maakt het mogelijk om uw eigen workflow op te geven voor documentversies.', 'settings_workflowMode_valadvanced' => 'geavanceerd', -'settings_workflowMode_valnone' => '', +'settings_workflowMode_valnone' => 'Geen', 'settings_workflowMode_valtraditional' => 'Traditioneel', 'settings_workflowMode_valtraditional_only_approval' => 'Traditioneel (zonder beoordeling)', 'settings_zendframework' => 'Zend-Framework', @@ -1671,65 +1688,65 @@ Name: [username] 'sign_in' => 'Log in', 'sign_out' => 'Log uit', 'sign_out_user' => 'Log gebruiker uit', -'site_brand' => '', +'site_brand' => 'Merk van de site', 'sk_SK' => 'Slowaaks', 'sort_by_date' => 'Sorteren op datum', -'sort_by_expiration_date' => '', +'sort_by_expiration_date' => 'Sorteren op vervaldatum', 'sort_by_name' => 'Sorteren op naam', 'sort_by_sequence' => 'Sorteer op volgorde', 'space_used_on_data_folder' => 'Gebruikte diskomvang in data map', 'splash_added_to_clipboard' => 'Toegevoegd aan klembord', -'splash_add_access' => '', +'splash_add_access' => 'Toegangsrechten toegevoegd', 'splash_add_attribute' => 'Nieuw attribuut toegevoegd', 'splash_add_group' => 'Nieuwe groep toegevoegd', 'splash_add_group_member' => 'Nieuwe groepslid toegevoegd', 'splash_add_role' => 'Nieuwe rol toegevoegd', -'splash_add_task' => '', +'splash_add_task' => 'Taak toegevoegd', 'splash_add_to_transmittal' => 'Toevoegen aan verzending', 'splash_add_transmittal' => 'Verzending toegevoegd', 'splash_add_user' => 'Nieuwe gebruiker toegevoegd', 'splash_cancel_checkout' => '', 'splash_cleared_cache' => 'Cache leeggemaakt', 'splash_cleared_clipboard' => 'Klembord leeg gemaakt', -'splash_delete_access' => '', +'splash_delete_access' => 'Toegangsrechten verwijderd', 'splash_document_added' => 'Nieuw document toegevoegd', 'splash_document_checkedout' => 'Document in gebruik genomen', 'splash_document_edited' => 'Document opgeslagen', 'splash_document_indexed' => 'Document geïndexeerd', 'splash_document_locked' => 'Document vergrendeld', -'splash_document_name_changed' => '', +'splash_document_name_changed' => 'Documentnaam veranderd', 'splash_document_unlocked' => 'Document ontgrendeld', -'splash_edit_access' => '', +'splash_edit_access' => 'Wijzig toegangsrechten', 'splash_edit_attribute' => 'Attribuut opgeslagen', 'splash_edit_event' => 'Gebeurtenis opgeslagen', 'splash_edit_group' => 'Groep opgeslagen', 'splash_edit_role' => 'Rol opgeslagen', -'splash_edit_task' => '', -'splash_edit_transmittal' => '', +'splash_edit_task' => 'Taak opgeslagen', +'splash_edit_transmittal' => 'Zending opgeslagen', 'splash_edit_user' => 'Gebruiker opgeslagen', 'splash_error_add_to_transmittal' => 'Fout: toevoeging aan verzending', 'splash_error_rm_download_link' => 'Fout bij verwijderen download-link', 'splash_error_send_download_link' => 'Fout bij verzenden download-link', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', -'splash_extension_getlist' => '', -'splash_extension_import' => '', -'splash_extension_refresh' => '', -'splash_extension_upload' => '', +'splash_extension_getlist' => 'Bijgewerkte lijst van extensies', +'splash_extension_import' => 'Extensie geïnstalleerd', +'splash_extension_refresh' => 'Extensie vernieuwd', +'splash_extension_upload' => 'Extensie geüpload', 'splash_folder_edited' => 'Opslaan mapwijzigingen', 'splash_importfs' => 'Geïmporteerd: [docs] documenten en [folders] mappen', -'splash_inherit_access' => '', +'splash_inherit_access' => 'Toegangsrechten worden overgeërfd', 'splash_invalid_folder_id' => 'Ongeldige map ID', 'splash_invalid_searchterm' => 'Ongeldige zoekterm', -'splash_link_document' => '', +'splash_link_document' => 'Link toegevoegd', 'splash_moved_clipboard' => 'Klembord verplaatst naar de huidige map', 'splash_move_document' => 'Document verplaatst', 'splash_move_folder' => 'Map verplaatst', -'splash_notinherit_access' => '', +'splash_notinherit_access' => 'Toegangsrechten worden niet meer overgeërfd', 'splash_receipt_update_success' => 'Ontvangst succesvol toegevoegd', 'splash_removed_from_clipboard' => 'Verwijderd van het klembord', 'splash_rm_attribute' => 'Attribuut verwijderd', -'splash_rm_attr_value' => '', +'splash_rm_attr_value' => 'Waarde van attribuut verwijderd', 'splash_rm_document' => 'Document verwijderd', 'splash_rm_download_link' => 'Download-link verwijderd', 'splash_rm_folder' => 'Map verwijderd', @@ -1739,34 +1756,34 @@ Name: [username] 'splash_rm_transmittal' => 'Verzending verwijderd', 'splash_rm_user' => 'Gebruiker verwijderd', 'splash_rm_user_processes' => 'Gebruiker uit alle processen verwijderd', -'splash_rm_workflow' => '', -'splash_rm_workflow_action' => '', -'splash_rm_workflow_state' => '', +'splash_rm_workflow' => 'Workflow verwijderd', +'splash_rm_workflow_action' => 'Handeling uit workflow verwijderd', +'splash_rm_workflow_state' => 'Status van de workflow verwijderd', 'splash_saved_file' => 'Bestand opgeslagen', 'splash_save_user_data' => 'Gebruikersgegevens opgeslagen', 'splash_send_download_link' => 'Download-link verzonden', 'splash_send_login_data' => 'Login-gegevens verzonden', -'splash_setowner' => '', +'splash_setowner' => 'Stelt een nieuwe eigenaar in', 'splash_settings_saved' => 'Instellingen opgeslagen', -'splash_set_default_access' => '', +'splash_set_default_access' => 'Stel default-toegangsrechten in', 'splash_substituted_user' => 'Invallers gebruiker', 'splash_switched_back_user' => 'Teruggeschakeld naar de oorspronkelijke gebruiker', -'splash_toogle_group_manager' => 'Group manager toogled', -'splash_transfer_content' => '', -'splash_transfer_document' => '', -'splash_transfer_objects' => 'Objecten overgedragen', -'splash_trigger_workflow' => '', -'state_and_next_state' => 'staat/ volgende staat', +'splash_toogle_group_manager' => 'Group manager gewisseld', +'splash_transfer_content' => 'Inhoud verzonden', +'splash_transfer_document' => 'Document verzonden', +'splash_transfer_objects' => 'Objecten verzonden', +'splash_trigger_workflow' => 'Triggered transition van de workflow', +'state_and_next_state' => 'status/ volgende status', 'statistic' => 'Statistieken', 'status' => 'Status', 'status_approval_rejected' => 'Klad Goedkeuring [Afgewezen]', 'status_approved' => 'Goedgekeurd', 'status_approver_removed' => 'Goedkeurder verwijderd', -'status_needs_correction' => '', -'status_not_approved' => 'Niet goedgekeurd', -'status_not_receipted' => 'Niet ontvangen', -'status_not_reviewed' => 'Niet gecontroleerd', -'status_not_revised' => 'Niet herzien', +'status_needs_correction' => 'Correctie nodig', +'status_not_approved' => 'niet goedgekeurd', +'status_not_receipted' => 'niet ontvangen', +'status_not_reviewed' => 'niet gecontroleerd', +'status_not_revised' => 'niet herzien', 'status_receipted' => 'Ontvangen', 'status_receipt_rejected' => 'Afgewezen', 'status_recipient_removed' => 'Ontvanger verwijderd', @@ -1779,18 +1796,18 @@ Name: [username] 'status_revisor_removed' => 'Verwijderd', 'status_unknown' => 'Onbekend', 'storage_size' => 'Omvang opslag', -'subfolder_duplicate_name' => '', +'subfolder_duplicate_name' => 'Dubble mapnaam', 'submit_2_fact_auth' => '2-factor-authentificatie verstuurd', 'submit_approval' => 'Verzend [Goedkeuring]', 'submit_login' => 'Log in', 'submit_password' => 'Nieuw wachtwoord instellen', -'submit_password_forgotten' => 'Start proces', +'submit_password_forgotten' => 'Start \'Wachtwoord vergeten\'', 'submit_receipt' => 'Verzonden bericht ontvangen', 'submit_review' => 'Verzend Beoordeling', 'submit_revision' => 'Herziening verzenden', 'submit_userinfo' => 'Wijzigingen opslaan', -'submit_webauthn_login' => '', -'submit_webauthn_register' => '', +'submit_webauthn_login' => 'Login', +'submit_webauthn_register' => 'Registreren', 'subsribe_timelinefeed' => 'Subscribe to timeline feed', 'substitute_to_user' => 'Switch naar \'[username]\'', 'substitute_user' => 'Invaller/ vervanger Gebruiker', @@ -1812,13 +1829,13 @@ Name: [username] 'takeOverIndReviewer' => 'Onthoud de laatste groep individuele herzieners', 'takeOverIndReviewers' => '', 'tasks' => 'taken', -'task_core_expireddocs_days' => '', -'task_description' => '', -'task_disabled' => '', -'task_frequency' => '', -'task_last_run' => '', -'task_name' => '', -'task_next_run' => '', +'task_core_expireddocs_days' => 'Dagen', +'task_description' => 'Omschrijving', +'task_disabled' => 'Inactief', +'task_frequency' => 'Frequentie', +'task_last_run' => 'Laatst uitgevoerd', +'task_name' => 'Naam', +'task_next_run' => 'Komende uitvoering', 'temp_jscode' => 'Tijdelijke jscode', 'testmail_body' => 'Deze mail dient enkel voor het testen van de mail configuratie van SeedDMS', 'testmail_subject' => 'Test mail', @@ -1832,11 +1849,11 @@ Name: [username] 'timeline_full_add_version' => 'Nieuwe versie', 'timeline_full_scheduled_revision' => '', 'timeline_full_status_change' => 'Status veranderd', -'timeline_scheduled_revision' => '', +'timeline_scheduled_revision' => 'Geplande herziening', 'timeline_selected_item' => 'Document geselecteerd', 'timeline_skip_add_file' => 'Bijlage toegevoegd', -'timeline_skip_scheduled_revision' => '', -'timeline_skip_status_change_-1' => 'verworpen', +'timeline_skip_scheduled_revision' => 'In revisie', +'timeline_skip_status_change_-1' => 'afgewezenen', 'timeline_skip_status_change_-3' => 'verlopen', 'timeline_skip_status_change_0' => 'wacht op beoordeling', 'timeline_skip_status_change_1' => 'wacht op goedkeuring', @@ -1849,14 +1866,14 @@ Name: [username] 'toggle_manager' => 'Wijzig Beheerder', 'toggle_qrcode' => 'Tonen/Verbergen QR-code', 'total' => '', -'to_before_from' => 'De einddatum mag niet voor de startdatum liggen', -'transfer_content' => '', -'transfer_document' => 'Document overdragen', -'transfer_no_read_access' => '', +'to_before_from' => 'De einddatum mag nietvoor de startdatum liggen', +'transfer_content' => 'Inhoud verzenden', +'transfer_document' => 'Document verzenden', +'transfer_no_read_access' => 'De gebruiker heeft geen leesrechten in deze map', 'transfer_no_write_access' => 'De gebruiker heeft geen schrijfrechten in deze map', 'transfer_objects' => 'Objecten overdragen', -'transfer_objects_to_user' => 'Objecten overdragen aan gebruiker', -'transfer_process_to_user' => '', +'transfer_objects_to_user' => 'Objecten verzenden aan gebruiker', +'transfer_process_to_user' => 'Verzenden naar gebruiker', 'transfer_to_user' => 'Overdragen aan gebruiker', 'transition_triggered_email' => 'Workflow-overgang geactiveerd', 'transition_triggered_email_body' => 'Workflow Overgang @@ -1881,23 +1898,23 @@ URL: [url]', 'tr_TR' => 'Turks', 'tuesday' => 'dinsdag', 'tuesday_abbr' => 'di', -'types_generic' => '', -'type_of_hook' => 'Soort hook', -'type_to_filter' => '', +'types_generic' => 'Algemene types', +'type_of_hook' => 'Type hook', +'type_to_filter' => 'Type om de lijst te filteren', 'type_to_search' => 'zoeken naar', 'uk_UA' => 'Oekraïens', 'under_folder' => 'In map', 'unknown_attrdef' => 'Onbekende attribuut definitie', -'unknown_command' => 'Opdracht niet herkend.', +'unknown_command' => 'Opdracht nietherkend.', 'unknown_document_category' => 'Onbekende categorie', -'unknown_group' => 'Onbekende Groep ID', +'unknown_group' => 'Onbekende Groep-ID', 'unknown_id' => 'Onbekende id', 'unknown_keyword_category' => 'Onbekend sleutelwoordcategorie', 'unknown_owner' => 'Onbekende eigenaar ID', 'unknown_user' => 'Onbekende gebruiker', 'unlinked_content' => 'Ongekoppelde inhoud', -'unlinked_documents' => 'Niet gekoppelde documenten', -'unlinked_folders' => 'Niet gekoppelde mappen', +'unlinked_documents' => 'nietgekoppelde documenten', +'unlinked_folders' => 'nietgekoppelde mappen', 'unlinking_objects' => 'Ontkoppel inhoud', 'unlock_cause_access_mode_all' => 'U kunt toch e.e.a. bijwerken omdat U machtiging "all" heeft. Blokkering wordt automatisch opgeheven.', 'unlock_cause_locking_user' => 'U kunt toch e.e.a. bijwerken omdat U degene bent die dit heeft geblokeerd. Blokkering wordt automatisch opgeheven.', @@ -1905,11 +1922,11 @@ URL: [url]', 'update' => 'Bijwerken', 'update_approvers' => 'Bijwerken lijst van [Goedkeurders]', 'update_document' => 'Bijwerken', -'update_fulltext_index' => 'Bijwerken volledige tekst index', -'update_info' => 'Bijwerken informatie', +'update_fulltext_index' => 'Index voor fulltext search bijwerken', +'update_info' => 'Update-informatie', 'update_locked_msg' => 'Dit document is geblokkeerd.', -'update_recipients' => 'update_reviewersBijwerken lijst van [Controleurs]', -'update_reviewers' => 'Bijwerken lijst van [Controleurs]', +'update_recipients' => 'Update de lijst vanontvangers', +'update_reviewers' => 'Update de lijst van beoordelaars', 'update_revisors' => 'Bewerkers update', 'update_transmittalitem' => 'Geüpdate item versturen', 'uploaded_by' => 'Geüpload door', @@ -1918,8 +1935,8 @@ URL: [url]', 'uploading_zerosize' => 'Uploaden van een leeg bestand. Upload wordt geannuleerd.', 'used_discspace' => 'Gebruike schijf ruimte', 'user' => 'Gebruiker', -'userdata_file' => '', -'userid_groupid' => 'GebruikerID / Groep ID', +'userdata_file' => 'Bestand met gebruikersgegevens', +'userid_groupid' => 'GebruikerID / Groep-ID', 'users' => 'Gebruikers', 'users_and_groups' => 'Gebruikers / Groepen', 'users_done_work' => 'Uitgevoerd werk gebruikers', @@ -1927,7 +1944,7 @@ URL: [url]', 'user_group' => 'Gebruiker / Groep', 'user_group_management' => 'Gebruikers / Groepenbeheer', 'user_image' => 'Afbeelding', -'user_info' => 'Gebruikers informatie', +'user_info' => 'Gebruikers-informatie', 'user_list' => 'Lijst van Gebruikers', 'user_login' => 'Gebruikersnaam', 'user_management' => 'Gebruikersbeheer', @@ -1938,10 +1955,10 @@ URL: [url]', 'valid_till' => 'Geldig tot', 'version' => 'Versie', 'versioning_file_creation' => 'Aanmaken bestand versies', -'versioning_file_creation_warning' => 'Met deze handeling maakt U een bestand aan die de versie voortgang informatie van een compleet DMS bevat. Na het aanmaken wordt ieder bestand opgeslagen in de document map.', +'versioning_file_creation_warning' => 'Met deze handeling maakt U een bestand aan die de versie voortgangsinformatie van een compleet DMS bevat. Na het aanmaken wordt ieder bestand opgeslagen in de document map.', 'versioning_info' => 'Versie eigenschappen', 'versiontolow' => 'Versie voor laag', -'version_comment' => '', +'version_comment' => 'Commentaar op deze versie', 'version_deleted_email' => 'Versie verwijderd', 'version_deleted_email_body' => 'Version deleted Document: [name] @@ -1950,20 +1967,20 @@ Parent folder: [folder_path] User: [username] URL: [url]', 'version_deleted_email_subject' => '[sitename]: [name] - Versie verwijderd', -'version_info' => 'Versie Informatie', +'version_info' => 'Versie-informatie', 'view' => 'Bekijk', 'view_document' => '', 'view_folder' => '', 'view_online' => 'Bekijk online', 'warning' => 'Waarschuwing', -'webauthn_auth' => '', -'webauthn_crossplatform_info' => '', -'webauthn_info' => '', +'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.', 'webauth_crossplatform' => '', 'wednesday' => 'Woensdag', -'wednesday_abbr' => 'Woe', +'wednesday_abbr' => 'wo', 'weeks' => 'Weken', -'week_view' => 'Week Overzicht', +'week_view' => 'Weekoverzicht', 'workflow' => 'Workflow', 'workflows_involded' => 'Betrokken bij workflows', 'workflow_actions_management' => 'Workflow actiebeheer', @@ -1988,12 +2005,12 @@ URL: [url]', 'workflow_state_in_use' => 'Deze status wordt momenteel gebruikt door workflows.', 'workflow_state_name' => 'Naam', 'workflow_summary' => 'Workflow samenvatting', -'workflow_title' => '', -'workflow_transition_without_user_group' => '', +'workflow_title' => 'Titel van de workflow', +'workflow_transition_without_user_group' => 'Minstens één transitie kent geen gebruiker of groep', 'workflow_user_summary' => 'Gebruiker samenvatting', -'wrong_filetype' => '', +'wrong_filetype' => 'Fout bestandstype', 'x_more_objects' => 'meer items', -'year_view' => 'Jaar Overzicht', +'year_view' => 'Jaaroverzicht', 'yes' => 'Ja', 'zh_CN' => 'Chinees (CN)', 'zh_TW' => 'Chinees (TW)', diff --git a/languages/pl_PL/lang.inc b/languages/pl_PL/lang.inc index 15ff0987d..cb794098a 100644 --- a/languages/pl_PL/lang.inc +++ b/languages/pl_PL/lang.inc @@ -350,6 +350,7 @@ URL: [url]', 'documents_locked' => 'Dokumenty zablokowane', 'documents_locked_by_you' => 'Dokumenty zablokowane przez Ciebie', 'documents_only' => 'Tylko dokumenty', +'documents_rejected' => '', 'documents_to_approve' => 'Dokumenty oczekujące na Twoje zatwierdzenie', 'documents_to_correct' => 'Dokumenty oczekujące na Twoje korekty', 'documents_to_process' => 'Dokumenty oczekujące na Twoje przetworzenie', @@ -391,6 +392,7 @@ Użytkownik: [username]', 'document_duplicate_name' => 'Zduplikowana nazwa dokumentu', 'document_has_no_workflow' => 'Dokument nie ma przypisanego procesu', 'document_infos' => 'Informacje o dokumencie', +'document_is_checked_out' => '', 'document_is_checked_out_remove' => '', 'document_is_checked_out_update' => 'Ten dokument jest pobierany', 'document_is_not_locked' => 'Ten dokument nie jest zablokowany', diff --git a/languages/pt_BR/lang.inc b/languages/pt_BR/lang.inc index 9af96b3b9..64f1ee6b0 100644 --- a/languages/pt_BR/lang.inc +++ b/languages/pt_BR/lang.inc @@ -362,6 +362,7 @@ URL: [url]', 'documents_locked' => 'Documentos bloqueados', 'documents_locked_by_you' => 'Documentos bloqueados por você', 'documents_only' => 'Somente documentos', +'documents_rejected' => '', 'documents_to_approve' => 'Documentos aguardando sua aprovação', 'documents_to_correct' => 'Documentos que precisam de correção', 'documents_to_process' => 'Documentos que precisam de processamento', @@ -410,6 +411,7 @@ Usuário: [username]', 'document_duplicate_name' => 'Duplicar nome do documento', 'document_has_no_workflow' => 'Documento não tem fluxo de trabalho', 'document_infos' => 'Informações', +'document_is_checked_out' => '', 'document_is_checked_out_remove' => '', 'document_is_checked_out_update' => 'O documento está atualmente com estado de retirado. Se você fizer o envio de uma nova versão, a versão retirada não poderá mais ser registrada.', 'document_is_not_locked' => 'Este documento não está travado', diff --git a/languages/ro_RO/lang.inc b/languages/ro_RO/lang.inc index edc491e38..3ee604f57 100644 --- a/languages/ro_RO/lang.inc +++ b/languages/ro_RO/lang.inc @@ -362,6 +362,7 @@ URL: [url]', 'documents_locked' => '', 'documents_locked_by_you' => 'Documente blocate de tine', 'documents_only' => 'Doar documente', +'documents_rejected' => '', 'documents_to_approve' => 'Documente care așteaptă aprobarea dumneavoastră', 'documents_to_correct' => '', 'documents_to_process' => '', @@ -403,6 +404,7 @@ Utilizator: [username]', 'document_duplicate_name' => 'Nume document duplicat', 'document_has_no_workflow' => 'Documentul nu are workflow', 'document_infos' => 'Informații document', +'document_is_checked_out' => '', 'document_is_checked_out_remove' => '', 'document_is_checked_out_update' => 'Documentul este in prezent verificat. Daca incarcati o noua versiune, versiunea verificata nu mai poate fi verificata din nou.', 'document_is_not_locked' => 'Acest document nu este blocat', diff --git a/languages/ru_RU/lang.inc b/languages/ru_RU/lang.inc index f4be2620d..b9df1fc11 100644 --- a/languages/ru_RU/lang.inc +++ b/languages/ru_RU/lang.inc @@ -362,6 +362,7 @@ URL: [url]', 'documents_locked' => 'Заблокированные документы', 'documents_locked_by_you' => 'Документы, заблокированные вами', 'documents_only' => 'Только документы', +'documents_rejected' => '', 'documents_to_approve' => 'Документы, ожидающие вашего утверждения', 'documents_to_correct' => '', 'documents_to_process' => 'Документы требующие обработки', @@ -403,6 +404,7 @@ URL: [url]', 'document_duplicate_name' => 'Одноимённый документ уже существует.', 'document_has_no_workflow' => 'Для документа не назначен процесс', 'document_infos' => 'Информация о документе', +'document_is_checked_out' => '', 'document_is_checked_out_remove' => '', 'document_is_checked_out_update' => 'Документ в настоящее время проверяется. Если вы загрузить новую версию, то проверяемая версия не может быть возвращена обратно.', 'document_is_not_locked' => 'Документ не заблокирован', diff --git a/languages/sk_SK/lang.inc b/languages/sk_SK/lang.inc index acd1bfb2c..3cd2845d5 100644 --- a/languages/sk_SK/lang.inc +++ b/languages/sk_SK/lang.inc @@ -362,6 +362,7 @@ URL: [url]', 'documents_locked' => 'Zamknuté dokumenty', 'documents_locked_by_you' => 'Vami uzamknuté dokumenty', 'documents_only' => 'Iba dokumenty', +'documents_rejected' => '', 'documents_to_approve' => 'Dokumenty čakajúce na schválenie používateľa', 'documents_to_correct' => 'Dokumenty, ktoré treba opraviť', 'documents_to_process' => 'Dokumenty, ktoré potrebujú spracovanie', @@ -410,6 +411,7 @@ Používateľ: [username]', 'document_duplicate_name' => 'Duplicitný názov dokumentu', 'document_has_no_workflow' => 'Dokument nemá pracovný postup', 'document_infos' => 'Informácie o dokumente', +'document_is_checked_out' => '', 'document_is_checked_out_remove' => '', 'document_is_checked_out_update' => 'Document is currently checked out. If you upload a new version, then the checked out version cannot be checked back in anymore.', 'document_is_not_locked' => 'Tento dokument nie je zamknutý', diff --git a/languages/sv_SE/lang.inc b/languages/sv_SE/lang.inc index 43bde5252..43f175a67 100644 --- a/languages/sv_SE/lang.inc +++ b/languages/sv_SE/lang.inc @@ -363,6 +363,7 @@ URL: [url]', 'documents_locked' => 'Låsta dokument', 'documents_locked_by_you' => 'Dokument som du har låst', 'documents_only' => 'Endast dokument', +'documents_rejected' => '', 'documents_to_approve' => 'Dokument som du behöver godkänna', 'documents_to_correct' => '', 'documents_to_process' => 'Dokument som kräver åtgärd', @@ -404,6 +405,7 @@ Användare: [username]', 'document_duplicate_name' => 'Dubblett av dokumentnamn', 'document_has_no_workflow' => 'Dokumentet saknar arbetsflöde', 'document_infos' => 'Dokumentinformation', +'document_is_checked_out' => '', 'document_is_checked_out_remove' => '', 'document_is_checked_out_update' => 'Dokumentet är redan utcheckat. Om du laddar upp en ny version kan den utcheckade versionen inte checkas in igen.', 'document_is_not_locked' => 'Detta dokument är inte låst', diff --git a/languages/tr_TR/lang.inc b/languages/tr_TR/lang.inc index b628f4c85..8144bff19 100644 --- a/languages/tr_TR/lang.inc +++ b/languages/tr_TR/lang.inc @@ -356,6 +356,7 @@ URL: [url]', 'documents_locked' => '', 'documents_locked_by_you' => 'Doküman sizin tarafınızdan kilitlendi', 'documents_only' => 'Sadece dokümanlar', +'documents_rejected' => '', 'documents_to_approve' => 'Onayınızı bekleyen dokümanlar', 'documents_to_correct' => '', 'documents_to_process' => '', @@ -397,6 +398,7 @@ Kullanıcı: [username]', 'document_duplicate_name' => 'Mükerrer doküman ismi', 'document_has_no_workflow' => 'Dokümanın iş akışı yok', 'document_infos' => 'Doküman Bilgisi', +'document_is_checked_out' => '', 'document_is_checked_out_remove' => '', 'document_is_checked_out_update' => '', 'document_is_not_locked' => 'Bu doküman kilitli değil', diff --git a/languages/uk_UA/lang.inc b/languages/uk_UA/lang.inc index cf5029305..e0c4179c4 100644 --- a/languages/uk_UA/lang.inc +++ b/languages/uk_UA/lang.inc @@ -362,6 +362,7 @@ URL: [url]', 'documents_locked' => 'Заблоковані документи', 'documents_locked_by_you' => 'Документи, які ви заблокували', 'documents_only' => 'лише документи', +'documents_rejected' => '', 'documents_to_approve' => 'Документи, які чекають вашого затвердження', 'documents_to_correct' => '', 'documents_to_process' => 'Документи, які чекають опрацювання', @@ -403,6 +404,7 @@ URL: [url]', 'document_duplicate_name' => 'Документ з такою назвою вже існує', 'document_has_no_workflow' => 'Документові не призначено процес', 'document_infos' => 'Інформація про документ', +'document_is_checked_out' => '', 'document_is_checked_out_remove' => '', 'document_is_checked_out_update' => 'Документ на опрацюванні', 'document_is_not_locked' => 'Документ не заблокований', diff --git a/languages/zh_CN/lang.inc b/languages/zh_CN/lang.inc index 913dc05cc..a5acfc69e 100644 --- a/languages/zh_CN/lang.inc +++ b/languages/zh_CN/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 (773), archonwang (469), fengjohn (5), yang86 (1) +// Translators: Admin (774), archonwang (469), fengjohn (5), yang86 (1) $text = array( '2_factor_auth' => '双重认证', @@ -356,6 +356,7 @@ URL: [url]', 'documents_locked' => '已锁定的文档', 'documents_locked_by_you' => '被您锁定的文档', 'documents_only' => '指定文件', +'documents_rejected' => '', 'documents_to_approve' => '待您审核的文档', 'documents_to_correct' => '', 'documents_to_process' => '', @@ -397,6 +398,7 @@ URL: [url]', 'document_duplicate_name' => '文档名称重复', 'document_has_no_workflow' => '文档未配置工作流', 'document_infos' => '文档信息', +'document_is_checked_out' => '', 'document_is_checked_out_remove' => '', 'document_is_checked_out_update' => '文档已签出。如上传了新版本,则已签出的版本则不能再被签回。', 'document_is_not_locked' => '该文档没有被锁定', @@ -1738,7 +1740,7 @@ URL: [url]', 'status_revisor_removed' => '', 'status_unknown' => '未知', 'storage_size' => '存储大小', -'subfolder_duplicate_name' => '', +'subfolder_duplicate_name' => '重复的文件夹', 'submit_2_fact_auth' => '', 'submit_approval' => '提交审核', 'submit_login' => '登录', diff --git a/languages/zh_TW/lang.inc b/languages/zh_TW/lang.inc index 1e8bd1fd6..ca319ef79 100644 --- a/languages/zh_TW/lang.inc +++ b/languages/zh_TW/lang.inc @@ -362,6 +362,7 @@ URL: [url]', 'documents_locked' => '文件鎖定', 'documents_locked_by_you' => '被您鎖定的文件', 'documents_only' => '指定檔', +'documents_rejected' => '', 'documents_to_approve' => '待您審核的文件', 'documents_to_correct' => '需要更正的文件', 'documents_to_process' => '需要處理的文件', @@ -410,6 +411,7 @@ URL: [url]', 'document_duplicate_name' => '文件名稱重複', 'document_has_no_workflow' => '文件沒有工作流程', 'document_infos' => '文件資訊', +'document_is_checked_out' => '', 'document_is_checked_out_remove' => '', 'document_is_checked_out_update' => '當前已簽出文檔。如果您上傳新版本,那麼簽出的版本將無法再簽回。', 'document_is_not_locked' => '該文件沒有被鎖定', From 40adb027dbc75778075d1f2d9e25a5f46d3182a9 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 4 Jan 2021 21:45:16 +0100 Subject: [PATCH 070/276] new method hasTable(), beautify some sql statements --- SeedDMS_Core/Core/inc.DBAccessPDO.php | 31 +++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/SeedDMS_Core/Core/inc.DBAccessPDO.php b/SeedDMS_Core/Core/inc.DBAccessPDO.php index 710a578fc..a272fffb9 100644 --- a/SeedDMS_Core/Core/inc.DBAccessPDO.php +++ b/SeedDMS_Core/Core/inc.DBAccessPDO.php @@ -118,10 +118,10 @@ class SeedDMS_Core_DatabaseAccess { function TableList() { /* {{{ */ switch($this->_driver) { case 'mysql': - $sql = "select TABLE_NAME as name from information_schema.tables where TABLE_SCHEMA='".$this->_database."' and TABLE_TYPE='BASE TABLE'"; + $sql = "SELECT `TABLE_NAME` AS `name` FROM `information_schema`.`tables` WHERE `TABLE_SCHEMA`='".$this->_database."' AND `TABLE_TYPE`='BASE TABLE'"; break; case 'sqlite': - $sql = "select tbl_name as name from sqlite_master where type='table'"; + $sql = "SELECT tbl_name AS name FROM sqlite_master WHERE type='table'"; break; case 'pgsql': $sql = "select tablename as name from pg_catalog.pg_tables where schemaname='public'"; @@ -136,6 +136,33 @@ class SeedDMS_Core_DatabaseAccess { return $res; } /* }}} */ + /** + * Check if database has a table + * + * This function will check if the database has a table with the given table name + * + * @return bool true if table exists, otherwise false + */ + function hasTable($name) { /* {{{ */ + switch($this->_driver) { + case 'mysql': + $sql = "SELECT `TABLE_NAME` AS `name` FROM `information_schema`.`tables` WHERE `TABLE_SCHEMA`='".$this->_database."' AND `TABLE_TYPE`='BASE TABLE' AND `TABLE_NAME`=".$this->qstr($name); + break; + case 'sqlite': + $sql = "SELECT tbl_name AS name FROM sqlite_master WHERE type='table' AND `tbl_name`=".$this->qstr($name); + break; + case 'pgsql': + $sql = "SELECT tablename AS name FROM pg_catalog.pg_tables WHERE schemaname='public' AND tablename=".$this->qstr($name); + break; + default: + return false; + } + $arr = $this->getResultArray($sql); + if($arr) + return true; + return false; + } /* }}} */ + /** * Return list of all database views * From 323e3c49ae7c577a3401bd9aef2a1ce1d83aabcd Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 4 Jan 2021 21:45:55 +0100 Subject: [PATCH 071/276] start new version 5.1.22 --- SeedDMS_Core/package.xml | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index bd8ff243e..297c9bbac 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -12,11 +12,11 @@ uwe@steinmann.cx yes - 2020-09-29 + 2021-01-04 - 5.1.21 - 5.1.21 + 5.1.22 + 5.1.22 stable @@ -24,12 +24,7 @@ GPL License -- SeedDMS_Folder_DMS::getAccessList() and getDefaultAccess() do not return fals anymore if the parent does not exists. They just stop inheritance. -- pass attribute value to callback 'onAttributeValidate' -- new paramter 'new' of methode SeedDMЅ_Core_AttributeDefinition::validate() -- check if folder/document is below rootDir can be turned on (default off) -- SeedDMS_Core_User::setHomeFolder() can be used to unset the home folder -- check if attribute definition exists when setting attributes of folders and documents +- add SeedDMS_Core_DatabaseAccess::hasTable() @@ -1843,5 +1838,26 @@ add method SeedDMS_Core_DatabaseAccess::setLogFp() - set dms of new user instances in SeedDMS_Core_Group + + 2020-09-29 + + + 5.1.21 + 5.1.21 + + + stable + stable + + GPL License + +- SeedDMS_Folder_DMS::getAccessList() and getDefaultAccess() do not return fals anymore if the parent does not exists. They just stop inheritance. +- pass attribute value to callback 'onAttributeValidate' +- new paramter 'new' of methode SeedDMЅ_Core_AttributeDefinition::validate() +- check if folder/document is below rootDir can be turned on (default off) +- SeedDMS_Core_User::setHomeFolder() can be used to unset the home folder +- check if attribute definition exists when setting attributes of folders and documents + + From 9bacd7937461a94e52516a79b56502941c19f652 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 8 Jan 2021 09:23:04 +0100 Subject: [PATCH 072/276] start version 5.1.22 --- CHANGELOG | 4 ++++ inc/inc.Version.php | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index eccc241c7..6f16a3570 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,7 @@ +-------------------------------------------------------------------------------- + Changes in version 5.1.22 +-------------------------------------------------------------------------------- + -------------------------------------------------------------------------------- Changes in version 5.1.21 -------------------------------------------------------------------------------- diff --git a/inc/inc.Version.php b/inc/inc.Version.php index 765c0a617..8e4db572b 100644 --- a/inc/inc.Version.php +++ b/inc/inc.Version.php @@ -20,7 +20,7 @@ class SeedDMS_Version { /* {{{ */ - const _number = "5.1.21"; + const _number = "5.1.22"; const _string = "SeedDMS"; function __construct() { From 4bc32501b8af0f77603de23884b152388d128dee Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 8 Jan 2021 10:06:42 +0100 Subject: [PATCH 073/276] some more documentation, use appropriate variable name --- inc/inc.ClassFulltextService.php | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/inc/inc.ClassFulltextService.php b/inc/inc.ClassFulltextService.php index 7a8165cbe..77f4f89f8 100644 --- a/inc/inc.ClassFulltextService.php +++ b/inc/inc.ClassFulltextService.php @@ -65,12 +65,22 @@ class SeedDMS_FulltextService { $this->cmdtimeout = $timeout; } - public function IndexedDocument($document, $forceupdate=false) { - if($document->isType('document')) - $nocontent = ($document->getLatestContent()->getFileSize() > $this->maxsize) && !$forceupdate; + /** + * Return an indexable document from the given document or folder + * + * @param SeedDMS_Core_Document|SeedDMS_Core_Folder $object document or folder + * to be indexed + * @param boolean $forceupdate set to true if the document shall be updated no + * matter how large the content is. Setting this to false will only update the + * document if its content is below the configured size. + * @return object indexed Document ready for passing to the indexer + */ + public function IndexedDocument($object, $forceupdate=false) { + if($object->isType('document')) + $nocontent = ($object->getLatestContent()->getFileSize() > $this->maxsize) && !$forceupdate; else $nocontent = true; - return new $this->services[0]['IndexedDocument']($document->getDMS(), $document, $this->converters, $nocontent, $this->cmdtimeout); + return new $this->services[0]['IndexedDocument']($object->getDMS(), $object, $this->converters, $nocontent, $this->cmdtimeout); } /** From e328c3c04e50422eb8c6cfdac657023ecdc1ce69 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 8 Jan 2021 10:07:12 +0100 Subject: [PATCH 074/276] remove old document/folder from index before adding a new one --- CHANGELOG | 2 ++ controllers/class.EditDocument.php | 4 ++++ controllers/class.EditFolder.php | 4 ++++ controllers/class.UpdateDocument.php | 8 ++++---- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 6f16a3570..512b168cc 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,8 @@ -------------------------------------------------------------------------------- Changes in version 5.1.22 -------------------------------------------------------------------------------- +- remove document/folder from index before adding a new one after editing the + meta data -------------------------------------------------------------------------------- Changes in version 5.1.21 diff --git a/controllers/class.EditDocument.php b/controllers/class.EditDocument.php index ef91be1c0..ca4b38218 100644 --- a/controllers/class.EditDocument.php +++ b/controllers/class.EditDocument.php @@ -165,6 +165,10 @@ class SeedDMS_Controller_EditDocument extends SeedDMS_Controller_Common { if($fulltextservice && ($index = $fulltextservice->Indexer()) && $document) { $idoc = $fulltextservice->IndexedDocument($document); if(false !== $this->callHook('preIndexDocument', $document, $idoc)) { + $lucenesearch = $fulltextservice->Search(); + if($hit = $lucenesearch->getDocument((int) $document->getId())) { + $index->delete($hit->id); + } $index->addDocument($idoc); $index->commit(); } diff --git a/controllers/class.EditFolder.php b/controllers/class.EditFolder.php index 0110f6e06..7e37d5016 100644 --- a/controllers/class.EditFolder.php +++ b/controllers/class.EditFolder.php @@ -93,6 +93,10 @@ class SeedDMS_Controller_EditFolder extends SeedDMS_Controller_Common { if($fulltextservice && ($index = $fulltextservice->Indexer()) && $folder) { $idoc = $fulltextservice->IndexedDocument($folder); if(false !== $this->callHook('preIndexFolder', $folder, $idoc)) { + $lucenesearch = $fulltextservice->Search(); + if($hit = $lucenesearch->getFolder((int) $folder->getId())) { + $index->delete($hit->id); + } $index->addDocument($idoc); $index->commit(); } diff --git a/controllers/class.UpdateDocument.php b/controllers/class.UpdateDocument.php index c1e2b7e57..854fe1f60 100644 --- a/controllers/class.UpdateDocument.php +++ b/controllers/class.UpdateDocument.php @@ -77,12 +77,12 @@ class SeedDMS_Controller_UpdateDocument extends SeedDMS_Controller_Common { } if($fulltextservice && ($index = $fulltextservice->Indexer()) && $content) { - $lucenesearch = $fulltextservice->Search(); - if($hit = $lucenesearch->getDocument((int) $document->getId())) { - $index->delete($hit->id); - } $idoc = $fulltextservice->IndexedDocument($document); if(false !== $this->callHook('preIndexDocument', $document, $idoc)) { + $lucenesearch = $fulltextservice->Search(); + if($hit = $lucenesearch->getDocument((int) $document->getId())) { + $index->delete($hit->id); + } $index->addDocument($idoc); $index->commit(); } From d8b8719d6b02d52fb5603a196972db9634766a99 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 11 Jan 2021 07:58:02 +0100 Subject: [PATCH 075/276] add method migrate() which calls the methode migrate() in the extension --- inc/inc.ClassExtensionMgr.php | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/inc/inc.ClassExtensionMgr.php b/inc/inc.ClassExtensionMgr.php index f3f1d1487..191587e28 100644 --- a/inc/inc.ClassExtensionMgr.php +++ b/inc/inc.ClassExtensionMgr.php @@ -297,6 +297,28 @@ class SeedDMS_Extension_Mgr { return $tmpfile; } /* }}} */ + /** + * Migrate database tables of extension if one exists + * + * @param string $extname name of extension + * @param SeedDMS_Core_DMS $dms + * @return boolean true on success, false on error + */ + public function migrate($extname, $dms) { /* {{{ */ + if(!isset($this->extconf[$extname])) + return false; + $extconf = $this->extconf[$extname]; + if(isset($extconf['class']) && isset($extconf['class']['file']) && isset($extconf['class']['name'])) { + $classfile = $settings->_rootDir."/ext/".$extname."/".$extconf['class']['file']; + if(file_exists($classfile)) { + include($classfile); + $obj = new $extconf['class']['name']($settings); + if(method_exists($obj, 'migrate')) + $obj->migrate(isset($settings->_extensions[$extname]) ? $settings->_extensions[$extname] : null); + } + } + } /* }}} */ + /** * Check content of extension directory or configuration of extension * From 717cfcb6157d097269e5cc19a6c30afb62526826 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 11 Jan 2021 07:58:37 +0100 Subject: [PATCH 076/276] add missing foldmarks, fix comment --- op/op.ExtensionMgr.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/op/op.ExtensionMgr.php b/op/op.ExtensionMgr.php index 706764640..a92e8af57 100644 --- a/op/op.ExtensionMgr.php +++ b/op/op.ExtensionMgr.php @@ -43,8 +43,8 @@ else $action=NULL; if (isset($_POST["currenttab"])) $currenttab=$_POST["currenttab"]; else $currenttab=NULL; -// add new attribute definition --------------------------------------------- -if ($action == "download") { +// Download extension ------------------------------------------------------- +if ($action == "download") { /* {{{ */ if (!isset($_POST["extname"])) { UI::exitError(getMLText("admin_tools"),getMLText("unknown_id")); } @@ -128,7 +128,8 @@ elseif ($action == "getlist") { /* {{{ */ } add_log_line(); header("Location:../out/out.ExtensionMgr.php?currenttab=".$currenttab); -} elseif ($action == "toggle") { /* {{{ */ +} /* }}} */ +elseif ($action == "toggle") { /* {{{ */ if (!isset($_POST["extname"])) { echo json_encode(array('success'=>false, 'msg'=>'Could not toggle extension')); } From 78dfd5269e1b22c56ed81c914f2593551efc6965 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 11 Jan 2021 07:59:32 +0100 Subject: [PATCH 077/276] run all mailto through htmlspecialchars to prevent clickjacking attacks --- views/bootstrap/class.DocumentVersionDetail.php | 6 +++--- views/bootstrap/class.ExtensionMgr.php | 2 +- views/bootstrap/class.UserList.php | 2 +- views/bootstrap/class.UsrView.php | 2 +- views/bootstrap/class.ViewDocument.php | 8 ++++---- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/views/bootstrap/class.DocumentVersionDetail.php b/views/bootstrap/class.DocumentVersionDetail.php index 833bdb67d..14e78b499 100644 --- a/views/bootstrap/class.DocumentVersionDetail.php +++ b/views/bootstrap/class.DocumentVersionDetail.php @@ -168,7 +168,7 @@ class SeedDMS_View_DocumentVersionDetail extends SeedDMS_Bootstrap_Style { getOwner(); - print "getEmail()."\">".htmlspecialchars($owner->getFullName()).""; + print "getEmail())."\">".htmlspecialchars($owner->getFullName()).""; ?> @@ -275,7 +275,7 @@ class SeedDMS_View_DocumentVersionDetail extends SeedDMS_Bootstrap_Style { else print "
    • ".getMLText("document_deleted")."
    • "; $updatingUser = $version->getUser(); - print "
    • ".getMLText("uploaded_by")." getEmail()."\">".htmlspecialchars($updatingUser->getFullName())."
    • "; + print "
    • ".getMLText("uploaded_by")." getEmail())."\">".htmlspecialchars($updatingUser->getFullName())."
    • "; print "
    • ".getLongReadableDate($version->getDate())."
    • "; print "
    \n"; @@ -509,7 +509,7 @@ class SeedDMS_View_DocumentVersionDetail extends SeedDMS_Bootstrap_Style { print "
  • ".SeedDMS_Core_File::format_filesize(filesize($dms->contentDir . $file->getPath())) ." bytes, ".htmlspecialchars($file->getMimeType())."
  • "; else print "
  • ".htmlspecialchars($file->getMimeType())." - ".getMLText("document_deleted")."
  • "; - print "
  • ".getMLText("uploaded_by")." getEmail()."\">".htmlspecialchars($responsibleUser->getFullName())."
  • "; + print "
  • ".getMLText("uploaded_by")." getEmail())."\">".htmlspecialchars($responsibleUser->getFullName())."
  • "; print "
  • ".getLongReadableDate($file->getDate())."
  • "; if($file->getVersion()) print "
  • ".getMLText('linked_to_this_version')."
  • "; diff --git a/views/bootstrap/class.ExtensionMgr.php b/views/bootstrap/class.ExtensionMgr.php index ada1960ca..6bca7e627 100644 --- a/views/bootstrap/class.ExtensionMgr.php +++ b/views/bootstrap/class.ExtensionMgr.php @@ -212,7 +212,7 @@ class SeedDMS_View_ExtensionMgr extends SeedDMS_Bootstrap_Style { echo "".$extconf['version']; echo "
    ".$extconf['releasedate'].""; echo ""; - echo "".$extconf['author']['name']."
    ".$extconf['author']['company'].""; + echo "".$extconf['author']['name']."
    ".$extconf['author']['company'].""; echo ""; echo "
    "; if(!empty($extconf['changelog']) && file_exists($extdir."/".$extname."/".$extconf['changelog'])) { diff --git a/views/bootstrap/class.UserList.php b/views/bootstrap/class.UserList.php index 49350275b..63a5b0d5b 100644 --- a/views/bootstrap/class.UserList.php +++ b/views/bootstrap/class.UserList.php @@ -59,7 +59,7 @@ class SeedDMS_View_UserList extends SeedDMS_Bootstrap_Style { echo ""; echo ""; echo htmlspecialchars($currUser->getFullName())." (".htmlspecialchars($currUser->getLogin()).")
    "; - echo "getEmail()."\">".htmlspecialchars($currUser->getEmail())."
    "; + echo "getEmail())."\">".htmlspecialchars($currUser->getEmail())."
    "; echo "".htmlspecialchars($currUser->getComment()).""; echo ""; echo ""; diff --git a/views/bootstrap/class.UsrView.php b/views/bootstrap/class.UsrView.php index d091d5db4..09c9ea48c 100644 --- a/views/bootstrap/class.UsrView.php +++ b/views/bootstrap/class.UsrView.php @@ -68,7 +68,7 @@ class SeedDMS_View_UsrView extends SeedDMS_Bootstrap_Style { } echo ""; echo htmlspecialchars($currUser->getFullName())." (".htmlspecialchars($currUser->getLogin()).")
    "; - echo "getEmail()."\">".htmlspecialchars($currUser->getEmail())."
    "; + echo "getEmail())."\">".htmlspecialchars($currUser->getEmail())."
    "; echo "".htmlspecialchars($currUser->getComment()).""; echo ""; echo ""; diff --git a/views/bootstrap/class.ViewDocument.php b/views/bootstrap/class.ViewDocument.php index 3960d6fd6..a5c290279 100644 --- a/views/bootstrap/class.ViewDocument.php +++ b/views/bootstrap/class.ViewDocument.php @@ -225,7 +225,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { getOwner(); - print "getEmail()."\">".htmlspecialchars($owner->getFullName()).""; + print "getEmail())."\">".htmlspecialchars($owner->getFullName()).""; ?> @@ -635,7 +635,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { else print "
  • ".getMLText("document_deleted")."
  • "; $updatingUser = $latestContent->getUser(); - print "
  • ".getMLText("uploaded_by")." getEmail()."\">".htmlspecialchars($updatingUser->getFullName())."
  • "; + print "
  • ".getMLText("uploaded_by")." getEmail())."\">".htmlspecialchars($updatingUser->getFullName())."
  • "; print "
  • ".getLongReadableDate($latestContent->getDate())."
  • "; print "\n"; @@ -1275,7 +1275,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { if ($file_exists) print "
  • ". SeedDMS_Core_File::format_filesize($version->getFileSize()) .", ".htmlspecialchars($version->getMimeType())."
  • "; else print "
  • ".getMLText("document_deleted")."
  • "; $updatingUser = $version->getUser(); - print "
  • ".getMLText("uploaded_by")." getEmail()."\">".htmlspecialchars($updatingUser->getFullName())."
  • "; + print "
  • ".getMLText("uploaded_by")." getEmail())."\">".htmlspecialchars($updatingUser->getFullName())."
  • "; print "
  • ".getLongReadableDate($version->getDate())."
  • "; print "\n"; $txt = $this->callHook('showVersionComment', $version); @@ -1386,7 +1386,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { print "
  • ".SeedDMS_Core_File::format_filesize(filesize($dms->contentDir . $file->getPath())) ." bytes, ".htmlspecialchars($file->getMimeType())."
  • "; else print "
  • ".htmlspecialchars($file->getMimeType())." - ".getMLText("document_deleted")."
  • "; - print "
  • ".getMLText("uploaded_by")." getEmail()."\">".htmlspecialchars($responsibleUser->getFullName())."
  • "; + print "
  • ".getMLText("uploaded_by")." getEmail())."\">".htmlspecialchars($responsibleUser->getFullName())."
  • "; print "
  • ".getLongReadableDate($file->getDate())."
  • "; if($file->getVersion()) print "
  • ".getMLText('linked_to_current_version')."
  • "; From e52d5b52b3fedb1630da2fac68e0957c008fbd02 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 11 Jan 2021 08:20:46 +0100 Subject: [PATCH 078/276] init vars for view to prevent lots of php warnings --- out/out.ImportUsers.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/out/out.ImportUsers.php b/out/out.ImportUsers.php index 4443ba892..1abf2d1b9 100644 --- a/out/out.ImportUsers.php +++ b/out/out.ImportUsers.php @@ -34,7 +34,11 @@ if (!$user->isAdmin()) { UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); } +/* Also have a look at op/op.ImportUsers.php which calls the view as well. */ if($view) { + $view->setParam('log', array()); + $view->setParam('newusers', array()); + $view->setParam('colmap', array()); $view($_GET); exit; } From 1d8e9242731d3264f6d05b410735d66d05a0379e Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 11 Jan 2021 08:23:41 +0100 Subject: [PATCH 079/276] add note about fixed clickjacking attack in 5.1.22 --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index 512b168cc..93d9fd2aa 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -3,6 +3,7 @@ -------------------------------------------------------------------------------- - remove document/folder from index before adding a new one after editing the meta data +- fix potential clickjacking attack with manipulated email address of a user -------------------------------------------------------------------------------- Changes in version 5.1.21 From d3887dcf444bdce1a9ec74986aca55c0f86767c4 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 12 Jan 2021 22:02:29 +0100 Subject: [PATCH 080/276] user translation phrases --- op/op.ExtensionMgr.php | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/op/op.ExtensionMgr.php b/op/op.ExtensionMgr.php index a92e8af57..9af2b9a7e 100644 --- a/op/op.ExtensionMgr.php +++ b/op/op.ExtensionMgr.php @@ -131,7 +131,7 @@ elseif ($action == "getlist") { /* {{{ */ } /* }}} */ elseif ($action == "toggle") { /* {{{ */ if (!isset($_POST["extname"])) { - echo json_encode(array('success'=>false, 'msg'=>'Could not toggle extension')); + echo json_encode(array('success'=>false, 'msg'=>getMLText('extension_missing_name'))); } $extname = trim($_POST["extname"]); if (!file_exists($settings->_rootDir.'/ext/'.$extname) ) { @@ -140,9 +140,21 @@ elseif ($action == "toggle") { /* {{{ */ $controller->setParam('extmgr', $extMgr); $controller->setParam('extname', $extname); if (!$controller($_POST)) { - echo json_encode(array('success'=>false, 'msg'=>'Could not toggle extension')); + echo json_encode(array('success'=>false, 'msg'=>getMLText('extinsion_toggle_error'))); } else { - echo json_encode(array('success'=>true, 'msg'=>'Operation succeded')); + if($settings->extensionIsDisabled($extname)) + echo json_encode(array('success'=>true, 'msg'=>getMLText('extension_is_off_now'))); + else { + $ret = $extMgr->migrate($extname, $settings, $dms); + if($ret !== null) { + if($ret === true) + echo json_encode(array('success'=>true, 'msg'=>getMLText('extension_migration_success'))); + else + echo json_encode(array('success'=>true, 'msg'=>getMLText('extension_migration_error'))); + } else { + echo json_encode(array('success'=>true, 'msg'=>getMLText('extension_is_on_now'))); + } + } } add_log_line(); } /* }}} */ From de4dec03cc6824de8836319798d7e834fcf14acb Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 12 Jan 2021 22:03:47 +0100 Subject: [PATCH 081/276] add icon for mp4 --- views/bootstrap/class.Bootstrap.php | 1 + 1 file changed, 1 insertion(+) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index beaa916cc..508b664cc 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -1061,6 +1061,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);; $icons["zip"] = "package.svg"; $icons["rar"] = "package.svg"; $icons["mpg"] = "video.svg"; + $icons["mp4"] = "video.svg"; $icons["avi"] = "video.svg"; $icons["webm"] = "video.svg"; $icons["mkv"] = "video.svg"; From cb03dacf45e4af034f349fd12261376c7f94bc0b Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 12 Jan 2021 22:07:01 +0100 Subject: [PATCH 082/276] pass dms to SeedDMS_ExtBase --- inc/inc.ClassExtBase.php | 4 +++- inc/inc.ClassExtensionMgr.php | 10 ++++++---- inc/inc.Extension.php | 4 ++-- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/inc/inc.ClassExtBase.php b/inc/inc.ClassExtBase.php index 1c63891b6..10237b04a 100644 --- a/inc/inc.ClassExtBase.php +++ b/inc/inc.ClassExtBase.php @@ -30,8 +30,10 @@ */ class SeedDMS_ExtBase { var $settings; + var $dms; - public function __construct($settings) { + public function __construct($settings, $dms) { $this->settings = $settings; + $this->dms = $dms; } } diff --git a/inc/inc.ClassExtensionMgr.php b/inc/inc.ClassExtensionMgr.php index 191587e28..a5a308c57 100644 --- a/inc/inc.ClassExtensionMgr.php +++ b/inc/inc.ClassExtensionMgr.php @@ -304,19 +304,21 @@ class SeedDMS_Extension_Mgr { * @param SeedDMS_Core_DMS $dms * @return boolean true on success, false on error */ - public function migrate($extname, $dms) { /* {{{ */ + public function migrate($extname, $settings, $dms) { /* {{{ */ if(!isset($this->extconf[$extname])) return false; $extconf = $this->extconf[$extname]; + $ret = null; if(isset($extconf['class']) && isset($extconf['class']['file']) && isset($extconf['class']['name'])) { $classfile = $settings->_rootDir."/ext/".$extname."/".$extconf['class']['file']; if(file_exists($classfile)) { - include($classfile); - $obj = new $extconf['class']['name']($settings); + require_once($classfile); + $obj = new $extconf['class']['name']($settings, $dms); if(method_exists($obj, 'migrate')) - $obj->migrate(isset($settings->_extensions[$extname]) ? $settings->_extensions[$extname] : null); + $ret = $obj->migrate(); } } + return $ret; } /* }}} */ /** diff --git a/inc/inc.Extension.php b/inc/inc.Extension.php index fb525c44c..5582ea4fd 100644 --- a/inc/inc.Extension.php +++ b/inc/inc.Extension.php @@ -43,9 +43,9 @@ foreach($extMgr->getExtensionConfiguration() as $extname=>$extconf) { $classfile = $settings->_rootDir."/ext/".$extname."/".$extconf['class']['file']; if(file_exists($classfile)) { include($classfile); - $obj = new $extconf['class']['name']($settings); + $obj = new $extconf['class']['name']($settings, null); if(method_exists($obj, 'init')) - $obj->init(isset($settings->_extensions[$extname]) ? $settings->_extensions[$extname] : null); + $obj->init(); } } if(isset($extconf['language']['file'])) { From 0767dadf39be3262cfba7a2c0a605da9369ef216 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 13 Jan 2021 07:42:35 +0100 Subject: [PATCH 083/276] loading more items on ViewFolder page obeys sort order --- CHANGELOG | 1 + views/bootstrap/class.ViewFolder.php | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 93d9fd2aa..70124ada1 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -4,6 +4,7 @@ - remove document/folder from index before adding a new one after editing the meta data - fix potential clickjacking attack with manipulated email address of a user +- loading more items on ViewFolder page obeys sort order -------------------------------------------------------------------------------- Changes in version 5.1.21 diff --git a/views/bootstrap/class.ViewFolder.php b/views/bootstrap/class.ViewFolder.php index 7d7a31f2f..30b491764 100644 --- a/views/bootstrap/class.ViewFolder.php +++ b/views/bootstrap/class.ViewFolder.php @@ -130,7 +130,7 @@ function folderSelectedmaintree(id, name) { } -function loadMoreObjects(element, limit) { +function loadMoreObjects(element, limit, orderby) { if(!$(element).is(":visible")) return; element.text(''); @@ -138,7 +138,7 @@ function loadMoreObjects(element, limit) { var folder = element.data('folder') var offset = element.data('offset') // var limit = element.data('limit') - url = seeddms_webroot+"out/out.ViewFolder.php?action=entries&folderid="+folder+"&offset="+offset+"&limit="+limit; + url = seeddms_webroot+"out/out.ViewFolder.php?action=entries&folderid="+folder+"&offset="+offset+"&limit="+limit+"&orderby="+orderby; $.ajax({ type: 'GET', url: url, @@ -158,11 +158,11 @@ function loadMoreObjects(element, limit) { } $(window).scroll(function() { if($(window).scrollTop() + $(window).height() == $(document).height()) { - loadMoreObjects($('#loadmore'), $('#loadmore').data('limit')); + loadMoreObjects($('#loadmore'), $('#loadmore').data('limit'), $('#loadmore').data('orderby')); } }); $('body').on('click', '#loadmore', function(e) { - loadMoreObjects($(this), $(this).data('all')); + loadMoreObjects($(this), $(this).data('all'), $(this).data('orderby')); }); @@ -426,7 +426,7 @@ $('body').on('click', '.order-btn', function(ev) { echo "\n\n"; if($maxItemsPerPage && $i > $maxItemsPerPage) - echo ""; + echo ""; } else printMLText("empty_folder_list"); From c4d00fb65073d739015c17fd5a48a20a7541cef7 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 13 Jan 2021 09:05:19 +0100 Subject: [PATCH 084/276] add method getTheme() --- inc/inc.ClassViewCommon.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/inc/inc.ClassViewCommon.php b/inc/inc.ClassViewCommon.php index 37b153a68..e92788c51 100644 --- a/inc/inc.ClassViewCommon.php +++ b/inc/inc.ClassViewCommon.php @@ -88,6 +88,10 @@ class SeedDMS_View_Common { $this->baseurl = $baseurl; } + public function getTheme() { + return $this->theme; + } + public function show() { } From 526d833ab1375c2d14123f3ebab1d9ad6e55bc37 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 13 Jan 2021 13:17:33 +0100 Subject: [PATCH 085/276] replace icon on Statistics button --- views/bootstrap/class.AdminTools.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/bootstrap/class.AdminTools.php b/views/bootstrap/class.AdminTools.php index bf4238759..9d03fda18 100644 --- a/views/bootstrap/class.AdminTools.php +++ b/views/bootstrap/class.AdminTools.php @@ -110,7 +110,7 @@ class SeedDMS_View_AdminTools extends SeedDMS_Bootstrap_Style { ?> callHook('startOfRow', 6); ?> - + From 20bc412a17d6ff7655330a5aecb5af4d853de80c Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 14 Jan 2021 09:46:34 +0100 Subject: [PATCH 086/276] check if document exists --- views/bootstrap/class.MyDocuments.php | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/views/bootstrap/class.MyDocuments.php b/views/bootstrap/class.MyDocuments.php index f754a6acb..462f7dd15 100644 --- a/views/bootstrap/class.MyDocuments.php +++ b/views/bootstrap/class.MyDocuments.php @@ -91,13 +91,14 @@ $(document).ready( function() { $noaccess = 0; $docs = []; foreach ($resArr as $res) { - $document = $dms->getDocument($res["id"]); - $document->verifyLastestContentExpriry(); + if($document = $dms->getDocument($res["id"])) { + $document->verifyLastestContentExpriry(); - if($document->getAccessMode($user) >= M_READ && $document->getLatestContent()) { - $docs[] = $document; - } else { - $noaccess++; + if($document->getAccessMode($user) >= M_READ && $document->getLatestContent()) { + $docs[] = $document; + } else { + $noaccess++; + } } } if($this->hasHook('filterList')) From ec419216916f6c1f50655684c0a03d5935b4e7f0 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 14 Jan 2021 13:59:20 +0100 Subject: [PATCH 087/276] use phrase select_attr instead of select_attribute_value --- views/bootstrap/class.Settings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/bootstrap/class.Settings.php b/views/bootstrap/class.Settings.php index c75982e63..7e3d7a26c 100644 --- a/views/bootstrap/class.Settings.php +++ b/views/bootstrap/class.Settings.php @@ -612,7 +612,7 @@ if(($kkk = $this->callHook('getFullSearchEngine')) && is_array($kkk)) else $recs = $dms->getAllAttributeDefinitions(explode(',', $conf['objtype'])); if($recs) { - echo ""; if($allowempty) echo ""; foreach($recs as $rec) { From 1399a3547efaba29a707a0747e107beacc53220a Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 14 Jan 2021 22:35:03 +0100 Subject: [PATCH 088/276] placeholder of select can be set --- views/bootstrap/class.Bootstrap.php | 1 + views/bootstrap/class.GroupMgr.php | 3 ++- views/bootstrap/class.UsrMgr.php | 5 +++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index 508b664cc..1083a1592 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -948,6 +948,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);; (!empty($value['id']) ? ' id="'.$value['id'].'"' : ''). (!empty($value['name']) ? ' name="'.$value['name'].'"' : ''). (!empty($value['class']) ? ' class="'.$value['class'].'"' : ''). + (!empty($value['placeholder']) ? ' data-placeholder="'.$value['placeholder'].'"' : ''). (!empty($value['multiple']) ? ' multiple' : ''); if(!empty($value['attributes']) && is_array($value['attributes'])) foreach($value['attributes'] as $a) diff --git a/views/bootstrap/class.GroupMgr.php b/views/bootstrap/class.GroupMgr.php index aff4f2a29..632491660 100644 --- a/views/bootstrap/class.GroupMgr.php +++ b/views/bootstrap/class.GroupMgr.php @@ -313,7 +313,8 @@ $(document).ready( function() { 'element'=>'select', 'id'=>'selector', 'class'=>'chzn-select', - 'options'=>$options + 'options'=>$options, + 'placeholder'=>getMLText('select_groups'), ) ); ?> diff --git a/views/bootstrap/class.UsrMgr.php b/views/bootstrap/class.UsrMgr.php index 21d93c22b..1773ccae2 100644 --- a/views/bootstrap/class.UsrMgr.php +++ b/views/bootstrap/class.UsrMgr.php @@ -332,7 +332,7 @@ $(document).ready( function() { 'name'=>'groups[]', 'class'=>'chzn-select', 'multiple'=>true, - 'attributes'=>array(array('data-placeholder', getMLText('select_groups'))), + 'placeholder'=>getMLText('select_groups'), 'options'=>$options ) ); @@ -550,7 +550,8 @@ $(document).ready( function() { 'element'=>'select', 'id'=>'selector', 'class'=>'chzn-select', - 'options'=>$options + 'options'=>$options, + 'placeholder'=>getMLText('select_users'), ) ); ?> From a663f893638a5446bf27b588ad3ba9070bd830b3 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 15 Jan 2021 09:48:12 +0100 Subject: [PATCH 089/276] remove some superlous comma --- styles/bootstrap/application.js | 60 ++++++++++++++++----------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/styles/bootstrap/application.js b/styles/bootstrap/application.js index b6e349dbf..001767c43 100644 --- a/styles/bootstrap/application.js +++ b/styles/bootstrap/application.js @@ -274,7 +274,7 @@ $(document).ready( function() { dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 1500, + timeout: 1500 }); } else { noty({ @@ -283,7 +283,7 @@ $(document).ready( function() { dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 3500, + timeout: 3500 }); } }, @@ -309,7 +309,7 @@ $(document).ready( function() { dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 1500, + timeout: 1500 }); } else { noty({ @@ -318,7 +318,7 @@ $(document).ready( function() { dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 3500, + timeout: 3500 }); } }, @@ -343,7 +343,7 @@ $(document).ready( function() { dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 1500, + timeout: 1500 }); } else { noty({ @@ -352,7 +352,7 @@ $(document).ready( function() { dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 3500, + timeout: 3500 }); } }, @@ -377,7 +377,7 @@ $(document).ready( function() { dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 1500, + timeout: 1500 }); } }, @@ -402,7 +402,7 @@ $(document).ready( function() { dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 1500, + timeout: 1500 }); } }, @@ -431,7 +431,7 @@ $(document).ready( function() { dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 1500, + timeout: 1500 }); } }); @@ -560,7 +560,7 @@ $(document).ready( function() { dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 1500, + timeout: 1500 }); } else { noty({ @@ -569,7 +569,7 @@ $(document).ready( function() { dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 3500, + timeout: 3500 }); } } @@ -592,7 +592,7 @@ $(document).ready( function() { dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 1500, + timeout: 1500 }); }); }); /* }}} */ @@ -624,7 +624,7 @@ function onAddClipboard(ev) { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 1500, + timeout: 1500 }); } else { noty({ @@ -633,7 +633,7 @@ function onAddClipboard(ev) { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 3500, + timeout: 3500 }); } }, @@ -708,7 +708,7 @@ function onAddClipboard(ev) { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 1500, + timeout: 1500 }); status.statusbar.after($('' + editBtnLabel + '')); if(callback) { @@ -721,7 +721,7 @@ function onAddClipboard(ev) { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 3500, + timeout: 3500 }); } } @@ -806,7 +806,7 @@ function onAddClipboard(ev) { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 5000, + timeout: 5000 }); } } @@ -831,7 +831,7 @@ function onAddClipboard(ev) { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 5000, + timeout: 5000 }); } } @@ -914,7 +914,7 @@ $(document).ready(function() { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 1500, + timeout: 1500 }); } else { noty({ @@ -923,7 +923,7 @@ $(document).ready(function() { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 3500, + timeout: 3500 }); } }, @@ -958,7 +958,7 @@ $(document).ready(function() { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 1500, + timeout: 1500 }); } else { noty({ @@ -967,7 +967,7 @@ $(document).ready(function() { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 3500, + timeout: 3500 }); } }, @@ -1013,7 +1013,7 @@ $(document).ready(function() { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 1500, + timeout: 1500 }); } else { noty({ @@ -1022,7 +1022,7 @@ $(document).ready(function() { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 3500, + timeout: 3500 }); } }, @@ -1043,7 +1043,7 @@ $(document).ready(function() { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 1500, + timeout: 1500 }); } else { noty({ @@ -1052,7 +1052,7 @@ $(document).ready(function() { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 3500, + timeout: 3500 }); } }, @@ -1178,7 +1178,7 @@ $(document).ready(function() { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 1500, + timeout: 1500 }); } else { noty({ @@ -1187,7 +1187,7 @@ $(document).ready(function() { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 3500, + timeout: 3500 }); } }, @@ -1219,7 +1219,7 @@ $(document).ready(function() { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 1500, + timeout: 1500 }); } else { noty({ @@ -1228,7 +1228,7 @@ $(document).ready(function() { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 3500, + timeout: 3500 }); } }, From b2182362d3bc2ddb080d58076da3e3de3d95c67e Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 15 Jan 2021 10:16:10 +0100 Subject: [PATCH 090/276] remove superflous comma --- styles/bootstrap/application.js | 2 +- styles/bootstrap/passwordstrength/jquery.passwordstrength.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/styles/bootstrap/application.js b/styles/bootstrap/application.js index 001767c43..f1a2e1df2 100644 --- a/styles/bootstrap/application.js +++ b/styles/bootstrap/application.js @@ -1258,7 +1258,7 @@ $(document).ready(function() { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: (typeof timeout == 'undefined' ? 1500 : timeout), + timeout: (typeof timeout == 'undefined' ? 1500 : timeout) }); }); diff --git a/styles/bootstrap/passwordstrength/jquery.passwordstrength.js b/styles/bootstrap/passwordstrength/jquery.passwordstrength.js index 6bc670317..1a14118bb 100644 --- a/styles/bootstrap/passwordstrength/jquery.passwordstrength.js +++ b/styles/bootstrap/passwordstrength/jquery.passwordstrength.js @@ -38,7 +38,7 @@ var defaults = { onError: function(data) {}, - onChange: function(data) {}, + onChange: function(data) {} }; var opts = $.extend(defaults, options); From 59c59f136a5f69fcfa4a9e1a1641db295633be8d Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 18 Jan 2021 07:16:21 +0100 Subject: [PATCH 091/276] fix typo in comment --- SeedDMS_Core/Core/inc.ClassDMS.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SeedDMS_Core/Core/inc.ClassDMS.php b/SeedDMS_Core/Core/inc.ClassDMS.php index 9b97f9726..e261466ec 100644 --- a/SeedDMS_Core/Core/inc.ClassDMS.php +++ b/SeedDMS_Core/Core/inc.ClassDMS.php @@ -1089,7 +1089,7 @@ class SeedDMS_Core_DMS { * @param SeedDMS_Core_User $param1 user * @param bool $param2 set to true * if 'ReviewByMe', 'ApproveByMe', 'AppRevByMe', 'ReviseByMe', 'ReceiptByMe' - * shall return even documents І have already taken care of. + * shall return even documents I have already taken care of. * @param string $param3 sort list by this field * @param string $param4 order direction * @return array|bool From 518eecde18dc1e732cc9d17fae933e4dd345f89c Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 18 Jan 2021 08:45:21 +0100 Subject: [PATCH 092/276] fix syntax error --- SeedDMS_Core/package.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index b94adbb23..ce6e2b8c0 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -2157,7 +2157,7 @@ SeedDMS_Core_DMS::filterAccess() properly checks for documents GPL License better error checking in SeedDMS_Core_Document::cancelCheckOut() - + From 3fa952c5cb2236be94197aca0f45d24fe433357b Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Sun, 24 Jan 2021 17:05:13 +0100 Subject: [PATCH 093/276] fix possible csrf attack due to missing form token --- op/op.EditDocument.php | 5 +++++ op/op.EditFolder.php | 5 +++++ views/bootstrap/class.EditDocument.php | 1 + views/bootstrap/class.EditFolder.php | 1 + 4 files changed, 12 insertions(+) diff --git a/op/op.EditDocument.php b/op/op.EditDocument.php index 44e4556a1..f2b7ab6e3 100644 --- a/op/op.EditDocument.php +++ b/op/op.EditDocument.php @@ -32,6 +32,11 @@ include("../inc/inc.Authentication.php"); $tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); $controller = Controller::factory($tmp[1], array('dms'=>$dms, 'user'=>$user)); +/* Check if the form data comes from a trusted request */ +if(!checkFormKey('editdocument')) { + UI::exitError(getMLText("document_title", array("documentname" => 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")); } diff --git a/op/op.EditFolder.php b/op/op.EditFolder.php index ea2c61510..b064e458a 100644 --- a/op/op.EditFolder.php +++ b/op/op.EditFolder.php @@ -32,6 +32,11 @@ include("../inc/inc.Authentication.php"); $tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); $controller = Controller::factory($tmp[1], array('dms'=>$dms, 'user'=>$user)); +/* Check if the form data comes from a trusted request */ +if(!checkFormKey('editfolder')) { + UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_request_token"))),getMLText("invalid_request_token")); +} + if (!isset($_POST["folderid"]) || !is_numeric($_POST["folderid"]) || intval($_POST["folderid"])<1) { UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_folder_id"))),getMLText("invalid_folder_id")); } diff --git a/views/bootstrap/class.EditDocument.php b/views/bootstrap/class.EditDocument.php index c94c1c356..42d492f85 100644 --- a/views/bootstrap/class.EditDocument.php +++ b/views/bootstrap/class.EditDocument.php @@ -90,6 +90,7 @@ $(document).ready( function() { $expdate = ''; ?>
    + formField( diff --git a/views/bootstrap/class.EditFolder.php b/views/bootstrap/class.EditFolder.php index 9cf48d6e5..05370ad49 100644 --- a/views/bootstrap/class.EditFolder.php +++ b/views/bootstrap/class.EditFolder.php @@ -81,6 +81,7 @@ $(document).ready(function() { $this->contentContainerStart(); ?> + Date: Mon, 25 Jan 2021 06:51:37 +0100 Subject: [PATCH 094/276] add note about fix csfr attack --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index 70124ada1..58c6f8153 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -5,6 +5,7 @@ meta data - fix potential clickjacking attack with manipulated email address of a user - loading more items on ViewFolder page obeys sort order +- fix possible csfr attack due to missing form token -------------------------------------------------------------------------------- Changes in version 5.1.21 From 6dbcd3362f25580360f8a3cf381c3cf527b777c5 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 25 Jan 2021 09:00:03 +0100 Subject: [PATCH 095/276] add csrf protection --- op/op.AddEvent.php | 5 +++++ views/bootstrap/class.AddEvent.php | 1 + 2 files changed, 6 insertions(+) diff --git a/op/op.AddEvent.php b/op/op.AddEvent.php index b5ce57a54..84a83da65 100644 --- a/op/op.AddEvent.php +++ b/op/op.AddEvent.php @@ -34,6 +34,11 @@ if ($user->isGuest()) { UI::exitError(getMLText("edit_event"),getMLText("access_denied")); } +/* Check if the form data comes from a trusted request */ +if(!checkFormKey('addevent')) { + UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_request_token"))),getMLText("invalid_request_token")); +} + if (!isset($_POST["from"]) && !(isset($_POST["frommonth"]) && isset($_POST["fromday"]) && isset($_POST["fromyear"])) ) { UI::exitError(getMLText("add_event"),getMLText("error_occured")); } diff --git a/views/bootstrap/class.AddEvent.php b/views/bootstrap/class.AddEvent.php index ec8a62e36..65d32b90e 100644 --- a/views/bootstrap/class.AddEvent.php +++ b/views/bootstrap/class.AddEvent.php @@ -84,6 +84,7 @@ $(document).ready(function() { ?> + formField( From 64152e0d0bbdc7a85e62fe1f4b52423e7ac5398f Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 25 Jan 2021 09:00:28 +0100 Subject: [PATCH 096/276] add csrf protection --- op/op.ChangePassword.php | 5 +++++ views/bootstrap/class.ChangePassword.php | 1 + 2 files changed, 6 insertions(+) diff --git a/op/op.ChangePassword.php b/op/op.ChangePassword.php index d481dd129..f2c9aa5ca 100644 --- a/op/op.ChangePassword.php +++ b/op/op.ChangePassword.php @@ -38,6 +38,11 @@ function _printMessage($heading, $message) { return; } +/* Check if the form data comes from a trusted request */ +if(!checkFormKey('changepassword')) { + UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_request_token"))),getMLText("invalid_request_token")); +} + if (isset($_POST["hash"])) { $hash = $_POST["hash"]; } diff --git a/views/bootstrap/class.ChangePassword.php b/views/bootstrap/class.ChangePassword.php index 92684195e..41e4b4e5b 100644 --- a/views/bootstrap/class.ChangePassword.php +++ b/views/bootstrap/class.ChangePassword.php @@ -51,6 +51,7 @@ document.form1.newpassword.focus(); $this->contentContainerStart(); ?> + "; From c5694c21b422b7ab00fccd8c35c7c54a12fe1090 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 25 Jan 2021 09:07:12 +0100 Subject: [PATCH 097/276] add csrf protection, check if target is equal source folder --- op/op.MoveDocument.php | 70 ++++++++++++++------------ op/op.MoveFolder.php | 12 ++++- views/bootstrap/class.MoveDocument.php | 1 + views/bootstrap/class.MoveFolder.php | 1 + 4 files changed, 52 insertions(+), 32 deletions(-) diff --git a/op/op.MoveDocument.php b/op/op.MoveDocument.php index 54a93683f..d62e349d2 100644 --- a/op/op.MoveDocument.php +++ b/op/op.MoveDocument.php @@ -20,6 +20,7 @@ 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"); @@ -27,6 +28,11 @@ include("../inc/inc.DBInit.php"); include("../inc/inc.ClassUI.php"); include("../inc/inc.Authentication.php"); +/* Check if the form data comes from a trusted request */ +if(!checkFormKey('movedocument', 'GET')) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_request_token"))),getMLText("invalid_request_token")); +} + 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")); } @@ -62,46 +68,48 @@ if($document->isLocked()) { } } +if ($targetid == $oldFolder->getID()) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("target_equals_source_folder")); +} + /* Check if name already exists in the folder */ if(!$settings->_enableDuplicateDocNames) { if($targetFolder->hasDocumentByName($document->getName())) { - UI::exitError(getMLText("folder_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("document_duplicate_name")); + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("document_duplicate_name")); } } -if ($targetid != $oldFolder->getID()) { - if ($document->setFolder($targetFolder)) { - // Send notification to subscribers. - if($notifier) { - $nl1 = $oldFolder->getNotifyList(); - $nl2 = $document->getNotifyList(); - $nl3 = $targetFolder->getNotifyList(); - $nl = array( - 'users'=>array_unique(array_merge($nl1['users'], $nl2['users'], $nl3['users']), SORT_REGULAR), - 'groups'=>array_unique(array_merge($nl1['groups'], $nl2['groups'], $nl3['groups']), SORT_REGULAR) - ); - $subject = "document_moved_email_subject"; - $message = "document_moved_email_body"; - $params = array(); - $params['name'] = $document->getName(); - $params['old_folder_path'] = $oldFolder->getFolderPathPlain(); - $params['new_folder_path'] = $targetFolder->getFolderPathPlain(); - $params['username'] = $user->getFullName(); - $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); - $params['sitename'] = $settings->_siteName; - $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $nl["users"], $subject, $message, $params); - foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); - } - // if user is not owner send notification to owner +if ($document->setFolder($targetFolder)) { + // Send notification to subscribers. + if($notifier) { + $nl1 = $oldFolder->getNotifyList(); + $nl2 = $document->getNotifyList(); + $nl3 = $targetFolder->getNotifyList(); + $nl = array( + 'users'=>array_unique(array_merge($nl1['users'], $nl2['users'], $nl3['users']), SORT_REGULAR), + 'groups'=>array_unique(array_merge($nl1['groups'], $nl2['groups'], $nl3['groups']), SORT_REGULAR) + ); + $subject = "document_moved_email_subject"; + $message = "document_moved_email_body"; + $params = array(); + $params['name'] = $document->getName(); + $params['old_folder_path'] = $oldFolder->getFolderPathPlain(); + $params['new_folder_path'] = $targetFolder->getFolderPathPlain(); + $params['username'] = $user->getFullName(); + $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); + $params['sitename'] = $settings->_siteName; + $params['http_root'] = $settings->_httpRoot; + $notifier->toList($user, $nl["users"], $subject, $message, $params); + foreach ($nl["groups"] as $grp) { + $notifier->toGroup($user, $grp, $subject, $message, $params); + } + // if user is not owner send notification to owner // if ($user->getID() != $document->getOwner()->getID()) // $notifier->toIndividual($user, $document->getOwner(), $subject, $message, $params); - } - - } else { - UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured")); } + +} else { + UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured")); } add_log_line(); diff --git a/op/op.MoveFolder.php b/op/op.MoveFolder.php index 84090c704..31c77a6c8 100644 --- a/op/op.MoveFolder.php +++ b/op/op.MoveFolder.php @@ -20,6 +20,7 @@ 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"); @@ -27,6 +28,11 @@ include("../inc/inc.DBInit.php"); include("../inc/inc.ClassUI.php"); include("../inc/inc.Authentication.php"); +/* Check if the form data comes from a trusted request */ +if(!checkFormKey('movefolder', 'GET')) { + UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_request_token"))),getMLText("invalid_request_token")); +} + if (!isset($_GET["folderid"]) || !is_numeric($_GET["folderid"]) || intval($_GET["folderid"])<1) { UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_folder_id"))),getMLText("invalid_folder_id")); } @@ -52,6 +58,11 @@ if (!is_object($targetFolder)) { UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_folder_id"))),getMLText("invalid_folder_id")); } +$oldFolder = $folder->getParent(); +if ($targetid == $oldFolder->getID()) { + UI::exitError(getMLText("folder_title", array("foldername" => htmlspecialchars($folder->getName()))),getMLText("target_equals_source_folder")); +} + if($folder->isSubFolder($targetFolder)) { UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),getMLText("invalid_target_folder")); } @@ -67,7 +78,6 @@ if(!$settings->_enableDuplicateSubFolderNames) { } } -$oldFolder = $folder->getParent(); if ($folder->setParent($targetFolder)) { // Send notification to subscribers. if($notifier) { diff --git a/views/bootstrap/class.MoveDocument.php b/views/bootstrap/class.MoveDocument.php index 8862db301..66502bf23 100644 --- a/views/bootstrap/class.MoveDocument.php +++ b/views/bootstrap/class.MoveDocument.php @@ -52,6 +52,7 @@ class SeedDMS_View_MoveDocument extends SeedDMS_Bootstrap_Style { $this->contentContainerStart('warning'); ?> + formField(getMLText("choose_target_folder"), $this->getFolderChooserHtml("form1", M_READWRITE, -1, $target)); diff --git a/views/bootstrap/class.MoveFolder.php b/views/bootstrap/class.MoveFolder.php index f9091fe31..f990ae3a8 100644 --- a/views/bootstrap/class.MoveFolder.php +++ b/views/bootstrap/class.MoveFolder.php @@ -52,6 +52,7 @@ class SeedDMS_View_MoveFolder extends SeedDMS_Bootstrap_Style { ?> + Date: Mon, 25 Jan 2021 09:07:49 +0100 Subject: [PATCH 098/276] add csrf protection --- op/op.OverrideContentStatus.php | 5 +++++ views/bootstrap/class.OverrideContentStatus.php | 1 + 2 files changed, 6 insertions(+) diff --git a/op/op.OverrideContentStatus.php b/op/op.OverrideContentStatus.php index 6f8dba701..8b79d1c0f 100644 --- a/op/op.OverrideContentStatus.php +++ b/op/op.OverrideContentStatus.php @@ -28,6 +28,11 @@ include("../inc/inc.DBInit.php"); include("../inc/inc.ClassUI.php"); include("../inc/inc.Authentication.php"); +/* Check if the form data comes from a trusted request */ +if(!checkFormKey('overridecontentstatus')) { + UI::exitError(getMLText("document_title", array("documentname" => 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")); } diff --git a/views/bootstrap/class.OverrideContentStatus.php b/views/bootstrap/class.OverrideContentStatus.php index 133148e82..d4b32fd33 100644 --- a/views/bootstrap/class.OverrideContentStatus.php +++ b/views/bootstrap/class.OverrideContentStatus.php @@ -85,6 +85,7 @@ $(document).ready(function() { // Display the Review form. ?> + Date: Mon, 25 Jan 2021 09:08:12 +0100 Subject: [PATCH 099/276] add csrf protection --- op/op.Settings.php | 5 +++++ views/bootstrap/class.Settings.php | 1 + 2 files changed, 6 insertions(+) diff --git a/op/op.Settings.php b/op/op.Settings.php index 8b3772e19..ca550b1e0 100644 --- a/op/op.Settings.php +++ b/op/op.Settings.php @@ -44,6 +44,11 @@ if (!$user->isAdmin()) { UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); } +/* Check if the form data comes from a trusted request */ +if(!checkFormKey('savesettings')) { + UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_request_token"))),getMLText("invalid_request_token")); +} + if (isset($_POST["action"])) $action=$_POST["action"]; else if (isset($_GET["action"])) $action=$_GET["action"]; else $action=NULL; diff --git a/views/bootstrap/class.Settings.php b/views/bootstrap/class.Settings.php index 43928b1ed..8187e7c3f 100644 --- a/views/bootstrap/class.Settings.php +++ b/views/bootstrap/class.Settings.php @@ -254,6 +254,7 @@ class SeedDMS_View_Settings extends SeedDMS_Bootstrap_Style { ?> + Date: Mon, 25 Jan 2021 09:08:40 +0100 Subject: [PATCH 100/276] add csrf protection --- op/op.EditUserData.php | 5 +++++ views/bootstrap/class.EditUserData.php | 1 + 2 files changed, 6 insertions(+) diff --git a/op/op.EditUserData.php b/op/op.EditUserData.php index 08385c97b..e72028156 100644 --- a/op/op.EditUserData.php +++ b/op/op.EditUserData.php @@ -37,6 +37,11 @@ if (!$user->isAdmin() && ($settings->_disableSelfEdit)) { UI::exitError(getMLText("edit_user_details"),getMLText("access_denied")); } +/* Check if the form data comes from a trusted request */ +if(!checkFormKey('edituserdata')) { + UI::exitError(getMLText("edit_user_details"),getMLText("invalid_request_token")); +} + $fullname = $_POST["fullname"]; $email = $_POST["email"]; $comment = $_POST["comment"]; diff --git a/views/bootstrap/class.EditUserData.php b/views/bootstrap/class.EditUserData.php index f33ab90e6..fe145d8bf 100644 --- a/views/bootstrap/class.EditUserData.php +++ b/views/bootstrap/class.EditUserData.php @@ -103,6 +103,7 @@ $(document).ready( function() { $this->contentContainerStart(); ?> + formField( getMLText("current_password"), From b5d769fc1c18a090a1992ae4b8e9abc9b170c85d Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 25 Jan 2021 09:09:02 +0100 Subject: [PATCH 101/276] remove old table structur in form, add csrf protection --- views/bootstrap/class.ForcePasswordChange.php | 61 +++++++++++-------- 1 file changed, 36 insertions(+), 25 deletions(-) diff --git a/views/bootstrap/class.ForcePasswordChange.php b/views/bootstrap/class.ForcePasswordChange.php index 06553cf4e..02ef8f122 100644 --- a/views/bootstrap/class.ForcePasswordChange.php +++ b/views/bootstrap/class.ForcePasswordChange.php @@ -77,31 +77,42 @@ $(document).ready( function() { echo "
    ".getMLText('password_expiration_text')."
    "; $this->contentContainerStart(); ?> - - - - - - - - - - - - - - - - - - - - - - -
    :
    :
    : -
    -
    :
    ">
    + + +formField( + getMLText("current_password"), + array( + 'element'=>'input', + 'type'=>'password', + 'id'=>'currentpwd', + 'name'=>'currentpwd', + 'autocomplete'=>'off', + 'required'=>true + ) + ); + $this->formField( + getMLText("new_password"), + '' + ); + if($passwordstrength) { + $this->formField( + getMLText("password_strength"), + '
    ' + ); + } + $this->formField( + getMLText("confirm_pwd"), + array( + 'element'=>'input', + 'type'=>'password', + 'id'=>'pwdconf', + 'name'=>'pwdconf', + 'autocomplete'=>'off', + ) + ); + $this->formSubmit(" ".getMLText('submit_password')); +?> From dc3cd2e1de46e16978936de01a73707b58783dbe Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 25 Jan 2021 10:00:20 +0100 Subject: [PATCH 102/276] add csrf protection --- op/op.SetExpires.php | 5 +++++ views/bootstrap/class.SetExpires.php | 1 + 2 files changed, 6 insertions(+) diff --git a/op/op.SetExpires.php b/op/op.SetExpires.php index 8dc626487..5efd3eee6 100644 --- a/op/op.SetExpires.php +++ b/op/op.SetExpires.php @@ -28,6 +28,11 @@ include("../inc/inc.DBInit.php"); include("../inc/inc.ClassUI.php"); include("../inc/inc.Authentication.php"); +/* Check if the form data comes from a trusted request */ +if(!checkFormKey('setexpires')) { + UI::exitError(getMLText("document_title", array("documentname" => 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")); } diff --git a/views/bootstrap/class.SetExpires.php b/views/bootstrap/class.SetExpires.php index d560e1d93..3b9e28b37 100644 --- a/views/bootstrap/class.SetExpires.php +++ b/views/bootstrap/class.SetExpires.php @@ -66,6 +66,7 @@ $(document).ready( function() { + Date: Mon, 25 Jan 2021 10:04:45 +0100 Subject: [PATCH 103/276] add csrf protection --- op/op.AddDocumentLink.php | 5 +++++ views/bootstrap/class.ViewDocument.php | 1 + 2 files changed, 6 insertions(+) diff --git a/op/op.AddDocumentLink.php b/op/op.AddDocumentLink.php index 3bd4cb7e3..58f059c60 100644 --- a/op/op.AddDocumentLink.php +++ b/op/op.AddDocumentLink.php @@ -28,6 +28,11 @@ include("../inc/inc.DBInit.php"); include("../inc/inc.ClassUI.php"); include("../inc/inc.Authentication.php"); +/* Check if the form data comes from a trusted request */ +if(!checkFormKey('adddocumentlink', 'GET')) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_request_token"))),getMLText("invalid_request_token")); +} + 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/views/bootstrap/class.ViewDocument.php b/views/bootstrap/class.ViewDocument.php index a5c290279..6e1eadb11 100644 --- a/views/bootstrap/class.ViewDocument.php +++ b/views/bootstrap/class.ViewDocument.php @@ -1467,6 +1467,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style {
    + formField(getMLText("add_document_link"), $this->getDocumentChooserHtml("form1")); ?> getAccessMode($user) >= M_READWRITE) { From 6ca613696edf0a40f6df2df4f5e0995a8efac186 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 25 Jan 2021 10:06:58 +0100 Subject: [PATCH 104/276] fix typos in changes for 5.1.22 --- CHANGELOG | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 58c6f8153..412515ed4 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -5,7 +5,7 @@ meta data - fix potential clickjacking attack with manipulated email address of a user - loading more items on ViewFolder page obeys sort order -- fix possible csfr attack due to missing form token +- fix possible csrf attacks due to missing form token -------------------------------------------------------------------------------- Changes in version 5.1.21 From 4b91c390c3dfacdeaa9254be18597bea4182dc76 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 25 Jan 2021 10:07:18 +0100 Subject: [PATCH 105/276] add button for setting access rights in list of folders/documents --- views/bootstrap/class.Bootstrap.php | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index 1083a1592..c327a9f59 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -2294,6 +2294,21 @@ $(function() { return ''; } /* }}} */ + function printAccessButton($object, $return=false) { /* {{{ */ + $content = ''; + $objid = $object->getId(); + if($object->isType('document')) { + $content .= ''; + } elseif($object->isType('folder')) { + $content .= ''; + } + if($return) + return $content; + else + echo $content; + return ''; + } /* }}} */ + /** * Output left-arrow with link which takes over a number of ids into * a select box. @@ -2718,6 +2733,9 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) if($document->getAccessMode($user) >= M_READWRITE) { $content .= $this->printLockButton($document, 'splash_document_locked', 'splash_document_unlocked', true); } + if($document->getAccessMode($user) >= M_READWRITE) { + $content .= $this->printAccessButton($document, true); + } if($enableClipboard) { $content .= ''; } @@ -2847,6 +2865,9 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) } else { $content .= ''; } + if($subFolderAccessMode >= M_READWRITE) { + $content .= $this->printAccessButton($subFolder, true); + } if($enableClipboard) { $content .= ''; } From 363fdf7a1a5e324702848d619a57b214595c2257 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 26 Jan 2021 12:03:34 +0100 Subject: [PATCH 106/276] list docs and folder that fail the general object check --- views/bootstrap/class.ObjectCheck.php | 48 +++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/views/bootstrap/class.ObjectCheck.php b/views/bootstrap/class.ObjectCheck.php index 8078024e4..83972bb73 100644 --- a/views/bootstrap/class.ObjectCheck.php +++ b/views/bootstrap/class.ObjectCheck.php @@ -91,9 +91,16 @@ class SeedDMS_View_ObjectCheck extends SeedDMS_Bootstrap_Style { $folder = $this->params['folder']; $repair = $this->params['repair']; $objects = $this->params['repairobjects']; + $cachedir = $this->params['cachedir']; + $previewwidth = $this->params['previewWidthList']; + $previewconverters = $this->params['previewConverters']; + $timeout = $this->params['timeout']; $this->contentHeading(getMLText("objectcheck")); + $previewer = new SeedDMS_Preview_Previewer($cachedir, $previewwidth, $timeout); + $previewer->setConverters($previewconverters); + if($objects) { if($repair) { echo "
    ".getMLText('repairing_objects')."
    "; @@ -102,15 +109,52 @@ class SeedDMS_View_ObjectCheck extends SeedDMS_Bootstrap_Style { print "\n\n"; print "\n"; print "".getMLText("name")."\n"; - print "".getMLText("owner")."\n"; + print "".getMLText("status")."\n"; + print "".getMLText("action")."\n"; print "".getMLText("error")."\n"; print "\n"; print "\n\n\n"; + foreach($objects as $object) { + if($object['object']->isType('document')) { + $document = $object['object']; + if($document->getAccessMode($user) >= M_READ && $document->getLatestContent()) { + $txt = $this->callHook('documentListItem', $document, $previewer, false); + if(is_string($txt)) + echo $txt; + else + echo $this->documentListRow($document, $previewer, false); + } + } elseif($object['object']->isType('documentcontent')) { + $document = $object['object']->getDocument(); + if($document->getAccessMode($user) >= M_READ && $document->getLatestContent()) { + echo $this->documentListRowStart($document); + $txt = $this->callHook('documentListItem', $document, $previewer, true, $object['object']->getVersion()); + if(is_string($txt)) + echo $txt; + else + echo $this->documentListRow($document, $previewer, true, $object['object']->getVersion()); + echo "".$object['msg'].""; + echo $this->documentListRowEnd($document); + } + } elseif($object['object']->isType('folder')) { + $folder = $object['object']; + if($folder->getAccessMode($user) >= M_READ) { + echo $this->folderListRowStart($folder); + $txt = $this->callHook('folderListItem', $folder, true); + if(is_string($txt)) + echo $txt; + else + echo $this->folderListRow($folder, true); + echo "".$object['msg'].""; + echo $this->folderListRowEnd($folder); + } + } + } $this->needsrepair = false; print "\n"; if($this->needsrepair && $repair == 0) { - echo '

    '.getMLText('do_object_repair').'

    '; + echo '

    '.getMLText('do_object_repair').'

    '; } } } /* }}} */ From 8a2224b669275dd02745f73e65533e451540b9d9 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 26 Jan 2021 13:30:15 +0100 Subject: [PATCH 107/276] check checksum of document version --- CHANGELOG | 2 ++ views/bootstrap/class.ViewDocument.php | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 412515ed4..277d42749 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -6,6 +6,8 @@ - fix potential clickjacking attack with manipulated email address of a user - loading more items on ViewFolder page obeys sort order - fix possible csrf attacks due to missing form token +- show an error msg on the documents detail page if the checksum of version + mismatch -------------------------------------------------------------------------------- Changes in version 5.1.21 diff --git a/views/bootstrap/class.ViewDocument.php b/views/bootstrap/class.ViewDocument.php index 6e1eadb11..822f55ad8 100644 --- a/views/bootstrap/class.ViewDocument.php +++ b/views/bootstrap/class.ViewDocument.php @@ -588,6 +588,11 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { exit; } + $checksum = SeedDMS_Core_File::checksum($dms->contentDir, $latestContent->getPath()); + if($checksum != $latestContent->getChecksum()) { + $this->errorMsg(getMLText('wrong_checksum')); + } + $txt = $this->callHook('preLatestVersionTab', $latestContent); if(is_string($txt)) echo $txt; From a7286be63ad7070448db994fdb5912f3229fc3ae Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 26 Jan 2021 15:42:45 +0100 Subject: [PATCH 108/276] add a new task for checking the checksum of all versions --- inc/inc.Tasks.php | 74 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 72 insertions(+), 2 deletions(-) diff --git a/inc/inc.Tasks.php b/inc/inc.Tasks.php index c503eebcb..cc4a06abf 100644 --- a/inc/inc.Tasks.php +++ b/inc/inc.Tasks.php @@ -23,7 +23,7 @@ class SeedDMS_ExpiredDocumentsTask extends SeedDMS_SchedulerTaskBase { /* {{{ */ $taskparams = $task->getParameter(); $docs = $dms->getDocumentsExpired(intval($taskparams['days'])); foreach($docs as $doc) { - echo $doc->getName()."\n"; + echo $doc->getName().PHP_EOL; } return true; } @@ -63,7 +63,7 @@ class SeedDMS_Task_Indexer_Process_Folder { /* {{{ */ $documents = $folder->getDocuments(); if($documents) { $lucenesearch = $this->fulltextservice->Search(); - echo $folder->getFolderPathPlain()."\n"; + echo $folder->getFolderPathPlain().PHP_EOL; foreach($documents as $document) { echo $document->getId().":".$document->getName()." "; /* If the document wasn't indexed before then just add it */ @@ -181,5 +181,75 @@ class SeedDMS_IndexingDocumentsTask extends SeedDMS_SchedulerTaskBase { /* {{{ * } } /* }}} */ +/** + * Class for processing a single folder + * + * SeedDMS_Task_CheckSum_Process_Folder::process() is used as a callable when + * iterating over all folders recursively. + */ +class SeedDMS_Task_CheckSum_Process_Folder { /* {{{ */ + public function __construct() { /* {{{ */ + } /* }}} */ + + public function process($folder) { /* {{{ */ + $dms = $folder->getDMS(); + $documents = $folder->getDocuments(); + if($documents) { + foreach($documents as $document) { + $versions = $document->getContent(); + foreach($versions as $version) { + if(file_exists($dms->contentDir.$version->getPath())) { + $checksum = SeedDMS_Core_File::checksum($dms->contentDir.$version->getPath()); + if($checksum != $version->getChecksum()) { + echo $document->getId().':'.$version->getVersion().' wrong checksum'.PHP_EOL; + } + } else { + echo $document->getId().':'.$version->getVersion().' missing content'.PHP_EOL; + } + } + } + } + } /* }}} */ +} /* }}} */ + +/** + * Class containing methods for running a scheduled task + * + * @author Uwe Steinmann + * @package SeedDMS + * @subpackage core + */ +class SeedDMS_CheckSumTask extends SeedDMS_SchedulerTaskBase { /* {{{ */ + + /** + * Run the task + * + * @param $task task to be executed + * @param $dms dms + * @return boolean true if task was executed succesfully, otherwise false + */ + public function execute($task) { + $dms = $this->dms; + $taskparams = $task->getParameter(); + $folder = $dms->getRootFolder(); + + $folderprocess = new SeedDMS_Task_CheckSum_Process_Folder(); + $tree = new SeedDMS_FolderTree($folder, array($folderprocess, 'process')); + call_user_func(array($folderprocess, 'process'), $folder); + + return true; + } + + public function getDescription() { + return 'Check all documents for a propper checksum'; + } + + public function getAdditionalParams() { + return array( + ); + } +} /* }}} */ + $GLOBALS['SEEDDMS_SCHEDULER']['tasks']['core']['expireddocs'] = 'SeedDMS_ExpiredDocumentsTask'; $GLOBALS['SEEDDMS_SCHEDULER']['tasks']['core']['indexingdocs'] = 'SeedDMS_IndexingDocumentsTask'; +$GLOBALS['SEEDDMS_SCHEDULER']['tasks']['core']['checksum'] = 'SeedDMS_CheckSumTask'; From d6e652ec45ccb9c766edec791f9e35ac533fbd5a Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 26 Jan 2021 15:44:02 +0100 Subject: [PATCH 109/276] add changeds for 6.0.15 --- CHANGELOG | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 45ad1142e..096b0785e 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,8 @@ -------------------------------------------------------------------------------- Changes in version 6.0.15 -------------------------------------------------------------------------------- +- merge changes up to 5.1.22 +- add a new task for checking the checksum of all document versions -------------------------------------------------------------------------------- Changes in version 6.0.14 From 2d4c7b7581d26c621389451ae5fe88faba31961e Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 26 Jan 2021 18:06:17 +0100 Subject: [PATCH 110/276] fix calculation of checksum --- views/bootstrap/class.ViewDocument.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/bootstrap/class.ViewDocument.php b/views/bootstrap/class.ViewDocument.php index cb46c7684..5a585d6f3 100644 --- a/views/bootstrap/class.ViewDocument.php +++ b/views/bootstrap/class.ViewDocument.php @@ -621,7 +621,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { exit; } - $checksum = SeedDMS_Core_File::checksum($dms->contentDir, $latestContent->getPath()); + $checksum = SeedDMS_Core_File::checksum($dms->contentDir.$latestContent->getPath()); if($checksum != $latestContent->getChecksum()) { $this->errorMsg(getMLText('wrong_checksum')); } From 072b1d2eb9fbf3ea42e898f05d2d4a5edfc7768b Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 27 Jan 2021 09:54:46 +0100 Subject: [PATCH 111/276] check if user creating the version is currently editing --- views/bootstrap/class.EditOnline.php | 40 ++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/views/bootstrap/class.EditOnline.php b/views/bootstrap/class.EditOnline.php index 029604fb6..f366e9131 100644 --- a/views/bootstrap/class.EditOnline.php +++ b/views/bootstrap/class.EditOnline.php @@ -40,8 +40,37 @@ class SeedDMS_View_EditOnline extends SeedDMS_Bootstrap_Style { $document = $this->params['document']; header('Content-Type: application/javascript; charset=UTF-8'); ?> +mySeedSettings = { + nameSpace: 'markdown', // Useful to prevent multi-instances CSS conflict + previewParserPath: '~/sets/markdown/preview.php', + onShiftEnter: {keepDefault:false, openWith:'\n\n'}, + markupSet: [ + {name:'First Level Heading', key:"1", placeHolder:'Your title here...', closeWith:function(markItUp) { return miu.markdownTitle(markItUp, '=') } }, + {name:'Second Level Heading', key:"2", placeHolder:'Your title here...', closeWith:function(markItUp) { return miu.markdownTitle(markItUp, '-') } }, + {name:'Heading 3', key:"3", openWith:'### ', placeHolder:'Your title here...' }, + {name:'Heading 4', key:"4", openWith:'#### ', placeHolder:'Your title here...' }, + {name:'Heading 5', key:"5", openWith:'##### ', placeHolder:'Your title here...' }, + {name:'Heading 6', key:"6", openWith:'###### ', placeHolder:'Your title here...' }, + {separator:'---------------' }, + {name:'Bold', key:"B", openWith:'**', closeWith:'**'}, + {name:'Italic', key:"I", openWith:'_', closeWith:'_'}, + {separator:'---------------' }, + {name:'Bulleted List', openWith:'- ' }, + {name:'Numeric List', openWith:function(markItUp) { + return markItUp.line+'. '; + }}, + {separator:'---------------' }, + {name:'Picture', key:"P", replaceWith:'![[![Alternative text]!]]([![Url:!:http://]!] "[![Title]!]")'}, + {name:'Link', key:"L", openWith:'[', closeWith:']([![Url:!:http://]!] "[![Title]!]")', placeHolder:'Your text to link here...' }, + {separator:'---------------'}, + {name:'Quotes', openWith:'> '}, + {name:'Code Block / Code', openWith:'(!(\t|!|`)!)', closeWith:'(!(`)!)'}, +// {separator:'---------------'}, +// {name:'Preview', call:'preview', className:"preview"} + ] +} $(document).ready(function() { - $('#markdown').markItUp(mySettings); + $('#markdown').markItUp(mySeedSettings); $('#update').click(function(event) { event.preventDefault(); @@ -116,13 +145,20 @@ $(document).ready(function() { warningMsg(getMLText('edit_online_warning')); + if($user->getId() == $luser->getId()) { + echo $this->warningMsg(getMLText('edit_online_warning')); ?> +errorMsg(getMLText('edit_online_not_allowed')); + } +?> columnEnd(); From d5629361da34f6a7e2c72d3cd7607d3c1acd77f6 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 27 Jan 2021 09:55:11 +0100 Subject: [PATCH 112/276] fixed wrong parameter description --- SeedDMS_Core/Core/inc.ClassDocument.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SeedDMS_Core/Core/inc.ClassDocument.php b/SeedDMS_Core/Core/inc.ClassDocument.php index 90a490921..fbab9ca44 100644 --- a/SeedDMS_Core/Core/inc.ClassDocument.php +++ b/SeedDMS_Core/Core/inc.ClassDocument.php @@ -1665,7 +1665,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ * @param string $orgFileName original file name * @param string $fileType * @param string $mimeType MimeType of the content - * @param integer $version version number of content or 0 if next higher version shall be used. + * @param integer $version version number of content or 0 if latest version shall be replaced. * @return bool/array false in case of an error or a result set */ function replaceContent($version, $user, $tmpFile, $orgFileName, $fileType, $mimeType) { /* {{{ */ From 9862eb5bf6037ece5ad20740fc91df84d9160afa Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 27 Jan 2021 16:27:24 +0100 Subject: [PATCH 113/276] fix calculation of checksum --- views/bootstrap/class.ViewDocument.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/bootstrap/class.ViewDocument.php b/views/bootstrap/class.ViewDocument.php index 822f55ad8..42f785d80 100644 --- a/views/bootstrap/class.ViewDocument.php +++ b/views/bootstrap/class.ViewDocument.php @@ -588,7 +588,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { exit; } - $checksum = SeedDMS_Core_File::checksum($dms->contentDir, $latestContent->getPath()); + $checksum = SeedDMS_Core_File::checksum($dms->contentDir.$latestContent->getPath()); if($checksum != $latestContent->getChecksum()) { $this->errorMsg(getMLText('wrong_checksum')); } From 52a8f2d26852869e4b3f4fe29437e50ed34f7f10 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 27 Jan 2021 16:27:53 +0100 Subject: [PATCH 114/276] update release date --- SeedDMS_Core/package.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index 297c9bbac..d5a0e96f8 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -12,7 +12,7 @@ uwe@steinmann.cx yes - 2021-01-04 + 2021-01-27 5.1.22 From 788b5b0014d1e6032c46e88045d9219cc9957abd Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 28 Jan 2021 12:01:59 +0100 Subject: [PATCH 115/276] escape email address --- views/bootstrap/class.RoleMgr.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/bootstrap/class.RoleMgr.php b/views/bootstrap/class.RoleMgr.php index 1072f4929..d5236366c 100644 --- a/views/bootstrap/class.RoleMgr.php +++ b/views/bootstrap/class.RoleMgr.php @@ -85,7 +85,7 @@ $(document).ready( function() { echo ""; echo ""; echo htmlspecialchars($currUser->getFullName())." (".htmlspecialchars($currUser->getLogin()).")"; - echo "
    getEmail()."\">".htmlspecialchars($currUser->getEmail()).""; + echo "
    getEmail())."\">".htmlspecialchars($currUser->getEmail()).""; if($currUser->getComment()) echo "
    ".htmlspecialchars($currUser->getComment()).""; echo ""; From 8129221b574430fd890d280761f2491de675734a Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 28 Jan 2021 12:02:22 +0100 Subject: [PATCH 116/276] escape email address, use translated phrase --- views/bootstrap/class.Acl.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/views/bootstrap/class.Acl.php b/views/bootstrap/class.Acl.php index 70e830b27..e26379ac6 100644 --- a/views/bootstrap/class.Acl.php +++ b/views/bootstrap/class.Acl.php @@ -144,7 +144,7 @@ $(document).ready( function() { echo ""; echo ""; echo htmlspecialchars($currUser->getFullName())." (".htmlspecialchars($currUser->getLogin()).")"; - echo "
    getEmail()."\">".htmlspecialchars($currUser->getEmail()).""; + echo "
    getEmail())."\">".htmlspecialchars($currUser->getEmail()).""; if($currUser->getComment()) echo "
    ".htmlspecialchars($currUser->getComment()).""; echo ""; @@ -281,7 +281,7 @@ $(document).ready( function() { echo ""; } else { ?> -
    Berechtigungen werden geladen ...
    +
    Date: Thu, 28 Jan 2021 21:05:52 +0100 Subject: [PATCH 117/276] add method getDMS() to class SeedDMS_Core_User and SeedDMS_Core_Group --- SeedDMS_Core/Core/inc.ClassGroup.php | 7 +++++++ SeedDMS_Core/Core/inc.ClassUser.php | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/SeedDMS_Core/Core/inc.ClassGroup.php b/SeedDMS_Core/Core/inc.ClassGroup.php index e024b6cc1..4e7b9ba47 100644 --- a/SeedDMS_Core/Core/inc.ClassGroup.php +++ b/SeedDMS_Core/Core/inc.ClassGroup.php @@ -131,6 +131,13 @@ class SeedDMS_Core_Group { /* {{{ */ $this->_dms = $dms; } /* }}} */ + /** + * @return SeedDMS_Core_DMS $dms + */ + function getDMS() { + return $this->_dms; + } + /** * @return int */ diff --git a/SeedDMS_Core/Core/inc.ClassUser.php b/SeedDMS_Core/Core/inc.ClassUser.php index cdf46ebe6..495b4b310 100644 --- a/SeedDMS_Core/Core/inc.ClassUser.php +++ b/SeedDMS_Core/Core/inc.ClassUser.php @@ -257,6 +257,13 @@ class SeedDMS_Core_User { /* {{{ */ $this->_dms = $dms; } + /** + * @return SeedDMS_Core_DMS $dms + */ + function getDMS() { + return $this->_dms; + } + /** * @return int */ From 4ad9638e33023f5cde3f33cd6cae5533b5c108e6 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 28 Jan 2021 21:07:04 +0100 Subject: [PATCH 118/276] toList() returns error --- inc/inc.ClassEmailNotify.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/inc/inc.ClassEmailNotify.php b/inc/inc.ClassEmailNotify.php index 674043faa..8e4d25742 100644 --- a/inc/inc.ClassEmailNotify.php +++ b/inc/inc.ClassEmailNotify.php @@ -216,10 +216,11 @@ class SeedDMS_EmailNotify extends SeedDMS_Notify { return false; } + $ret = true; foreach ($recipients as $recipient) { - $this->toIndividual($sender, $recipient, $subject, $message, $params); + $ret &= $this->toIndividual($sender, $recipient, $subject, $message, $params); } - return true; + return $ret; } /* }}} */ } From d0c1b1633249caf5363967a772377643e8ea0e38 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 28 Jan 2021 21:08:33 +0100 Subject: [PATCH 119/276] pass logger to constructor, introduce type of receiver --- inc/inc.ClassNotificationService.php | 57 +++++++++++++++++++++++----- 1 file changed, 47 insertions(+), 10 deletions(-) diff --git a/inc/inc.ClassNotificationService.php b/inc/inc.ClassNotificationService.php index e7bea6347..67e92ef53 100644 --- a/inc/inc.ClassNotificationService.php +++ b/inc/inc.ClassNotificationService.php @@ -31,9 +31,23 @@ class SeedDMS_NotificationService { */ protected $errors; - public function __construct() { + /* + * Service for logging + */ + protected $logger; + + /* + * Possible types of receivers + */ + const RECV_ANY = 0; + const RECV_NOTIFICATION = 1; + const RECV_REVIEWER = 2; + const RECV_APPROVER = 3; + + public function __construct($logger = null) { $this->services = array(); $this->errors = array(); + $this->logger = $logger; } public function addService($service, $name='') { @@ -51,14 +65,21 @@ class SeedDMS_NotificationService { return $this->errors; } - public function toIndividual($sender, $recipient, $subject, $message, $params=array()) { + public function toIndividual($sender, $recipient, $subject, $message, $params=array(), $recvtype=0) { $error = true; foreach($this->services as $name => $service) { - if(!is_callable([$service, 'filter']) || $service->filter($sender, $recipient, $subject, $message, $params)) { - if(!$service->toIndividual($sender, $recipient, $subject, $message, $params)) { + if(!is_callable([$service, 'filter']) || $service->filter($sender, $recipient, $subject, $message, $params, $recvtype)) { + if(is_object($recipient) && ($dms = $recipient->getDMS()) && !strcasecmp(get_class($recipient), $dms->getClassname('user')) && !$recipient->isDisabled() && $recipient->getEmail()!="") { + $to = $recipient->getEmail(); + } elseif(is_string($recipient) && trim($recipient) != "") { + $to = $recipient; + } + if(!$service->toIndividual($sender, $recipient, $subject, $message, $params, $recvtype)) { $error = false; $this->errors[$name] = false; + $this->logger->log('Notification service: '.$name.'. Sending mail \''.$subject.'\' to user \''.$to.'\' failed.', PEAR_LOG_ERR); } else { + $this->logger->log('Notification service: '.$name.'. Sending mail \''.$subject.'\' to user \''.$to.'\' successful.', PEAR_LOG_INFO); $this->errors[$name] = true; } } @@ -66,30 +87,46 @@ class SeedDMS_NotificationService { return $error; } - public function toGroup($sender, $groupRecipient, $subject, $message, $params=array()) { + public function toGroup($sender, $groupRecipient, $subject, $message, $params=array(), $recvtype=0) { $error = true; foreach($this->services as $name => $service) { - if(!is_callable([$service, 'filter']) || $service->filter($sender, $groupRecipient, $subject, $message, $params)) { - if(!$service->toGroup($sender, $groupRecipient, $subject, $message, $params)) { + if(!is_callable([$service, 'filter']) || $service->filter($sender, $groupRecipient, $subject, $message, $params, $recvtype)) { + if(is_object($groupRecipient) && ($dms = $recipient->getDMS()) && strcasecmp(get_class($groupRecipient), $dms->getClassname('group'))) { + $to = $groupRecipient->getName(); + } + if(!$service->toGroup($sender, $groupRecipient, $subject, $message, $params, $recvtype)) { $error = false; $this->errors[$name] = false; + $this->logger->log('Notification service: '.$name.'. Sending mail \''.$subject.'\' to group \''.$to.'\' failed.', PEAR_LOG_ERR); } else { $this->errors[$name] = true; + $this->logger->log('Notification service: '.$name.'. Sending mail \''.$subject.'\' to group \''.$to.'\' successful.', PEAR_LOG_INFO); } } } return $error; } - public function toList($sender, $recipients, $subject, $message, $params=array()) { + public function toList($sender, $recipients, $subject, $message, $params=array(), $recvtype=0) { $error = true; foreach($this->services as $name => $service) { - if(!is_callable([$service, 'filter']) || $service->filter($sender, $recipients, $subject, $message, $params)) { - if(!$service->toList($sender, $recipients, $subject, $message, $params)) { + if(!is_callable([$service, 'filter']) || $service->filter($sender, $recipients, $subject, $message, $params, $recvtype)) { + $to = []; + foreach ($recipients as $recipient) { + if(is_object($recipient) && ($dms = $recipient->getDMS()) && !strcasecmp(get_class($recipient), $dms->getClassname('user')) && !$recipient->isDisabled() && $recipient->getEmail()!="") { + $to[] = $recipient->getEmail(); + } elseif(is_string($recipient) && trim($recipient) != "") { + $to[] = $recipient; + } + } + $to = implode($to, ', '); + if(!$service->toList($sender, $recipients, $subject, $message, $params, $recvtype)) { $error = false; $this->errors[$name] = false; + $this->logger->log('Notification service: '.$name.'. Sending mail \''.$subject.'\' to users \''.$to.'\' failed.', PEAR_LOG_ERR); } else { $this->errors[$name] = true; + $this->logger->log('Notification service: '.$name.'. Sending mail \''.$subject.'\' to users \''.$to.'\' successful.', PEAR_LOG_INFO); } } } From fdde3e29c5ff3afd648c9c0a2d5923fe3c1474fb Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 28 Jan 2021 21:09:11 +0100 Subject: [PATCH 120/276] pass logger to Authentication Service --- inc/inc.Authentication.php | 3 ++- webdav/index.php | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/inc/inc.Authentication.php b/inc/inc.Authentication.php index 63b5b9d01..a587338eb 100644 --- a/inc/inc.Authentication.php +++ b/inc/inc.Authentication.php @@ -95,7 +95,8 @@ if($settings->_useHomeAsRootFolder && !$user->isAdmin() && $user->getHomeFolder( $dms->setRootFolderID($user->getHomeFolder()); } -$notifier = new SeedDMS_NotificationService(); +global $logger; +$notifier = new SeedDMS_NotificationService($logger); if(isset($GLOBALS['SEEDDMS_HOOKS']['notification'])) { foreach($GLOBALS['SEEDDMS_HOOKS']['notification'] as $notificationObj) { diff --git a/webdav/index.php b/webdav/index.php index 7c3bac0ed..f7bdea5ac 100644 --- a/webdav/index.php +++ b/webdav/index.php @@ -27,7 +27,7 @@ if($settings->_logFileEnable) { $log = null; } -$notifier = new SeedDMS_NotificationService(); +$notifier = new SeedDMS_NotificationService($log); if(isset($GLOBALS['SEEDDMS_HOOKS']['notification'])) { foreach($GLOBALS['SEEDDMS_HOOKS']['notification'] as $notificationObj) { From e6790f6b2f015069fb2a75c498c639694975e792 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 29 Jan 2021 08:56:01 +0100 Subject: [PATCH 121/276] add comment that toGroup and toList are deprecated --- inc/inc.ClassEmailNotify.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/inc/inc.ClassEmailNotify.php b/inc/inc.ClassEmailNotify.php index 8e4d25742..630697969 100644 --- a/inc/inc.ClassEmailNotify.php +++ b/inc/inc.ClassEmailNotify.php @@ -197,6 +197,11 @@ class SeedDMS_EmailNotify extends SeedDMS_Notify { } } /* }}} */ + /** + * This method is deprecated! + * + * The dispatching is now done in SeedDMS_NotificationService::toGroup() + */ function toGroup($sender, $groupRecipient, $subject, $message, $params=array()) { /* {{{ */ if ((!is_object($sender) && strcasecmp(get_class($sender), $this->_dms->getClassname('user'))) || (!is_object($groupRecipient) || strcasecmp(get_class($groupRecipient), $this->_dms->getClassname('group')))) { @@ -210,6 +215,11 @@ class SeedDMS_EmailNotify extends SeedDMS_Notify { return true; } /* }}} */ + /** + * This method is deprecated! + * + * The dispatching is now done in SeedDMS_NotificationService::toList() + */ function toList($sender, $recipients, $subject, $message, $params=array()) { /* {{{ */ if ((!is_object($sender) && strcasecmp(get_class($sender), $this->_dms->getClassname('user'))) || (!is_array($recipients) && count($recipients)==0)) { From 8e2682dcf0ebc883150fef198ff115192ddf57ee Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 29 Jan 2021 08:57:37 +0100 Subject: [PATCH 122/276] add type of receiver, do not call toList and toGroup anymore --- inc/inc.ClassNotificationService.php | 69 +++++++++++++++------------- 1 file changed, 36 insertions(+), 33 deletions(-) diff --git a/inc/inc.ClassNotificationService.php b/inc/inc.ClassNotificationService.php index 67e92ef53..e4d04b4e4 100644 --- a/inc/inc.ClassNotificationService.php +++ b/inc/inc.ClassNotificationService.php @@ -41,8 +41,10 @@ class SeedDMS_NotificationService { */ const RECV_ANY = 0; const RECV_NOTIFICATION = 1; - const RECV_REVIEWER = 2; - const RECV_APPROVER = 3; + const RECV_OWNER = 2; + const RECV_REVIEWER = 3; + const RECV_APPROVER = 4; + const RECV_WORKFLOW = 5; public function __construct($logger = null) { $this->services = array(); @@ -74,7 +76,7 @@ class SeedDMS_NotificationService { } elseif(is_string($recipient) && trim($recipient) != "") { $to = $recipient; } - if(!$service->toIndividual($sender, $recipient, $subject, $message, $params, $recvtype)) { + if(!$service->toIndividual($sender, $recipient, $subject, $message, $params)) { $error = false; $this->errors[$name] = false; $this->logger->log('Notification service: '.$name.'. Sending mail \''.$subject.'\' to user \''.$to.'\' failed.', PEAR_LOG_ERR); @@ -87,47 +89,48 @@ class SeedDMS_NotificationService { return $error; } + /** + * Send a notification to each user of a group + * + */ public function toGroup($sender, $groupRecipient, $subject, $message, $params=array(), $recvtype=0) { $error = true; foreach($this->services as $name => $service) { - if(!is_callable([$service, 'filter']) || $service->filter($sender, $groupRecipient, $subject, $message, $params, $recvtype)) { - if(is_object($groupRecipient) && ($dms = $recipient->getDMS()) && strcasecmp(get_class($groupRecipient), $dms->getClassname('group'))) { - $to = $groupRecipient->getName(); - } - if(!$service->toGroup($sender, $groupRecipient, $subject, $message, $params, $recvtype)) { - $error = false; - $this->errors[$name] = false; - $this->logger->log('Notification service: '.$name.'. Sending mail \''.$subject.'\' to group \''.$to.'\' failed.', PEAR_LOG_ERR); - } else { - $this->errors[$name] = true; - $this->logger->log('Notification service: '.$name.'. Sending mail \''.$subject.'\' to group \''.$to.'\' successful.', PEAR_LOG_INFO); - } + $ret = true; + foreach ($groupRecipient->getUsers() as $recipient) { + $ret &= $this->toIndividual($sender, $recipient, $subject, $message, $params, $recvtype); + } + $this->errors[$name] = $ret; + if(!$ret) { + $error = false; } } return $error; } + /** + * Send a notification to a list of recipients + * + * The list of recipients may contain both email addresses and users + * + * @param string|object $sender either an email address or a user + * @param array $recipients list of recipients + * @param string $subject key of translatable phrase for the subject + * @param string $message key of translatable phrase for the message body + * @param array $params list of parameters filled into the subject and body + * @param int $recvtype type of receiver + * @return boolean true on success, otherwise false + */ public function toList($sender, $recipients, $subject, $message, $params=array(), $recvtype=0) { $error = true; foreach($this->services as $name => $service) { - if(!is_callable([$service, 'filter']) || $service->filter($sender, $recipients, $subject, $message, $params, $recvtype)) { - $to = []; - foreach ($recipients as $recipient) { - if(is_object($recipient) && ($dms = $recipient->getDMS()) && !strcasecmp(get_class($recipient), $dms->getClassname('user')) && !$recipient->isDisabled() && $recipient->getEmail()!="") { - $to[] = $recipient->getEmail(); - } elseif(is_string($recipient) && trim($recipient) != "") { - $to[] = $recipient; - } - } - $to = implode($to, ', '); - if(!$service->toList($sender, $recipients, $subject, $message, $params, $recvtype)) { - $error = false; - $this->errors[$name] = false; - $this->logger->log('Notification service: '.$name.'. Sending mail \''.$subject.'\' to users \''.$to.'\' failed.', PEAR_LOG_ERR); - } else { - $this->errors[$name] = true; - $this->logger->log('Notification service: '.$name.'. Sending mail \''.$subject.'\' to users \''.$to.'\' successful.', PEAR_LOG_INFO); - } + $ret = true; + foreach ($recipients as $recipient) { + $ret &= $this->toIndividual($sender, $recipients, $subject, $message, $params, $recvtype); + } + $this->errors[$name] = $ret; + if(!$ret) { + $error = false; } } return $error; From 862f8dffb321580271f7b481fb68633b0145a840 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 29 Jan 2021 08:58:21 +0100 Subject: [PATCH 123/276] pass type of notification receiver in each call of notification service --- op/op.AddDocument.php | 16 ++++---- op/op.AddFile.php | 4 +- op/op.AddSubFolder.php | 4 +- op/op.Ajax.php | 24 ++++++------ op/op.ApproveDocument.php | 20 +++++----- op/op.DocumentAccess.php | 18 ++++----- op/op.DocumentNotify.php | 8 ++-- op/op.EditAttributes.php | 8 ++-- op/op.EditComment.php | 4 +- op/op.EditDocument.php | 26 ++++++------- op/op.EditFolder.php | 20 +++++----- op/op.EditOnline.php | 4 +- op/op.FolderAccess.php | 20 +++++----- op/op.FolderNotify.php | 8 ++-- op/op.ManageNotify.php | 6 +-- op/op.MoveClipboard.php | 12 +++--- op/op.MoveDocument.php | 6 +-- op/op.MoveFolder.php | 6 +-- op/op.OverrideContentStatus.php | 6 +-- op/op.RemoveDocument.php | 4 +- op/op.RemoveDocumentFile.php | 4 +- op/op.RemoveFolder.php | 4 +- op/op.RemoveVersion.php | 57 ++++++++++++++++++---------- op/op.RemoveWorkflowFromDocument.php | 4 +- op/op.ReturnFromSubWorkflow.php | 4 +- op/op.ReviewDocument.php | 26 ++++++------- op/op.RewindWorkflow.php | 4 +- op/op.RunSubWorkflow.php | 4 +- op/op.SetReviewersApprovers.php | 16 ++++---- op/op.SetWorkflow.php | 4 +- op/op.TransferDocument.php | 4 +- op/op.TriggerWorkflow.php | 8 ++-- op/op.UpdateDocument.php | 22 +++++------ op/op.UsrMgr.php | 2 +- 34 files changed, 202 insertions(+), 185 deletions(-) diff --git a/op/op.AddDocument.php b/op/op.AddDocument.php index f76224216..7ba864f0c 100644 --- a/op/op.AddDocument.php +++ b/op/op.AddDocument.php @@ -421,9 +421,9 @@ for ($file_num=0;$file_num_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } if($workflow && $settings->_enableNotificationWorkflow) { @@ -442,10 +442,10 @@ for ($file_num=0;$file_numgetNextTransitions($workflow->getInitState()) as $ntransition) { foreach($ntransition->getUsers() as $tuser) { - $notifier->toIndividual($user, $tuser->getUser(), $subject, $message, $params); + $notifier->toIndividual($user, $tuser->getUser(), $subject, $message, $params, SeedDMS_NotificationService::RECV_WORKFLOW); } foreach($ntransition->getGroups() as $tuser) { - $notifier->toGroup($user, $tuser->getGroup(), $subject, $message, $params); + $notifier->toGroup($user, $tuser->getGroup(), $subject, $message, $params, SeedDMS_NotificationService::RECV_WORKFLOW); } } } @@ -466,10 +466,10 @@ for ($file_num=0;$file_num_httpRoot; foreach($reviewers['i'] as $reviewerid) { - $notifier->toIndividual($user, $dms->getUser($reviewerid), $subject, $message, $params); + $notifier->toIndividual($user, $dms->getUser($reviewerid), $subject, $message, $params, SeedDMS_NotificationService::RECV_REVIEWER); } foreach($reviewers['g'] as $reviewergrpid) { - $notifier->toGroup($user, $dms->getGroup($reviewergrpid), $subject, $message, $params); + $notifier->toGroup($user, $dms->getGroup($reviewergrpid), $subject, $message, $params, SeedDMS_NotificationService::RECV_REVIEWER); } } @@ -487,10 +487,10 @@ for ($file_num=0;$file_num_httpRoot; foreach($approvers['i'] as $approverid) { - $notifier->toIndividual($user, $dms->getUser($approverid), $subject, $message, $params); + $notifier->toIndividual($user, $dms->getUser($approverid), $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } foreach($approvers['g'] as $approvergrpid) { - $notifier->toGroup($user, $dms->getGroup($approvergrpid), $subject, $message, $params); + $notifier->toGroup($user, $dms->getGroup($approvergrpid), $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } } } diff --git a/op/op.AddFile.php b/op/op.AddFile.php index 3eb2d566f..5f970afdd 100644 --- a/op/op.AddFile.php +++ b/op/op.AddFile.php @@ -123,9 +123,9 @@ for ($file_num=0;$file_num_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } diff --git a/op/op.AddSubFolder.php b/op/op.AddSubFolder.php index c7fe9f600..a98c9d7ac 100644 --- a/op/op.AddSubFolder.php +++ b/op/op.AddSubFolder.php @@ -139,9 +139,9 @@ if(!$subFolder = $controller->run()) { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$subFolder->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } diff --git a/op/op.Ajax.php b/op/op.Ajax.php index cb70295e9..41c4f499e 100644 --- a/op/op.Ajax.php +++ b/op/op.Ajax.php @@ -473,9 +473,9 @@ switch($command) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$parent->getID(); - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } header('Content-Type: application/json'); @@ -529,9 +529,9 @@ switch($command) { $params['username'] = $user->getFullName(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } @@ -830,9 +830,9 @@ switch($command) { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } if($workflow && $settings->_enableNotificationWorkflow) { @@ -851,10 +851,10 @@ switch($command) { foreach($workflow->getNextTransitions($workflow->getInitState()) as $ntransition) { foreach($ntransition->getUsers() as $tuser) { - $notifier->toIndividual($user, $tuser->getUser(), $subject, $message, $params); + $notifier->toIndividual($user, $tuser->getUser(), $subject, $message, $params, SeedDMS_NotificationService::RECV_WORKFLOW); } foreach($ntransition->getGroups() as $tuser) { - $notifier->toGroup($user, $tuser->getGroup(), $subject, $message, $params); + $notifier->toGroup($user, $tuser->getGroup(), $subject, $message, $params, SeedDMS_NotificationService::RECV_WORKFLOW); } } } @@ -875,10 +875,10 @@ switch($command) { $params['http_root'] = $settings->_httpRoot; foreach($reviewers['i'] as $reviewerid) { - $notifier->toIndividual($user, $dms->getUser($reviewerid), $subject, $message, $params); + $notifier->toIndividual($user, $dms->getUser($reviewerid), $subject, $message, $params, SeedDMS_NotificationService::RECV_REVIEWER); } foreach($reviewers['g'] as $reviewergrpid) { - $notifier->toGroup($user, $dms->getGroup($reviewergrpid), $subject, $message, $params); + $notifier->toGroup($user, $dms->getGroup($reviewergrpid), $subject, $message, $params, $params, SeedDMS_NotificationService::RECV_REVIEWER); } } @@ -896,10 +896,10 @@ switch($command) { $params['http_root'] = $settings->_httpRoot; foreach($approvers['i'] as $approverid) { - $notifier->toIndividual($user, $dms->getUser($approverid), $subject, $message, $params); + $notifier->toIndividual($user, $dms->getUser($approverid), $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } foreach($approvers['g'] as $approvergrpid) { - $notifier->toGroup($user, $dms->getGroup($approvergrpid), $subject, $message, $params); + $notifier->toGroup($user, $dms->getGroup($approvergrpid), $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } } } diff --git a/op/op.ApproveDocument.php b/op/op.ApproveDocument.php index 597573814..a1cad49b7 100644 --- a/op/op.ApproveDocument.php +++ b/op/op.ApproveDocument.php @@ -115,13 +115,13 @@ if ($_POST["approvalType"] == "ind") { $params['http_root'] = $settings->_httpRoot; $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); - $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params); + $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); // Send notification to subscribers. $nl=$document->getNotifyList(); - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } @@ -153,13 +153,13 @@ else if ($_POST["approvalType"] == "grp") { $params['http_root'] = $settings->_httpRoot; $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); - $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params); + $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); // Send notification to subscribers. $nl=$document->getNotifyList(); - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } @@ -188,9 +188,9 @@ if ($_POST["approvalStatus"]==-1){ $params['http_root'] = $settings->_httpRoot; $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } @@ -240,9 +240,9 @@ if ($_POST["approvalStatus"]==-1){ $params['http_root'] = $settings->_httpRoot; $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } diff --git a/op/op.DocumentAccess.php b/op/op.DocumentAccess.php index 76b48018f..af69f0aa0 100644 --- a/op/op.DocumentAccess.php +++ b/op/op.DocumentAccess.php @@ -160,11 +160,11 @@ if ($action == "setowner") { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } -// $notifier->toIndividual($user, $oldowner, $subject, $message, $params); +// $notifier->toIndividual($user, $oldowner, $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } $session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_setowner'))); } @@ -185,9 +185,9 @@ else if ($action == "notinherit") { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } @@ -208,9 +208,9 @@ else if ($action == "inherit") { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } $session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_inherit_access'))); @@ -230,9 +230,9 @@ else if ($action == "setdefault") { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } $session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_set_default_access'))); diff --git a/op/op.DocumentNotify.php b/op/op.DocumentNotify.php index eb546a241..1e5d8ac03 100644 --- a/op/op.DocumentNotify.php +++ b/op/op.DocumentNotify.php @@ -112,10 +112,10 @@ if ($action == "delnotify"){ $params['http_root'] = $settings->_httpRoot; if ($userid > 0) { - $notifier->toIndividual($user, $obj, $subject, $message, $params); + $notifier->toIndividual($user, $obj, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } else { - $notifier->toGroup($user, $obj, $subject, $message, $params); + $notifier->toGroup($user, $obj, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } break; @@ -154,7 +154,7 @@ else if ($action == "addnotify") { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toIndividual($user, $obj, $subject, $message, $params); + $notifier->toIndividual($user, $obj, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } break; @@ -188,7 +188,7 @@ else if ($action == "addnotify") { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toGroup($user, $obj, $subject, $message, $params); + $notifier->toGroup($user, $obj, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } break; } diff --git a/op/op.EditAttributes.php b/op/op.EditAttributes.php index cde0f86e4..95a5740b7 100644 --- a/op/op.EditAttributes.php +++ b/op/op.EditAttributes.php @@ -114,9 +114,9 @@ if($oldattributes) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } @@ -142,9 +142,9 @@ if($newattributes) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } diff --git a/op/op.EditComment.php b/op/op.EditComment.php index 7dec214f7..7da9cc26a 100644 --- a/op/op.EditComment.php +++ b/op/op.EditComment.php @@ -103,9 +103,9 @@ if (($oldcomment = $version->getComment()) != $comment) { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID()."&version=".$version->getVersion(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } diff --git a/op/op.EditDocument.php b/op/op.EditDocument.php index f2b7ab6e3..538d3a050 100644 --- a/op/op.EditDocument.php +++ b/op/op.EditDocument.php @@ -167,11 +167,11 @@ if ($oldname != $name) { // if user is not owner send notification to owner if ($user->getID() != $document->getOwner()->getID() && false === SeedDMS_Core_DMS::inList($document->getOwner(), $notifyList['users'])) { - $notifyList['users'][] = $document->getOwner(); + $notifier->toIndividual($user, $document->getOwner(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } @@ -196,11 +196,11 @@ if ($oldcomment != $comment) { // if user is not owner send notification to owner if ($user->getID() != $document->getOwner()->getID() && false === SeedDMS_Core_DMS::inList($document->getOwner(), $notifyList['users'])) { - $notifyList['users'][] = $document->getOwner(); + $notifier->toIndividual($user, $document->getOwner(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } @@ -223,11 +223,11 @@ if ($expires != $oldexpires) { // if user is not owner send notification to owner if ($user->getID() != $document->getOwner()->getID() && false === SeedDMS_Core_DMS::inList($document->getOwner(), $notifyList['users'])) { - $notifyList['users'][] = $document->getOwner(); + $notifier->toIndividual($user, $document->getOwner(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } @@ -254,9 +254,9 @@ if($oldattributes) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } @@ -281,9 +281,9 @@ if($newattributes) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } diff --git a/op/op.EditFolder.php b/op/op.EditFolder.php index b064e458a..485069bb8 100644 --- a/op/op.EditFolder.php +++ b/op/op.EditFolder.php @@ -112,13 +112,13 @@ if($oldname != $name) { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$folder->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } // if user is not owner send notification to owner // if ($user->getID() != $folder->getOwner()->getID()) -// $notifier->toIndividual($user, $folder->getOwner(), $subject, $message, $params); +// $notifier->toIndividual($user, $folder->getOwner(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } } @@ -138,13 +138,13 @@ if($oldcomment != $comment) { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$folder->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } // if user is not owner send notification to owner // if ($user->getID() != $folder->getOwner()->getID()) -// $notifier->toIndividual($user, $folder->getOwner(), $subject, $message, $params); +// $notifier->toIndividual($user, $folder->getOwner(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } } @@ -168,9 +168,9 @@ if($oldattributes) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } @@ -195,9 +195,9 @@ if($newattributes) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } diff --git a/op/op.EditOnline.php b/op/op.EditOnline.php index c0dc2d401..2ad2327b4 100644 --- a/op/op.EditOnline.php +++ b/op/op.EditOnline.php @@ -78,9 +78,9 @@ if($lc->getChecksum() == SeedDMS_Core_File::checksum($tmpfname)) { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } echo json_encode(array('success'=>true, 'message'=>getMLText('splash_saved_file'))); diff --git a/op/op.FolderAccess.php b/op/op.FolderAccess.php index 6ee5d3e8c..00bb30468 100644 --- a/op/op.FolderAccess.php +++ b/op/op.FolderAccess.php @@ -140,9 +140,9 @@ if ($action == "setowner") { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$folder->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } $session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_setowner'))); @@ -171,9 +171,9 @@ else if ($action == "notinherit") { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$folder->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } $session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_notinherit_access'))); } @@ -194,9 +194,9 @@ else if ($action == "notinherit") { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$folder->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } @@ -233,9 +233,9 @@ else if ($action == "inherit") { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$folder->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } $session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_inherit_access'))); @@ -260,9 +260,9 @@ else if ($action == "setdefault") { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$folder->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } $session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_set_default_access'))); diff --git a/op/op.FolderNotify.php b/op/op.FolderNotify.php index aa9f235b5..c9b8fc48e 100644 --- a/op/op.FolderNotify.php +++ b/op/op.FolderNotify.php @@ -107,10 +107,10 @@ if ($action == "delnotify") { $params['http_root'] = $settings->_httpRoot; if ($userid > 0) { - $notifier->toIndividual($user, $obj, $subject, $message, $params); + $notifier->toIndividual($user, $obj, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } else { - $notifier->toGroup($user, $obj, $subject, $message, $params); + $notifier->toGroup($user, $obj, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } break; @@ -149,7 +149,7 @@ else if ($action == "addnotify") { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toIndividual($user, $obj, $subject, $message, $params); + $notifier->toIndividual($user, $obj, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } break; @@ -184,7 +184,7 @@ else if ($action == "addnotify") { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toGroup($user, $obj, $subject, $message, $params); + $notifier->toGroup($user, $obj, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } break; } diff --git a/op/op.ManageNotify.php b/op/op.ManageNotify.php index 738b67530..25429d86b 100644 --- a/op/op.ManageNotify.php +++ b/op/op.ManageNotify.php @@ -29,7 +29,7 @@ if ($user->isGuest()) { UI::exitError(getMLText("my_account"),getMLText("access_denied")); } -function add_folder_notify($folder,$userid,$recursefolder,$recursedoc) { +function add_folder_notify($folder,$userid,$recursefolder,$recursedoc) { /* {{{ */ global $dms; $folder->addNotify($userid, true); @@ -55,7 +55,7 @@ function add_folder_notify($folder,$userid,$recursefolder,$recursedoc) { foreach($subFolders as $subFolder) add_folder_notify($subFolder,$userid,$recursefolder,$recursedoc); } -} +} /* }}} */ if (!isset($_GET["type"])) UI::exitError(getMLText("my_account"),getMLText("error_occured")); if (!isset($_GET["action"])) UI::exitError(getMLText("my_account"),getMLText("error_occured")); @@ -123,7 +123,7 @@ if ($_GET["type"]=="document"){ $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toIndividual($user, $obj, $subject, $message, $params); + $notifier->toIndividual($user, $obj, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } diff --git a/op/op.MoveClipboard.php b/op/op.MoveClipboard.php index d675e5c6a..2e77ffca4 100644 --- a/op/op.MoveClipboard.php +++ b/op/op.MoveClipboard.php @@ -73,13 +73,13 @@ foreach($clipboard['docs'] as $documentid) { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } // if user is not owner send notification to owner // if ($user->getID() != $document->getOwner()->getID()) -// $notifier->toIndividual($user, $document->getOwner(), $subject, $message, $params); +// $notifier->toIndividual($user, $document->getOwner(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } $session->removeFromClipboard($document); @@ -120,13 +120,13 @@ foreach($clipboard['folders'] as $folderid) { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$folder->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } // if user is not owner send notification to owner // if ($user->getID() != $folder->getOwner()->getID()) -// $notifier->toIndividual($user, $folder->getOwner(), $subject, $message, $params); +// $notifier->toIndividual($user, $folder->getOwner(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } $session->removeFromClipboard($folder); diff --git a/op/op.MoveDocument.php b/op/op.MoveDocument.php index d62e349d2..56c7a2515 100644 --- a/op/op.MoveDocument.php +++ b/op/op.MoveDocument.php @@ -99,13 +99,13 @@ if ($document->setFolder($targetFolder)) { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } // if user is not owner send notification to owner // if ($user->getID() != $document->getOwner()->getID()) -// $notifier->toIndividual($user, $document->getOwner(), $subject, $message, $params); +// $notifier->toIndividual($user, $document->getOwner(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } } else { diff --git a/op/op.MoveFolder.php b/op/op.MoveFolder.php index 31c77a6c8..dbdad0f88 100644 --- a/op/op.MoveFolder.php +++ b/op/op.MoveFolder.php @@ -98,13 +98,13 @@ if ($folder->setParent($targetFolder)) { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$folder->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } // if user is not owner send notification to owner //if ($user->getID() != $folder->getOwner()->getID()) - // $notifier->toIndividual($user, $folder->getOwner(), $subject, $message, $params); + // $notifier->toIndividual($user, $folder->getOwner(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } } else { diff --git a/op/op.OverrideContentStatus.php b/op/op.OverrideContentStatus.php index 8b79d1c0f..7525bbb5c 100644 --- a/op/op.OverrideContentStatus.php +++ b/op/op.OverrideContentStatus.php @@ -92,12 +92,12 @@ if ($overrideStatus != $overallStatus["status"]) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } -// $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params); +// $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } } } diff --git a/op/op.RemoveDocument.php b/op/op.RemoveDocument.php index 24fd3c614..9d554b335 100644 --- a/op/op.RemoveDocument.php +++ b/op/op.RemoveDocument.php @@ -98,9 +98,9 @@ if ($notifier){ $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$folder->getID(); - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } diff --git a/op/op.RemoveDocumentFile.php b/op/op.RemoveDocumentFile.php index 70dd02765..dbda46a6d 100644 --- a/op/op.RemoveDocumentFile.php +++ b/op/op.RemoveDocumentFile.php @@ -78,9 +78,9 @@ if (!$document->removeDocumentFile($fileid)) { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } diff --git a/op/op.RemoveFolder.php b/op/op.RemoveFolder.php index 53c630b03..0d0c948e3 100644 --- a/op/op.RemoveFolder.php +++ b/op/op.RemoveFolder.php @@ -94,9 +94,9 @@ if ($notifier) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$parent->getID(); - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } diff --git a/op/op.RemoveVersion.php b/op/op.RemoveVersion.php index 8f7eede93..59c5dddec 100644 --- a/op/op.RemoveVersion.php +++ b/op/op.RemoveVersion.php @@ -92,9 +92,9 @@ if (count($document->getContent())==1) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } @@ -103,25 +103,27 @@ else { /* Before deleting the content get a list of all users that should * be informed about the removal. */ - $emailUserList = array(); - $emailUserList[] = $version->getUser()->getID(); - $emailGroupList = array(); + $emailUserListR = array(); + $emailUserListA = array(); + $oldowner = $version->getUser(); + $emailGroupListR = array(); + $emailGroupListA = array(); $status = $version->getReviewStatus(); foreach ($status as $st) { if ($st["status"]==0 && !in_array($st["required"], $emailUserList)) { if($st['type'] == 0) - $emailUserList[] = $st["required"]; + $emailUserListR[] = $st["required"]; else - $emailGroupList[] = $st["required"]; + $emailGroupListR[] = $st["required"]; } } $status = $version->getApprovalStatus(); foreach ($status as $st) { if ($st["status"]==0 && !in_array($st["required"], $emailUserList)) { if($st['type'] == 0) - $emailUserList[] = $st["required"]; + $emailUserListA[] = $st["required"]; else - $emailGroupList[] = $st["required"]; + $emailGroupListA[] = $st["required"]; } } @@ -152,15 +154,25 @@ else { // Notify affected users. if ($notifier){ $nl=$document->getNotifyList(); - $userrecipients = array(); - foreach ($emailUserList as $eID) { + $userrecipientsR = array(); + foreach ($emailUserListR as $eID) { $eU = $version->getDMS()->getUser($eID); - $userrecipients[] = $eU; + $userrecipientsR[] = $eU; } - $grouprecipients = array(); - foreach ($emailGroupList as $eID) { + $grouprecipientsR = array(); + foreach ($emailGroupListR as $eID) { $eU = $version->getDMS()->getGroup($eID); - $grouprecipients[] = $eU; + $grouprecipientsR[] = $eU; + } + $userrecipientsA = array(); + foreach ($emailUserListA as $eID) { + $eU = $version->getDMS()->getUser($eID); + $userrecipientsA[] = $eU; + } + $grouprecipientsA = array(); + foreach ($emailGroupListA as $eID) { + $eU = $version->getDMS()->getGroup($eID); + $grouprecipientsA[] = $eU; } $subject = "version_deleted_email_subject"; @@ -173,13 +185,18 @@ else { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); - $notifier->toList($user, $userrecipients, $subject, $message, $params); - $notifier->toList($user, $nl["users"], $subject, $message, $params); - foreach($grouprecipients as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toIndividual($user, $oldowner, $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); + $notifier->toList($user, $userrecipientsR, $subject, $message, $params, SeedDMS_NotificationService::RECV_REVIEWER); + $notifier->toList($user, $userrecipientsA, $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); + foreach($grouprecipientsR as $grp) { + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_REVIEWER); + } + foreach($grouprecipientsA as $grp) { + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } diff --git a/op/op.RemoveWorkflowFromDocument.php b/op/op.RemoveWorkflowFromDocument.php index 64a64eda5..ce83d2dd2 100644 --- a/op/op.RemoveWorkflowFromDocument.php +++ b/op/op.RemoveWorkflowFromDocument.php @@ -86,9 +86,9 @@ if($version->removeWorkflow($user)) { $params['http_root'] = $settings->_httpRoot; $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); // Send notification to subscribers. - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } diff --git a/op/op.ReturnFromSubWorkflow.php b/op/op.ReturnFromSubWorkflow.php index 0fb7d377d..dfcd2a221 100644 --- a/op/op.ReturnFromSubWorkflow.php +++ b/op/op.ReturnFromSubWorkflow.php @@ -100,9 +100,9 @@ if($version->returnFromSubWorkflow($user, $transition, $_POST["comment"])) { $params['http_root'] = $settings->_httpRoot; $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); // Send notification to subscribers. - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } diff --git a/op/op.ReviewDocument.php b/op/op.ReviewDocument.php index d41f07a39..07bf82884 100644 --- a/op/op.ReviewDocument.php +++ b/op/op.ReviewDocument.php @@ -114,11 +114,11 @@ if ($_POST["reviewType"] == "ind") { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } -// $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params); +// $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } } } @@ -149,11 +149,11 @@ else if ($_POST["reviewType"] == "grp") { $params['username'] = $user->getFullName(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } -// $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params); +// $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } } } @@ -179,11 +179,11 @@ if ($_POST["reviewStatus"]==-1){ $params['username'] = $user->getFullName(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } -// $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params); +// $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } } @@ -243,9 +243,9 @@ if ($_POST["reviewStatus"]==-1){ $params['username'] = $user->getFullName(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } @@ -272,11 +272,11 @@ if ($_POST["reviewStatus"]==-1){ if ($dastat["type"] == 0) { $approver = $dms->getUser($dastat["required"]); - $notifier->toIndividual($document->getOwner(), $approver, $subject, $message, $params); + $notifier->toIndividual($document->getOwner(), $approver, $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } elseif ($dastat["type"] == 1) { $group = $dms->getGroup($dastat["required"]); - $notifier->toGroup($document->getOwner(), $group, $subject, $message, $params); + $notifier->toGroup($document->getOwner(), $group, $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } } } diff --git a/op/op.RewindWorkflow.php b/op/op.RewindWorkflow.php index 6b1648a89..d67cdc8f7 100644 --- a/op/op.RewindWorkflow.php +++ b/op/op.RewindWorkflow.php @@ -85,9 +85,9 @@ if($version->rewindWorkflow()) { $params['http_root'] = $settings->_httpRoot; $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); // Send notification to subscribers. - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } diff --git a/op/op.RunSubWorkflow.php b/op/op.RunSubWorkflow.php index 9775a5677..69c49456c 100644 --- a/op/op.RunSubWorkflow.php +++ b/op/op.RunSubWorkflow.php @@ -94,9 +94,9 @@ if($version->runSubWorkflow($subworkflow)) { $params['http_root'] = $settings->_httpRoot; $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); // Send notification to subscribers. - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } } } diff --git a/op/op.SetReviewersApprovers.php b/op/op.SetReviewersApprovers.php index 353452b52..1abc8ed3d 100644 --- a/op/op.SetReviewersApprovers.php +++ b/op/op.SetReviewersApprovers.php @@ -144,7 +144,7 @@ foreach ($pIndRev as $p) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toIndividual($user, $docAccess["users"][$accessIndex["i"][$p]], $subject, $message, $params); + $notifier->toIndividual($user, $docAccess["users"][$accessIndex["i"][$p]], $subject, $message, $params, SeedDMS_NotificationService::RECV_REVIEWER); } } break; @@ -210,7 +210,7 @@ if (count($reviewIndex["i"]) > 0) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toIndividual($user, $docAccess["users"][$accessIndex["i"][$rx]], $subject, $message, $params); + $notifier->toIndividual($user, $docAccess["users"][$accessIndex["i"][$rx]], $subject, $message, $params, SeedDMS_NotificationService::RECV_REVIEWER); } } break; @@ -256,7 +256,7 @@ foreach ($pGrpRev as $p) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toGroup($user, $docAccess["groups"][$accessIndex["g"][$p]], $subject, $message, $params); + $notifier->toGroup($user, $docAccess["groups"][$accessIndex["g"][$p]], $subject, $message, $params, SeedDMS_NotificationService::RECV_REVIEWER); } } break; @@ -314,7 +314,7 @@ if (count($reviewIndex["g"]) > 0) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toGroup($user, $docAccess["groups"][$accessIndex["g"][$rx]], $subject, $message, $params); + $notifier->toGroup($user, $docAccess["groups"][$accessIndex["g"][$rx]], $subject, $message, $params, SeedDMS_NotificationService::RECV_REVIEWER); } } break; @@ -376,7 +376,7 @@ foreach ($pIndApp as $p) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toIndividual($user, $docAccess["users"][$accessIndex["i"][$p]], $subject, $message, $params); + $notifier->toIndividual($user, $docAccess["users"][$accessIndex["i"][$p]], $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } } break; @@ -434,7 +434,7 @@ if (count($approvalIndex["i"]) > 0) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toIndividual($user, $docAccess["users"][$accessIndex["i"][$rx]], $subject, $message, $params); + $notifier->toIndividual($user, $docAccess["users"][$accessIndex["i"][$rx]], $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } } break; @@ -480,7 +480,7 @@ foreach ($pGrpApp as $p) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toGroup($user, $docAccess["groups"][$accessIndex["g"][$p]], $subject, $message, $params); + $notifier->toGroup($user, $docAccess["groups"][$accessIndex["g"][$p]], $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } } break; @@ -538,7 +538,7 @@ if (count($approvalIndex["g"]) > 0) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toGroup($user, $docAccess["groups"][$accessIndex["g"][$rx]], $subject, $message, $params); + $notifier->toGroup($user, $docAccess["groups"][$accessIndex["g"][$rx]], $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } } break; diff --git a/op/op.SetWorkflow.php b/op/op.SetWorkflow.php index 006767a90..b679ab885 100644 --- a/op/op.SetWorkflow.php +++ b/op/op.SetWorkflow.php @@ -91,10 +91,10 @@ if ($notifier) { foreach($workflow->getNextTransitions($workflow->getInitState()) as $ntransition) { foreach($ntransition->getUsers() as $tuser) { - $notifier->toIndividual($user, $tuser->getUser(), $subject, $message, $params); + $notifier->toIndividual($user, $tuser->getUser(), $subject, $message, $params, SeedDMS_NotificationService::RECV_WORKFLOW); } foreach($ntransition->getGroups() as $tuser) { - $notifier->toGroup($user, $tuser->getGroup(), $subject, $message, $params); + $notifier->toGroup($user, $tuser->getGroup(), $subject, $message, $params, SeedDMS_NotificationService::RECV_WORKFLOW); } } } diff --git a/op/op.TransferDocument.php b/op/op.TransferDocument.php index 9072c1f9f..6d8c43461 100644 --- a/op/op.TransferDocument.php +++ b/op/op.TransferDocument.php @@ -81,9 +81,9 @@ if ($notifier){ $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } diff --git a/op/op.TriggerWorkflow.php b/op/op.TriggerWorkflow.php index f2701d004..6d4b9dac1 100644 --- a/op/op.TriggerWorkflow.php +++ b/op/op.TriggerWorkflow.php @@ -97,9 +97,9 @@ if($version->triggerWorkflowTransition($user, $transition, $_POST["comment"])) { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); // Send notification to subscribers. - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } if($settings->_enableNotificationWorkflow) { @@ -122,13 +122,13 @@ if($version->triggerWorkflowTransition($user, $transition, $_POST["comment"])) { foreach($ntransition->getUsers() as $tuser) { if(!in_array($tuser->getUser()->getID(), $usersinformed)) { $usersinformed[] = $tuser->getUser()->getID(); - $notifier->toIndividual($user, $tuser->getUser(), $subject, $message, $params); + $notifier->toIndividual($user, $tuser->getUser(), $subject, $message, $params, SeedDMS_NotificationService::RECV_WO▨KFLOW); } } foreach($ntransition->getGroups() as $tuser) { if(!in_array($tuser->getGroup()->getID(), $groupsinformed)) { $groupsinformed[] = $tuser->getGroup()->getID(); - $notifier->toGroup($user, $tuser->getGroup(), $subject, $message, $params); + $notifier->toGroup($user, $tuser->getGroup(), $subject, $message, $params, SeedDMS_NotificationService::RECV_WORKFLOW); } } } diff --git a/op/op.UpdateDocument.php b/op/op.UpdateDocument.php index ea2751fef..18a67d0f8 100644 --- a/op/op.UpdateDocument.php +++ b/op/op.UpdateDocument.php @@ -322,13 +322,13 @@ default: $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } // if user is not owner send notification to owner // if ($user->getID() != $document->getOwner()->getID()) -// $notifier->toIndividual($user, $document->getOwner(), $subject, $message, $params); +// $notifier->toIndividual($user, $document->getOwner(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); if($workflow && $settings->_enableNotificationWorkflow) { $subject = "request_workflow_action_email_subject"; @@ -346,10 +346,10 @@ default: foreach($workflow->getNextTransitions($workflow->getInitState()) as $ntransition) { foreach($ntransition->getUsers() as $tuser) { - $notifier->toIndividual($user, $tuser->getUser(), $subject, $message, $params); + $notifier->toIndividual($user, $tuser->getUser(), $subject, $message, $params, SeedDMS_NotificationService::RECV_WORKFLOW); } foreach($ntransition->getGroups() as $tuser) { - $notifier->toGroup($user, $tuser->getGroup(), $subject, $message, $params); + $notifier->toGroup($user, $tuser->getGroup(), $subject, $message, $params, SeedDMS_NotificationService::RECV_WORKFLOW); } } } @@ -370,10 +370,10 @@ default: $params['http_root'] = $settings->_httpRoot; foreach($reviewers['i'] as $reviewerid) { - $notifier->toIndividual($user, $dms->getUser($reviewerid), $subject, $message, $params); + $notifier->toIndividual($user, $dms->getUser($reviewerid), $subject, $message, $params, SeedDMS_NotificationService::RECV_REVIEWER); } foreach($reviewers['g'] as $reviewergrpid) { - $notifier->toGroup($user, $dms->getGroup($reviewergrpid), $subject, $message, $params); + $notifier->toGroup($user, $dms->getGroup($reviewergrpid), $subject, $message, $params, SeedDMS_NotificationService::RECV_REVIEWER); } } @@ -391,10 +391,10 @@ default: $params['http_root'] = $settings->_httpRoot; foreach($approvers['i'] as $approverid) { - $notifier->toIndividual($user, $dms->getUser($approverid), $subject, $message, $params); + $notifier->toIndividual($user, $dms->getUser($approverid), $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } foreach($approvers['g'] as $approvergrpid) { - $notifier->toGroup($user, $dms->getGroup($approvergrpid), $subject, $message, $params); + $notifier->toGroup($user, $dms->getGroup($approvergrpid), $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } } } @@ -410,9 +410,9 @@ default: $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } diff --git a/op/op.UsrMgr.php b/op/op.UsrMgr.php index fe9f9035b..f0f919cd9 100644 --- a/op/op.UsrMgr.php +++ b/op/op.UsrMgr.php @@ -296,7 +296,7 @@ else if ($action == "sendlogindata" && $settings->_enableEmail) { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php"; $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toIndividual($user, $newuser, $subject, $message, $params); + $notifier->toIndividual($user, $newuser, $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } add_log_line(".php&action=sendlogindata&userid=".$userid); From 3655f4b08c99098469ca26cf8f4c15af2a17bc5b Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 29 Jan 2021 09:52:34 +0100 Subject: [PATCH 124/276] add note about modified notification service --- CHANGELOG | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 277d42749..7832181d9 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -8,6 +8,8 @@ - fix possible csrf attacks due to missing form token - show an error msg on the documents detail page if the checksum of version mismatch +- overhaul notifications, type of receiver is now passed to notification + service which allows a more fine grained filtering -------------------------------------------------------------------------------- Changes in version 5.1.21 From 6a3939158b14bdcc093c68e3aad7a81b28cdd972 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 29 Jan 2021 10:12:42 +0100 Subject: [PATCH 125/276] add new notification receiver types, pass recv type to notif. service --- inc/inc.ClassNotificationService.php | 2 ++ op/op.CheckInDocument.php | 20 ++++++++++---------- op/op.ReviewDocument.php | 2 +- op/op.ReviseDocument.php | 12 ++++++------ op/op.SetRecipients.php | 8 ++++---- op/op.SetRevisors.php | 8 ++++---- 6 files changed, 27 insertions(+), 25 deletions(-) diff --git a/inc/inc.ClassNotificationService.php b/inc/inc.ClassNotificationService.php index e4d04b4e4..7008acafb 100644 --- a/inc/inc.ClassNotificationService.php +++ b/inc/inc.ClassNotificationService.php @@ -45,6 +45,8 @@ class SeedDMS_NotificationService { const RECV_REVIEWER = 3; const RECV_APPROVER = 4; const RECV_WORKFLOW = 5; + const RECV_REVISOR = 6; + const RECV_RECIPIENT = 7; public function __construct($logger = null) { $this->services = array(); diff --git a/op/op.CheckInDocument.php b/op/op.CheckInDocument.php index b60f4ad92..977352acf 100644 --- a/op/op.CheckInDocument.php +++ b/op/op.CheckInDocument.php @@ -284,9 +284,9 @@ else $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } if($workflow && $settings->_enableNotificationWorkflow) { @@ -305,10 +305,10 @@ else foreach($workflow->getNextTransitions($workflow->getInitState()) as $ntransition) { foreach($ntransition->getUsers() as $tuser) { - $notifier->toIndividual($user, $tuser->getUser(), $subject, $message, $params); + $notifier->toIndividual($user, $tuser->getUser(), $subject, $message, $params, SeedDMS_NotificationService::RECV_WORKFLOW); } foreach($ntransition->getGroups() as $tuser) { - $notifier->toGroup($user, $tuser->getGroup(), $subject, $message, $params); + $notifier->toGroup($user, $tuser->getGroup(), $subject, $message, $params, SeedDMS_NotificationService::RECV_WORKFLOW); } } } @@ -329,10 +329,10 @@ else $params['http_root'] = $settings->_httpRoot; foreach($reviewers['i'] as $reviewerid) { - $notifier->toIndividual($user, $dms->getUser($reviewerid), $subject, $message, $params); + $notifier->toIndividual($user, $dms->getUser($reviewerid), $subject, $message, $params, SeedDMS_NotificationService::RECV_REVIEWER); } foreach($reviewers['g'] as $reviewergrpid) { - $notifier->toGroup($user, $dms->getGroup($reviewergrpid), $subject, $message, $params); + $notifier->toGroup($user, $dms->getGroup($reviewergrpid), $subject, $message, $params, SeedDMS_NotificationService::RECV_REVIEWER); } } @@ -350,10 +350,10 @@ else $params['http_root'] = $settings->_httpRoot; foreach($approvers['i'] as $approverid) { - $notifier->toIndividual($user, $dms->getUser($approverid), $subject, $message, $params); + $notifier->toIndividual($user, $dms->getUser($approverid), $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } foreach($approvers['g'] as $approvergrpid) { - $notifier->toGroup($user, $dms->getGroup($approvergrpid), $subject, $message, $params); + $notifier->toGroup($user, $dms->getGroup($approvergrpid), $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } } } @@ -418,9 +418,9 @@ else $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } else { diff --git a/op/op.ReviewDocument.php b/op/op.ReviewDocument.php index b28be8864..9aa02d8e4 100644 --- a/op/op.ReviewDocument.php +++ b/op/op.ReviewDocument.php @@ -123,7 +123,7 @@ if ($_POST["reviewType"] == "ind" || $_POST["reviewType"] == "grp") { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } diff --git a/op/op.ReviseDocument.php b/op/op.ReviseDocument.php index 5b43e6d0d..1a18c0360 100644 --- a/op/op.ReviseDocument.php +++ b/op/op.ReviseDocument.php @@ -112,11 +112,11 @@ if ($_POST["revisionType"] == "ind" || $_POST["revisionType"] == "grp") { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } - $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params); + $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } } @@ -136,11 +136,11 @@ if($olddocstatus['status'] != $newdocstatus['status']) { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } - $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params); + $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } } diff --git a/op/op.SetRecipients.php b/op/op.SetRecipients.php index 5ad1bca18..69d77fa45 100644 --- a/op/op.SetRecipients.php +++ b/op/op.SetRecipients.php @@ -141,7 +141,7 @@ foreach ($pIndRev as $p) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toIndividual($user, $accessIndex["i"][$p], $subject, $message, $params); + $notifier->toIndividual($user, $accessIndex["i"][$p], $subject, $message, $params, SeedDMS_NotificationService::RECV_RECIPIENT); } } break; @@ -200,7 +200,7 @@ if (count($receiptIndex["i"]) > 0) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toIndividual($user, $accessIndex["i"][$rx], $subject, $message, $params); + $notifier->toIndividual($user, $accessIndex["i"][$rx], $subject, $message, $params, SeedDMS_NotificationService::RECV_RECIPIENT); } } break; @@ -248,7 +248,7 @@ foreach ($pGrpRev as $p) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toGroup($user, $accessIndex["g"][$p], $subject, $message, $params); + $notifier->toGroup($user, $accessIndex["g"][$p], $subject, $message, $params, SeedDMS_NotificationService::RECV_RECIPIENT); } } break; @@ -303,7 +303,7 @@ if (count($receiptIndex["g"]) > 0) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toGroup($user, $accessIndex["g"][$rx], $subject, $message, $params); + $notifier->toGroup($user, $accessIndex["g"][$rx], $subject, $message, $params, SeedDMS_NotificationService::RECV_RECIPIENT); } } break; diff --git a/op/op.SetRevisors.php b/op/op.SetRevisors.php index 8314c506c..087b2eb27 100644 --- a/op/op.SetRevisors.php +++ b/op/op.SetRevisors.php @@ -139,7 +139,7 @@ foreach ($pIndRev as $p) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toIndividual($user, $accessIndex["i"][$p], $subject, $message, $params); + $notifier->toIndividual($user, $accessIndex["i"][$p], $subject, $message, $params, SeedDMS_NotificationService::RECV_REVISOR); } } break; @@ -198,7 +198,7 @@ if (count($revisionIndex["i"]) > 0) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toIndividual($user, $accessIndex["i"][$rx], $subject, $message, $params); + $notifier->toIndividual($user, $accessIndex["i"][$rx], $subject, $message, $params, SeedDMS_NotificationService::RECV_REVISOR); } } break; @@ -246,7 +246,7 @@ foreach ($pGrpRev as $p) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toGroup($user, $accessIndex["g"][$p], $subject, $message, $params); + $notifier->toGroup($user, $accessIndex["g"][$p], $subject, $message, $params, SeedDMS_NotificationService::RECV_REVISOR); } } break; @@ -301,7 +301,7 @@ if (count($revisionIndex["g"]) > 0) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toGroup($user, $accessIndex["g"][$rx], $subject, $message, $params); + $notifier->toGroup($user, $accessIndex["g"][$rx], $subject, $message, $params, SeedDMS_NotificationService::RECV_REVISOR); } } break; From 8aa7662f3194444afc6b549a2e99af18917804ba Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 29 Jan 2021 10:33:09 +0100 Subject: [PATCH 126/276] add SeedDMS_Core_User->isType() and SeedDMS_Core_Group->isType() --- SeedDMS_Core/Core/inc.ClassGroup.php | 9 +++++++++ SeedDMS_Core/Core/inc.ClassUser.php | 9 +++++++++ SeedDMS_Core/package.xml | 2 ++ 3 files changed, 20 insertions(+) diff --git a/SeedDMS_Core/Core/inc.ClassGroup.php b/SeedDMS_Core/Core/inc.ClassGroup.php index 4e7b9ba47..696613600 100644 --- a/SeedDMS_Core/Core/inc.ClassGroup.php +++ b/SeedDMS_Core/Core/inc.ClassGroup.php @@ -124,6 +124,15 @@ class SeedDMS_Core_Group { /* {{{ */ return $groups; } /* }}} */ + /** + * Check if this object is of type 'group'. + * + * @param string $type type of object + */ + public function isType($type) { /* {{{ */ + return $type == 'group'; + } /* }}} */ + /** * @param SeedDMS_Core_DMS $dms */ diff --git a/SeedDMS_Core/Core/inc.ClassUser.php b/SeedDMS_Core/Core/inc.ClassUser.php index 495b4b310..983390707 100644 --- a/SeedDMS_Core/Core/inc.ClassUser.php +++ b/SeedDMS_Core/Core/inc.ClassUser.php @@ -250,6 +250,15 @@ class SeedDMS_Core_User { /* {{{ */ return $users; } /* }}} */ + /** + * Check if this object is of type 'user'. + * + * @param string $type type of object + */ + public function isType($type) { /* {{{ */ + return $type == 'user'; + } /* }}} */ + /** * @param SeedDMS_Core_DMS $dms */ diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index d5a0e96f8..833378c09 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -25,6 +25,8 @@ GPL License - add SeedDMS_Core_DatabaseAccess::hasTable() +- add SeedDMS_Core_User->isType() and SeedDMS_Core_Group->isType() +- add SeedDMS_Core_User->getDMS() and SeedDMS_Core_Group->getDMS() From ae2eebd5629d6be9f972af4227dc2eb092b4ed89 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 29 Jan 2021 10:33:35 +0100 Subject: [PATCH 127/276] use new method SeedDMS_Core_User->isType() --- inc/inc.ClassEmailNotify.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/inc.ClassEmailNotify.php b/inc/inc.ClassEmailNotify.php index 630697969..20fffcfce 100644 --- a/inc/inc.ClassEmailNotify.php +++ b/inc/inc.ClassEmailNotify.php @@ -84,7 +84,7 @@ class SeedDMS_EmailNotify extends SeedDMS_Notify { * @return false or -1 in case of error, otherwise true */ function toIndividual($sender, $recipient, $subject, $messagekey, $params=array(), $attachments=array()) { /* {{{ */ - if(is_object($recipient) && !strcasecmp(get_class($recipient), $this->_dms->getClassname('user')) && !$recipient->isDisabled() && $recipient->getEmail()!="") { + if(is_object($recipient) && $recipient->isType('user') && !$recipient->isDisabled() && $recipient->getEmail()!="") { $to = $recipient->getEmail(); $lang = $recipient->getLanguage(); } elseif(is_string($recipient) && trim($recipient) != "") { From 3a9bec69afb25fbc8a0f5e96398fcbe49bfacc84 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 29 Jan 2021 10:34:01 +0100 Subject: [PATCH 128/276] log filtered out notifications --- inc/inc.ClassNotificationService.php | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/inc/inc.ClassNotificationService.php b/inc/inc.ClassNotificationService.php index e4d04b4e4..55de56eff 100644 --- a/inc/inc.ClassNotificationService.php +++ b/inc/inc.ClassNotificationService.php @@ -70,20 +70,29 @@ class SeedDMS_NotificationService { public function toIndividual($sender, $recipient, $subject, $message, $params=array(), $recvtype=0) { $error = true; foreach($this->services as $name => $service) { + /* Set $to to email address of user or the string passed in $recipient + * This is only used for logging + */ + if(is_object($recipient) && $recipient->isType('user') && !$recipient->isDisabled() && $recipient->getEmail()!="") { + $to = $recipient->getEmail(); + } elseif(is_string($recipient) && trim($recipient) != "") { + $to = $recipient; + } else { + $to = ''; + } + + /* Call filter of notification service if set */ if(!is_callable([$service, 'filter']) || $service->filter($sender, $recipient, $subject, $message, $params, $recvtype)) { - if(is_object($recipient) && ($dms = $recipient->getDMS()) && !strcasecmp(get_class($recipient), $dms->getClassname('user')) && !$recipient->isDisabled() && $recipient->getEmail()!="") { - $to = $recipient->getEmail(); - } elseif(is_string($recipient) && trim($recipient) != "") { - $to = $recipient; - } if(!$service->toIndividual($sender, $recipient, $subject, $message, $params)) { $error = false; $this->errors[$name] = false; - $this->logger->log('Notification service: '.$name.'. Sending mail \''.$subject.'\' to user \''.$to.'\' failed.', PEAR_LOG_ERR); + $this->logger->log('Notification service \''.$name.'\': Sending mail \''.$subject.'\' to user \''.$to.'\' failed.', PEAR_LOG_ERR); } else { - $this->logger->log('Notification service: '.$name.'. Sending mail \''.$subject.'\' to user \''.$to.'\' successful.', PEAR_LOG_INFO); + $this->logger->log('Notification service \''.$name.'\': Sending mail \''.$subject.'\' to user \''.$to.'\' successful.', PEAR_LOG_INFO); $this->errors[$name] = true; } + } else { + $this->logger->log('Notification service \''.$name.'\': Sending mail \''.$subject.'\' to user \''.$to.'\' filtered out.', PEAR_LOG_INFO); } } return $error; From eb29006e506e18770ae1203307938ec58108edc6 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 29 Jan 2021 10:51:01 +0100 Subject: [PATCH 129/276] remove toGroup() and toList() --- inc/inc.ClassNotify.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/inc/inc.ClassNotify.php b/inc/inc.ClassNotify.php index 6655daa39..3a4f5471b 100644 --- a/inc/inc.ClassNotify.php +++ b/inc/inc.ClassNotify.php @@ -26,6 +26,4 @@ */ abstract class SeedDMS_Notify { abstract function toIndividual($sender, $recipient, $subject, $message, $params=array()); - abstract function toGroup($sender, $groupRecipient, $subject, $message, $params=array()); - abstract function toList($sender, $recipients, $subject, $message, $params=array()); } From 5f280ed7a2111e68c51d679720c12f9bb9773550 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 29 Jan 2021 10:53:12 +0100 Subject: [PATCH 130/276] fix wording of log message --- inc/inc.ClassNotificationService.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/inc/inc.ClassNotificationService.php b/inc/inc.ClassNotificationService.php index 55de56eff..4b68a8d54 100644 --- a/inc/inc.ClassNotificationService.php +++ b/inc/inc.ClassNotificationService.php @@ -86,13 +86,13 @@ class SeedDMS_NotificationService { if(!$service->toIndividual($sender, $recipient, $subject, $message, $params)) { $error = false; $this->errors[$name] = false; - $this->logger->log('Notification service \''.$name.'\': Sending mail \''.$subject.'\' to user \''.$to.'\' failed.', PEAR_LOG_ERR); + $this->logger->log('Notification service \''.$name.'\': Sending notification \''.$subject.'\' to user \''.$to.'\' failed.', PEAR_LOG_ERR); } else { - $this->logger->log('Notification service \''.$name.'\': Sending mail \''.$subject.'\' to user \''.$to.'\' successful.', PEAR_LOG_INFO); + $this->logger->log('Notification service \''.$name.'\': Sending notification \''.$subject.'\' to user \''.$to.'\' successful.', PEAR_LOG_INFO); $this->errors[$name] = true; } } else { - $this->logger->log('Notification service \''.$name.'\': Sending mail \''.$subject.'\' to user \''.$to.'\' filtered out.', PEAR_LOG_INFO); + $this->logger->log('Notification service \''.$name.'\': Notification \''.$subject.'\' to user \''.$to.'\' filtered out.', PEAR_LOG_INFO); } } return $error; From aa8290e03bdb8e9a5ffd4467ebc9ac4e66aae6b5 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 29 Jan 2021 14:19:44 +0100 Subject: [PATCH 131/276] add searching fro revision date --- SeedDMS_Core/Core/inc.ClassDMS.php | 25 +++++++++++++++++++++++-- SeedDMS_Core/package.xml | 2 +- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/SeedDMS_Core/Core/inc.ClassDMS.php b/SeedDMS_Core/Core/inc.ClassDMS.php index e261466ec..2e4d7368c 100644 --- a/SeedDMS_Core/Core/inc.ClassDMS.php +++ b/SeedDMS_Core/Core/inc.ClassDMS.php @@ -1959,8 +1959,9 @@ class SeedDMS_Core_DMS { */ function search($query, $limit=0, $offset=0, $logicalmode='AND', $searchin=array(), $startFolder=null, $owner=null, $status = array(), $creationstartdate=array(), $creationenddate=array(), $modificationstartdate=array(), $modificationenddate=array(), $categories=array(), $attributes=array(), $mode=0x3, $expirationstartdate=array(), $expirationenddate=array(), $reception=array()) { /* {{{ */ $orderby = ''; + $revisionstartdate = $revisionenddate = ''; if(is_array($query)) { - foreach(array('limit', 'offset', 'logicalmode', 'searchin', 'startFolder', 'owner', 'status', 'creationstartdate', 'creationenddate', 'modificationstartdate', 'modificationenddate', 'categories', 'attributes', 'mode', 'expirationstartdate', 'expirationenddate', 'reception') as $paramname) + foreach(array('limit', 'offset', 'logicalmode', 'searchin', 'startFolder', 'owner', 'status', 'creationstartdate', 'creationenddate', 'modificationstartdate', 'modificationenddate', 'categories', 'attributes', 'mode', 'revisionstartdate', 'revisionenddate', 'expirationstartdate', 'expirationenddate', 'reception') as $paramname) ${$paramname} = isset($query[$paramname]) ? $query[$paramname] : ${$paramname}; foreach(array('orderby') as $paramname) ${$paramname} = isset($query[$paramname]) ? $query[$paramname] : ''; @@ -2264,6 +2265,23 @@ class SeedDMS_Core_DMS { $searchCreateDate .= "`tblDocumentContent`.`date` <= ".$stopdate; } } + $searchRevisionDate = ""; + if ($revisionstartdate) { + $startdate = $revisionstartdate['year'].'-'.$revisionstartdate["month"].'-'.$revisionstartdate["day"]; + if ($startdate) { + if($searchRevisionDate) + $searchRevisionDate .= " AND "; + $searchRevisionDate .= "`tblDocumentContent`.`revisiondate` >= '".$startdate."'"; + } + } + if ($revisionenddate) { + $stopdate = $revisionenddate["year"].'-'.$revisionenddate["month"].'-'.$revisionenddate["day"]; + if ($stopdate) { + if($searchRevisionDate) + $searchRevisionDate .= " AND "; + $searchRevisionDate .= "`tblDocumentContent`.`revisiondate` <= '".$stopdate."'"; + } + } $searchExpirationDate = ''; if ($expirationstartdate) { $startdate = SeedDMS_Core_DMS::makeTimeStamp($expirationstartdate['hour'], $expirationstartdate['minute'], $expirationstartdate['second'], $expirationstartdate['year'], $expirationstartdate["month"], $expirationstartdate["day"]); @@ -2330,6 +2348,9 @@ class SeedDMS_Core_DMS { if (strlen($searchCreateDate)>0) { $searchQuery .= " AND (".$searchCreateDate.")"; } + if (strlen($searchRevisionDate)>0) { + $searchQuery .= " AND (".$searchRevisionDate.")"; + } if (strlen($searchExpirationDate)>0) { $searchQuery .= " AND (".$searchExpirationDate.")"; } @@ -2363,7 +2384,7 @@ class SeedDMS_Core_DMS { } } - if($searchKey || $searchOwner || $searchCategories || $searchCreateDate || $searchExpirationDate || $searchAttributes || $status || $reception) { + if($searchKey || $searchOwner || $searchCategories || $searchCreateDate || $searchRevisionDate || $searchExpirationDate || $searchAttributes || $status || $reception) { // Count the number of rows that the search will produce. $resArr = $this->db->getResultArray("SELECT COUNT(*) AS num FROM (SELECT DISTINCT `tblDocuments`.`id` ".$searchQuery.") a"); $totalDocs = 0; diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index 91c7d489c..7e6aecfc9 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -24,7 +24,7 @@ GPL License -- no changes, just keep same version as seeddms application +- add searching for revision date From 780be78d36daef0305bbb7e8313f68bded084cf2 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 29 Jan 2021 14:20:05 +0100 Subject: [PATCH 132/276] add searching for revision date --- out/out.Search.php | 32 ++++++++++++++++++++++++++++++++ views/bootstrap/class.Search.php | 22 ++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/out/out.Search.php b/out/out.Search.php index 744d6cfd4..09e54760f 100644 --- a/out/out.Search.php +++ b/out/out.Search.php @@ -360,6 +360,33 @@ if(((!isset($_GET["fullsearch"]) && $settings->_defaultSearchMethod == 'fulltext UI::exitError(getMLText("search"),getMLText("invalid_create_date_end")); } + $revisionstartdate = array(); + $revisionstopdate = array(); + if (isset($_GET["revisiondate"]) && $_GET["revisiondate"]!=null) { + $revisiondate = true; + } else { + $revisiondate = false; + } + + if(isset($_GET["revisionstart"]) && $_GET["revisionstart"]) { + $tmp = explode("-", $_GET["revisionstart"]); + $revisionstartdate = array('year'=>(int)$tmp[0], 'month'=>(int)$tmp[1], 'day'=>(int)$tmp[2], 'hour'=>0, 'minute'=>0, 'second'=>0); + if (!checkdate($revisionstartdate['month'], $revisionstartdate['day'], $revisionstartdate['year'])) { + UI::exitError(getMLText("search"),getMLText("invalid_revision_date_start")); + } + } else { + $revisionstartdate = array(); + } + if(isset($_GET["revisionend"]) && $_GET["revisionend"]) { + $tmp = explode("-", $_GET["revisionend"]); + $revisionstopdate = array('year'=>(int)$tmp[0], 'month'=>(int)$tmp[1], 'day'=>(int)$tmp[2], 'hour'=>0, 'minute'=>0, 'second'=>0); + if (!checkdate($revisionstopdate['month'], $revisionstopdate['day'], $revisionstopdate['year'])) { + UI::exitError(getMLText("search"),getMLText("invalid_revision_date_end")); + } + } else { + $revisionstopdate = array(); + } + $expstartdate = array(); $expstopdate = array(); if (isset($_GET["expirationdate"]) && $_GET["expirationdate"]!=null) { @@ -498,6 +525,8 @@ if(((!isset($_GET["fullsearch"]) && $settings->_defaultSearchMethod == 'fulltext 'mode'=>$resultmode, 'expirationstartdate'=>$expirationdate ? $expstartdate : array(), 'expirationenddate'=>$expirationdate ? $expstopdate : array(), + 'revisionstartdate'=>$revisiondate ? $revisionstartdate : array(), + 'revisionenddate'=>$revisiondate ? $revisionstopdate : array(), 'reception'=>$reception, 'orderby'=>$orderby )); @@ -584,10 +613,13 @@ if($settings->_showSingleSearchHit && count($entries) == 1) { $view->setParam('owner', $owner); $view->setParam('startdate', isset($startdate) ? $startdate : array()); $view->setParam('stopdate', isset($stopdate) ? $stopdate : array()); + $view->setParam('revisionstartdate', isset($revisionstartdate) ? $revisionstartdate : array()); + $view->setParam('revisionstopdate', isset($revisionstopdate) ? $revisionstopdate : array()); $view->setParam('expstartdate', isset($expstartdate) ? $expstartdate : array()); $view->setParam('expstopdate', isset($expstopdate) ? $expstopdate : array()); $view->setParam('creationdate', isset($creationdate) ? $creationdate : ''); $view->setParam('expirationdate', isset($expirationdate) ? $expirationdate: ''); + $view->setParam('revisiondate', isset($revisiondate) ? $revisiondate: ''); $view->setParam('status', isset($status) ? $status : array()); $view->setParam('categories', isset($categories) ? $categories : ''); $view->setParam('category', isset($categorynames) ? $categorynames : ''); diff --git a/views/bootstrap/class.Search.php b/views/bootstrap/class.Search.php index 9db55688d..aac2fdba6 100644 --- a/views/bootstrap/class.Search.php +++ b/views/bootstrap/class.Search.php @@ -189,8 +189,11 @@ function typeahead() { /* {{{ */ $stopdate = $this->params['stopdate']; $expstartdate = $this->params['expstartdate']; $expstopdate = $this->params['expstopdate']; + $revisionstartdate = $this->params['revisionstartdate']; + $revisionstopdate = $this->params['revisionstopdate']; $creationdate = $this->params['creationdate']; $expirationdate = $this->params['expirationdate']; + $revisiondate = $this->params['revisiondate']; $status = $this->params['status']; $this->query = $this->params['query']; $orderby = $this->params['orderby']; @@ -366,6 +369,8 @@ function typeahead() { /* {{{ */ $openfilterdlg = true; if($expirationdate) $openfilterdlg = true; + if($revisiondate) + $openfilterdlg = true; if($reception) $openfilterdlg = true; ?> @@ -465,6 +470,23 @@ function typeahead() { /* {{{ */ + +: + +
    + + "> + +   + + + "> + + + + Date: Fri, 29 Jan 2021 14:20:36 +0100 Subject: [PATCH 133/276] add changes for 6.0.15 --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index c2201c8fa..bbbf8e3de 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -3,6 +3,7 @@ -------------------------------------------------------------------------------- - merge changes up to 5.1.22 - add a new task for checking the checksum of all document versions +- add searching for revision date -------------------------------------------------------------------------------- Changes in version 6.0.14 From 79c58b8dac1748db564a9ba8811bb0cc80a7ed19 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 29 Jan 2021 14:21:23 +0100 Subject: [PATCH 134/276] various minor updates --- languages/ar_EG/lang.inc | 11 ++++++++ languages/bg_BG/lang.inc | 11 ++++++++ languages/ca_ES/lang.inc | 11 ++++++++ languages/cs_CZ/lang.inc | 11 ++++++++ languages/de_DE/lang.inc | 13 +++++++++- languages/el_GR/lang.inc | 11 ++++++++ languages/en_GB/lang.inc | 15 +++++++++-- languages/es_ES/lang.inc | 15 +++++++++-- languages/fr_FR/lang.inc | 11 ++++++++ languages/hr_HR/lang.inc | 11 ++++++++ languages/hu_HU/lang.inc | 11 ++++++++ languages/it_IT/lang.inc | 11 ++++++++ languages/ko_KR/lang.inc | 11 ++++++++ languages/lo_LA/lang.inc | 11 ++++++++ languages/nb_NO/lang.inc | 15 +++++++++-- languages/nl_NL/lang.inc | 11 ++++++++ languages/pl_PL/lang.inc | 55 ++++++++++++++++++++++++---------------- languages/pt_BR/lang.inc | 11 ++++++++ languages/ro_RO/lang.inc | 17 ++++++++++--- languages/ru_RU/lang.inc | 11 ++++++++ languages/sk_SK/lang.inc | 11 ++++++++ languages/sv_SE/lang.inc | 11 ++++++++ languages/tr_TR/lang.inc | 11 ++++++++ languages/uk_UA/lang.inc | 11 ++++++++ languages/zh_CN/lang.inc | 15 +++++++++-- languages/zh_TW/lang.inc | 19 +++++++++++--- 26 files changed, 324 insertions(+), 38 deletions(-) diff --git a/languages/ar_EG/lang.inc b/languages/ar_EG/lang.inc index 1e45b8332..44c071e0d 100644 --- a/languages/ar_EG/lang.inc +++ b/languages/ar_EG/lang.inc @@ -492,6 +492,7 @@ URL: [url]', 'edit_folder_props' => 'تعديل مجلد', 'edit_group' => 'تعديل مجموعة', 'edit_online' => 'تعديل عبر الإنترنت', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => 'تعديل المهمة', 'edit_transmittal_props' => 'تعديل الإحالة', @@ -561,6 +562,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => 'إرشيف أطول', 'extension_changelog' => 'سجل التعديلات', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => 'تحميل الإضافات', 'extension_manager' => 'إدارة الإضافات', 'extension_mgr_error_upload' => '', @@ -568,6 +571,8 @@ URL: [url]', 'extension_mgr_no_upload' => 'لا يمكن تحميل إضافات جديدة لأن دليل الإضافات غير قابل للكتابة.', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => 'مستودع إدارة الإضافات', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => 'لائحة الإضافات حسب الإصدار', 'february' => 'فبراير', 'file' => 'ملف', @@ -1078,6 +1083,7 @@ URL: [url]', 'review_update_failed' => 'خطأ في تحديث حالة المراجعة. التحديث فشل.', 'revise_document' => 'راجع المستند', 'revise_document_on' => 'راجع المستند على', +'revision' => '', 'revisions_accepted' => 'تم الموافقة على المراجعات', 'revisions_accepted_latest' => '', 'revisions_not_touched' => 'المراجعات غير ملموسة', @@ -1179,6 +1185,7 @@ URL: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => 'اختيار', +'select_attrdef' => '', 'select_attrdefgrp_show' => 'حدد معرف سمة المجموعة', 'select_attribute_value' => 'اختيار سمة الرقم', 'select_category' => 'اضغط لاختيار قسم', @@ -1658,6 +1665,7 @@ URL: [url]', 'splash_edit_user' => 'تحرير المستخدم', 'splash_error_add_to_transmittal' => 'خطأ الإضافة إلى الإحالة', 'splash_error_rm_download_link' => 'خطأ في إزالة رابط التنزيل', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => 'خطأ في إرسال رابط التنزيل', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1760,8 +1768,10 @@ URL: [url]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'اخذ فهرسة المراجع', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => 'مهمات', 'task_core_expireddocs_days' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => 'تفصيل المهام', 'task_disabled' => 'تم توقيف المهمة', 'task_frequency' => 'تردد المهمة', @@ -1940,6 +1950,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => 'تحويل سير العمل بدون استخدام مستخدم من المجموعة', 'workflow_user_summary' => 'ملخص المستخدم', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => 'اشياء أكثر', 'year_view' => 'عرض السنة', diff --git a/languages/bg_BG/lang.inc b/languages/bg_BG/lang.inc index 624565b9a..d4996f3dd 100644 --- a/languages/bg_BG/lang.inc +++ b/languages/bg_BG/lang.inc @@ -445,6 +445,7 @@ $text = array( 'edit_folder_props' => 'Редактирай папка', 'edit_group' => 'Редактирай група', 'edit_online' => '', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => '', 'edit_transmittal_props' => '', @@ -510,6 +511,8 @@ $text = array( 'export_user_list_csv' => '', 'extension_archive' => '', 'extension_changelog' => '', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => '', 'extension_manager' => 'управление на добавките', 'extension_mgr_error_upload' => '', @@ -517,6 +520,8 @@ $text = array( 'extension_mgr_no_upload' => '', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => '', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => '', 'february' => 'Февруари', 'file' => 'Файл', @@ -954,6 +959,7 @@ $text = array( 'review_update_failed' => 'грешка при обновяване статуса на рецензията', 'revise_document' => '', 'revise_document_on' => '', +'revision' => '', 'revisions_accepted' => '', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '', @@ -1042,6 +1048,7 @@ $text = array( 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => 'Избор', +'select_attrdef' => '', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', 'select_category' => 'Изберете категория', @@ -1521,6 +1528,7 @@ $text = array( 'splash_edit_user' => '', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => '', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1623,8 +1631,10 @@ $text = array( 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => '', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => '', 'task_core_expireddocs_days' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1789,6 +1799,7 @@ $text = array( 'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => 'Резюме за потребител', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => 'още [number] документа', 'year_view' => 'годишен изглед', diff --git a/languages/ca_ES/lang.inc b/languages/ca_ES/lang.inc index d2b319ba9..2020db0a7 100644 --- a/languages/ca_ES/lang.inc +++ b/languages/ca_ES/lang.inc @@ -450,6 +450,7 @@ URL: [url]', 'edit_folder_props' => 'Editar directori', 'edit_group' => 'Editar grup...', 'edit_online' => '', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => '', 'edit_transmittal_props' => '', @@ -515,6 +516,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => '', 'extension_changelog' => '', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => '', 'extension_manager' => 'Gestiona les Extensions', 'extension_mgr_error_upload' => '', @@ -522,6 +525,8 @@ URL: [url]', 'extension_mgr_no_upload' => '', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => '', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => '', 'february' => 'Febrer', 'file' => 'Fitxer', @@ -959,6 +964,7 @@ URL: [url]', 'review_update_failed' => 'Error actualitzant l\'estat de la revisió. L\'actualizació ha fallat.', 'revise_document' => '', 'revise_document_on' => '', +'revision' => '', 'revisions_accepted' => '', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '', @@ -1047,6 +1053,7 @@ URL: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => 'Selecció', +'select_attrdef' => '', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', 'select_category' => 'Prem per seleccionar la categoria', @@ -1526,6 +1533,7 @@ URL: [url]', 'splash_edit_user' => '', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => '', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1628,8 +1636,10 @@ URL: [url]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => '', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => '', 'task_core_expireddocs_days' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1794,6 +1804,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => '', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => '[number] objectes més', 'year_view' => 'Vista d\'any', diff --git a/languages/cs_CZ/lang.inc b/languages/cs_CZ/lang.inc index b531c6a1d..f0c78f25f 100644 --- a/languages/cs_CZ/lang.inc +++ b/languages/cs_CZ/lang.inc @@ -516,6 +516,7 @@ URL: [url]', 'edit_folder_props' => 'Upravit složku', 'edit_group' => 'Upravit skupinu', 'edit_online' => 'Upravit online', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => 'Upravit úkol', 'edit_transmittal_props' => 'Upravit vlastnosti přenosu', @@ -585,6 +586,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => 'Rozšíření', 'extension_changelog' => 'Changelog', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => 'Načítání rozšíření', 'extension_manager' => 'Správa rozšíření', 'extension_mgr_error_upload' => '', @@ -592,6 +595,8 @@ URL: [url]', 'extension_mgr_no_upload' => 'Nahrání nového rozšíření není možné, jelikož do složky rozšíření nelze zapisovat.', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => 'Dostupný', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => 'Verze', 'february' => 'Únor', 'file' => 'Soubor', @@ -1140,6 +1145,7 @@ URL: [url]', 'review_update_failed' => 'Chyba při aktualizaci stavu recenze. Aktualizace selhala.', 'revise_document' => 'Revize dokumentu', 'revise_document_on' => 'Další revize verze dokumentu v [date]', +'revision' => '', 'revisions_accepted' => '[no_revisions] již přijato', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '[no_revisions] revizí nebylo dotčeno', @@ -1246,6 +1252,7 @@ URL: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => 'Výběr', +'select_attrdef' => '', 'select_attrdefgrp_show' => 'Vybrat, kdy chcete zobrazit', 'select_attribute_value' => 'Vybrat hodnotu atributu', 'select_category' => 'Kliknutím vybrat kategorii', @@ -1730,6 +1737,7 @@ Jméno: [username] 'splash_edit_user' => 'Uživatel uložen', 'splash_error_add_to_transmittal' => 'Chyba při přidávání dokumentu k přenosu', 'splash_error_rm_download_link' => 'Chyba při odstranění odkazu ke stažení', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => 'Chyba při odesílání odkazu ke stažení', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1832,8 +1840,10 @@ Jméno: [username] 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'Převzít jednotlivého recenzenta z poslední verze.', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => 'Úkoly', 'task_core_expireddocs_days' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => 'Popis', 'task_disabled' => 'Vypnuto', 'task_frequency' => 'Frekvence', @@ -2012,6 +2022,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => 'Alespoň jedna z transformací pracovního postupu nemá uživatele ani skupinu!', 'workflow_user_summary' => 'Přehled uživatelů', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => 'Načíst další dokumenty ([number])', 'year_view' => 'Zobrazení roku', diff --git a/languages/de_DE/lang.inc b/languages/de_DE/lang.inc index a34f7d44b..a984f277d 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 (2848), dgrutsch (22) +// Translators: Admin (2860), dgrutsch (22) $text = array( '2_factor_auth' => '2-Faktor Authentifizierung', @@ -516,6 +516,7 @@ URL: [url]', 'edit_folder_props' => 'Bearbeiten', 'edit_group' => 'Gruppe bearbeiten', 'edit_online' => 'Online editieren', +'edit_online_not_allowed' => 'Sie dürfen diese Fassung nicht verändern, weil Sie nicht von Ihnen angelegt wurde. Laden Sie stattdessen eine neue Version hoch.', 'edit_online_warning' => 'Mit dem Speichern wird die aktuellen Version des Dokuments überschrieben. Es wird keine neue Version angelegt.', 'edit_task' => 'Task editieren', 'edit_transmittal_props' => 'Attribute der Dokumentenliste bearbeiten', @@ -585,6 +586,8 @@ URL: [url]', 'export_user_list_csv' => 'Exportiere Benutzer als CSV-Datei', 'extension_archive' => 'Erweiterung', 'extension_changelog' => 'Versionshistorie', +'extension_is_off_now' => 'Erweiterung ist ausgeschaltet', +'extension_is_on_now' => 'Erweiterung ist eingeschaltet', 'extension_loading' => 'Lade Erweiterungen ...', 'extension_manager' => 'Erweiterungen verwalten', 'extension_mgr_error_upload' => 'Beim Hochladen der Extension ist ein Fehler aufgetreten.', @@ -592,6 +595,8 @@ URL: [url]', 'extension_mgr_no_upload' => 'Der Upload neuer Erweiterungen ist nicht möglich, weil das Verzeichnis für Erweiterungen nicht beschreibbar ist.', 'extension_mgr_no_zipfile' => 'Die hochgeladene Erweiterung ist keine Zip-Datei', 'extension_mgr_repository' => 'Verfügbar', +'extension_missing_name' => 'Kein Erweiterungsname übergeben', +'extension_toggle_error' => 'Konnte Erweiterung nicht aus/einschalten', 'extension_version_list' => 'Versionen', 'february' => 'Februar', 'file' => 'Datei', @@ -1144,6 +1149,7 @@ URL: [url]', 'review_update_failed' => 'Störung bei Aktualisierung des Prüfstatus. Aktualisierung gescheitert.', 'revise_document' => 'Wiederholungsprüfung', 'revise_document_on' => 'Nächste Wiederholungsprüfung des Dokuments am [date]', +'revision' => 'Wiederholungsprüfung', 'revisions_accepted' => '[no_revisions] Wiederholungsprüfungen', 'revisions_accepted_latest' => '(davon [no_revisions] in letzter Version)', 'revisions_not_touched' => '[no_revisions] offene Wiederholungspüfungen', @@ -1257,6 +1263,7 @@ URL: [url]', 'seeddms_info' => 'Informationen über SeedDMS', 'seeddms_version' => 'SeedDMS Version', 'selection' => 'Auswahl', +'select_attrdef' => 'Attributdefinition auswählen', 'select_attrdefgrp_show' => 'Anzeigeort auswählen', 'select_attribute_value' => 'Attributwert auswählen', 'select_category' => 'Klicken zur Auswahl einer Kategorie', @@ -1741,6 +1748,7 @@ Name: [username] 'splash_edit_user' => 'Benutzer gespeichert', 'splash_error_add_to_transmittal' => 'Fehler beim Hinzufügen zur Dokumentenliste', 'splash_error_rm_download_link' => 'Fehler beim Löschen des Download-Links', +'splash_error_saving_file' => 'Fehler beim Speichern der Datei', 'splash_error_send_download_link' => 'Fehler beim Verschicken des Download-Links', 'splash_expiration_date_cleared' => 'Ablaufdatum gelöscht', 'splash_expiration_date_set' => 'Ablaufdatum auf [date] gesetzt', @@ -1843,8 +1851,10 @@ Name: [username] 'takeOverIndApprovers' => 'Einzelfreigeber übernehmen', 'takeOverIndReviewer' => 'Übernehme die Einzelprüfer von der letzten Version.', 'takeOverIndReviewers' => 'Einzelprüfer übernehmen', +'target_equals_source_folder' => 'Zielordner ist identisch zu Quellordner', 'tasks' => 'Aufgaben', 'task_core_expireddocs_days' => 'Tage', +'task_core_indexingdocs_recreate' => 'Index neu erzeugen', 'task_description' => 'Beschreibung', 'task_disabled' => 'Deaktiviert', 'task_frequency' => 'Häufigkeit', @@ -2023,6 +2033,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => 'Mindestens eine Transition hat weder einen Benutzer noch eine Gruppe zugewiesen!', 'workflow_user_summary' => 'Übersicht Benutzer', +'wrong_checksum' => 'Falsche Prüfsumme', 'wrong_filetype' => 'Falscher Dateityp', 'x_more_objects' => '[number] weitere Objekte', 'year_view' => 'Jahresansicht', diff --git a/languages/el_GR/lang.inc b/languages/el_GR/lang.inc index b4cb4fc10..a1e851c85 100644 --- a/languages/el_GR/lang.inc +++ b/languages/el_GR/lang.inc @@ -445,6 +445,7 @@ $text = array( 'edit_folder_props' => 'Επεξεργασία φακέλου', 'edit_group' => '', 'edit_online' => '', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => '', 'edit_transmittal_props' => '', @@ -510,6 +511,8 @@ $text = array( 'export_user_list_csv' => '', 'extension_archive' => '', 'extension_changelog' => '', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => '', 'extension_manager' => 'Διαχείριση πρόσθετων', 'extension_mgr_error_upload' => '', @@ -517,6 +520,8 @@ $text = array( 'extension_mgr_no_upload' => '', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => '', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => '', 'february' => 'Φεβρουάριος', 'file' => 'Αρχείο', @@ -965,6 +970,7 @@ URL: [url]', 'review_update_failed' => '', 'revise_document' => '', 'revise_document_on' => '', +'revision' => '', 'revisions_accepted' => '', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '', @@ -1053,6 +1059,7 @@ URL: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => 'Επιλογή', +'select_attrdef' => '', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', 'select_category' => 'Επιλογή κατηγορίας', @@ -1532,6 +1539,7 @@ URL: [url]', 'splash_edit_user' => '', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => '', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1634,8 +1642,10 @@ URL: [url]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => '', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => '', 'task_core_expireddocs_days' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1800,6 +1810,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => '', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => '', 'year_view' => '', diff --git a/languages/en_GB/lang.inc b/languages/en_GB/lang.inc index 28f117828..1839ec367 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 (1956), archonwang (3), dgrutsch (9), netixw (14) +// Translators: Admin (1969), archonwang (3), dgrutsch (9), netixw (14) $text = array( '2_factor_auth' => '2-factor authentication', @@ -516,6 +516,7 @@ URL: [url]', 'edit_folder_props' => 'Edit folder', 'edit_group' => 'Edit group', 'edit_online' => 'Edit online', +'edit_online_not_allowed' => 'You are not allowed to edit this file because you have not created the latest version. Just upload a new version of the document.', 'edit_online_warning' => 'Saving your changes will overwrite the content of the current version, instead of creating a new version.', 'edit_task' => 'Edit task', 'edit_transmittal_props' => 'Edit transmittal properties', @@ -585,6 +586,8 @@ URL: [url]', 'export_user_list_csv' => 'Export users as CSV', 'extension_archive' => 'Extension', 'extension_changelog' => 'Changelog', +'extension_is_off_now' => 'Extension off now', +'extension_is_on_now' => 'Extension now enabled', 'extension_loading' => 'Loading extensions ...', 'extension_manager' => 'Manage extensions', 'extension_mgr_error_upload' => 'Error while uploading the extension.', @@ -592,6 +595,8 @@ URL: [url]', 'extension_mgr_no_upload' => 'Uploading new extensions is not possible because the extentension directory is not writable.', 'extension_mgr_no_zipfile' => 'The uploaded extension is not a zip file', 'extension_mgr_repository' => 'Available', +'extension_missing_name' => 'No extension name given', +'extension_toggle_error' => 'Could not toggle extension', 'extension_version_list' => 'Versions', 'february' => 'February', 'file' => 'File', @@ -1145,6 +1150,7 @@ URL: [url]', 'review_update_failed' => 'Error updating review status. Update failed.', 'revise_document' => 'Revise document', 'revise_document_on' => 'Next revision of document version on [date]', +'revision' => 'Revision', 'revisions_accepted' => '[no_revisions] revisions already accepted', 'revisions_accepted_latest' => '(being [no_revisions] in latest version)', 'revisions_not_touched' => '[no_revisions] revisions not being touched', @@ -1251,6 +1257,7 @@ URL: [url]', 'seeddms_info' => 'Information about SeedDMS', 'seeddms_version' => 'Version of SeedDMS', 'selection' => 'Selection', +'select_attrdef' => 'Select attribute definition', 'select_attrdefgrp_show' => 'Choose when to show', 'select_attribute_value' => 'Select attribute value', 'select_category' => 'Click to select category', @@ -1653,7 +1660,7 @@ Name: [username] 'settings_System' => 'System', 'settings_tasksInMenu' => 'Selected tasks', 'settings_tasksInMenu_approval' => 'Approvals', -'settings_tasksInMenu_checkedout' => '', +'settings_tasksInMenu_checkedout' => 'Checked out', 'settings_tasksInMenu_desc' => 'Select those tasks which are to be counted. If none is selected, then all tasks will be counted.', 'settings_tasksInMenu_needscorrection' => 'Correction needed', 'settings_tasksInMenu_receipt' => 'Receipts', @@ -1735,6 +1742,7 @@ Name: [username] 'splash_edit_user' => 'User saved', 'splash_error_add_to_transmittal' => 'Error while adding document to transmittal', 'splash_error_rm_download_link' => 'Error when removing download link', +'splash_error_saving_file' => 'Error while saving file', 'splash_error_send_download_link' => 'Error while sending download link', 'splash_expiration_date_cleared' => 'Cleared expiration date', 'splash_expiration_date_set' => 'Set expiration date on [date]', @@ -1837,8 +1845,10 @@ Name: [username] 'takeOverIndApprovers' => 'Take Over Individual Approvers', 'takeOverIndReviewer' => 'Take over individual reviewer from last version.', 'takeOverIndReviewers' => 'Take Over Individual Reviewers', +'target_equals_source_folder' => 'Target folder equals source folder', 'tasks' => 'Tasks', 'task_core_expireddocs_days' => 'Days', +'task_core_indexingdocs_recreate' => 'Recreate index', 'task_description' => 'Description', 'task_disabled' => 'Disabled', 'task_frequency' => 'Frequency', @@ -2017,6 +2027,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => 'At least one of the transitions has neither a user nor a group!', 'workflow_user_summary' => 'User summary', +'wrong_checksum' => 'Wrong checksum', 'wrong_filetype' => 'Wrong file type', 'x_more_objects' => '[number] more objects', 'year_view' => 'Year View', diff --git a/languages/es_ES/lang.inc b/languages/es_ES/lang.inc index 03c596068..06759a3fb 100644 --- a/languages/es_ES/lang.inc +++ b/languages/es_ES/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: acabello (20), Admin (1292), angel (123), francisco (2), jaimem (14) +// Translators: acabello (20), Admin (1293), angel (123), francisco (2), jaimem (14) $text = array( '2_factor_auth' => '', @@ -499,6 +499,7 @@ URL: [url]', 'edit_folder_props' => 'Editar carpeta', 'edit_group' => 'Editar grupo...', 'edit_online' => 'Editar en línea', +'edit_online_not_allowed' => '', 'edit_online_warning' => 'Al guardar sus cambios sobrescribirá el contenido de la versión actual, en lugar de crear una nueva versión.', 'edit_task' => '', 'edit_transmittal_props' => '', @@ -568,6 +569,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => '', 'extension_changelog' => 'Log de Cambios', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => 'Cargando extensiones', 'extension_manager' => 'Administrar extensiones', 'extension_mgr_error_upload' => '', @@ -575,6 +578,8 @@ URL: [url]', 'extension_mgr_no_upload' => 'No es posible cargar mas extensiones porque el directorio de extensiones no se puede escribir', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => 'Disponible', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => 'Versiones', 'february' => 'Febrero', 'file' => 'Fichero', @@ -1093,6 +1098,7 @@ URL: [url]', 'review_update_failed' => 'Error actualizando el estado de la revisión. La actualización ha fallado.', 'revise_document' => 'Revisar documento', 'revise_document_on' => '', +'revision' => '', 'revisions_accepted' => '', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '', @@ -1173,7 +1179,7 @@ URL: [url]', 'scheduler_class_description' => 'Descripción', 'scheduler_class_parameter' => 'Parametro', 'scheduler_class_tasks' => '', -'scheduler_task_mgr' => 'Rrogramacion', +'scheduler_task_mgr' => 'Programación', 'search' => 'Buscar', 'search_fulltext' => 'Buscar en texto completo', 'search_in' => 'Buscar en', @@ -1194,6 +1200,7 @@ URL: [url]', 'seeddms_info' => 'Acerca de SeedDMS', 'seeddms_version' => 'Versión de SeedDMS', 'selection' => 'Selección', +'select_attrdef' => '', 'select_attrdefgrp_show' => '', 'select_attribute_value' => 'Seleccionar valores de atributos', 'select_category' => 'Haga Click para seleccionar categoría', @@ -1673,6 +1680,7 @@ URL: [url]', 'splash_edit_user' => 'Usuario guardado', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => '', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1775,8 +1783,10 @@ URL: [url]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'Tomar control de la revisión de la última versión', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => 'Tareas', 'task_core_expireddocs_days' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1955,6 +1965,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => 'Resumen Usuario', +'wrong_checksum' => '', 'wrong_filetype' => 'Tipo de archivo erróneo', 'x_more_objects' => '[number] más objetos', 'year_view' => 'Vista del año', diff --git a/languages/fr_FR/lang.inc b/languages/fr_FR/lang.inc index 9eaa41622..bb5a2dd7b 100644 --- a/languages/fr_FR/lang.inc +++ b/languages/fr_FR/lang.inc @@ -516,6 +516,7 @@ URL: [url]', 'edit_folder_props' => 'Modifier le dossier', 'edit_group' => 'Modifier un groupe', 'edit_online' => 'Modification en ligne', +'edit_online_not_allowed' => '', 'edit_online_warning' => 'L’enregistrement de vos modifications écrasera le contenu de la version actuelle au lieu de créer une nouvelle version.', 'edit_task' => 'Modifier la tâche', 'edit_transmittal_props' => 'Modifier les propriétés de la transmission', @@ -585,6 +586,8 @@ URL : [url]', 'export_user_list_csv' => 'Exporter les utilisateurs en CSV', 'extension_archive' => 'Extension', 'extension_changelog' => 'Journal des modifications', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => 'Chargement des extensions…', 'extension_manager' => 'Gestionnaire d\'extensions', 'extension_mgr_error_upload' => 'Erreur lors du chargement de l’extension', @@ -592,6 +595,8 @@ URL : [url]', 'extension_mgr_no_upload' => 'L’ajout de nouvelles extensions n’est pas possible car le répertoire des extensions n’est pas accessible en écriture.', 'extension_mgr_no_zipfile' => 'L’extension chargée n’est pas un dossier zip', 'extension_mgr_repository' => 'Disponibles', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => 'Versions', 'february' => 'Février', 'file' => 'Fichier', @@ -1142,6 +1147,7 @@ URL : [url]', 'review_update_failed' => 'Erreur lors de la mise à jour du statut de vérification. Échec de la mise à jour.', 'revise_document' => 'Réviser le document', 'revise_document_on' => 'Prochaine révision de la version du document le [date]', +'revision' => '', 'revisions_accepted' => '[no_revisions] révisions déjà confirmées', 'revisions_accepted_latest' => '(dont [no_revisions] dans la dernière version)', 'revisions_not_touched' => '[no_revisions] révisions non amorcées', @@ -1249,6 +1255,7 @@ URL : [url]', 'seeddms_info' => 'Informations sur SeedDMS', 'seeddms_version' => 'Version de SeedDMS', 'selection' => 'Sélection', +'select_attrdef' => '', 'select_attrdefgrp_show' => 'Choisir quand afficher', 'select_attribute_value' => 'Sélectionnez la valeur de l’attribut', 'select_category' => 'Cliquer pour choisir une catégorie', @@ -1733,6 +1740,7 @@ Nom : [username] 'splash_edit_user' => 'Utilisateur modifié', 'splash_error_add_to_transmittal' => 'Erreur lors de l’ajout du document à la transmission', 'splash_error_rm_download_link' => 'Erreur lors de la suppression du lien de téléchargement', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => 'Erreur lors de l’envoi du lien de téléchargement', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1835,8 +1843,10 @@ Nom : [username] 'takeOverIndApprovers' => 'Récupérer les approbateurs individuels', 'takeOverIndReviewer' => 'Récupérer les examinateurs de la dernière version.', 'takeOverIndReviewers' => 'Récupérer les examinateurs individuels', +'target_equals_source_folder' => '', 'tasks' => 'Tâches', 'task_core_expireddocs_days' => 'jours', +'task_core_indexingdocs_recreate' => '', 'task_description' => 'Description', 'task_disabled' => 'Désactivée', 'task_frequency' => 'Fréquence', @@ -2015,6 +2025,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => 'Au moins une transition a ni utilisateur, ni groupe !', 'workflow_user_summary' => 'Récapitulatif utilisateur', +'wrong_checksum' => '', 'wrong_filetype' => 'Mauvais type de fichier', 'x_more_objects' => '[number] objets supplémentaires', 'year_view' => 'Vue annuelle', diff --git a/languages/hr_HR/lang.inc b/languages/hr_HR/lang.inc index e237696b1..ea5ea935d 100644 --- a/languages/hr_HR/lang.inc +++ b/languages/hr_HR/lang.inc @@ -504,6 +504,7 @@ Internet poveznica: [url]', 'edit_folder_props' => 'Uredi mapu', 'edit_group' => 'Uredi mapu', 'edit_online' => '', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => '', 'edit_transmittal_props' => 'Izmjena postavki proslijeđivanja', @@ -573,6 +574,8 @@ Internet poveznica: [url]', 'export_user_list_csv' => '', 'extension_archive' => '', 'extension_changelog' => 'Popis promjena', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => 'Učitavanje dodataka…', 'extension_manager' => 'Upravljanje ekstenzijama', 'extension_mgr_error_upload' => '', @@ -580,6 +583,8 @@ Internet poveznica: [url]', 'extension_mgr_no_upload' => 'Upload novih ekstenzija nije moguć pošto mapa ekstenzija nema dozvolu pisanja', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => 'Dostupno', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => 'Inačice', 'february' => 'Veljača', 'file' => 'Datoteka', @@ -1114,6 +1119,7 @@ Internet poveznica: [url]', 'review_update_failed' => 'Greška kod izmjene statusa pregleda. Izmjena nije uspjela.', 'revise_document' => 'Revidiraj dokument', 'revise_document_on' => 'Slijedeća revizija verzije dokumenta na dan [date]', +'revision' => '', 'revisions_accepted' => '', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '', @@ -1215,6 +1221,7 @@ Internet poveznica: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => 'Odabir', +'select_attrdef' => '', 'select_attrdefgrp_show' => '', 'select_attribute_value' => 'Izbari vrednost atributa', 'select_category' => 'Kliknite za odabir kategorije', @@ -1694,6 +1701,7 @@ Internet poveznica: [url]', 'splash_edit_user' => 'Korisnik pohranjen', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => '', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1796,8 +1804,10 @@ Internet poveznica: [url]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'Preuzimanje pojedinačnog revizora iz zadnje verzije.', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => 'Zadaci', 'task_core_expireddocs_days' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1976,6 +1986,7 @@ Internet poveznica: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => 'Pregled korisnika', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => '[number] više objekata', 'year_view' => 'Pregled po godini', diff --git a/languages/hu_HU/lang.inc b/languages/hu_HU/lang.inc index f58b0a8e3..fa2b65ba9 100644 --- a/languages/hu_HU/lang.inc +++ b/languages/hu_HU/lang.inc @@ -499,6 +499,7 @@ URL: [url]', 'edit_folder_props' => 'Mappa szerkesztése', 'edit_group' => 'Csoport szerkesztése', 'edit_online' => '', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => '', 'edit_transmittal_props' => '', @@ -568,6 +569,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => 'Bővítmények', 'extension_changelog' => 'Változásnapló', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => 'Kiterjesztések betöltése ...', 'extension_manager' => 'Bővítmények kezelése', 'extension_mgr_error_upload' => '', @@ -575,6 +578,8 @@ URL: [url]', 'extension_mgr_no_upload' => '', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => 'Telepíthető', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => 'Verziók', 'february' => 'Február', 'file' => 'Állomány', @@ -1093,6 +1098,7 @@ URL: [url]', 'review_update_failed' => 'Hiba a felülvizsgálat állapot frissítése során. Frissítés sikertelen.', 'revise_document' => '', 'revise_document_on' => '', +'revision' => '', 'revisions_accepted' => '', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '', @@ -1193,6 +1199,7 @@ URL: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => 'Selection', +'select_attrdef' => '', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', 'select_category' => 'Kattintson a kategória kiválasztásához', @@ -1672,6 +1679,7 @@ URL: [url]', 'splash_edit_user' => 'Felhasználó mentve', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => '', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1774,8 +1782,10 @@ URL: [url]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => '', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => '', 'task_core_expireddocs_days' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1954,6 +1964,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => 'Felhasználó áttekintés', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => '[number] további tétel', 'year_view' => 'Éves nézet', diff --git a/languages/it_IT/lang.inc b/languages/it_IT/lang.inc index 7c84f2649..25300676a 100644 --- a/languages/it_IT/lang.inc +++ b/languages/it_IT/lang.inc @@ -509,6 +509,7 @@ URL: [url]', 'edit_folder_props' => 'Modifica proprietà cartella', 'edit_group' => 'Modifica il gruppo', 'edit_online' => 'Modifica online', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => 'Modifica attività', 'edit_transmittal_props' => 'Modifica proprietà trasmissione', @@ -578,6 +579,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => 'Archivio estensioni', 'extension_changelog' => 'Registro delle modifiche delle estensioni', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => 'Caricamento estensioni...', 'extension_manager' => 'Gestisci le estensioni dei files', 'extension_mgr_error_upload' => '', @@ -585,6 +588,8 @@ URL: [url]', 'extension_mgr_no_upload' => 'Il caricamento della nuova estensione non è possibile perchè la cartella delle estensioni non ha diritti di scrittura', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => 'Disponibile', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => 'Versioni', 'february' => 'Febbraio', 'file' => 'File', @@ -1131,6 +1136,7 @@ URL: [url]', 'review_update_failed' => 'Errore nella variazione dello stato di revisione. Aggiornamento fallito.', 'revise_document' => 'Riesamina documento', 'revise_document_on' => 'Prossimo riesame del documento il [date]', +'revision' => '', 'revisions_accepted' => '[no_reviews] riesami già accettati', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '[no_reviews] riesami non gestiti', @@ -1237,6 +1243,7 @@ URL: [url]', 'seeddms_info' => '', 'seeddms_version' => 'Versione di SeedDMS', 'selection' => 'Selezione', +'select_attrdef' => '', 'select_attrdefgrp_show' => 'Scegli quando mostrare', 'select_attribute_value' => 'Seleziona il valore dell\'attributo', 'select_category' => 'Clicca per selezionare la categoria', @@ -1721,6 +1728,7 @@ Name: [username] 'splash_edit_user' => 'Utente modificato', 'splash_error_add_to_transmittal' => 'Errore durante l\'aggiunta di documento per la trasmissione', 'splash_error_rm_download_link' => 'Errore durante la rimozione del collegamento di scaricamento', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => 'Errore durante l\'invio del collegamento di scaricamento', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1823,8 +1831,10 @@ Name: [username] 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'Riprendi il revisore dall\'ultima versione.', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => 'Attività', 'task_core_expireddocs_days' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => 'Descrizione', 'task_disabled' => 'Disabilitata', 'task_frequency' => 'Frequenza', @@ -2003,6 +2013,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => 'Almeno una delle transizioni non ha un utente o un gruppo!', 'workflow_user_summary' => 'Riepilogo utenti', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => '[number] altri oggetti', 'year_view' => 'Vista anno', diff --git a/languages/ko_KR/lang.inc b/languages/ko_KR/lang.inc index fc2160321..8e03c3f65 100644 --- a/languages/ko_KR/lang.inc +++ b/languages/ko_KR/lang.inc @@ -505,6 +505,7 @@ URL: [url]', 'edit_folder_props' => '폴더 편집', 'edit_group' => '편집 그룹', 'edit_online' => '', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => '', 'edit_transmittal_props' => '전송 속성 편집', @@ -574,6 +575,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => '', 'extension_changelog' => '', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => '', 'extension_manager' => '확장자 관리', 'extension_mgr_error_upload' => '', @@ -581,6 +584,8 @@ URL: [url]', 'extension_mgr_no_upload' => '', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => '', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => '', 'february' => '2월', 'file' => '파일', @@ -1108,6 +1113,7 @@ URL: [url]', 'review_update_failed' => '오류 업데이트 검토 상태. 업데이트에 실패했습니다 rewind_workflow워크플로우 되돌리기', 'revise_document' => '개정 문서', 'revise_document_on' => '문서 버전의 다음 개정 [날짜]', +'revision' => '', 'revisions_accepted' => '', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '', @@ -1209,6 +1215,7 @@ URL : [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => '선택', +'select_attrdef' => '', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', 'select_category' => '범주를 선택합니다', @@ -1688,6 +1695,7 @@ URL : [url]', 'splash_edit_user' => '사용자 저장', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => '', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1790,8 +1798,10 @@ URL : [url]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => '최종 버전의 개인별 검수자를 상속합니다.', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => '작업', 'task_core_expireddocs_days' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1970,6 +1980,7 @@ URL : [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => '사용자 요약', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => '', 'year_view' => '연간 단위로 보기', diff --git a/languages/lo_LA/lang.inc b/languages/lo_LA/lang.inc index 9b1633fec..72374012f 100644 --- a/languages/lo_LA/lang.inc +++ b/languages/lo_LA/lang.inc @@ -502,6 +502,7 @@ URL: [url]', 'edit_folder_props' => 'ແກ້ໄຂໂຟລເດີ', 'edit_group' => 'ແກ້ໄຂກຸ່ມ', 'edit_online' => 'ແກ້ໄຂອອນລາຍ', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => '', 'edit_transmittal_props' => 'ແກ້ໄຂຄຸນສົມບັດໃນການຖ່າຍທອດ', @@ -571,6 +572,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => '', 'extension_changelog' => '', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => '', 'extension_manager' => 'ການຈັດການສ່ວນຂະຫຍາຍ', 'extension_mgr_error_upload' => '', @@ -578,6 +581,8 @@ URL: [url]', 'extension_mgr_no_upload' => '', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => '', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => '', 'february' => 'ເດືອນ ກຸມພາ', 'file' => 'ໄຟລ', @@ -1124,6 +1129,7 @@ URL: [url]', 'review_update_failed' => 'ເກີດຂໍ້ຜິດພາດໃນການອັບເດດສະຖານະຄຳເຫັນໄດ້ລົ້ມເຫຼວ', 'revise_document' => 'ແກ້ໄຂເອກະສານ', 'revise_document_on' => 'ແກ້ໄຂເອກະສານຮູບແບບໄຫມ່ ໃນ ວັນທີ', +'revision' => '', 'revisions_accepted' => 'ໄດ້ມີການແກ້ໄຂເອກະສານແລ້ວ ບໍ່ມີການແກ້ໄຂ', 'revisions_accepted_latest' => '', 'revisions_not_touched' => 'ບໍ່ມີການແກ້ໄຂ ການແກ້ໄຂບໍ່ຖືກຕ້ອງ', @@ -1230,6 +1236,7 @@ URL: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => 'ການເລືອກ', +'select_attrdef' => '', 'select_attrdefgrp_show' => 'ເລືອກເວລາທີ່ຈະສະແດງ', 'select_attribute_value' => '', 'select_category' => 'ຄິກເພື່ອເລືອກປະເພດ', @@ -1714,6 +1721,7 @@ URL: [url]', 'splash_edit_user' => 'ບັນທຶກຜູ້ໄຊ້ແລ້ວ', 'splash_error_add_to_transmittal' => 'ເກີດຂໍ້ຜິດພາດໃນຂະນະທີ່ເພີ່ມເອກະສານເພື່ອຕິດຕໍ່', 'splash_error_rm_download_link' => 'ຂໍ້ຜິດພາດໃນການລົບລິງການດາວໂຫລດ', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => 'ຂໍ້ຜິດພາດໃນການລົບລິງການດາວໂຫລດ', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1816,8 +1824,10 @@ URL: [url]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'ການກວດສອບແຕ່ລະບຸກຄົນຈາກເວີຊັ້ນລ່າສຸດ', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => 'ງານ', 'task_core_expireddocs_days' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1996,6 +2006,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => 'ການປ່ຽນພາບຢ່າງນ້ອຍໜື່ງຄັ້ງບໍ່ມີທັງຜູ້ໄຊ້ແລະກຸ່ມ', 'workflow_user_summary' => 'ສະຫລູບຂໍ້ມູນຂອງຜູ້ໄຊ້', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => '', 'year_view' => 'ແຜນປະຈຳປີ', diff --git a/languages/nb_NO/lang.inc b/languages/nb_NO/lang.inc index 9f9a47c03..87fec4289 100644 --- a/languages/nb_NO/lang.inc +++ b/languages/nb_NO/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 (1731) +// Translators: Admin (1732) $text = array( '2_factor_auth' => '2-trinns autentisering', @@ -336,7 +336,7 @@ URL: [url]', 'daily' => 'Daglig', 'databasesearch' => 'Søk i database', 'database_schema_version' => '', -'data_loading' => '', +'data_loading' => 'Vennligst vent, til dataene er lastet ...', 'date' => 'Dato', 'days' => 'dager', 'debug' => 'Feilsøking', @@ -516,6 +516,7 @@ URL: [url]', 'edit_folder_props' => 'Rediger mappe', 'edit_group' => 'Rediger gruppe', 'edit_online' => 'Rediger online', +'edit_online_not_allowed' => '', 'edit_online_warning' => 'Lagring av endringene vil overskrive innholdet i den gjeldende versjonen, i stedet for å opprette en ny versjon.', 'edit_task' => 'Redigere oppgave', 'edit_transmittal_props' => 'Rediger overføringsegenskaper', @@ -585,6 +586,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => 'Utvidelse', 'extension_changelog' => 'Endringslogg', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => 'Laster inn utvidelser ...', 'extension_manager' => 'Administrer utvidelser', 'extension_mgr_error_upload' => '', @@ -592,6 +595,8 @@ URL: [url]', 'extension_mgr_no_upload' => 'Det er ikke mulig å laste opp nye utvidelser fordi utvidelseskatalogen ikke kan skrives til.', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => 'Tilgjengelig', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => 'Versjon', 'february' => 'Februar', 'file' => 'Fil', @@ -1139,6 +1144,7 @@ URL: [url]', 'review_update_failed' => 'Feil ved oppdatering av korrekturstatus. Oppdatering mislyktes.', 'revise_document' => 'Korrektur av dokumentet', 'revise_document_on' => 'Neste korrektur av dokumentversjonen den [date]', +'revision' => '', 'revisions_accepted' => '[no_revisions] korrektur allerede godkjent', 'revisions_accepted_latest' => '(er [no_revisions] i siste versjon)', 'revisions_not_touched' => '[no_revisions] korrektur blir ikke berørt', @@ -1245,6 +1251,7 @@ URL: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => 'Utvalg', +'select_attrdef' => '', 'select_attrdefgrp_show' => 'Velg visings alternativ', 'select_attribute_value' => 'Velg egenskapsverdi', 'select_category' => 'Klikk for å velge kategori', @@ -1727,6 +1734,7 @@ Bruker: [username] 'splash_edit_user' => 'Bruker lagret', 'splash_error_add_to_transmittal' => 'Feil under tilføyelse av dokument til overføringen', 'splash_error_rm_download_link' => 'Feil ved fjerning av nedlastingslenke', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => 'Feil under sending av nedlastingslenke', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1829,8 +1837,10 @@ Bruker: [username] 'takeOverIndApprovers' => 'Ta over individuelle godkjennere', 'takeOverIndReviewer' => 'Ta over individuell anmelder fra forrige versjon.', 'takeOverIndReviewers' => 'Ta over individuelle korrekturleser', +'target_equals_source_folder' => '', 'tasks' => 'Oppgaver', 'task_core_expireddocs_days' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => 'Beskrivelse', 'task_disabled' => 'Deaktivert', 'task_frequency' => 'Frekvens', @@ -2009,6 +2019,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => 'Minst en av overgangene har verken en bruker eller en gruppe!', 'workflow_user_summary' => 'Brukersammendrag', +'wrong_checksum' => '', 'wrong_filetype' => 'Feil filtype', 'x_more_objects' => '[number] flere objekter', 'year_view' => 'Årsvisning', diff --git a/languages/nl_NL/lang.inc b/languages/nl_NL/lang.inc index 96aa7d2d3..87830422e 100644 --- a/languages/nl_NL/lang.inc +++ b/languages/nl_NL/lang.inc @@ -509,6 +509,7 @@ URL: [url]', 'edit_folder_props' => 'Wijzig Map eigenschappen', 'edit_group' => 'Wijzig Groep', 'edit_online' => 'Online bewerken', +'edit_online_not_allowed' => '', 'edit_online_warning' => 'Waarschuwing: als u de wijzigingen opslaat, wordt de bestaande versie van het document overschreven. Er wordt dus geen nieuwe versie gemaakt.', 'edit_task' => 'Taak bewerken', 'edit_transmittal_props' => 'Opmerkingen bij verzending', @@ -578,6 +579,8 @@ URL: [url]', 'export_user_list_csv' => 'Exporteer gebruikers in csv-formaat', 'extension_archive' => 'Extensies', 'extension_changelog' => 'Overzicht van wijzigingen', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => 'Laden van extensies ...', 'extension_manager' => 'Extensies beheren', 'extension_mgr_error_upload' => 'Fout bij het uploaden van de extensie', @@ -585,6 +588,8 @@ URL: [url]', 'extension_mgr_no_upload' => 'Installeren nieuwe extensies is niet mogelijk omdat de extensies map niet schrijfbaar is.', 'extension_mgr_no_zipfile' => 'Fout bij uploaden extensie: is geen zipfile', 'extension_mgr_repository' => 'Beschikbaar', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => 'Versies', 'february' => 'februari', 'file' => 'Bestand', @@ -1136,6 +1141,7 @@ URL: [url]', 'review_update_failed' => 'Fout: bijwerken status beoordeling mislukt.', 'revise_document' => 'Document herzien', 'revise_document_on' => 'Volgende herziening van document op [date]', +'revision' => '', 'revisions_accepted' => '[no_revisions] revisies geaccepteerd', 'revisions_accepted_latest' => '(er zijn [no_revisions] in de nieuwste versie)', 'revisions_not_touched' => '[no_revisions] revisies geopend', @@ -1242,6 +1248,7 @@ URL: [url]', 'seeddms_info' => 'Informatie over SeedDMS', 'seeddms_version' => 'De versie van SeedDMS', 'selection' => 'Selectie', +'select_attrdef' => '', 'select_attrdefgrp_show' => 'Toon attribuut-definities-groep', 'select_attribute_value' => 'Kies een waarde voor het attribuut', 'select_category' => 'klik om categorie te selecteren', @@ -1726,6 +1733,7 @@ Name: [username] 'splash_edit_user' => 'Gebruiker opgeslagen', 'splash_error_add_to_transmittal' => 'Fout: toevoeging aan verzending', 'splash_error_rm_download_link' => 'Fout bij verwijderen download-link', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => 'Fout bij verzenden download-link', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1828,8 +1836,10 @@ Name: [username] 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'Onthoud de laatste groep individuele herzieners', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => 'taken', 'task_core_expireddocs_days' => 'Dagen', +'task_core_indexingdocs_recreate' => '', 'task_description' => 'Omschrijving', 'task_disabled' => 'Inactief', 'task_frequency' => 'Frequentie', @@ -2008,6 +2018,7 @@ URL: [url]', 'workflow_title' => 'Titel van de workflow', 'workflow_transition_without_user_group' => 'Minstens één transitie kent geen gebruiker of groep', 'workflow_user_summary' => 'Gebruiker samenvatting', +'wrong_checksum' => '', 'wrong_filetype' => 'Fout bestandstype', 'x_more_objects' => 'meer items', 'year_view' => 'Jaaroverzicht', diff --git a/languages/pl_PL/lang.inc b/languages/pl_PL/lang.inc index cb794098a..fbdd2db3a 100644 --- a/languages/pl_PL/lang.inc +++ b/languages/pl_PL/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 (1456), netixw (84), romi (93), uGn (112) +// Translators: Admin (1479), netixw (84), romi (93), uGn (112) $text = array( '2_factor_auth' => 'Uwierzytelnianie dwuetapowe', @@ -323,8 +323,8 @@ URL: [url]', 'current_version' => 'Bieżąca wiersja', 'daily' => 'Codziennie', 'databasesearch' => 'Przeszukiwanie bazy danych', -'database_schema_version' => '', -'data_loading' => '', +'database_schema_version' => 'Wersja schematu bazy danych', +'data_loading' => 'Proszę czekać, dane są pobierane...', 'date' => 'Data', 'days' => 'dni', 'debug' => 'Debugowanie', @@ -492,6 +492,7 @@ URL: [url]', 'edit_folder_props' => 'Edytuj folder', 'edit_group' => 'Edytuj grupę', 'edit_online' => 'Edytuj online', +'edit_online_not_allowed' => '', 'edit_online_warning' => 'Zapisanie zmian spowoduje zastąpienie zawartości bieżącej wersji, zamiast tworzenia nowej wersji.', 'edit_task' => 'Edytuj zadanie', 'edit_transmittal_props' => 'Edytuj właściwości przekazu', @@ -561,6 +562,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => 'Rozszerzenie', 'extension_changelog' => 'Log Zmian', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => 'Wgrywam dodatki...', 'extension_manager' => 'Zarządzanie rozszerzeniami', 'extension_mgr_error_upload' => '', @@ -568,6 +571,8 @@ URL: [url]', 'extension_mgr_no_upload' => 'Wgrywanie nowych rozszerzeń jest niemożliwe ponieważ folder rozszerzeń jest zablokowany do zapisu', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => 'Dostępne', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => 'Wersje', 'february' => 'Luty', 'file' => 'Plik', @@ -1072,6 +1077,7 @@ URL: [url]', 'review_update_failed' => 'Błąd podczas aktualizowania statusu recenzji. Aktualizacja nie powiodła się.', 'revise_document' => 'Zweryfikuj dokument', 'revise_document_on' => 'Sprawdź dokument', +'revision' => '', 'revisions_accepted' => 'Korekty zaakceptowane', 'revisions_accepted_latest' => 'Korekty zaakceptowane później', 'revisions_not_touched' => 'Korekty nie oglądane', @@ -1170,9 +1176,10 @@ URL: [url]', 'search_results_access_filtered' => 'Wyniki wyszukiwania mogą zawierać treści, do których dostęp jest zabroniony.', 'search_time' => 'Upływający czas: [time] sec.', 'seconds' => 'sekund', -'seeddms_info' => '', -'seeddms_version' => '', +'seeddms_info' => 'Informacje o SeedDMS', +'seeddms_version' => 'Wersja SeedDMS', 'selection' => 'Wybierz', +'select_attrdef' => '', 'select_attrdefgrp_show' => 'Wybierz, kiedy pokazać', 'select_attribute_value' => 'Wybierz wartość atrybutu', 'select_category' => 'Kliknij by wybrać kategorię', @@ -1232,12 +1239,12 @@ Name: [username] 'settings_allowReviewerOnly' => 'Zezwalaj tylko na ustawianie recenzenta', 'settings_allowReviewerOnly_desc' => 'Włącz to, jeśli będzie można zezwolić na ustawienie tylko recenzenta, ale bez osoby zatwierdzającej w tradycyjnym trybie przepływu pracy.', 'settings_apache_mod_rewrite' => 'Apache - Moduł Rewrite', -'settings_apiKey' => '', -'settings_apiKey_desc' => '', -'settings_apiOrigin' => '', -'settings_apiOrigin_desc' => '', -'settings_apiUserId' => '', -'settings_apiUserId_desc' => '', +'settings_apiKey' => 'Klucz autentyfikacyjny dla REST API', +'settings_apiKey_desc' => 'Ten klucz jest używany jako alternatywna autentyfikacja dla REST API. Wybierz 32-znakowy łańcuch.', +'settings_apiOrigin' => 'Dozwolone źródła wywołań API', +'settings_apiOrigin_desc' => 'Lista adresów oddzielonych średnikami. Każdy adres ma formę ://[:]. Port może być pominięty. Jeżeli to pole jest puste, nie ma żadnych ograniczeń.', +'settings_apiUserId' => 'Użytkownik dla REST API', +'settings_apiUserId_desc' => 'Ten użytkownik będzie użyty przez REST API, jeżeli do autentyfikacji użyto prekonfigurowanego klucza REST API.', 'settings_Authentication' => 'Ustawienia uwierzytelniania', 'settings_autoLoginUser' => 'Automatyczne logowanie', 'settings_autoLoginUser_desc' => 'Użyj tego identyfikatora użytkownika, aby uzyskać dostęp, jeśli użytkownik nie jest jeszcze zalogowany. Taki dostęp nie utworzy sesji.', @@ -1271,10 +1278,10 @@ Name: [username] 'settings_createdirectory' => 'Utwórz katalog', 'settings_currentvalue' => 'Bieżąca wartość', 'settings_Database' => 'Ustawienia bazy danych', -'settings_dateformat' => '', -'settings_dateformat_desc' => '', -'settings_datetimeformat' => '', -'settings_datetimeformat_desc' => '', +'settings_dateformat' => 'Format daty', +'settings_dateformat_desc' => 'Format daty używa składni funkcji php date()', +'settings_datetimeformat' => 'Format daty i czasu', +'settings_datetimeformat_desc' => 'Format daty używa składni funkcji php date()', 'settings_dbDatabase' => 'Baza danych', 'settings_dbDatabase_desc' => 'Nazwa dla bazy danych podana w procesie instalacji. Nie zmieniaj tego pola bez konieczności, na przykład kiedy baza danych została przeniesiona.', 'settings_dbDriver' => 'Typ bazy danych', @@ -1431,8 +1438,8 @@ Name: [username] 'settings_initialDocumentStatus_desc' => 'Ten stan zostanie ustawiony po dodaniu dokumentu.', 'settings_initialDocumentStatus_draft' => 'Projekt', 'settings_initialDocumentStatus_released' => 'Wydany', -'settings_inlineEditing' => '', -'settings_inlineEditing_desc' => '', +'settings_inlineEditing' => 'Edycja w szczegółach', +'settings_inlineEditing_desc' => 'Pozwala edytować nazwę dokumentu na stronie szczegółów dokumentu.', 'settings_installADOdb' => 'Zainstaluj ADOdb', 'settings_install_disabled' => 'Plik ENABLE_INSTALL_TOOL został usunięty. Możesz teraz zalogować się do LetoDMS i przeprowadzić dalszą konfigurację.', 'settings_install_pear_package_log' => 'Zainstaluj pakiet Pear \'Log\'', @@ -1478,8 +1485,8 @@ Name: [username] 'settings_onePageMode_desc' => 'Tryb jednostronicowy włączy kod javascript na stronie Wyświetl folder, który aktualizuje listę folderów / dokumentów, nawigację itp. Po kliknięciu folderu lub zmianie parametru sortowania.', 'settings_overrideMimeType' => 'Nadpisz typ rozszerzenia', 'settings_overrideMimeType_desc' => 'Zastąp typ MimeType dostarczony przez przeglądarkę, jeśli plik zostanie przesłany. Nowy typ MimeType jest określany przez sam SeedDMS.', -'settings_overrideTheme' => '', -'settings_overrideTheme_desc' => '', +'settings_overrideTheme' => 'Przykryj motyw', +'settings_overrideTheme_desc' => 'Włącz tą opcję aby przykryć motyw zapisany w danych użytkownika motywem wybranym w tej konfiguracji.', 'settings_partitionSize' => 'Rozmiar części pliku', 'settings_partitionSize_desc' => 'Rozmiar części pliku, w bajtach, wczytywane przez jumploader. Nie wpisuj wartości większej niż maksymalna wartość wczytywanego pliku ustawiona na serwerze.', 'settings_passwordExpiration' => 'Wygaśnięcie hasła', @@ -1593,8 +1600,8 @@ Name: [username] 'settings_updateNotifyTime' => 'Okres powiadamiania o zmianach', 'settings_updateNotifyTime_desc' => 'Użytkownicy są powiadamiani o zmianach w dokumentach, które miały miejsce w ciągu ostatnich \'Update Notify Time\' sekund', 'settings_upgrade_php' => 'Uaktualnij PHP do wersji przynajmniej 5.6.38', -'settings_useHomeAsRootFolder' => '', -'settings_useHomeAsRootFolder_desc' => '', +'settings_useHomeAsRootFolder' => 'Użyj folderu domowego jako początkowego', +'settings_useHomeAsRootFolder_desc' => 'Włącz tą opcję jeżeli folder domowy użytkownika (nie-administratora) ma być folderem początkowym (eksperymentalne)', 'settings_versioningFileName' => 'Nazwa pliku z wersjonowaniem', 'settings_versioningFileName_desc' => 'Nazwa pliku, zawierającego informacje o wersjonowaniu, utworzonego przez narzędzie kopii zapasowej.', 'settings_versiontolow' => 'Za niska wersja', @@ -1657,6 +1664,7 @@ Name: [username] 'splash_edit_user' => 'Zapisano użytkownika', 'splash_error_add_to_transmittal' => 'Błąd podczas dodawania dokumentu do przekazu', 'splash_error_rm_download_link' => 'Błąd podczas usuwania linku do pobrania', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => 'Błąd podczas wysyłania linku do pobrania', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1759,8 +1767,10 @@ Name: [username] 'takeOverIndApprovers' => 'Przejmij indywidualne osoby zatwierdzające', 'takeOverIndReviewer' => 'Przejmij kontrolę nad indywidualnym recenzentem z ostatniej wersji.', 'takeOverIndReviewers' => 'Przejmij poszczególnych recenzentów', +'target_equals_source_folder' => '', 'tasks' => 'Zadania', 'task_core_expireddocs_days' => 'Rdzeń zadania wygasa', +'task_core_indexingdocs_recreate' => '', 'task_description' => 'Opis zadania', 'task_disabled' => 'Zadanie wyłączone', 'task_frequency' => 'Częstotliwość zadania', @@ -1900,7 +1910,7 @@ URL: [url]', 'version_deleted_email_subject' => '[sitename]: [name] - Usunięcie wersji', 'version_info' => 'Informacje o wersji', 'view' => 'Widok', -'view_document' => '', +'view_document' => 'Wyświetl szczegóły dokumentu', 'view_folder' => '', 'view_online' => 'Obejrzyj online', 'warning' => 'Ostrzeżenie', @@ -1939,6 +1949,7 @@ URL: [url]', 'workflow_title' => 'Tytuł przepływu pracy', 'workflow_transition_without_user_group' => 'Co najmniej jedno z przejść nie ma ani użytkownika, ani grupy!', 'workflow_user_summary' => 'Podsumowanie użytkownika', +'wrong_checksum' => '', 'wrong_filetype' => 'Nieprawidłowy typ pliku', 'x_more_objects' => '[number] więcej obiektów', 'year_view' => 'Widok roczny', diff --git a/languages/pt_BR/lang.inc b/languages/pt_BR/lang.inc index 64f1ee6b0..db62513d1 100644 --- a/languages/pt_BR/lang.inc +++ b/languages/pt_BR/lang.inc @@ -516,6 +516,7 @@ URL: [url]', 'edit_folder_props' => 'Editar pasta', 'edit_group' => 'Editar grupo', 'edit_online' => 'Editar on-line', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => 'Editar tarefa', 'edit_transmittal_props' => 'Editar propriedades de transmissão', @@ -585,6 +586,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => 'Extensão', 'extension_changelog' => 'Alterações no Log', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => 'Carregando Extensões', 'extension_manager' => 'Gerenciar extensões', 'extension_mgr_error_upload' => '', @@ -592,6 +595,8 @@ URL: [url]', 'extension_mgr_no_upload' => 'O envio de novas extensões não esta disponível pois o diretório Extensões recebeu a atribuição de Somente Leitura.', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => 'Disponível', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => 'Versões', 'february' => 'Fevereiro', 'file' => 'Arquivo', @@ -1143,6 +1148,7 @@ URL: [url]', 'review_update_failed' => 'Erro ao atualizar o status da revisão. Atualização falhou.', 'revise_document' => 'Revisar documento', 'revise_document_on' => 'Próxima revisão da versão do documento em [date]', +'revision' => '', 'revisions_accepted' => '[no_revisions] revisões já aceitas', 'revisions_accepted_latest' => 'revisões aceitas mais recentes', 'revisions_not_touched' => '[no_revisions] revisões não sendo tocadas', @@ -1249,6 +1255,7 @@ URL: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => 'Seleção', +'select_attrdef' => '', 'select_attrdefgrp_show' => 'Escolha quando mostrar', 'select_attribute_value' => 'Selecione o valor do atributo', 'select_category' => 'Clique para selecionar a categoria', @@ -1733,6 +1740,7 @@ Nome: [username] 'splash_edit_user' => 'Usuário salvo', 'splash_error_add_to_transmittal' => 'Erro ao adicionar documento à transmissão', 'splash_error_rm_download_link' => 'Erro ao remover o link de download', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => 'Erro ao enviar o link de download', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1835,8 +1843,10 @@ Nome: [username] 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'Assuma o revisor individual da última versão.', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => 'Tarefas', 'task_core_expireddocs_days' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => 'Descrição', 'task_disabled' => 'Desativado', 'task_frequency' => 'Frequência', @@ -2015,6 +2025,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => 'transição do fluxo de trabalho sem grupo de usuários', 'workflow_user_summary' => 'Sumário de usuário', +'wrong_checksum' => '', 'wrong_filetype' => 'Tipo de arquivo errado', 'x_more_objects' => 'mais itens', 'year_view' => 'Visualização Anual', diff --git a/languages/ro_RO/lang.inc b/languages/ro_RO/lang.inc index 3ee604f57..1901a1384 100644 --- a/languages/ro_RO/lang.inc +++ b/languages/ro_RO/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 (1101), balan (87) +// Translators: Admin (1103), balan (87) $text = array( '2_factor_auth' => '', @@ -336,7 +336,7 @@ URL: [url]', 'daily' => 'Zilnic', 'databasesearch' => 'Căutare baza de date', 'database_schema_version' => '', -'data_loading' => '', +'data_loading' => 'Așteaptă, datele se încarcă...', 'date' => 'Data', 'days' => 'zile', 'debug' => '', @@ -504,6 +504,7 @@ URL: [url]', 'edit_folder_props' => 'Editează folder', 'edit_group' => 'Editează grup', 'edit_online' => '', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => '', 'edit_transmittal_props' => 'Editeaza proprietatile de transmitere', @@ -573,6 +574,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => '', 'extension_changelog' => '', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => 'Se incarca extensiile', 'extension_manager' => 'Gestionați extensiile', 'extension_mgr_error_upload' => '', @@ -580,6 +583,8 @@ URL: [url]', 'extension_mgr_no_upload' => 'Nu se poate incarca o extensie noua pentru ca directorul nu are drepturi de scriere', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => 'Disponibila', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => 'Versiuni', 'february' => 'Februarie', 'file' => 'Fișier', @@ -1115,6 +1120,7 @@ URL: [url]', 'review_update_failed' => 'Eroare actualizarea status revizuire. Actualizarea a eșuat.', 'revise_document' => 'Revizuiti documentul', 'revise_document_on' => 'Urmatoarea revizuire a versiunii document pe [data]', +'revision' => '', 'revisions_accepted' => '', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '', @@ -1216,6 +1222,7 @@ URL: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => 'Selecție', +'select_attrdef' => '', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', 'select_category' => 'Click pentru a selecta categoria', @@ -1695,6 +1702,7 @@ URL: [url]', 'splash_edit_user' => 'Utilizator salvat', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => '', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1797,8 +1805,10 @@ URL: [url]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'Preia revizuitorul individual din ultima versiune.', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => '', 'task_core_expireddocs_days' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1938,7 +1948,7 @@ URL: [url]', 'version_deleted_email_subject' => '[sitename]: [name] - Versiune ștearsă', 'version_info' => 'Informații versiune', 'view' => 'Vizualizare', -'view_document' => '', +'view_document' => 'Afișează detaliile documentului', 'view_folder' => '', 'view_online' => 'Vizualizare online', 'warning' => 'Avertisment', @@ -1977,6 +1987,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => 'Sumar Utilizator', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => 'Mai multe', 'year_view' => 'Vizualizare an', diff --git a/languages/ru_RU/lang.inc b/languages/ru_RU/lang.inc index b9df1fc11..0e7f3e1bc 100644 --- a/languages/ru_RU/lang.inc +++ b/languages/ru_RU/lang.inc @@ -504,6 +504,7 @@ URL: [url]', 'edit_folder_props' => 'Изменить свойства', 'edit_group' => 'Изменить группу', 'edit_online' => '', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => '', 'edit_transmittal_props' => 'Редактировать группы получателей', @@ -573,6 +574,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => '', 'extension_changelog' => '', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => '', 'extension_manager' => 'Управление расширениями', 'extension_mgr_error_upload' => '', @@ -580,6 +583,8 @@ URL: [url]', 'extension_mgr_no_upload' => '', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => 'Установленные', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => '', 'february' => 'Февраль', 'file' => 'Файл', @@ -1117,6 +1122,7 @@ URL: [url]', 'review_update_failed' => 'Ошибка обновления статуса рецензии', 'revise_document' => 'Ревизировать документ', 'revise_document_on' => 'Следующий ревизия версии документа назначен на [date]', +'revision' => '', 'revisions_accepted' => '', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '', @@ -1223,6 +1229,7 @@ URL: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => 'Выбор', +'select_attrdef' => '', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', 'select_category' => 'Выберите категорию', @@ -1702,6 +1709,7 @@ URL: [url]', 'splash_edit_user' => 'Пользователь сохранён', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => '', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1804,8 +1812,10 @@ URL: [url]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'Использовать рецензентов из прошлой версии', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => 'Задания', 'task_core_expireddocs_days' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1984,6 +1994,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => 'Сводка по пользователю', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => '', 'year_view' => 'Год', diff --git a/languages/sk_SK/lang.inc b/languages/sk_SK/lang.inc index 3cd2845d5..2f9660d21 100644 --- a/languages/sk_SK/lang.inc +++ b/languages/sk_SK/lang.inc @@ -516,6 +516,7 @@ URL: [url]', 'edit_folder_props' => 'Upraviť zložku', 'edit_group' => 'Upraviť skupinu', 'edit_online' => 'Upraviť online', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => 'Upraviť úlohu', 'edit_transmittal_props' => 'Edit transmittal properties', @@ -585,6 +586,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => 'Rozšírenie', 'extension_changelog' => 'Denník zmien', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => 'Nahrávajú sa rozšírenia ...', 'extension_manager' => 'Spravovať rozšírenia', 'extension_mgr_error_upload' => '', @@ -592,6 +595,8 @@ URL: [url]', 'extension_mgr_no_upload' => 'Uploading new extensions is not possible because the extentension directory is not writable.', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => 'Available', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => 'Versions', 'february' => 'Február', 'file' => 'Súbor', @@ -1145,6 +1150,7 @@ URL: [url]', 'review_update_failed' => 'Chyba pri aktualizácii stavu recenzie. Aktualizácia zlyhala.', 'revise_document' => 'Revidovať dokument', 'revise_document_on' => 'Next revision of document version on [date]', +'revision' => '', 'revisions_accepted' => '[no_revisions] revisions already accepted', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '[no_revisions] revisions not being touched', @@ -1251,6 +1257,7 @@ URL: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => 'Výber', +'select_attrdef' => '', 'select_attrdefgrp_show' => 'Choose when to show', 'select_attribute_value' => 'Vyberte hodnotu atribútu', 'select_category' => 'Vyber kategóriu', @@ -1735,6 +1742,7 @@ Meno: [username] 'splash_edit_user' => 'Používateľ bol uložený', 'splash_error_add_to_transmittal' => 'Error while adding document to transmittal', 'splash_error_rm_download_link' => 'Error when removing download link', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => 'Error while sending download link', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1837,8 +1845,10 @@ Meno: [username] 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'Take over individual reviewer from last version.', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => 'Úlohy', 'task_core_expireddocs_days' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => 'Description', 'task_disabled' => 'Disabled', 'task_frequency' => 'Frequency', @@ -2017,6 +2027,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => 'At least one of the transitions has neither a user nor a group!', 'workflow_user_summary' => 'User summary', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => 'ďalších [number] objektov', 'year_view' => 'Rok', diff --git a/languages/sv_SE/lang.inc b/languages/sv_SE/lang.inc index 43f175a67..a2248a31b 100644 --- a/languages/sv_SE/lang.inc +++ b/languages/sv_SE/lang.inc @@ -510,6 +510,7 @@ URL: [url]', 'edit_folder_props' => 'Ändra katalog', 'edit_group' => 'Ändra grupp', 'edit_online' => 'Uppdatera online', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => '', 'edit_transmittal_props' => 'Ändra egenskaper för meddelande', @@ -579,6 +580,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => '', 'extension_changelog' => '', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => '', 'extension_manager' => 'Hantera tillägg', 'extension_mgr_error_upload' => '', @@ -586,6 +589,8 @@ URL: [url]', 'extension_mgr_no_upload' => '', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => '', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => '', 'february' => 'februari', 'file' => 'Fil', @@ -1118,6 +1123,7 @@ URL: [url]', 'review_update_failed' => 'Fel vid uppdatering av granskningsstatus. Kunde inte uppdatera.', 'revise_document' => 'Revidera dokument', 'revise_document_on' => 'Nästa revidering av dokumentversion [date]', +'revision' => '', 'revisions_accepted' => '', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '', @@ -1224,6 +1230,7 @@ URL: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => 'Urval', +'select_attrdef' => '', 'select_attrdefgrp_show' => 'Välj visingsalternativ', 'select_attribute_value' => '', 'select_category' => 'Klicka för att välja en kategori', @@ -1708,6 +1715,7 @@ Kommentar: [comment]', 'splash_edit_user' => 'Användare sparad', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => 'Fel vid borttagande av nedladdningslänk', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => 'Fel vid sändning av nedladdningslänk', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1810,8 +1818,10 @@ Kommentar: [comment]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'Ta över individuell granskare från senaste version', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => 'Uppgifter', 'task_core_expireddocs_days' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1990,6 +2000,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => 'Minst en av övergångarna i arbetsflödet saknar användare eller grupp.', 'workflow_user_summary' => 'Sammanfattning användare', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => '[number] ytterligare objekt', 'year_view' => 'Årsvy', diff --git a/languages/tr_TR/lang.inc b/languages/tr_TR/lang.inc index 8144bff19..628276d62 100644 --- a/languages/tr_TR/lang.inc +++ b/languages/tr_TR/lang.inc @@ -498,6 +498,7 @@ URL: [url]', 'edit_folder_props' => 'Klasörü düzenle', 'edit_group' => 'Grubu düzenle', 'edit_online' => '', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => '', 'edit_transmittal_props' => '', @@ -567,6 +568,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => '', 'extension_changelog' => 'Değişiklik Listesi', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => 'Uzantı yüklendi', 'extension_manager' => 'Uzantıları düzenle', 'extension_mgr_error_upload' => '', @@ -574,6 +577,8 @@ URL: [url]', 'extension_mgr_no_upload' => '', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => 'Mevcut', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => 'Veysionlar', 'february' => 'Şubat', 'file' => 'Dosya', @@ -1094,6 +1099,7 @@ URL: [url]', 'review_update_failed' => 'Kontrol güncelleme durumu hatalı. Güncelleme başarısız.', 'revise_document' => '', 'revise_document_on' => '', +'revision' => '', 'revisions_accepted' => '', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '', @@ -1195,6 +1201,7 @@ URL: [url]', 'seeddms_info' => 'SeedDMS hakkında bilgi', 'seeddms_version' => 'SeedDMS Sürümü', 'selection' => 'Seçim', +'select_attrdef' => '', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', 'select_category' => 'Kategori seçmek için tıklayın', @@ -1674,6 +1681,7 @@ URL: [url]', 'splash_edit_user' => 'Kullanıcı kaydedildi', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => '', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1776,8 +1784,10 @@ URL: [url]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'Bir önceki versiyonu kontrol edeni al.', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => '', 'task_core_expireddocs_days' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1956,6 +1966,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => 'Kullanıcı özeti', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => '[number] více objektů', 'year_view' => 'Yıllık Görünüm', diff --git a/languages/uk_UA/lang.inc b/languages/uk_UA/lang.inc index e0c4179c4..0318d0b05 100644 --- a/languages/uk_UA/lang.inc +++ b/languages/uk_UA/lang.inc @@ -504,6 +504,7 @@ URL: [url]', 'edit_folder_props' => 'Змінити каталог', 'edit_group' => 'Змінити групу', 'edit_online' => '', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => '', 'edit_transmittal_props' => 'Редагувати налаштування перенесення', @@ -573,6 +574,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => '', 'extension_changelog' => '', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => '', 'extension_manager' => 'Керування розширеннями', 'extension_mgr_error_upload' => '', @@ -580,6 +583,8 @@ URL: [url]', 'extension_mgr_no_upload' => '', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => '', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => '', 'february' => 'Лютий', 'file' => 'Файл', @@ -1110,6 +1115,7 @@ URL: [url]', 'review_update_failed' => 'Помилка оновлення статусу рецензії', 'revise_document' => 'Ревізувати документ', 'revise_document_on' => 'Наступна ревізія документу [date]', +'revision' => '', 'revisions_accepted' => '', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '', @@ -1216,6 +1222,7 @@ URL: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => 'Вибір', +'select_attrdef' => '', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', 'select_category' => 'Оберіть категорію', @@ -1695,6 +1702,7 @@ URL: [url]', 'splash_edit_user' => 'Користувача збережено', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => '', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1797,8 +1805,10 @@ URL: [url]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'Використати рецензентів з попередньої версії', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => 'Завдання', 'task_core_expireddocs_days' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1977,6 +1987,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => 'Підсумки по користувачу', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => '[number] більше об\'єктів', 'year_view' => 'Рік', diff --git a/languages/zh_CN/lang.inc b/languages/zh_CN/lang.inc index a5acfc69e..0a0e4ad6c 100644 --- a/languages/zh_CN/lang.inc +++ b/languages/zh_CN/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 (774), archonwang (469), fengjohn (5), yang86 (1) +// Translators: Admin (775), archonwang (469), fengjohn (5), yang86 (1) $text = array( '2_factor_auth' => '双重认证', @@ -330,7 +330,7 @@ URL: [url]', 'daily' => '天', 'databasesearch' => '数据库搜索', 'database_schema_version' => '', -'data_loading' => '', +'data_loading' => '数据加载中,请稍后...', 'date' => '日期', 'days' => '天', 'debug' => '调试', @@ -498,6 +498,7 @@ URL: [url]', 'edit_folder_props' => '编辑文件夹', 'edit_group' => '编辑组别', 'edit_online' => '', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => '', 'edit_transmittal_props' => '', @@ -563,6 +564,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => '', 'extension_changelog' => '更新日志', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => '加载扩展', 'extension_manager' => '扩展管理器', 'extension_mgr_error_upload' => '', @@ -570,6 +573,8 @@ URL: [url]', 'extension_mgr_no_upload' => '上传新扩展名是不可能的,因为extentension目录不可写', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => '可得到', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => '版本列表', 'february' => '二 月', 'file' => '文件', @@ -1086,6 +1091,7 @@ URL: [url]', 'review_update_failed' => '错误 更新校对状态.更新失败', 'revise_document' => '', 'revise_document_on' => '', +'revision' => '', 'revisions_accepted' => '[no_revisions] 修订已被接受', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '', @@ -1186,6 +1192,7 @@ URL: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => '选择', +'select_attrdef' => '', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', 'select_category' => '选中分类', @@ -1670,6 +1677,7 @@ URL: [url]', 'splash_edit_user' => '用户信息已保存', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '移除下载链接时报错', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => '发送下载链接时报错', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1772,8 +1780,10 @@ URL: [url]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => '', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => '任务', 'task_core_expireddocs_days' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1943,6 +1953,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => '用户概述', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => '浏览更多', 'year_view' => '年视图', diff --git a/languages/zh_TW/lang.inc b/languages/zh_TW/lang.inc index ca319ef79..8634b84e0 100644 --- a/languages/zh_TW/lang.inc +++ b/languages/zh_TW/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 (2425) +// Translators: Admin (2428) $text = array( '2_factor_auth' => '2階段認證', @@ -336,7 +336,7 @@ URL: [url]', 'daily' => '每日', 'databasesearch' => '資料庫搜索', 'database_schema_version' => '', -'data_loading' => '', +'data_loading' => '請等到資料載入完畢', 'date' => '日期', 'days' => '天數', 'debug' => '除錯', @@ -516,6 +516,7 @@ URL: [url]', 'edit_folder_props' => '編輯資料夾', 'edit_group' => '編輯組別', 'edit_online' => '線上編輯', +'edit_online_not_allowed' => '', 'edit_online_warning' => '保存更改將覆蓋當前版本的內容,而不是創建新版本。', 'edit_task' => '編輯工作', 'edit_transmittal_props' => '編輯傳輸屬性', @@ -585,6 +586,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => '擴充', 'extension_changelog' => '修改紀錄', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => '擴充套件讀取中', 'extension_manager' => '擴充套件的管理', 'extension_mgr_error_upload' => '', @@ -592,6 +595,8 @@ URL: [url]', 'extension_mgr_no_upload' => '無法上傳新的套件因為套件目錄無法寫入', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => '可用', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => '版本', 'february' => '二 月', 'file' => '文件', @@ -705,7 +710,7 @@ URL: [url]', 'include_subdirectories' => '包含子目錄', 'indexing_tasks_in_queue' => '索引任務正在序列中', 'index_converters' => '', -'index_document_unchanged' => '', +'index_document_unchanged' => '文件未改變', 'index_done' => '完成', 'index_error' => '錯誤', 'index_folder' => '索引目錄', @@ -1143,6 +1148,7 @@ URL: [url]', 'review_update_failed' => '錯誤 更新校對狀態.更新失敗', 'revise_document' => '修改文件', 'revise_document_on' => '[date]文檔版本的下一修訂版', +'revision' => '', 'revisions_accepted' => '[no_revisions]個修訂已被接受', 'revisions_accepted_latest' => '(最新版本為[no_revisions])', 'revisions_not_touched' => '[no_revisions]修訂未涉及', @@ -1249,6 +1255,7 @@ URL: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => '選擇', +'select_attrdef' => '', 'select_attrdefgrp_show' => '選擇當展示時', 'select_attribute_value' => '選擇屬性值', 'select_category' => '選中分類', @@ -1733,6 +1740,7 @@ URL: [url]', 'splash_edit_user' => '使用者已儲存', 'splash_error_add_to_transmittal' => '將文件添加到傳送時出錯', 'splash_error_rm_download_link' => '刪除下載鏈接時出錯', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => '發送下載鏈接時出錯', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1835,8 +1843,10 @@ URL: [url]', 'takeOverIndApprovers' => '接管個人批准人', 'takeOverIndReviewer' => '從上個版本接管個別審稿人', 'takeOverIndReviewers' => '接管個人審稿人', +'target_equals_source_folder' => '', 'tasks' => '任務', 'task_core_expireddocs_days' => '天數', +'task_core_indexingdocs_recreate' => '', 'task_description' => '描述', 'task_disabled' => '不啟用', 'task_frequency' => '頻率', @@ -1976,7 +1986,7 @@ URL: [url]', 'version_deleted_email_subject' => '[sitename]: [name]-版本已刪除', 'version_info' => '版本資訊', 'view' => '檢視', -'view_document' => '', +'view_document' => '檢視文件細節', 'view_folder' => '', 'view_online' => '線上流覽', 'warning' => '警告', @@ -2015,6 +2025,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => '至少有一個過渡既沒有用戶也沒有組!', 'workflow_user_summary' => '使用者摘要', +'wrong_checksum' => '', 'wrong_filetype' => '錯誤的檔案類型', 'x_more_objects' => '增加[number]物件', 'year_view' => '年視圖', From c5247b8abf8e45ec8b114ed1a17d60e4c6bcdac8 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Sat, 30 Jan 2021 15:04:12 +0100 Subject: [PATCH 135/276] escape owner name and email --- views/bootstrap/class.TimelineFeed.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/views/bootstrap/class.TimelineFeed.php b/views/bootstrap/class.TimelineFeed.php index 0e0f7b9da..41bd71efb 100644 --- a/views/bootstrap/class.TimelineFeed.php +++ b/views/bootstrap/class.TimelineFeed.php @@ -78,7 +78,7 @@ class SeedDMS_View_TimelineFeed extends SeedDMS_Bootstrap_Style { $feed->setChannelElement('pubDate', date(\DATE_RSS, strtotime('2013-04-06'))); // You can add additional link elements, e.g. to a PubSubHubbub server with custom relations. // It's recommended to provide a backlink to the feed URL. - $feed->setSelfLink($baseurl.'out/out.Feed.php'); + $feed->setSelfLink($baseurl.'out/out.TimelineFeed.php'); // $feed->setAtomLink('http://pubsubhubbub.appspot.com', 'hub'); // You can add more XML namespaces for more custom channel elements which are not defined // in the RSS 2 specification. Here the 'creativeCommons' element is used. There are much more @@ -122,7 +122,7 @@ class SeedDMS_View_TimelineFeed extends SeedDMS_Bootstrap_Style { $newItem->setLink($baseurl.'out/out.ViewDocument.php?documentid='.$doc->getID()); $newItem->setDescription("

    ".$item['msg']."

    ". "

    ".getMLText('comment').": ".$doc->getComment()."

    ". - "

    ".getMLText('owner').": getEmail()."\">".$owner->getFullName()."

    ". + "

    ".getMLText('owner').": getEmail())."\">".htmlspecialchars($owner->getFullName())."

    ". "

    ".getMLText("creation_date").": ".getLongReadableDate($doc->getDate())."

    " ); $newItem->setDate(date('c', $d)); From 899d89a2a9f636eaad1cf056a34d4cb25e21c070 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Sat, 30 Jan 2021 15:08:40 +0100 Subject: [PATCH 136/276] pass $logger to notification service --- 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 41c4f499e..ca23fad15 100644 --- a/op/op.Ajax.php +++ b/op/op.Ajax.php @@ -63,7 +63,7 @@ if (isset($_COOKIE["mydms_session"])) { $dms->setRootFolderID($user->getHomeFolder()); } - $notifier = new SeedDMS_NotificationService(); + $notifier = new SeedDMS_NotificationService($logger); if(isset($GLOBALS['SEEDDMS_HOOKS']['notification'])) { foreach($GLOBALS['SEEDDMS_HOOKS']['notification'] as $notificationObj) { if(method_exists($notificationObj, 'preAddService')) { From 82784f4aedd894a76d6b125d27b4bc937786774e Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Sat, 30 Jan 2021 15:40:19 +0100 Subject: [PATCH 137/276] set guid to whole url --- views/bootstrap/class.TimelineFeed.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/bootstrap/class.TimelineFeed.php b/views/bootstrap/class.TimelineFeed.php index 41bd71efb..4b49aac23 100644 --- a/views/bootstrap/class.TimelineFeed.php +++ b/views/bootstrap/class.TimelineFeed.php @@ -127,7 +127,7 @@ class SeedDMS_View_TimelineFeed extends SeedDMS_Bootstrap_Style { ); $newItem->setDate(date('c', $d)); $newItem->setAuthor($owner->getFullName(), $owner->getEmail()); - $newItem->setId('out/out.ViewDocument.php?documentid='.$doc->getID(), true); + $newItem->setId($baseurl.'out/out.ViewDocument.php?documentid='.$doc->getID()."&kkk=".$classname, true); if(!empty($item['version'])) { $version = $doc->getContentByVersion($item['version']); $previewer->createPreview($version); From 37d3577603262591b479756ec2e1b22f0d511890 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Sun, 31 Jan 2021 13:48:25 +0100 Subject: [PATCH 138/276] show difference in number of documents on chart page --- CHANGELOG | 1 + views/bootstrap/class.Charts.php | 23 ++++++++++++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 7832181d9..77929f9a9 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -10,6 +10,7 @@ mismatch - overhaul notifications, type of receiver is now passed to notification service which allows a more fine grained filtering +- show difference in number of documents on chart page -------------------------------------------------------------------------------- Changes in version 5.1.21 diff --git a/views/bootstrap/class.Charts.php b/views/bootstrap/class.Charts.php index de8c3be69..afe106741 100644 --- a/views/bootstrap/class.Charts.php +++ b/views/bootstrap/class.Charts.php @@ -227,7 +227,11 @@ $(document).ready( function() { contentContainerEnd(); echo ""; - echo ""; + echo ""; + echo ""; + if(in_array($type, array('docspermonth', 'docsaccumulated'))) + echo ""; + echo ""; $total = 0; switch($type) { case 'docspermonth': @@ -235,15 +239,28 @@ $(document).ready( function() { case 'docspermimetype': case 'docspercategory': case 'docsperstatus': + $oldtotal = 0; foreach($data as $item) { - echo ""; + echo ""; + echo ""; + echo ""; + if(in_array($type, array('docspermonth'))) + echo ""; + echo ""; + $oldtotal = $item['total']; $total += $item['total']; } echo ""; break; case 'docsaccumulated': + $oldtotal = 0; foreach($data as $item) { - echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + $oldtotal = $item['total']; $total += $item['total']; } break; From fc437c2e77bb4c5e3df141a9519f24beae89cbb3 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 1 Feb 2021 13:15:14 +0100 Subject: [PATCH 139/276] get reviewers, approvers, workflow from controller --- op/op.AddDocument.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/op/op.AddDocument.php b/op/op.AddDocument.php index 7ba864f0c..6e4e8740b 100644 --- a/op/op.AddDocument.php +++ b/op/op.AddDocument.php @@ -426,6 +426,8 @@ for ($file_num=0;$file_numtoGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } + /* Get workflow from controller in case it was modified in a hook */ + $workflow = $controller->getParam('workflow'); if($workflow && $settings->_enableNotificationWorkflow) { $subject = "request_workflow_action_email_subject"; $message = "request_workflow_action_email_body"; @@ -452,6 +454,11 @@ for ($file_num=0;$file_num_enableNotificationAppRev) { /* Reviewers and approvers will be informed about the new document */ + /* Get reviewers and approvers from controller in case it was + * modified in a hook + */ + $reviewers = $controller->getParam('reviewers'); + $approvers = $controller->getParam('approvers'); if($reviewers['i'] || $reviewers['g']) { $subject = "review_request_email_subject"; $message = "review_request_email_body"; From cf9f15982983830212c76bffa0a34b5b30d7808d Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 1 Feb 2021 13:42:16 +0100 Subject: [PATCH 140/276] log recvtype --- inc/inc.ClassNotificationService.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/inc/inc.ClassNotificationService.php b/inc/inc.ClassNotificationService.php index 4b68a8d54..6a0b15b02 100644 --- a/inc/inc.ClassNotificationService.php +++ b/inc/inc.ClassNotificationService.php @@ -86,13 +86,13 @@ class SeedDMS_NotificationService { if(!$service->toIndividual($sender, $recipient, $subject, $message, $params)) { $error = false; $this->errors[$name] = false; - $this->logger->log('Notification service \''.$name.'\': Sending notification \''.$subject.'\' to user \''.$to.'\' failed.', PEAR_LOG_ERR); + $this->logger->log('Notification service \''.$name.'\': Sending notification \''.$subject.'\' to user \''.$to.'\' ('.$recvtype.') failed.', PEAR_LOG_ERR); } else { - $this->logger->log('Notification service \''.$name.'\': Sending notification \''.$subject.'\' to user \''.$to.'\' successful.', PEAR_LOG_INFO); + $this->logger->log('Notification service \''.$name.'\': Sending notification \''.$subject.'\' to user \''.$to.'\' ('.$recvtype.') successful.', PEAR_LOG_INFO); $this->errors[$name] = true; } } else { - $this->logger->log('Notification service \''.$name.'\': Notification \''.$subject.'\' to user \''.$to.'\' filtered out.', PEAR_LOG_INFO); + $this->logger->log('Notification service \''.$name.'\': Notification \''.$subject.'\' to user \''.$to.'\' ('.$recvtype.') filtered out.', PEAR_LOG_INFO); } } return $error; From 7ebd3a4a0ace51154d0f16a7210ddb3bf35b98de Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 2 Feb 2021 10:21:02 +0100 Subject: [PATCH 141/276] get reviewers, approvers, workflow from controller before sending notifications --- op/op.Ajax.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/op/op.Ajax.php b/op/op.Ajax.php index ca23fad15..4b242fca3 100644 --- a/op/op.Ajax.php +++ b/op/op.Ajax.php @@ -63,6 +63,7 @@ if (isset($_COOKIE["mydms_session"])) { $dms->setRootFolderID($user->getHomeFolder()); } + global $logger; $notifier = new SeedDMS_NotificationService($logger); if(isset($GLOBALS['SEEDDMS_HOOKS']['notification'])) { foreach($GLOBALS['SEEDDMS_HOOKS']['notification'] as $notificationObj) { @@ -835,6 +836,7 @@ switch($command) { $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } + $workflow = $controller->getParam('workflow'); if($workflow && $settings->_enableNotificationWorkflow) { $subject = "request_workflow_action_email_subject"; $message = "request_workflow_action_email_body"; @@ -861,6 +863,11 @@ switch($command) { if($settings->_enableNotificationAppRev) { /* Reviewers and approvers will be informed about the new document */ + /* Get reviewers and approvers from controller in case it was + * modified in a hook + */ + $reviewers = $controller->getParam('reviewers'); + $approvers = $controller->getParam('approvers'); if($reviewers['i'] || $reviewers['g']) { $subject = "review_request_email_subject"; $message = "review_request_email_body"; From 60250927937eebb11f9f02814a1dfe943b0e28df Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 2 Feb 2021 13:07:57 +0100 Subject: [PATCH 142/276] set url of notification mail --- op/op.ReviewDocument.php | 1 + 1 file changed, 1 insertion(+) diff --git a/op/op.ReviewDocument.php b/op/op.ReviewDocument.php index 9aa02d8e4..445fe4dea 100644 --- a/op/op.ReviewDocument.php +++ b/op/op.ReviewDocument.php @@ -170,6 +170,7 @@ if ($newdocstatus['status'] == S_DRAFT_APP) { $params['username'] = $user->getFullName(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; + $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); foreach ($docApprovalStatus as $dastat) { if ($dastat["status"] == 0) { From 7c6ab4027a552582310698570140184b22e7d199 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 2 Feb 2021 13:08:55 +0100 Subject: [PATCH 143/276] set url in notification mail --- op/op.ReviewDocument.php | 1 + 1 file changed, 1 insertion(+) diff --git a/op/op.ReviewDocument.php b/op/op.ReviewDocument.php index 07bf82884..3cd9e88b5 100644 --- a/op/op.ReviewDocument.php +++ b/op/op.ReviewDocument.php @@ -179,6 +179,7 @@ if ($_POST["reviewStatus"]==-1){ $params['username'] = $user->getFullName(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; + $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); From 4724935bec2fad5b98c08cbe6c8fcb3804964750 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 2 Feb 2021 14:56:15 +0100 Subject: [PATCH 144/276] cast access mode to int when passing to constructor of SeedDMS_Core_GroupAccess or SeedDMS_Core_UserAccess --- SeedDMS_Core/Core/inc.ClassDocument.php | 4 ++-- SeedDMS_Core/Core/inc.ClassFolder.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/SeedDMS_Core/Core/inc.ClassDocument.php b/SeedDMS_Core/Core/inc.ClassDocument.php index fbab9ca44..4128d076b 100644 --- a/SeedDMS_Core/Core/inc.ClassDocument.php +++ b/SeedDMS_Core/Core/inc.ClassDocument.php @@ -980,9 +980,9 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ $this->_accessList[$mode] = array("groups" => array(), "users" => array()); foreach ($resArr as $row) { if ($row["userID"] != -1) - array_push($this->_accessList[$mode]["users"], new SeedDMS_Core_UserAccess($this->_dms->getUser($row["userID"]), $row["mode"])); + array_push($this->_accessList[$mode]["users"], new SeedDMS_Core_UserAccess($this->_dms->getUser($row["userID"]), (int) $row["mode"])); else //if ($row["groupID"] != -1) - array_push($this->_accessList[$mode]["groups"], new SeedDMS_Core_GroupAccess($this->_dms->getGroup($row["groupID"]), $row["mode"])); + array_push($this->_accessList[$mode]["groups"], new SeedDMS_Core_GroupAccess($this->_dms->getGroup($row["groupID"]), (int) $row["mode"])); } } diff --git a/SeedDMS_Core/Core/inc.ClassFolder.php b/SeedDMS_Core/Core/inc.ClassFolder.php index 2ad0a365e..32b1fbbfb 100644 --- a/SeedDMS_Core/Core/inc.ClassFolder.php +++ b/SeedDMS_Core/Core/inc.ClassFolder.php @@ -1295,9 +1295,9 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { $this->_accessList[$mode] = array("groups" => array(), "users" => array()); foreach ($resArr as $row) { if ($row["userID"] != -1) - array_push($this->_accessList[$mode]["users"], new SeedDMS_Core_UserAccess($this->_dms->getUser($row["userID"]), $row["mode"])); + array_push($this->_accessList[$mode]["users"], new SeedDMS_Core_UserAccess($this->_dms->getUser($row["userID"]), (int) $row["mode"])); else //if ($row["groupID"] != -1) - array_push($this->_accessList[$mode]["groups"], new SeedDMS_Core_GroupAccess($this->_dms->getGroup($row["groupID"]), $row["mode"])); + array_push($this->_accessList[$mode]["groups"], new SeedDMS_Core_GroupAccess($this->_dms->getGroup($row["groupID"]), (int) $row["mode"])); } } From 79ed5b94ae78644d438e82f74976a45541c315b3 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 2 Feb 2021 20:52:29 +0100 Subject: [PATCH 145/276] add missing LogInit --- op/op.AddDocumentLink.php | 1 + op/op.AttributeMgr.php | 1 + op/op.Categories.php | 1 + op/op.CreateSubFolderIndex.php | 1 + op/op.DefaultKeywords.php | 1 + op/op.DocumentNotify.php | 1 + op/op.ExtensionMgr.php | 1 + op/op.FolderNotify.php | 1 + op/op.Logout.php | 1 + op/op.ManageNotify.php | 1 + op/op.UserDefaultKeywords.php | 1 + 11 files changed, 11 insertions(+) diff --git a/op/op.AddDocumentLink.php b/op/op.AddDocumentLink.php index 58f059c60..fc664f730 100644 --- a/op/op.AddDocumentLink.php +++ b/op/op.AddDocumentLink.php @@ -20,6 +20,7 @@ // 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"); diff --git a/op/op.AttributeMgr.php b/op/op.AttributeMgr.php index 918ae29d7..1f086163a 100644 --- a/op/op.AttributeMgr.php +++ b/op/op.AttributeMgr.php @@ -19,6 +19,7 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. include("../inc/inc.Settings.php"); +include("../inc/inc.LogInit.php"); include("../inc/inc.Language.php"); include("../inc/inc.Init.php"); include("../inc/inc.Extension.php"); diff --git a/op/op.Categories.php b/op/op.Categories.php index 794ffacb3..ce54a75e9 100644 --- a/op/op.Categories.php +++ b/op/op.Categories.php @@ -19,6 +19,7 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. include("../inc/inc.Settings.php"); +include("../inc/inc.LogInit.php"); include("../inc/inc.Language.php"); include("../inc/inc.Init.php"); include("../inc/inc.Extension.php"); diff --git a/op/op.CreateSubFolderIndex.php b/op/op.CreateSubFolderIndex.php index ec3d7fc6d..6d02e4778 100644 --- a/op/op.CreateSubFolderIndex.php +++ b/op/op.CreateSubFolderIndex.php @@ -19,6 +19,7 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. include("../inc/inc.Settings.php"); +include("../inc/inc.LogInit.php"); include("../inc/inc.Language.php"); include("../inc/inc.Init.php"); include("../inc/inc.Extension.php"); diff --git a/op/op.DefaultKeywords.php b/op/op.DefaultKeywords.php index e5370082b..c85271f94 100644 --- a/op/op.DefaultKeywords.php +++ b/op/op.DefaultKeywords.php @@ -19,6 +19,7 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. include("../inc/inc.Settings.php"); +include("../inc/inc.LogInit.php"); include("../inc/inc.Language.php"); include("../inc/inc.Init.php"); include("../inc/inc.Extension.php"); diff --git a/op/op.DocumentNotify.php b/op/op.DocumentNotify.php index 1e5d8ac03..abcbf632e 100644 --- a/op/op.DocumentNotify.php +++ b/op/op.DocumentNotify.php @@ -19,6 +19,7 @@ // 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"); diff --git a/op/op.ExtensionMgr.php b/op/op.ExtensionMgr.php index 9af2b9a7e..edfda4684 100644 --- a/op/op.ExtensionMgr.php +++ b/op/op.ExtensionMgr.php @@ -17,6 +17,7 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. include("../inc/inc.Settings.php"); +include("../inc/inc.LogInit.php"); include("../inc/inc.Language.php"); include("../inc/inc.Init.php"); include("../inc/inc.LogInit.php"); diff --git a/op/op.FolderNotify.php b/op/op.FolderNotify.php index c9b8fc48e..f2dbca2ce 100644 --- a/op/op.FolderNotify.php +++ b/op/op.FolderNotify.php @@ -19,6 +19,7 @@ // 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"); diff --git a/op/op.Logout.php b/op/op.Logout.php index e4075cf62..58d446500 100644 --- a/op/op.Logout.php +++ b/op/op.Logout.php @@ -19,6 +19,7 @@ // 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.Init.php"); include("../inc/inc.Extension.php"); diff --git a/op/op.ManageNotify.php b/op/op.ManageNotify.php index 25429d86b..0dc92afdf 100644 --- a/op/op.ManageNotify.php +++ b/op/op.ManageNotify.php @@ -18,6 +18,7 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. include("../inc/inc.Settings.php"); +include("../inc/inc.LogInit.php"); include("../inc/inc.Init.php"); include("../inc/inc.Extension.php"); include("../inc/inc.Language.php"); diff --git a/op/op.UserDefaultKeywords.php b/op/op.UserDefaultKeywords.php index 5fe1c1465..93d03b845 100644 --- a/op/op.UserDefaultKeywords.php +++ b/op/op.UserDefaultKeywords.php @@ -19,6 +19,7 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. include("../inc/inc.Settings.php"); +include("../inc/inc.LogInit.php"); include("../inc/inc.Language.php"); include("../inc/inc.Init.php"); include("../inc/inc.Extension.php"); From 83d54c3a3603fe9ccb0e8a62642ff5f5be0a1d62 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 2 Feb 2021 21:53:49 +0100 Subject: [PATCH 146/276] do not send mail if receiver mail address is '' --- inc/inc.ClassEmailNotify.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/inc/inc.ClassEmailNotify.php b/inc/inc.ClassEmailNotify.php index 20fffcfce..4aeaa8126 100644 --- a/inc/inc.ClassEmailNotify.php +++ b/inc/inc.ClassEmailNotify.php @@ -97,6 +97,9 @@ class SeedDMS_EmailNotify extends SeedDMS_Notify { return false; } + if(!$to) + return false; + $returnpath = $this->from_address; if(is_object($sender) && !strcasecmp(get_class($sender), $this->_dms->getClassname('user'))) { $from = $sender->getFullName() ." <". $sender->getEmail() .">"; From 5f7ab509657648f21f7a4ed2db745858e3aca457 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 2 Feb 2021 21:54:29 +0100 Subject: [PATCH 147/276] fix sending notifiations to list --- inc/inc.ClassNotificationService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/inc.ClassNotificationService.php b/inc/inc.ClassNotificationService.php index 6a0b15b02..6a76f6396 100644 --- a/inc/inc.ClassNotificationService.php +++ b/inc/inc.ClassNotificationService.php @@ -135,7 +135,7 @@ class SeedDMS_NotificationService { foreach($this->services as $name => $service) { $ret = true; foreach ($recipients as $recipient) { - $ret &= $this->toIndividual($sender, $recipients, $subject, $message, $params, $recvtype); + $ret &= $this->toIndividual($sender, $recipient, $subject, $message, $params, $recvtype); } $this->errors[$name] = $ret; if(!$ret) { From 5210d756e919f6c09988254f430b093a453aa4d6 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 2 Feb 2021 21:57:26 +0100 Subject: [PATCH 148/276] remove second include of LogInit.php --- op/op.ExtensionMgr.php | 1 - 1 file changed, 1 deletion(-) diff --git a/op/op.ExtensionMgr.php b/op/op.ExtensionMgr.php index edfda4684..0ef4dd3f0 100644 --- a/op/op.ExtensionMgr.php +++ b/op/op.ExtensionMgr.php @@ -20,7 +20,6 @@ include("../inc/inc.Settings.php"); include("../inc/inc.LogInit.php"); include("../inc/inc.Language.php"); include("../inc/inc.Init.php"); -include("../inc/inc.LogInit.php"); include("../inc/inc.DBInit.php"); include("../inc/inc.Extension.php"); include("../inc/inc.ClassUI.php"); From 15a4d3195bd2e919b30322a39a58151d3d2357ef Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 4 Feb 2021 10:41:16 +0100 Subject: [PATCH 149/276] pass logger to contructor of SeedDMS_ExtBase --- inc/inc.ClassExtBase.php | 4 +++- inc/inc.Extension.php | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/inc/inc.ClassExtBase.php b/inc/inc.ClassExtBase.php index 10237b04a..0ae1fd952 100644 --- a/inc/inc.ClassExtBase.php +++ b/inc/inc.ClassExtBase.php @@ -31,9 +31,11 @@ class SeedDMS_ExtBase { var $settings; var $dms; + var $logger; - public function __construct($settings, $dms) { + public function __construct($settings, $dms, $logger) { $this->settings = $settings; $this->dms = $dms; + $this->logger = $logger; } } diff --git a/inc/inc.Extension.php b/inc/inc.Extension.php index 5582ea4fd..e4809318b 100644 --- a/inc/inc.Extension.php +++ b/inc/inc.Extension.php @@ -43,7 +43,7 @@ foreach($extMgr->getExtensionConfiguration() as $extname=>$extconf) { $classfile = $settings->_rootDir."/ext/".$extname."/".$extconf['class']['file']; if(file_exists($classfile)) { include($classfile); - $obj = new $extconf['class']['name']($settings, null); + $obj = new $extconf['class']['name']($settings, null, $logger); if(method_exists($obj, 'init')) $obj->init(); } From b34d06ca9b50d2ac87fd71115eb2ec315511aa44 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 4 Feb 2021 10:41:56 +0100 Subject: [PATCH 150/276] create logger before initiating extension, because it is passed to each extension --- webdav/index.php | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/webdav/index.php b/webdav/index.php index f7bdea5ac..0a4c5df9b 100644 --- a/webdav/index.php +++ b/webdav/index.php @@ -1,15 +1,7 @@ _logFileEnable) { if ($settings->_logFileRotation=="h") $logname=date("YmdH", time()); @@ -19,15 +11,24 @@ if($settings->_logFileEnable) { if(!file_exists($settings->_contentDir.'log')) @mkdir($settings->_contentDir.'log'); if(file_exists($settings->_contentDir.'log') && is_dir($settings->_contentDir.'log')) { - $log = Log::factory('file', $logname); - $log->setMask(Log::MAX(PEAR_LOG_DEBUG)); + $logger = Log::factory('file', $logname); + $logger->setMask(Log::MAX(PEAR_LOG_DEBUG)); } else - $log = null; + $logger = null; } else { - $log = null; + $logger = null; } -$notifier = new SeedDMS_NotificationService($log); +include("../inc/inc.Language.php"); +include("../inc/inc.Init.php"); +include("../inc/inc.Extension.php"); +include("../inc/inc.DBInit.php"); +include("../inc/inc.ClassNotificationService.php"); +include("../inc/inc.ClassEmailNotify.php"); +include("../inc/inc.ClassController.php"); +include("Log.php"); + +$notifier = new SeedDMS_NotificationService($logger); if(isset($GLOBALS['SEEDDMS_HOOKS']['notification'])) { foreach($GLOBALS['SEEDDMS_HOOKS']['notification'] as $notificationObj) { @@ -51,7 +52,7 @@ if(isset($GLOBALS['SEEDDMS_HOOKS']['notification'])) { include("webdav.php"); $server = new HTTP_WebDAV_Server_SeedDMS(); -$server->ServeRequest($dms, $log, $notifier); +$server->ServeRequest($dms, $logger, $notifier); //$files = array(); //$options = array('path'=>'/Test1/subdir', 'depth'=>1); //echo $server->MKCOL(&$options); From a495d315e54af054a6a47f55f6587f64ab85436b Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 4 Feb 2021 10:50:38 +0100 Subject: [PATCH 151/276] use global $logger --- inc/inc.Extension.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/inc/inc.Extension.php b/inc/inc.Extension.php index e4809318b..b24ba1396 100644 --- a/inc/inc.Extension.php +++ b/inc/inc.Extension.php @@ -11,6 +11,8 @@ * @version Release: @package_version@ */ +global $logger; + require "inc.ClassExtensionMgr.php"; require_once "inc.ClassExtBase.php"; require_once "inc.Version.php"; From 095d187ce1cdfcf0c4d35bc9901710ac175a7577 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 4 Feb 2021 10:51:00 +0100 Subject: [PATCH 152/276] no need to include inc/inc.ClassEmailNotify.php and Log.php anymore --- webdav/index.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/webdav/index.php b/webdav/index.php index 0a4c5df9b..e4925f371 100644 --- a/webdav/index.php +++ b/webdav/index.php @@ -24,9 +24,9 @@ include("../inc/inc.Init.php"); include("../inc/inc.Extension.php"); include("../inc/inc.DBInit.php"); include("../inc/inc.ClassNotificationService.php"); -include("../inc/inc.ClassEmailNotify.php"); +//include("../inc/inc.ClassEmailNotify.php"); include("../inc/inc.ClassController.php"); -include("Log.php"); +//include("Log.php"); $notifier = new SeedDMS_NotificationService($logger); From 4e5139616cb096a9fe3fbb3074b302b5a5d4d187 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 4 Feb 2021 12:25:22 +0100 Subject: [PATCH 153/276] add new parameter to SeedDMS_Core_DMS->getDocumentList() for skipping expired documents --- SeedDMS_Core/Core/inc.ClassDMS.php | 34 +++++++++++++++++++++++------- SeedDMS_Core/package.xml | 1 + 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/SeedDMS_Core/Core/inc.ClassDMS.php b/SeedDMS_Core/Core/inc.ClassDMS.php index 807da2020..2d3acb5f5 100644 --- a/SeedDMS_Core/Core/inc.ClassDMS.php +++ b/SeedDMS_Core/Core/inc.ClassDMS.php @@ -893,14 +893,20 @@ class SeedDMS_Core_DMS { * @param string $listtype type of document list, can be 'AppRevByMe', * 'AppRevOwner', 'ReceiptByMe', 'ReviseByMe', 'LockedByMe', 'MyDocs' * @param SeedDMS_Core_User $param1 user - * @param bool $param2 set to true - * if 'ReviewByMe', 'ApproveByMe', 'AppRevByMe', 'ReviseByMe', 'ReceiptByMe' - * shall return even documents І have already taken care of. + * @param bool|integer|string $param2 if set to true + * 'ReviewByMe', 'ApproveByMe', 'AppRevByMe', 'ReviseByMe', 'ReceiptByMe' + * will also return documents which the reviewer, approver, etc. + * has already taken care of. If set to false only + * untouched documents will be returned. In case of 'ExpiredOwner' this + * parameter contains the number of days (a negative number is allowed) + * relativ to the current date or a date in format 'yyyy-mm-dd' + * (even in the past). * @param string $param3 sort list by this field * @param string $param4 order direction + * @param bool $param5 set to false if expired documents shall not be considered * @return array|bool */ - function getDocumentList($listtype, $param1=null, $param2=false, $param3='', $param4='') { /* {{{ */ + function getDocumentList($listtype, $param1=null, $param2=false, $param3='', $param4='', $param5=true) { /* {{{ */ /* The following query will get all documents and lots of additional * information. It requires the two temporary tables ttcontentid and * ttstatid. @@ -989,7 +995,10 @@ class SeedDMS_Core_DMS { } if (strlen($docCSV)>0) { - $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".S_DRAFT_REV.", ".S_DRAFT_APP.", ".S_EXPIRED.") ". + $docstatarr = array(S_DRAFT_REV, S_DRAFT_APP); + if($param5) + $docstatarr[] = S_EXPIRED; + $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".implode(',', $docstatarr).") ". "AND `tblDocuments`.`id` IN (" . $docCSV . ") ". "ORDER BY `statusDate` DESC"; } else { @@ -1027,7 +1036,10 @@ class SeedDMS_Core_DMS { $queryStr .= "OR `tblDocumentReviewers`.`type` = 1 AND `tblDocumentReviewers`.`required` IN (".implode(',', $groups).") "; $queryStr .= ") "; } - $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".S_DRAFT_REV.", ".S_EXPIRED.") "; + $docstatarr = array(S_DRAFT_REV); + if($param5) + $docstatarr[] = S_EXPIRED; + $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".implode(',', $docstatarr).") "; if(!$param2) $queryStr .= " AND `tblDocumentReviewLog`.`status` = 0 "; if ($orderby=='e') $queryStr .= "ORDER BY `expires`"; @@ -1106,7 +1118,10 @@ class SeedDMS_Core_DMS { $queryStr .= "OR `tblDocumentApprovers`.`type` = 1 AND `tblDocumentApprovers`.`required` IN (".implode(',', $groups).")"; $queryStr .= ") "; } - $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".S_DRAFT_APP.", ".S_EXPIRED.") "; + $docstatarr = array(S_DRAFT_APP); + if($param5) + $docstatarr[] = S_EXPIRED; + $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".implode(',', $docstatarr).") "; if(!$param2) $queryStr .= " AND `tblDocumentApproveLog`.`status` = 0 "; if ($orderby=='e') $queryStr .= "ORDER BY `expires`"; @@ -1141,7 +1156,10 @@ class SeedDMS_Core_DMS { } if (strlen($docCSV)>0) { - $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".S_DRAFT_APP.", ".S_EXPIRED.") ". + $docstatarr = array(S_DRAFT_APP); + if($param5) + $docstatarr[] = S_EXPIRED; + $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".implode(',', $docstatarr).") ". "AND `tblDocuments`.`id` IN (" . $docCSV . ") "; //$queryStr .= "ORDER BY `statusDate` DESC"; if ($orderby=='e') $queryStr .= "ORDER BY `expires`"; diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index 833378c09..0135ade5b 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -27,6 +27,7 @@ - add SeedDMS_Core_DatabaseAccess::hasTable() - add SeedDMS_Core_User->isType() and SeedDMS_Core_Group->isType() - add SeedDMS_Core_User->getDMS() and SeedDMS_Core_Group->getDMS() +- add new parameter to SeedDMS_Core_DMS->getDocumentList() for skipping expired documents From 9186cf66c3f510469aa655855cd026405de6e757 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 5 Feb 2021 07:28:46 +0100 Subject: [PATCH 154/276] expired documents can be skipped from counting in countTasks() --- SeedDMS_Core/Core/inc.ClassDMS.php | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/SeedDMS_Core/Core/inc.ClassDMS.php b/SeedDMS_Core/Core/inc.ClassDMS.php index 65a4555d9..f3ee04941 100644 --- a/SeedDMS_Core/Core/inc.ClassDMS.php +++ b/SeedDMS_Core/Core/inc.ClassDMS.php @@ -927,7 +927,7 @@ class SeedDMS_Core_DMS { * @param object $user user * @return array list of documents records */ - function countTasks($listtype, $user=null) { /* {{{ */ + function countTasks($listtype, $user=null, $param5=true) { /* {{{ */ if (!$this->db->createTemporaryTable("ttstatid") || !$this->db->createTemporaryTable("ttcontentid")) { return false; } @@ -958,7 +958,10 @@ class SeedDMS_Core_DMS { $queryStr .= "OR `tblDocumentReviewers`.`type` = 1 AND `tblDocumentReviewers`.`required` IN (".implode(',', $groups).") "; $queryStr .= ") "; $queryStr .= "AND `tblDocumentReviewLog`.`status` = 0 "; - $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".S_DRAFT_REV.", ".S_EXPIRED.") "; + $docstatarr = array(S_DRAFT_REV); + if($param5) + $docstatarr[] = S_EXPIRED; + $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".implode(',', $docstatarr).") "; break; /* }}} */ case 'ApproveByMe': // Documents I have to approve {{{ if (!$this->db->createTemporaryTable("ttapproveid")) { @@ -976,7 +979,10 @@ class SeedDMS_Core_DMS { $queryStr .= ") "; } $queryStr .= "AND `tblDocumentApproveLog`.`status` = 0 "; - $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".S_DRAFT_APP.", ".S_EXPIRED.") "; + $docstatarr = array(S_DRAFT_APP); + if($param5) + $docstatarr[] = S_EXPIRED; + $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".implode(',', $docstatarr).") "; break; /* }}} */ case 'ReceiptByMe': // Documents I have to receipt {{{ if (!$this->db->createTemporaryTable("ttreceiptid")) { From 445664ed533e1793d1e1b5126edaef1e46f48ede Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 5 Feb 2021 07:30:00 +0100 Subject: [PATCH 155/276] do not count expired documents in task list anymore --- views/bootstrap/class.Tasks.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/views/bootstrap/class.Tasks.php b/views/bootstrap/class.Tasks.php index fc489b9a0..db4682b34 100644 --- a/views/bootstrap/class.Tasks.php +++ b/views/bootstrap/class.Tasks.php @@ -56,7 +56,7 @@ class SeedDMS_View_Tasks extends SeedDMS_Bootstrap_Style { if($workflowmode == 'traditional' || $workflowmode == 'traditional_only_approval') if(!$tasksinmenu || in_array('approval', $tasksinmenu)) { $tasks['approval'] = array(); - $resArr = $dms->getDocumentList('ApproveByMe', $user); + $resArr = $dms->getDocumentList('ApproveByMe', $user, false, '', '', false); if($resArr) { $docs = array(); foreach ($resArr as $res) { @@ -74,7 +74,7 @@ class SeedDMS_View_Tasks extends SeedDMS_Bootstrap_Style { if($workflowmode == 'traditional') if(!$tasksinmenu || in_array('review', $tasksinmenu)) { $tasks['review'] = array(); - $resArr = $dms->getDocumentList('ReviewByMe', $user); + $resArr = $dms->getDocumentList('ReviewByMe', $user, false, '', '', false); if($resArr) { $docs = array(); foreach ($resArr as $res) { From 2f23a09f24afaf1af76c8ddd82cf86fda066583c Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 5 Feb 2021 07:31:47 +0100 Subject: [PATCH 156/276] update changes for 6.0.15 --- CHANGELOG | 2 ++ SeedDMS_Core/package.xml | 1 + 2 files changed, 3 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index f08f7a941..2dfb99505 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -4,6 +4,8 @@ - merge changes up to 5.1.22 - add a new task for checking the checksum of all document versions - add searching for revision date +- list of open tasks will no longer contain expired documents but MyDocuments + page still list them -------------------------------------------------------------------------------- Changes in version 6.0.14 diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index e697cbe67..5f1981faa 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -25,6 +25,7 @@ GPL License - add searching for revision date +- expired documents can be skipped from counting in countTasks() From 8543d62ce4f752211e0886b9674ad753cb2e274f Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 5 Feb 2021 10:50:28 +0100 Subject: [PATCH 157/276] pass status code as parameter to document_status_changed_email --- op/op.ApproveDocument.php | 2 ++ op/op.OverrideContentStatus.php | 2 ++ op/op.ReviewDocument.php | 2 ++ 3 files changed, 6 insertions(+) diff --git a/op/op.ApproveDocument.php b/op/op.ApproveDocument.php index a1cad49b7..4f259ba31 100644 --- a/op/op.ApproveDocument.php +++ b/op/op.ApproveDocument.php @@ -182,6 +182,7 @@ if ($_POST["approvalStatus"]==-1){ $params['name'] = $document->getName(); $params['folder_path'] = $folder->getFolderPathPlain(); $params['status'] = getOverallStatusText(S_REJECTED); + $params['new_status_code'] = S_REJECTED; $params['comment'] = $document->getComment(); $params['username'] = $user->getFullName(); $params['sitename'] = $settings->_siteName; @@ -234,6 +235,7 @@ if ($_POST["approvalStatus"]==-1){ $params['name'] = $document->getName(); $params['folder_path'] = $folder->getFolderPathPlain(); $params['status'] = getOverallStatusText($newStatus); + $params['new_status_code'] = $newStatus; $params['comment'] = $document->getComment(); $params['username'] = $user->getFullName(); $params['sitename'] = $settings->_siteName; diff --git a/op/op.OverrideContentStatus.php b/op/op.OverrideContentStatus.php index 7525bbb5c..58d0e7f9b 100644 --- a/op/op.OverrideContentStatus.php +++ b/op/op.OverrideContentStatus.php @@ -88,6 +88,8 @@ if ($overrideStatus != $overallStatus["status"]) { $params['name'] = $document->getName(); $params['folder_path'] = $folder->getFolderPathPlain(); $params['status'] = getOverallStatusText($overrideStatus); + $params['new_status_code'] = $overrideStatus; + $params['old_status_code'] = $overallStatus["status"]; $params['username'] = $user->getFullName(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; diff --git a/op/op.ReviewDocument.php b/op/op.ReviewDocument.php index 3cd9e88b5..33df6ddda 100644 --- a/op/op.ReviewDocument.php +++ b/op/op.ReviewDocument.php @@ -176,6 +176,7 @@ if ($_POST["reviewStatus"]==-1){ $params['name'] = $document->getName(); $params['folder_path'] = $folder->getFolderPathPlain(); $params['status'] = getReviewStatusText(S_REJECTED); + $params['new_status_code'] = S_REJECTED; $params['username'] = $user->getFullName(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; @@ -241,6 +242,7 @@ if ($_POST["reviewStatus"]==-1){ $params['name'] = $document->getName(); $params['folder_path'] = $folder->getFolderPathPlain(); $params['status'] = getReviewStatusText($newStatus); + $params['new_status_code'] = $newStatus; $params['username'] = $user->getFullName(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; From 03ef93df2cb399180bd87fdde84055159e2a397c Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 5 Feb 2021 13:25:46 +0100 Subject: [PATCH 158/276] add parameter $incdisabled to SeedDMS_Core_Folder::getNotifyList() --- SeedDMS_Core/Core/inc.ClassFolder.php | 5 +++-- SeedDMS_Core/package.xml | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/SeedDMS_Core/Core/inc.ClassFolder.php b/SeedDMS_Core/Core/inc.ClassFolder.php index 32b1fbbfb..4ca28739c 100644 --- a/SeedDMS_Core/Core/inc.ClassFolder.php +++ b/SeedDMS_Core/Core/inc.ClassFolder.php @@ -1541,10 +1541,11 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { * notification for the folder * * @param integer $type type of notification (not yet used) + * @param bool $incdisabled set to true if disabled user shall be included * @return SeedDMS_Core_User[]|SeedDMS_Core_Group[]|bool array with a the elements 'users' and 'groups' which * contain a list of users and groups. */ - function getNotifyList($type=0) { /* {{{ */ + function getNotifyList($type=0, $incdisabled=false) { /* {{{ */ if (empty($this->_notifyList)) { $db = $this->_dms->getDB(); @@ -1558,7 +1559,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { { if ($row["userID"] != -1) { $u = $this->_dms->getUser($row["userID"]); - if($u && !$u->isDisabled()) + if($u && (!$u->isDisabled() || $incdisabled)) array_push($this->_notifyList["users"], $u); } else {//if ($row["groupID"] != -1) $g = $this->_dms->getGroup($row["groupID"]); diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index 0135ade5b..bd45f9e19 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -28,6 +28,7 @@ - add SeedDMS_Core_User->isType() and SeedDMS_Core_Group->isType() - add SeedDMS_Core_User->getDMS() and SeedDMS_Core_Group->getDMS() - add new parameter to SeedDMS_Core_DMS->getDocumentList() for skipping expired documents +- add parameter $incdisabled to SeedDMS_Core_Folder::getNotifyList() From 9ed6f688bf4fe6fadb06c5e00c48f13c6571004f Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 5 Feb 2021 13:26:03 +0100 Subject: [PATCH 159/276] list user which has been disabled --- views/bootstrap/class.FolderNotify.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/bootstrap/class.FolderNotify.php b/views/bootstrap/class.FolderNotify.php index 5fe0bfb24..60bca87a2 100644 --- a/views/bootstrap/class.FolderNotify.php +++ b/views/bootstrap/class.FolderNotify.php @@ -71,7 +71,7 @@ $(document).ready(function() { $allGroups = $this->params['allgroups']; $sortusersinlist = $this->params['sortusersinlist']; - $notifyList = $folder->getNotifyList(); + $notifyList = $folder->getNotifyList(0, true); $this->htmlStartPage(getMLText("folder_title", array("foldername" => htmlspecialchars($folder->getName())))); $this->globalNavigation($folder); From 0d6fe3e238618247f38bd07619a7b4f98e0155b7 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 5 Feb 2021 13:26:59 +0100 Subject: [PATCH 160/276] add note for 5.1.22 --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index 77929f9a9..c628895e6 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -11,6 +11,7 @@ - overhaul notifications, type of receiver is now passed to notification service which allows a more fine grained filtering - show difference in number of documents on chart page +- list users not Folder Notifiy page which has been disabled -------------------------------------------------------------------------------- Changes in version 5.1.21 From 531e11ce57e353889b5ba6d9b543c69184e01275 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 5 Feb 2021 14:22:04 +0100 Subject: [PATCH 161/276] pass document status to notification --- op/op.ReviseDocument.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/op/op.ReviseDocument.php b/op/op.ReviseDocument.php index 1a18c0360..417d20b15 100644 --- a/op/op.ReviseDocument.php +++ b/op/op.ReviseDocument.php @@ -97,6 +97,7 @@ if(!$controller->run()) { UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText($controller->getErrorMsg())); } +$newdocstatus = $content->getStatus(); if ($_POST["revisionType"] == "ind" || $_POST["revisionType"] == "grp") { if($notifier) { $nl=$document->getNotifyList(); @@ -121,7 +122,6 @@ if ($_POST["revisionType"] == "ind" || $_POST["revisionType"] == "grp") { } /* Send notification about status change only if status has actually changed */ -$newdocstatus = $content->getStatus(); if($olddocstatus['status'] != $newdocstatus['status']) { // Send notification to subscribers. if($notifier) { @@ -131,7 +131,8 @@ if($olddocstatus['status'] != $newdocstatus['status']) { $params = array(); $params['name'] = $document->getName(); $params['folder_path'] = $folder->getFolderPathPlain(); - $params['status'] = getRevisionStatusText(S_REJECTED); + $params['status'] = getOverallStatusText($newdocstatus['status']); + $params['new_status_code'] = $newdocstatus['status']; $params['username'] = $user->getFullName(); $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; From e7b40e21f3c99151f9977703305ec36a2f5e470e Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Sat, 6 Feb 2021 18:01:26 +0100 Subject: [PATCH 162/276] use htmlspecialchars() in getAttributeValue() for user/group name --- views/bootstrap/class.Bootstrap.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index c327a9f59..5b33cfe5b 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -1528,7 +1528,7 @@ $(document).ready(function() { $tmp = array(); foreach($attrs as $attr) { $curuser = $dms->getUser((int) $attr); - $tmp[] = $curuser->getFullname()." (".$curuser->getLogin().")"; + $tmp[] = htmlspecialchars($curuser->getFullname()." (".$curuser->getLogin().")"); } return implode('
    ', $tmp); break; @@ -1537,7 +1537,7 @@ $(document).ready(function() { $tmp = array(); foreach($attrs as $attr) { $curgroup = $dms->getGroup((int) $attr); - $tmp[] = $curgroup->getName(); + $tmp[] = htmlspecialchars($curgroup->getName()); } return implode('
    ', $tmp); break; From d53318b91776649d69becf6931b90cae005e3777 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 8 Feb 2021 18:55:18 +0100 Subject: [PATCH 163/276] set recvtyp to NOTIFICATION approval_submit notification --- op/op.ApproveDocument.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/op/op.ApproveDocument.php b/op/op.ApproveDocument.php index f3e05afaf..7603da67e 100644 --- a/op/op.ApproveDocument.php +++ b/op/op.ApproveDocument.php @@ -128,9 +128,9 @@ if ($_POST["approvalType"] == "ind" || $_POST["approvalType"] == "grp") { // Send notification to subscribers. $nl=$document->getNotifyList(); - $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } From 7696dc66b85f5eb3c171a02b6e90fd0d553fdd23 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 9 Feb 2021 09:18:21 +0100 Subject: [PATCH 164/276] no need to init task lists --- views/bootstrap/class.Tasks.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/views/bootstrap/class.Tasks.php b/views/bootstrap/class.Tasks.php index db4682b34..6c221f249 100644 --- a/views/bootstrap/class.Tasks.php +++ b/views/bootstrap/class.Tasks.php @@ -44,6 +44,7 @@ class SeedDMS_View_Tasks extends SeedDMS_Bootstrap_Style { $workflowmode = $this->params['workflowmode']; $tasksinmenu = $this->params['tasksinmenu']; $tasks = array(); +/* if($workflowmode == 'traditional' || $workflowmode == 'traditional_only_approval') { $tasks['approval'] = array(); if($workflowmode == 'traditional') @@ -52,6 +53,7 @@ class SeedDMS_View_Tasks extends SeedDMS_Bootstrap_Style { $tasks['workflow'] = array(); $tasks['rejected'] = array(); $tasks['checkedout'] = array(); +*/ if($workflowmode == 'traditional' || $workflowmode == 'traditional_only_approval') if(!$tasksinmenu || in_array('approval', $tasksinmenu)) { From e68608bf04ea03c4a530f1ea7f5fd780d8eaee24 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 9 Feb 2021 09:18:38 +0100 Subject: [PATCH 165/276] check for tasks in all possible lists --- styles/bootstrap/application.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/styles/bootstrap/application.js b/styles/bootstrap/application.js index 36cf1c3da..6598719f8 100644 --- a/styles/bootstrap/application.js +++ b/styles/bootstrap/application.js @@ -1287,7 +1287,7 @@ $(document).ready(function() { /* {{{ */ }); /* }}} */ (function( SeedDMSTask, $, undefined ) { /* {{{ */ - var approval_count, review_count, workflow_count; + var approval_count, review_count, workflow_count, receipt_count, revision_count, needscorrection_count, rejected_count, checkedout_count; var timeout = 1000; var counter = 0; var tasks = Array( @@ -1301,11 +1301,21 @@ $(document).ready(function() { /* {{{ */ if(data) { if((typeof data.data.approval != 'undefined' && approval_count != data.data.approval.length) || (typeof data.data.review != 'undefined' && review_count != data.data.review.length) || + (typeof data.data.receipt != 'undefined' && receipt_count != data.data.receipt.length) || + (typeof data.data.revision != 'undefined' && revision_count != data.data.revision.length) || + (typeof data.data.needscorrection != 'undefined' && needscorrection_count != data.data.needscorrection.length) || + (typeof data.data.rejected != 'undefined' && rejected_count != data.data.rejected.length) || + (typeof data.data.checkedout != 'undefined' && checkedout_count != data.data.checkedout.length) || (typeof data.data.workflow != 'undefined' && workflow_count != data.data.workflow.length)) { // $("#menu-tasks").html('Loading').hide().load('../out/out.Tasks.php?action=menutasks').fadeIn('500') $('#menu-tasks > div.ajax').trigger('update', {folderid: seeddms_folder}); approval_count = typeof data.data.approval != 'undefined' ? data.data.approval.length : 0; review_count = typeof data.data.review != 'undefined' ? data.data.review.length : 0; + receipt_count = typeof data.data.receipt != 'undefined' ? data.data.receipt.length : 0; + revision_count = typeof data.data.revision != 'undefined' ? data.data.revision.length : 0; + needscorrection_count = typeof data.data.needscorrection != 'undefined' ? data.data.needscorrection.length : 0; + rejected_count = typeof data.data.rejected != 'undefined' ? data.data.rejected.length : 0; + checkedout_count = typeof data.data.checkedout != 'undefined' ? data.data.checkedout.length : 0; workflow_count = typeof data.data.workflow != 'undefined' ? data.data.workflow.length : 0; } } From 7d93bccee6a1dc18a29265720a68554679bf2a48 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 9 Feb 2021 11:09:02 +0100 Subject: [PATCH 166/276] replace old table layout --- views/bootstrap/class.ReviseDocument.php | 50 ++++++++++++------------ 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/views/bootstrap/class.ReviseDocument.php b/views/bootstrap/class.ReviseDocument.php index a841d0cc9..f073ca835 100644 --- a/views/bootstrap/class.ReviseDocument.php +++ b/views/bootstrap/class.ReviseDocument.php @@ -128,31 +128,33 @@ $(document).ready(function() { print "
    ".getMLText('chart_'.$type.'_title')."".getMLText('total')."
    ".getMLText('chart_'.$type.'_title')."".getMLText('total')."
    ".htmlspecialchars($item['key'])."".$item['total']."
    ".htmlspecialchars($item['key'])."".$item['total']."".sprintf('%+d', $item['total']-$oldtotal)."
    ".$total."
    ".date('Y-m-d', $item['key']/1000)."".$item['total']."
    ".getReadableDate($item['key']/1000)."".$item['total']."".sprintf('%+d', $item['total']-$oldtotal)."

    \n"; } ?> -
    + - - - - - - - - - - - - - -
    :
    : - -
    +formField( + getMLText("comment"), + array( + 'element'=>'textarea', + 'name'=>'comment', + 'rows'=>4, + 'cols'=>80 + ) + ); + $options = array(); + if($revisionStatus['status'] != 1) + $options[] = array('1', getMLText("status_revised")); + if($revisionStatus['status'] != -1) + $options[] = array('-1', getMLText("status_needs_correction")); + $this->formField( + getMLText("revision_status"), + array( + 'element'=>'select', + 'name'=>'revisionStatus', + 'options'=>$options, + ) + ); + $this->formSubmit(getMLText('submit_revision'), $revisiontype.'Revision'); +?> '/> From 248d106852b0efda2d239e839155dc371e983e1a Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 9 Feb 2021 11:16:20 +0100 Subject: [PATCH 167/276] pass more data to view, do not use $_GET in view anymore --- out/out.ApproveDocument.php | 4 +++- views/bootstrap/class.ApproveDocument.php | 11 +++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/out/out.ApproveDocument.php b/out/out.ApproveDocument.php index aa4670b6e..0b44248e1 100644 --- a/out/out.ApproveDocument.php +++ b/out/out.ApproveDocument.php @@ -70,7 +70,7 @@ if (!$accessop->mayApprove()){ UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied")); } -$approvals = $latestContent->getApprovalStatus(); +$approvals = $content->getApprovalStatus(); if(!$approvals) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("no_action")); } @@ -80,6 +80,8 @@ $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', (int) $_GET['approveid']); $view->setParam('accessobject', $accessop); $view($_GET); exit; diff --git a/views/bootstrap/class.ApproveDocument.php b/views/bootstrap/class.ApproveDocument.php index da2588747..48528649d 100644 --- a/views/bootstrap/class.ApproveDocument.php +++ b/views/bootstrap/class.ApproveDocument.php @@ -94,12 +94,12 @@ $(document).ready(function() { $user = $this->params['user']; $folder = $this->params['folder']; $document = $this->params['document']; + $content = $this->params['version']; + $approveid = $this->params['approveid']; - $latestContent = $document->getLatestContent(); - $approvals = $latestContent->getApprovalStatus(); - + $approvals = $content->getApprovalStatus(); foreach($approvals as $approval) { - if($approval['approveID'] == $_GET['approveid']) { + if($approval['approveID'] == $approveid) { $approvalStatus = $approval; break; } @@ -167,10 +167,9 @@ $(document).ready(function() { - + contentContainerEnd(); $this->contentEnd(); $this->htmlEndPage(); From 3931227789c197d98f8602affe13162141e9f1ab Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 10 Feb 2021 15:36:52 +0100 Subject: [PATCH 168/276] set new/old status code in notification mail, fix sending mail --- op/op.ApproveDocument.php | 7 ++++--- op/op.OverrideContentStatus.php | 2 +- op/op.ReviewDocument.php | 5 +++-- op/op.ReviseDocument.php | 7 ++++--- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/op/op.ApproveDocument.php b/op/op.ApproveDocument.php index 7603da67e..abdd3c876 100644 --- a/op/op.ApproveDocument.php +++ b/op/op.ApproveDocument.php @@ -89,7 +89,7 @@ if($_FILES["approvalfile"]["tmp_name"]) { } $controller->setParam('document', $document); -$controller->setParam('content', $latestContent); +$controller->setParam('content', $content); $controller->setParam('approvalstatus', $_POST["approvalStatus"]); $controller->setParam('approvaltype', $_POST["approvalType"]); if ($_POST["approvalType"] == "grp") { @@ -147,8 +147,9 @@ if($olddocstatus['status'] != $newdocstatus['status']) { $params = array(); $params['name'] = $document->getName(); $params['folder_path'] = $folder->getFolderPathPlain(); - $params['status'] = getOverallStatusText($status); - $params['new_status_code'] = $status; + $params['status'] = getOverallStatusText($olddocstatus['status']).' → '.getOverallStatusText($newdocstatus['status']); + $params['new_status_code'] = $newdocstatus['status']; + $params['old_status_code'] = $olddocstatus['status']; $params['comment'] = $document->getComment(); $params['username'] = $user->getFullName(); $params['sitename'] = $settings->_siteName; diff --git a/op/op.OverrideContentStatus.php b/op/op.OverrideContentStatus.php index 9f2193aa7..1c52e2d43 100644 --- a/op/op.OverrideContentStatus.php +++ b/op/op.OverrideContentStatus.php @@ -94,7 +94,7 @@ if ($overrideStatus != $overallStatus["status"]) { $params = array(); $params['name'] = $document->getName(); $params['folder_path'] = $folder->getFolderPathPlain(); - $params['status'] = getOverallStatusText($overrideStatus); + $params['status'] = getOverallStatusText($overallStatus['status']).' → '.getOverallStatusText($overrideStatus); $params['new_status_code'] = $overrideStatus; $params['old_status_code'] = $overallStatus["status"]; $params['username'] = $user->getFullName(); diff --git a/op/op.ReviewDocument.php b/op/op.ReviewDocument.php index d73339ef2..4d96d1321 100644 --- a/op/op.ReviewDocument.php +++ b/op/op.ReviewDocument.php @@ -142,8 +142,9 @@ if($olddocstatus['status'] != $newdocstatus['status']) { $params = array(); $params['name'] = $document->getName(); $params['folder_path'] = $folder->getFolderPathPlain(); - $params['status'] = getReviewStatusText(S_REJECTED); - $params['new_status_code'] = S_REJECTED; + $params['status'] = getOverallStatusText($olddocstatus['status']).' → '.getReviewStatusText($newdocstatus['status']); + $params['new_status_code'] = $newdocstatus['status']; + $params['old_status_code'] = $olddocstatus['status']; $params['username'] = $user->getFullName(); $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; diff --git a/op/op.ReviseDocument.php b/op/op.ReviseDocument.php index 417d20b15..b303124fd 100644 --- a/op/op.ReviseDocument.php +++ b/op/op.ReviseDocument.php @@ -82,7 +82,7 @@ if (!isset($_POST["revisionStatus"]) || !is_numeric($_POST["revisionStatus"]) || } $controller->setParam('document', $document); -$controller->setParam('content', $latestContent); +$controller->setParam('content', $content); $controller->setParam('revisionstatus', $_POST["revisionStatus"]); $controller->setParam('revisiontype', $_POST["revisionType"]); if ($_POST["revisionType"] == "grp") { @@ -97,7 +97,6 @@ if(!$controller->run()) { UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText($controller->getErrorMsg())); } -$newdocstatus = $content->getStatus(); if ($_POST["revisionType"] == "ind" || $_POST["revisionType"] == "grp") { if($notifier) { $nl=$document->getNotifyList(); @@ -122,6 +121,7 @@ if ($_POST["revisionType"] == "ind" || $_POST["revisionType"] == "grp") { } /* Send notification about status change only if status has actually changed */ +$newdocstatus = $content->getStatus(); if($olddocstatus['status'] != $newdocstatus['status']) { // Send notification to subscribers. if($notifier) { @@ -131,8 +131,9 @@ if($olddocstatus['status'] != $newdocstatus['status']) { $params = array(); $params['name'] = $document->getName(); $params['folder_path'] = $folder->getFolderPathPlain(); - $params['status'] = getOverallStatusText($newdocstatus['status']); + $params['status'] = getOverallStatusText($olddocstatus['status']).' → '.getOverallStatusText($newdocstatus['status']); $params['new_status_code'] = $newdocstatus['status']; + $params['old_status_code'] = $olddocstatus['status']; $params['username'] = $user->getFullName(); $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; From 68a16ce3723c0160cf8fbce0038bac08550b1338 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 11 Feb 2021 08:36:07 +0100 Subject: [PATCH 169/276] SeedDMS_Core_DMS::getDocumentList() uses ambiguous column name when sorting by status --- SeedDMS_Core/Core/inc.ClassDMS.php | 8 ++++---- SeedDMS_Core/package.xml | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/SeedDMS_Core/Core/inc.ClassDMS.php b/SeedDMS_Core/Core/inc.ClassDMS.php index f3ee04941..0eb979fa0 100644 --- a/SeedDMS_Core/Core/inc.ClassDMS.php +++ b/SeedDMS_Core/Core/inc.ClassDMS.php @@ -1244,7 +1244,7 @@ class SeedDMS_Core_DMS { $queryStr .= " AND `tblDocumentReviewLog`.`status` = 0 "; if ($orderby=='e') $queryStr .= "ORDER BY `expires`"; else if ($orderby=='u') $queryStr .= "ORDER BY `statusDate`"; - else if ($orderby=='s') $queryStr .= "ORDER BY `status`"; + else if ($orderby=='s') $queryStr .= "ORDER BY `tblDocumentStatusLog`.`status`"; else $queryStr .= "ORDER BY `name`"; $queryStr .= " ".$orderdir; } else { @@ -1326,7 +1326,7 @@ class SeedDMS_Core_DMS { $queryStr .= " AND `tblDocumentApproveLog`.`status` = 0 "; if ($orderby=='e') $queryStr .= "ORDER BY `expires`"; else if ($orderby=='u') $queryStr .= "ORDER BY `statusDate`"; - else if ($orderby=='s') $queryStr .= "ORDER BY `status`"; + else if ($orderby=='s') $queryStr .= "ORDER BY `tblDocumentStatusLog`.`status`"; else $queryStr .= "ORDER BY `name`"; $queryStr .= " ".$orderdir; } else { @@ -1405,7 +1405,7 @@ class SeedDMS_Core_DMS { $queryStr .= " AND `tblDocumentReceiptLog`.`status` = 0 "; if ($orderby=='e') $queryStr .= "ORDER BY `expires`"; else if ($orderby=='u') $queryStr .= "ORDER BY `statusDate`"; - else if ($orderby=='s') $queryStr .= "ORDER BY `status`"; + else if ($orderby=='s') $queryStr .= "ORDER BY `tblDocumentStatusLog`.`status`"; else $queryStr .= "ORDER BY `name`"; $queryStr .= " ".$orderdir; } else { @@ -1479,7 +1479,7 @@ class SeedDMS_Core_DMS { $queryStr .= " AND `tblDocumentRevisionLog`.`status` = 0 "; if ($orderby=='e') $queryStr .= "ORDER BY `expires`"; else if ($orderby=='u') $queryStr .= "ORDER BY `statusDate`"; - else if ($orderby=='s') $queryStr .= "ORDER BY `status`"; + else if ($orderby=='s') $queryStr .= "ORDER BY `tblDocumentStatusLog`.`status`"; else $queryStr .= "ORDER BY `name`"; $queryStr .= " ".$orderdir; } else { diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index 6497995af..545cce176 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -12,7 +12,7 @@ uwe@steinmann.cx yes - 2021-01-27 + 2021-02-11 6.0.15 @@ -26,6 +26,7 @@ - add searching for revision date - expired documents can be skipped from counting in countTasks() +- SeedDMS_Core_DMS::getDocumentList() uses ambiguous column name when sorting by status From 0d43c618cd63ed19e4cf6be34831c76cc43b698d Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 11 Feb 2021 12:23:35 +0100 Subject: [PATCH 170/276] getCurrentDatetime() takes parameter for day offset --- SeedDMS_Core/Core/inc.DBAccessPDO.php | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/SeedDMS_Core/Core/inc.DBAccessPDO.php b/SeedDMS_Core/Core/inc.DBAccessPDO.php index 633591aed..72cf07f5a 100644 --- a/SeedDMS_Core/Core/inc.DBAccessPDO.php +++ b/SeedDMS_Core/Core/inc.DBAccessPDO.php @@ -1013,16 +1013,25 @@ class SeedDMS_Core_DatabaseAccess { * * @return string sql code */ - function getCurrentDatetime() { /* {{{ */ + function getCurrentDatetime($dayoffset=0) { /* {{{ */ switch($this->_driver) { case 'mysql': - return "CURRENT_TIMESTAMP"; + if($dayoffset) + return "DATE_ADD(CURRENT_TIMESTAMP, INTERVAL ".$dayoffset." DAY)"; + else + return "CURRENT_TIMESTAMP"; break; case 'sqlite': - return "datetime('now', 'localtime')"; + if($dayoffset) + return "datetime('now', '".$dayoffset." days', 'localtime')"; + else + return "datetime('now', 'localtime')"; break; case 'pgsql': - return "now()"; + if($dayoffset) + return "now() + interval '".$dayoffset." day'"; + else + return "now()"; break; } return ''; From 5ac51f3c896a6294808f7afdd380da0da1990841 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 11 Feb 2021 12:24:07 +0100 Subject: [PATCH 171/276] getDocumentList() can return sleeping revision --- SeedDMS_Core/Core/inc.ClassDMS.php | 55 ++++++++++++++++++++++++++++++ SeedDMS_Core/package.xml | 1 + 2 files changed, 56 insertions(+) diff --git a/SeedDMS_Core/Core/inc.ClassDMS.php b/SeedDMS_Core/Core/inc.ClassDMS.php index 0eb979fa0..c2cab5eba 100644 --- a/SeedDMS_Core/Core/inc.ClassDMS.php +++ b/SeedDMS_Core/Core/inc.ClassDMS.php @@ -1020,6 +1020,25 @@ class SeedDMS_Core_DMS { $queryStr .= "AND `tblDocumentRevisionLog`.`status` = 0 "; $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".S_IN_REVISION.") "; break; /* }}} */ + case 'SleepingReviseByMe': // Documents I have to receipt {{{ + if (!$this->db->createTemporaryTable("ttrevisionid")) { + return false; + } + $queryStr .= + "LEFT JOIN `tblDocumentRevisors` on `ttcontentid`.`document`=`tblDocumentRevisors`.`documentID` AND `ttcontentid`.`maxVersion`=`tblDocumentRevisors`.`version` ". + "LEFT JOIN `ttrevisionid` ON `ttrevisionid`.`revisionID` = `tblDocumentRevisors`.`revisionID` ". + "LEFT JOIN `tblDocumentRevisionLog` ON `tblDocumentRevisionLog`.`revisionLogID`=`ttrevisionid`.`maxLogID` "; + + if($user) { + $queryStr .= "WHERE (`tblDocumentRevisors`.`type` = 0 AND `tblDocumentRevisors`.`required` = ".$user->getID()." "; + if($groups) + $queryStr .= "OR `tblDocumentRevisors`.`type` = 1 AND `tblDocumentRevisors`.`required` IN (".implode(',', $groups).") "; + $queryStr .= ") "; + } + $queryStr .= "AND `tblDocumentContent`.`revisiondate` IS NOT NULL AND `tblDocumentContent`.`revisiondate` <= ".$this->db->getCurrentDatetime(14)." "; + $queryStr .= "AND `tblDocumentRevisionLog`.`status` = -3 "; + $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".S_RELEASED.") "; + break; /* }}} */ case 'NeedsCorrectionOwner': // Documents that need to be corrected {{{ $queryStr .= "LEFT JOIN `tblDocuments` ON `tblDocuments`.`id` = `ttcontentid`.`document` "; @@ -1519,6 +1538,42 @@ class SeedDMS_Core_DMS { } } break; // }}} + case 'SleepingReviseByMe': // Documents I have to revise but are still sleeping {{{ + if (!$this->db->createTemporaryTable("ttrevisionid")) { + return false; + } + $user = $param1; + $orderby = $param3; + if($param4 == 'desc') + $orderdir = 'DESC'; + else + $orderdir = 'ASC'; + + $groups = array(); + $tmp = $user->getGroups(); + foreach($tmp as $group) + $groups[] = $group->getID(); + + $selectStr .= ", `tblDocumentRevisionLog`.`date` as `duedate` "; + $queryStr .= + "LEFT JOIN `tblDocumentRevisors` on `ttcontentid`.`document`=`tblDocumentRevisors`.`documentID` AND `ttcontentid`.`maxVersion`=`tblDocumentRevisors`.`version` ". + "LEFT JOIN `ttrevisionid` ON `ttrevisionid`.`revisionID` = `tblDocumentRevisors`.`revisionID` ". + "LEFT JOIN `tblDocumentRevisionLog` ON `tblDocumentRevisionLog`.`revisionLogID`=`ttrevisionid`.`maxLogID` "; + + $queryStr .= "WHERE (`tblDocumentRevisors`.`type` = 0 AND `tblDocumentRevisors`.`required` = ".$user->getID()." "; + if($groups) + $queryStr .= "OR `tblDocumentRevisors`.`type` = 1 AND `tblDocumentRevisors`.`required` IN (".implode(',', $groups).")"; + $queryStr .= ") "; + $queryStr .= "AND `tblDocumentContent`.`revisiondate` IS NOT NULL AND `tblDocumentContent`.`revisiondate` <= ".$this->db->getCurrentDatetime(14)." "; + $queryStr .= "AND `tblDocumentStatusLog`.`status` = ".S_RELEASED." "; + if(!$param2) + $queryStr .= " AND `tblDocumentRevisionLog`.`status` = -3 "; + if ($orderby=='e') $queryStr .= "ORDER BY `expires`"; + else if ($orderby=='u') $queryStr .= "ORDER BY `statusDate`"; + else if ($orderby=='s') $queryStr .= "ORDER BY `tblDocumentStatusLog`.`status`"; + else $queryStr .= "ORDER BY `name`"; + $queryStr .= " ".$orderdir; + break; // }}} case 'DueRevision': // Documents with a due revision, which is not started {{{ if (!$this->db->createTemporaryTable("ttrevisionid")) { return false; diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index 545cce176..66ed077d0 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -27,6 +27,7 @@ - add searching for revision date - expired documents can be skipped from counting in countTasks() - SeedDMS_Core_DMS::getDocumentList() uses ambiguous column name when sorting by status +- add list type SleepingReviseByMe to SeedDMS_Core_DMS::getDocumentList() From 89ca0adc7de051d15e1cc11b0047ce3976cfe20a Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 15 Feb 2021 11:55:24 +0100 Subject: [PATCH 172/276] add currenttab=revapp to url in notification mail --- op/op.ApproveDocument.php | 4 ++-- op/op.ReviewDocument.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/op/op.ApproveDocument.php b/op/op.ApproveDocument.php index 4f259ba31..0eb9f08f4 100644 --- a/op/op.ApproveDocument.php +++ b/op/op.ApproveDocument.php @@ -113,7 +113,7 @@ if ($_POST["approvalType"] == "ind") { $params['username'] = $user->getFullName(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); + $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID()."¤ttab=revapp"; $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); @@ -151,7 +151,7 @@ else if ($_POST["approvalType"] == "grp") { $params['username'] = $user->getFullName(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); + $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID()."¤ttab=revapp"; $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); diff --git a/op/op.ReviewDocument.php b/op/op.ReviewDocument.php index 33df6ddda..dcd734ff4 100644 --- a/op/op.ReviewDocument.php +++ b/op/op.ReviewDocument.php @@ -111,7 +111,7 @@ if ($_POST["reviewType"] == "ind") { $params['status'] = getReviewStatusText($_POST["reviewStatus"]); $params['comment'] = $comment; $params['username'] = $user->getFullName(); - $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); + $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID()."¤ttab=revapp"; $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); @@ -268,7 +268,7 @@ if ($_POST["reviewStatus"]==-1){ $params['username'] = $user->getFullName(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); + $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID()."¤ttab=revapp"; foreach ($docApprovalStatus as $dastat) { if ($dastat["status"] == 0) { From 16c8102392a95032a0f93eb945da398870593a7e Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 15 Feb 2021 19:04:23 +0100 Subject: [PATCH 173/276] send list of expired docs to configured email address --- inc/inc.Tasks.php | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/inc/inc.Tasks.php b/inc/inc.Tasks.php index cc4a06abf..7f47e20e1 100644 --- a/inc/inc.Tasks.php +++ b/inc/inc.Tasks.php @@ -22,8 +22,18 @@ class SeedDMS_ExpiredDocumentsTask extends SeedDMS_SchedulerTaskBase { /* {{{ */ $dms = $this->dms; $taskparams = $task->getParameter(); $docs = $dms->getDocumentsExpired(intval($taskparams['days'])); - foreach($docs as $doc) { - echo $doc->getName().PHP_EOL; + $tableformat = " %-10s %5d %-60s"; + $tableformathead = " %-10s %5s %-60s"; + $body = ''; + if (count($docs)>0) { + $body .= sprintf($tableformathead."\n", getMLText("expiration_date", array(), ""), "ID", getMLText("name", array(), "")); + $body .= "---------------------------------------------------------------------------------\n"; + foreach($docs as $doc) { + $body .= sprintf($tableformat."\n", getReadableDate($doc->getExpires()), $doc->getId(), $doc->getName()); +// echo $doc->getName().PHP_EOL; + } + if($taskparams['email']) + mail($taskparams['email'], getMLText('expired_docs_mail_subject',array('sitename'=>$settings->_siteName, 'count'=>count($docs))), $body); } return true; } @@ -34,6 +44,11 @@ class SeedDMS_ExpiredDocumentsTask extends SeedDMS_SchedulerTaskBase { /* {{{ */ public function getAdditionalParams() { return array( + array( + 'name'=>'email', + 'type'=>'string', + 'description'=> '', + ), array( 'name'=>'days', 'type'=>'integer', @@ -86,7 +101,7 @@ class SeedDMS_Task_Indexer_Process_Folder { /* {{{ */ /* Check if the attribute created is set or has a value older * than the lastet content. Documents without such an attribute * where added when a new document was added to the dms. In such - * a case the document content wasn't indexed. + * a case the document content wasn't indexed. */ try { $created = (int) $hit->getDocument()->getFieldValue('created'); From 400c8f11d19a5a6cdb566ecac1cd56c252242d5a Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 15 Feb 2021 19:17:58 +0100 Subject: [PATCH 174/276] fix button for sorting --- views/bootstrap/class.ExpiredDocuments.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/views/bootstrap/class.ExpiredDocuments.php b/views/bootstrap/class.ExpiredDocuments.php index ccafb3a99..0f2ba6a28 100644 --- a/views/bootstrap/class.ExpiredDocuments.php +++ b/views/bootstrap/class.ExpiredDocuments.php @@ -77,8 +77,8 @@ class SeedDMS_View_ExpiredDocuments extends SeedDMS_Bootstrap_Style { print "\n\n"; print ""; print "".getMLText("name"); - print " ".($order=="na"?' ':($order=="nd"?' ':' ')).""; - print " ".($order=="ea"?' ':($order=="ed"?' ':' ')).""; + print " ".($order=="na"?' ':($order=="nd"?' ':' ')).""; + print " ".($order=="ea"?' ':($order=="ed"?' ':' ')).""; print "\n"; print "".getMLText("status")."\n"; print "".getMLText("action")."\n"; From c8956a365dd416930f672397729984ec58a08442 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 16 Feb 2021 13:58:24 +0100 Subject: [PATCH 175/276] much better html formatting --- views/bootstrap/class.DefaultKeywords.php | 47 +++++++++++++---------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/views/bootstrap/class.DefaultKeywords.php b/views/bootstrap/class.DefaultKeywords.php index 6b42ff0c0..603fd3ec4 100644 --- a/views/bootstrap/class.DefaultKeywords.php +++ b/views/bootstrap/class.DefaultKeywords.php @@ -144,6 +144,7 @@ $(document).ready( function() { function showKeywordForm($category, $user) { /* {{{ */ if(!$category) { + $this->contentContainerStart(); ?>
    @@ -163,26 +164,33 @@ $(document).ready( function() { ?>
    contentContainerEnd(); } else { + $this->contentContainerStart(); $owner = $category->getOwner(); if ((!$user->isAdmin()) && ($owner->getID() != $user->getID())) return; ?> -
    - -
    -
    - - - - - -
    -
    -
    - -
    - -
    +
    + + +formField( + getMLText("name"), + array( + 'element'=>'input', + 'type'=>'text', + 'name'=>'name', + 'value'=>$category->getName() + ) + ); + $this->formSubmit(" ".getMLText('save')); +?> +
    +contentContainerEnd(); + $this->contentHeading(getMLText("default_keywords")); + $this->contentContainerStart(); +?> getKeywordLists(); if (count($lists) == 0) @@ -190,7 +198,7 @@ $(document).ready( function() { else foreach ($lists as $list) { ?> -
    + "> @@ -208,8 +216,6 @@ $(document).ready( function() {

    -
    -
    @@ -225,6 +231,7 @@ $(document).ready( function() {
    contentContainerEnd(); } } /* }}} */ @@ -267,12 +274,10 @@ $(document).ready( function() { columnEnd(); $this->columnStart(8); - $this->contentContainerStart(); ?>
    >
    contentContainerEnd(); $this->columnEnd(); $this->rowEnd(); $this->contentEnd(); From b4fd707a60fe203a6d62a1fd6a6d01e8dc8add2d Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 16 Feb 2021 14:35:16 +0100 Subject: [PATCH 176/276] change to two column layout --- views/bootstrap/class.AddDocument.php | 40 ++++++++++++++++++--------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/views/bootstrap/class.AddDocument.php b/views/bootstrap/class.AddDocument.php index a6bce56f1..ff54a73c4 100644 --- a/views/bootstrap/class.AddDocument.php +++ b/views/bootstrap/class.AddDocument.php @@ -70,7 +70,7 @@ $(document).ready(function() { } return false; }, ""); - $("#form1").validate({ + $("#adddocform").validate({ debug: false, ignore: ":hidden:not(.do_validate)", invalidHandler: function(e, validator) { @@ -101,15 +101,15 @@ $(document).ready(function() { if($enablelargefileupload) { ?> 'userfile-fine-uploader-uuids': { - fineuploader: [ userfileuploader, $('#dropfolderfileform1') ] + fineuploader: [ userfileuploader, $('#dropfolderfileadddocform') ] } 'userfile[]': { - alternatives: $('#dropfolderfileform1') + alternatives: $('#dropfolderfileadddocform') }, - dropfolderfileform1: { + dropfolderfileadddocform: { alternatives: $("#userfile") //$(".btn-file input") } printKeywordChooserJs("form1"); + $this->printKeywordChooserJs("adddocform"); if($dropfolderdir) { - $this->printDropFolderChooserJs("form1"); + $this->printDropFolderChooserJs("adddocform"); } $this->printFileChooserJs(); } /* }}} */ @@ -182,7 +182,7 @@ $(document).ready(function() { $msg = getMLText("max_upload_size").": ".SeedDMS_Core_File::format_filesize($mus2); $this->warningMsg($msg); $this->contentHeading(getMLText("add_document")); - + // Retrieve a list of all users and groups that have review / approve // privileges. $docAccess = $folder->getReadAccessList($enableadminrevapp, $enableownerrevapp); @@ -190,14 +190,16 @@ $(document).ready(function() { $txt = $this->callHook('addDocumentPreForm'); if(is_string($txt)) echo $txt; - $this->contentContainerStart(); ?> -
    + rowStart(); + $this->columnStart(6); $this->contentSubHeading(getMLText("document_infos")); + $this->contentContainerStart(); $this->formField( getMLText("name"), array( @@ -222,7 +224,7 @@ $(document).ready(function() { if(!$nodocumentformfields || !in_array('keywords', $nodocumentformfields)) $this->formField( getMLText("keywords"), - $this->getKeywordChooserHtml('form1') + $this->getKeywordChooserHtml('adddocform') ); if(!$nodocumentformfields || !in_array('categories', $nodocumentformfields)) { $options = array(); @@ -331,7 +333,11 @@ $(document).ready(function() { echo $arrs; } + $this->contentContainerEnd(); + $this->columnEnd(); + $this->columnStart(6); $this->contentSubHeading(getMLText("version_info")); + $this->contentContainerStart(); if(!$nodocumentformfields || !in_array('version', $nodocumentformfields)) { $this->formField( getMLText("version"), @@ -351,7 +357,7 @@ $(document).ready(function() { if($dropfolderdir) { $this->formField( getMLText("dropfolder_file"), - $this->getDropFolderChooserHtml("form1", $dropfolderfile) + $this->getDropFolderChooserHtml("adddocform", $dropfolderfile) ); } if(!$nodocumentformfields || !in_array('version_comment', $nodocumentformfields)) { @@ -397,6 +403,7 @@ $(document).ready(function() { echo $arrs; } + $this->contentContainerEnd(); if($workflowmode == 'advanced') { $mandatoryworkflows = $user->getMandatoryWorkflows(); if($mandatoryworkflows) { @@ -445,6 +452,7 @@ $(document).ready(function() { } elseif($workflowmode == 'traditional' || $workflowmode == 'traditional_only_approval') { if($workflowmode == 'traditional') { $this->contentSubHeading(getMLText("assign_reviewers")); + $this->contentContainerStart(); /* List all mandatory reviewers */ $res=$user->getMandatoryReviewers(); @@ -542,9 +550,11 @@ $(document).ready(function() { } } } + $this->contentContainerEnd(); } $this->contentSubHeading(getMLText("assign_approvers")); + $this->contentContainerStart(); $res=$user->getMandatoryApprovers(); /* List all mandatory approvers */ $tmp = array(); @@ -644,10 +654,12 @@ $(document).ready(function() { } } } + $this->contentContainerEnd(); $this->warningMsg(getMLText("add_doc_reviewer_approver_warning")); } if(!$nodocumentformfields || !in_array('notification', $nodocumentformfields)) { - $this->contentSubHeading(getMLText("add_document_notify")); + $this->contentSubHeading(getMLText("add_document_notify")); + $this->contentContainerStart(); $options = array(); $allUsers = $dms->getAllUsers($sortusersinlist); @@ -683,12 +695,14 @@ $(document).ready(function() { 'options'=>$options ) ); + $this->contentContainerEnd(); } + $this->columnEnd(); + $this->rowEnd(); $this->formSubmit(" ".getMLText('add_document')); ?>
    contentContainerEnd(); $txt = $this->callHook('addDocumentPostForm'); if(is_string($txt)) echo $txt; From a2e9d7e3e91b150ae867b5d2b1f9dbe14203aa5d Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 16 Feb 2021 14:57:10 +0100 Subject: [PATCH 177/276] add changes for 5.1.22 --- CHANGELOG | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index c628895e6..d7013c4e4 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -11,7 +11,8 @@ - overhaul notifications, type of receiver is now passed to notification service which allows a more fine grained filtering - show difference in number of documents on chart page -- list users not Folder Notifiy page which has been disabled +- list users on Folder Notifiy page which has been disabled +- use two column layout on AddDocument page -------------------------------------------------------------------------------- Changes in version 5.1.21 From d61f7f0b2ac325258ad96579b2868d67a0f18ced Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 16 Feb 2021 15:18:27 +0100 Subject: [PATCH 178/276] add css for badges --- styles/bootstrap/application.css | 68 ++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/styles/bootstrap/application.css b/styles/bootstrap/application.css index 0b8ffc87f..8dc96ee18 100644 --- a/styles/bootstrap/application.css +++ b/styles/bootstrap/application.css @@ -215,6 +215,74 @@ ul.jqtree-tree li.jqtree_common > .jqtree-element:hover { background-color: #E0E0E0; } +/* Sidenav for Docs + * -------------------------------------------------- */ + +.bs-docs-sidenav { + width: 100%; + margin: 0px 0 30px 0; + padding: 0; + background-color: #fff; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 1px 4px rgba(0,0,0,.065); + -moz-box-shadow: 0 1px 4px rgba(0,0,0,.065); + box-shadow: 0 1px 4px rgba(0,0,0,.065); +} +.bs-docs-sidenav > li > a { + display: block; + width: 190px \9; + margin: 0 0 -1px; + padding: 8px 14px; + border: 1px solid #e5e5e5; +} +.bs-docs-sidenav > li:first-child > a { + -webkit-border-radius: 6px 6px 0 0; + -moz-border-radius: 6px 6px 0 0; + border-radius: 6px 6px 0 0; +} +.bs-docs-sidenav > li:last-child > a { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} +.bs-docs-sidenav > .active > a { + position: relative; + z-index: 2; + padding: 9px 15px; + border: 0; + text-shadow: 0 1px 0 rgba(0,0,0,.15); + -webkit-box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1); + -moz-box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1); + box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1); +} +/* Chevrons */ +.bs-docs-sidenav .badge-right { + float: right; + margin-top: 2px; + margin-right: -6px; +} +.bs-docs-sidenav > li > a:hover { + background-color: #f5f5f5; +} +.bs-docs-sidenav a:hover .icon-chevron-right { + opacity: .5; +} +.bs-docs-sidenav .active .icon-chevron-right, +.bs-docs-sidenav .active a:hover .icon-chevron-right { + background-image: url(../img/glyphicons-halflings-white.png); + opacity: 1; +} +.bs-docs-sidenav.affix { + top: 100px; +} +.bs-docs-sidenav.affix-bottom { + position: absolute; + top: auto; + bottom: 270px; +} + i.success {color: #00b000;} i.enabled {color: #00b000;} i.error {color: #b00000;} From 12ae492f546a3e1c29180ec6f3816306fc5ca59c Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 16 Feb 2021 21:47:07 +0100 Subject: [PATCH 179/276] move creating notification service into extra file --- inc/inc.Authentication.php | 23 +---------------------- inc/inc.Notification.php | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 22 deletions(-) create mode 100644 inc/inc.Notification.php diff --git a/inc/inc.Authentication.php b/inc/inc.Authentication.php index a587338eb..f8d734e6d 100644 --- a/inc/inc.Authentication.php +++ b/inc/inc.Authentication.php @@ -95,28 +95,7 @@ if($settings->_useHomeAsRootFolder && !$user->isAdmin() && $user->getHomeFolder( $dms->setRootFolderID($user->getHomeFolder()); } -global $logger; -$notifier = new SeedDMS_NotificationService($logger); - -if(isset($GLOBALS['SEEDDMS_HOOKS']['notification'])) { - foreach($GLOBALS['SEEDDMS_HOOKS']['notification'] as $notificationObj) { - if(method_exists($notificationObj, 'preAddService')) { - $notificationObj->preAddService($dms, $notifier); - } - } -} - -if($settings->_enableEmail) { - $notifier->addService(new SeedDMS_EmailNotify($dms, $settings->_smtpSendFrom, $settings->_smtpServer, $settings->_smtpPort, $settings->_smtpUser, $settings->_smtpPassword), 'email'); -} - -if(isset($GLOBALS['SEEDDMS_HOOKS']['notification'])) { - foreach($GLOBALS['SEEDDMS_HOOKS']['notification'] as $notificationObj) { - if(method_exists($notificationObj, 'postAddService')) { - $notificationObj->postAddService($dms, $notifier); - } - } -} +require_once('inc/inc.Notification.php'); /* Include additional language file for view * This file must set $LANG[xx][] diff --git a/inc/inc.Notification.php b/inc/inc.Notification.php new file mode 100644 index 000000000..cfc3ab615 --- /dev/null +++ b/inc/inc.Notification.php @@ -0,0 +1,36 @@ + + * @copyright Copyright (C) 2002-2005 Markus Westphal, + * 2006-2008 Malcolm Cowe, 2010 Uwe Steinmann + * @version Release: @package_version@ + */ + +global $logger; +$notifier = new SeedDMS_NotificationService($logger); + +if(isset($GLOBALS['SEEDDMS_HOOKS']['notification'])) { + foreach($GLOBALS['SEEDDMS_HOOKS']['notification'] as $notificationObj) { + if(method_exists($notificationObj, 'preAddService')) { + $notificationObj->preAddService($dms, $notifier); + } + } +} + +if($settings->_enableEmail) { + $notifier->addService(new SeedDMS_EmailNotify($dms, $settings->_smtpSendFrom, $settings->_smtpServer, $settings->_smtpPort, $settings->_smtpUser, $settings->_smtpPassword), 'email'); +} + +if(isset($GLOBALS['SEEDDMS_HOOKS']['notification'])) { + foreach($GLOBALS['SEEDDMS_HOOKS']['notification'] as $notificationObj) { + if(method_exists($notificationObj, 'postAddService')) { + $notificationObj->postAddService($dms, $notifier); + } + } +} From d22d21d1573b42edd2e19904802ffa750b9d7e1c Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 18 Feb 2021 16:32:32 +0100 Subject: [PATCH 180/276] cancel checkout if versions mismatch --- views/bootstrap/class.CheckInDocument.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/views/bootstrap/class.CheckInDocument.php b/views/bootstrap/class.CheckInDocument.php index cfe1d8076..97aac4363 100644 --- a/views/bootstrap/class.CheckInDocument.php +++ b/views/bootstrap/class.CheckInDocument.php @@ -707,9 +707,10 @@ $(document).ready(function() { } } else { ?> -
    + + - "> + ">
    Date: Sat, 20 Feb 2021 20:13:01 +0100 Subject: [PATCH 181/276] add icon for m4a --- views/bootstrap/class.Bootstrap.php | 1 + 1 file changed, 1 insertion(+) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index 5b33cfe5b..cfd2a2517 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -1047,6 +1047,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);; $icons["pdf"] = "gnome-mime-application-pdf.svg"; $icons["wav"] = "audio.svg"; $icons["mp3"] = "audio.svg"; + $icons["m4a"] = "audio.svg"; $icons["opus"] = "audio.svg"; $icons["c"] = "text-x-preview.svg"; $icons["cpp"] = "text-x-preview.svg"; From 686a6b3ab782be2cc915bcac2b713855512b932c Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Sun, 21 Feb 2021 11:50:42 +0100 Subject: [PATCH 182/276] add support for sending html mails --- inc/inc.ClassEmailNotify.php | 46 +++++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 8 deletions(-) diff --git a/inc/inc.ClassEmailNotify.php b/inc/inc.ClassEmailNotify.php index 4aeaa8126..bf14f505f 100644 --- a/inc/inc.ClassEmailNotify.php +++ b/inc/inc.ClassEmailNotify.php @@ -114,17 +114,47 @@ class SeedDMS_EmailNotify extends SeedDMS_Notify { } - $message = ''; - if(!isset($params['__skip_header__']) || !$params['__skip_header__']) - $message .= getMLText("email_header", $params, "", $lang)."\r\n\r\n"; - $message .= getMLText($messagekey, $params, "", $lang); - if(!isset($params['__skip_footer__']) || !$params['__skip_footer__']) - $message .= "\r\n\r\n".getMLText("email_footer", $params, "", $lang); + $body = ''; + if(!isset($params['__skip_header__']) || !$params['__skip_header__']) { + if(!isset($params['__header__'])) + $body .= getMLText("email_header", $params, "", $lang)."\r\n\r\n"; + elseif($params['__header__']) + $body .= getMLText($params['__header__'], $params, "", $lang)."\r\n\r\n"; + } + if(!isset($params['__body__'])) + $body .= $params['__body__']; + else + $body .= getMLText($messagekey, $params, "", $lang); + if(!isset($params['__skip_footer__']) || !$params['__skip_footer__']) { + if(!isset($params['__footer__'])) + $body .= "\r\n\r\n".getMLText("email_footer", $params, "", $lang); + elseif($params['__footer__']) + $body .= "\r\n\r\n".getMLText($params['__footer__'], $params, "", $lang); + } + + $bodyhtml = ''; + if(!isset($params['__skip_header__']) || !$params['__skip_header__']) { + if(!isset($params['__header_html__'])) + $body .= getMLText("email_header", $params, "", $lang)."\r\n\r\n"; + elseif($params['__header_html__']) + $body .= getMLText($params['__header_html__'], $params, "", $lang)."\r\n\r\n"; + } + if(!isset($params['__body_html__'])) + $body .= $params['__body_html__']; + else + $body .= getMLText($messagekey.'_html', $params, "", $lang); + if(!isset($params['__skip_footer__']) || !$params['__skip_footer__']) { + if(!isset($params['__footer_html__'])) + $body .= "\r\n\r\n".getMLText("email_footer", $params, "", $lang); + elseif($params['__footer_html__']) + $body .= "\r\n\r\n".getMLText($params['__footer_html__'], $params, "", $lang); + } $mime = new Mail_mime(array('eol' => "\n")); - $mime->setTXTBody($message); -// $mime->setHTMLBody($bodyhtml); + $mime->setTXTBody($body); + if($bodyhtml) + $mime->setHTMLBody($bodyhtml); if($attachments) { foreach($attachments as $attachment) { From 9b7645f6c5ee09c0131af56e153357e8f10e3e73 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Sun, 21 Feb 2021 11:51:22 +0100 Subject: [PATCH 183/276] add note for 5.1.22 --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index d7013c4e4..5226627e3 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -13,6 +13,7 @@ - show difference in number of documents on chart page - list users on Folder Notifiy page which has been disabled - use two column layout on AddDocument page +- initial support for sending html mails (not used yet) -------------------------------------------------------------------------------- Changes in version 5.1.21 From 7c69ac348bc1d4752905622c2f71cd9b52797778 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 23 Feb 2021 08:43:03 +0100 Subject: [PATCH 184/276] fix setting body from param array --- inc/inc.ClassEmailNotify.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/inc/inc.ClassEmailNotify.php b/inc/inc.ClassEmailNotify.php index bf14f505f..197d95a2d 100644 --- a/inc/inc.ClassEmailNotify.php +++ b/inc/inc.ClassEmailNotify.php @@ -121,7 +121,7 @@ class SeedDMS_EmailNotify extends SeedDMS_Notify { elseif($params['__header__']) $body .= getMLText($params['__header__'], $params, "", $lang)."\r\n\r\n"; } - if(!isset($params['__body__'])) + if(isset($params['__body__'])) $body .= $params['__body__']; else $body .= getMLText($messagekey, $params, "", $lang); @@ -139,7 +139,7 @@ class SeedDMS_EmailNotify extends SeedDMS_Notify { elseif($params['__header_html__']) $body .= getMLText($params['__header_html__'], $params, "", $lang)."\r\n\r\n"; } - if(!isset($params['__body_html__'])) + if(isset($params['__body_html__'])) $body .= $params['__body_html__']; else $body .= getMLText($messagekey.'_html', $params, "", $lang); From d0f011827b13a9a66d2af0b562574aa110041542 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 23 Feb 2021 11:49:55 +0100 Subject: [PATCH 185/276] propperly set html body --- inc/inc.ClassEmailNotify.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/inc/inc.ClassEmailNotify.php b/inc/inc.ClassEmailNotify.php index 197d95a2d..c8b06beb4 100644 --- a/inc/inc.ClassEmailNotify.php +++ b/inc/inc.ClassEmailNotify.php @@ -135,19 +135,19 @@ class SeedDMS_EmailNotify extends SeedDMS_Notify { $bodyhtml = ''; if(!isset($params['__skip_header__']) || !$params['__skip_header__']) { if(!isset($params['__header_html__'])) - $body .= getMLText("email_header", $params, "", $lang)."\r\n\r\n"; + $bodyhtml .= getMLText("email_header_html", $params, "", $lang)."\r\n\r\n"; elseif($params['__header_html__']) - $body .= getMLText($params['__header_html__'], $params, "", $lang)."\r\n\r\n"; + $bodyhtml .= getMLText($params['__header_html__'], $params, "", $lang)."\r\n\r\n"; } if(isset($params['__body_html__'])) - $body .= $params['__body_html__']; + $bodyhtml .= $params['__body_html__']; else - $body .= getMLText($messagekey.'_html', $params, "", $lang); + $bodyhtml .= getMLText($messagekey.'_html', $params, "", $lang); if(!isset($params['__skip_footer__']) || !$params['__skip_footer__']) { if(!isset($params['__footer_html__'])) - $body .= "\r\n\r\n".getMLText("email_footer", $params, "", $lang); + $bodyhtml .= "\r\n\r\n".getMLText("email_footer_html", $params, "", $lang); elseif($params['__footer_html__']) - $body .= "\r\n\r\n".getMLText($params['__footer_html__'], $params, "", $lang); + $bodyhtml .= "\r\n\r\n".getMLText($params['__footer_html__'], $params, "", $lang); } $mime = new Mail_mime(array('eol' => "\n")); From 0ff247d83e0e19a47507cc36298c1630855185ac Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 23 Feb 2021 12:21:38 +0100 Subject: [PATCH 186/276] various translation updates --- languages/ar_EG/lang.inc | 3 +++ languages/bg_BG/lang.inc | 3 +++ languages/ca_ES/lang.inc | 3 +++ languages/cs_CZ/lang.inc | 3 +++ languages/de_DE/lang.inc | 7 ++++-- languages/el_GR/lang.inc | 7 ++++-- languages/en_GB/lang.inc | 7 ++++-- languages/es_ES/lang.inc | 25 +++++++++++--------- languages/fr_FR/lang.inc | 3 +++ languages/hr_HR/lang.inc | 3 +++ languages/hu_HU/lang.inc | 3 +++ languages/it_IT/lang.inc | 11 +++++---- languages/ko_KR/lang.inc | 3 +++ languages/lo_LA/lang.inc | 3 +++ languages/nb_NO/lang.inc | 3 +++ languages/nl_NL/lang.inc | 49 +++++++++++++++++++++------------------- languages/pl_PL/lang.inc | 3 +++ languages/pt_BR/lang.inc | 7 ++++-- languages/ro_RO/lang.inc | 3 +++ languages/ru_RU/lang.inc | 25 +++++++++++--------- languages/sk_SK/lang.inc | 9 +++++--- languages/sv_SE/lang.inc | 3 +++ languages/tr_TR/lang.inc | 3 +++ languages/uk_UA/lang.inc | 3 +++ languages/zh_CN/lang.inc | 3 +++ languages/zh_TW/lang.inc | 7 ++++-- 26 files changed, 140 insertions(+), 62 deletions(-) diff --git a/languages/ar_EG/lang.inc b/languages/ar_EG/lang.inc index 44c071e0d..96dd73be6 100644 --- a/languages/ar_EG/lang.inc +++ b/languages/ar_EG/lang.inc @@ -503,7 +503,9 @@ URL: [url]', 'email' => 'البريد الإلكتروني', 'email_error_title' => 'لمي يتم ادخال البريد الالكتروني', 'email_footer' => 'يمكنك دائما تغيير اعدادات بريدك الالكتروني من خلال خاصية - مستنداتي', +'email_footer_html' => '', 'email_header' => 'هذا رسالة تلقائية من نظام ادارة المستندات!', +'email_header_html' => '', 'email_not_given' => 'من فضلك ادخل بريد الكتروني صحيح.', 'empty_attribute_group_list' => 'معرف لائحة المجموعات خالية', 'empty_folder_list' => 'لايوجد مستندات او مجلدات', @@ -1771,6 +1773,7 @@ URL: [url]', 'target_equals_source_folder' => '', 'tasks' => 'مهمات', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', 'task_core_indexingdocs_recreate' => '', 'task_description' => 'تفصيل المهام', 'task_disabled' => 'تم توقيف المهمة', diff --git a/languages/bg_BG/lang.inc b/languages/bg_BG/lang.inc index d4996f3dd..6e4d4b48d 100644 --- a/languages/bg_BG/lang.inc +++ b/languages/bg_BG/lang.inc @@ -456,7 +456,9 @@ $text = array( 'email' => 'Email', 'email_error_title' => 'Email не е указан', 'email_footer' => 'Винаги можете да измените e-mail исползвайки функцията \'Моя учетка\'', +'email_footer_html' => '', 'email_header' => 'Това е автоматично уведомяване от сървъра за документооборот', +'email_header_html' => '', 'email_not_given' => 'Въведете настоящ email.', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Няма документи или папки', @@ -1634,6 +1636,7 @@ $text = array( 'target_equals_source_folder' => '', 'tasks' => '', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', 'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', diff --git a/languages/ca_ES/lang.inc b/languages/ca_ES/lang.inc index 2020db0a7..923f5419e 100644 --- a/languages/ca_ES/lang.inc +++ b/languages/ca_ES/lang.inc @@ -461,7 +461,9 @@ URL: [url]', 'email' => 'Email', 'email_error_title' => '', 'email_footer' => 'Sempre es pot canviar la configuració de correu electrònic utilitzant les funcions de «El meu compte»', +'email_footer_html' => '', 'email_header' => 'Aquest es un missatge automàtic del servidor de DMS.', +'email_header_html' => '', 'email_not_given' => '', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Sense documents o carpetes', @@ -1639,6 +1641,7 @@ URL: [url]', 'target_equals_source_folder' => '', 'tasks' => '', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', 'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', diff --git a/languages/cs_CZ/lang.inc b/languages/cs_CZ/lang.inc index f0c78f25f..aea6a4b85 100644 --- a/languages/cs_CZ/lang.inc +++ b/languages/cs_CZ/lang.inc @@ -527,7 +527,9 @@ URL: [url]', 'email' => 'E-mail', 'email_error_title' => 'Není zadána emailová adresa', 'email_footer' => 'Změnu nastavení e-mailu můžete kdykoliv provést pomocí funkce\'Můj účet\'', +'email_footer_html' => '', 'email_header' => 'Toto je automatická zpráva ze serveru DMS.', +'email_header_html' => '', 'email_not_given' => 'Zadejte platnou emailovou adresu.', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Žádné dokumenty nebo složky', @@ -1843,6 +1845,7 @@ Jméno: [username] 'target_equals_source_folder' => '', 'tasks' => 'Úkoly', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', 'task_core_indexingdocs_recreate' => '', 'task_description' => 'Popis', 'task_disabled' => 'Vypnuto', diff --git a/languages/de_DE/lang.inc b/languages/de_DE/lang.inc index a984f277d..f08b55983 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 (2860), dgrutsch (22) +// Translators: Admin (2864), dgrutsch (22) $text = array( '2_factor_auth' => '2-Faktor Authentifizierung', @@ -527,7 +527,9 @@ URL: [url]', 'email' => 'Email', 'email_error_title' => 'Keine E-Mail-Adresse eingegeben', 'email_footer' => 'Sie können zu jeder Zeit Ihre E-Mail-Adresse über \'Mein Profil\' ändern.', +'email_footer_html' => '

    Sie können zu jeder Zeit Ihre E-Mail-Adresse über \'Mein Profil\' ändern.

    ', 'email_header' => 'Dies ist eine automatische Nachricht des DMS-Servers.', +'email_header_html' => '

    Dies ist eine automatische Nachricht des DMS-Servers.

    ', 'email_not_given' => 'Bitte geben Sie eine gültige E-Mail-Adresse ein.', 'empty_attribute_group_list' => 'Keine Attributgruppen', 'empty_folder_list' => 'Keine Dokumente oder Ordner', @@ -1423,7 +1425,7 @@ Name: [username] 'settings_enableDuplicateDocNames_desc' => 'Erlaube doppelte Dokumentennamen in einem Ordner.', 'settings_enableDuplicateSubFolderNames' => 'Erlaube doppelte Namen von Unterordnern', 'settings_enableDuplicateSubFolderNames_desc' => 'Erlaube doppelte Namen von Unterordnern in einem Ordner.', -'settings_enableEmail' => 'E-Mail aktivieren', +'settings_enableEmail' => 'E-Mail-Benachrichtigung aktivieren', 'settings_enableEmail_desc' => 'Automatische E-Mail-Benachrichtigung ein-/ausschalten', 'settings_enableFilterReceipt' => 'Besitzer, Prüfer, ... aus Empfängerliste filtern', 'settings_enableFilterReceipt_desc' => 'Anwählen, um einige Empfänger aus der Liste zu entfernen, wenn diese als Mitglieder einer Gruppe eingetragen werden.', @@ -1854,6 +1856,7 @@ Name: [username] 'target_equals_source_folder' => 'Zielordner ist identisch zu Quellordner', 'tasks' => 'Aufgaben', 'task_core_expireddocs_days' => 'Tage', +'task_core_expireddocs_email' => 'E-Mail', 'task_core_indexingdocs_recreate' => 'Index neu erzeugen', 'task_description' => 'Beschreibung', 'task_disabled' => 'Deaktiviert', diff --git a/languages/el_GR/lang.inc b/languages/el_GR/lang.inc index a1e851c85..8278c9147 100644 --- a/languages/el_GR/lang.inc +++ b/languages/el_GR/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 (347) +// Translators: Admin (348) $text = array( '2_factor_auth' => '', @@ -223,7 +223,7 @@ $text = array( 'change_assignments' => '', 'change_password' => 'Αλλαγή κωδικού', 'change_password_message' => 'Ο κωδικός σας έχει αλλάξει.', -'change_recipients' => '', +'change_recipients' => 'Ορισμός παραληπτών', 'change_revisors' => '', 'change_status' => 'Αλλαγή κατάστασης', 'charts' => 'Διαγράμματα', @@ -456,7 +456,9 @@ $text = array( 'email' => 'Email', 'email_error_title' => '', 'email_footer' => '', +'email_footer_html' => '', 'email_header' => '', +'email_header_html' => '', 'email_not_given' => '', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Δεν υπάρχουν αρχεία ή φάκελοι', @@ -1645,6 +1647,7 @@ URL: [url]', 'target_equals_source_folder' => '', 'tasks' => '', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', 'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', diff --git a/languages/en_GB/lang.inc b/languages/en_GB/lang.inc index 1839ec367..650a2eed6 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 (1969), archonwang (3), dgrutsch (9), netixw (14) +// Translators: Admin (1973), archonwang (3), dgrutsch (9), netixw (14) $text = array( '2_factor_auth' => '2-factor authentication', @@ -527,7 +527,9 @@ URL: [url]', 'email' => 'Email', 'email_error_title' => 'No email entered', 'email_footer' => 'You can always change your e-mail settings using \'My Account\' functions', +'email_footer_html' => '

    You can always change your e-mail settings using \'My Account\' functions

    ', 'email_header' => 'This is an automatic message from the DMS server.', +'email_header_html' => '

    This is an automatic message from the DMS server.

    ', 'email_not_given' => 'Please enter a valid email address.', 'empty_attribute_group_list' => 'No attribute groups', 'empty_folder_list' => 'No documents or folders', @@ -1417,7 +1419,7 @@ Name: [username] 'settings_enableDuplicateDocNames_desc' => 'Allows to have duplicate document names in a folder.', 'settings_enableDuplicateSubFolderNames' => 'Allow duplicat subfolder names', 'settings_enableDuplicateSubFolderNames_desc' => 'Allows to have duplicate subfolder names in a folder.', -'settings_enableEmail' => 'Enable E-mail', +'settings_enableEmail' => 'Enable E-mail Notification', 'settings_enableEmail_desc' => 'Enable/disable automatic email notification', 'settings_enableFilterReceipt' => 'Filter out owner, reviewer, ... from reception list', 'settings_enableFilterReceipt_desc' => 'Enable, in order to filter out some recipients from a reception list if members of a group are selected.', @@ -1848,6 +1850,7 @@ Name: [username] 'target_equals_source_folder' => 'Target folder equals source folder', 'tasks' => 'Tasks', 'task_core_expireddocs_days' => 'Days', +'task_core_expireddocs_email' => 'Email', 'task_core_indexingdocs_recreate' => 'Recreate index', 'task_description' => 'Description', 'task_disabled' => 'Disabled', diff --git a/languages/es_ES/lang.inc b/languages/es_ES/lang.inc index 06759a3fb..29d68a30e 100644 --- a/languages/es_ES/lang.inc +++ b/languages/es_ES/lang.inc @@ -19,10 +19,10 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: acabello (20), Admin (1293), angel (123), francisco (2), jaimem (14) +// Translators: acabello (20), Admin (1303), angel (123), francisco (2), jaimem (14) $text = array( -'2_factor_auth' => '', +'2_factor_auth' => 'Autenticación de doble factor', '2_factor_auth_info' => '', '2_fact_auth_secret' => '', 'abbr_day' => '', @@ -510,7 +510,9 @@ URL: [url]', 'email' => 'Email', 'email_error_title' => 'No ha introducido un correo', 'email_footer' => 'Siempre se puede cambiar la configuración de correo electrónico utilizando las funciones de «Mi cuenta»', +'email_footer_html' => '', 'email_header' => 'Este es un mensaje automático del servidor de DMS.', +'email_header_html' => '', 'email_not_given' => 'Por favor, introduzca una dirección de correo válida.', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Sin documentos o carpetas', @@ -1016,9 +1018,9 @@ Si continua teniendo problemas de acceso, por favor contacte con el administrado 'receipt_update_failed' => '', 'recent_uploads' => 'Subidas recientes', 'reception' => 'Recepción', -'reception_acknowleged' => '', -'reception_noaction' => '', -'reception_rejected' => '', +'reception_acknowleged' => 'Recepción aceptada', +'reception_noaction' => 'Sin acciones', +'reception_rejected' => 'Recepción rechazada', 'recipients' => '', 'recipient_already_removed' => '', 'redraw' => '', @@ -1109,7 +1111,7 @@ URL: [url]', 'revisions_rejected_latest' => '', 'revisions_without_group' => 'Revisiones sin grupo', 'revisions_without_user' => 'Revisiones sin usuario', -'revision_date' => '', +'revision_date' => 'Fecha de revisión', 'revision_log' => 'Histórico de revisiones', 'revision_request_email_body' => '', 'revision_request_email_subject' => '', @@ -1211,7 +1213,7 @@ URL: [url]', 'select_grp_ind_notification' => '', 'select_grp_ind_recipients' => 'Seleccione grupo', 'select_grp_ind_reviewers' => 'Dar click para seleccionar el grupo', -'select_grp_ind_revisors' => '', +'select_grp_ind_revisors' => 'Clic para seleccionar grupo', 'select_grp_notification' => 'Clic para seleccionar la notificación grupal', 'select_grp_recipients' => 'Dar click para selecionar el grupo', 'select_grp_reviewers' => 'Haga Click para seleccionar grupo de revisores', @@ -1220,7 +1222,7 @@ URL: [url]', 'select_ind_notification' => 'Clic para seleccionar la notificación individual', 'select_ind_recipients' => 'Dar click para asignar los receptores', 'select_ind_reviewers' => 'Haga Click para seleccionar revisor individual', -'select_ind_revisors' => '', +'select_ind_revisors' => 'Clic para seleccionar revisores individuales', 'select_mimetype' => '', 'select_one' => 'Seleccionar uno', 'select_owner' => '', @@ -1763,7 +1765,7 @@ URL: [url]', 'submit_userinfo' => 'Enviar información', 'submit_webauthn_login' => '', 'submit_webauthn_register' => '', -'subsribe_timelinefeed' => '', +'subsribe_timelinefeed' => 'Suscríbase a la línea de tiempo', 'substitute_to_user' => 'Cambiar a \'[username]\'', 'substitute_user' => 'Cambiar de usuario', 'success_add_aro' => '', @@ -1786,6 +1788,7 @@ URL: [url]', 'target_equals_source_folder' => '', 'tasks' => 'Tareas', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', 'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', @@ -1816,8 +1819,8 @@ URL: [url]', 'timeline_skip_status_change_1' => 'aprovaciones pendientes', 'timeline_skip_status_change_2' => 'versiones', 'timeline_skip_status_change_3' => 'con flujo de trabajo', -'timeline_skip_status_change_4' => '', -'timeline_skip_status_change_5' => '', +'timeline_skip_status_change_4' => 'en revisión', +'timeline_skip_status_change_5' => 'borrador', 'timeline_status_change' => 'Versión [version]: [estado]', 'to' => 'Hasta', 'toggle_manager' => 'Intercambiar mánager', diff --git a/languages/fr_FR/lang.inc b/languages/fr_FR/lang.inc index bb5a2dd7b..283894718 100644 --- a/languages/fr_FR/lang.inc +++ b/languages/fr_FR/lang.inc @@ -527,7 +527,9 @@ URL: [url]', 'email' => 'E-mail', 'email_error_title' => 'Aucun e-mail indiqué', 'email_footer' => 'Vous pouvez modifier vos notifications via « Mon compte ».', +'email_footer_html' => '', 'email_header' => 'Ceci est un message automatique généré par le serveur DMS.', +'email_header_html' => '', 'email_not_given' => 'Veuillez entrer une adresse e-mail valide.', 'empty_attribute_group_list' => 'Aucun groupe d’attributs', 'empty_folder_list' => 'Pas de documents ou de dossier', @@ -1846,6 +1848,7 @@ Nom : [username] 'target_equals_source_folder' => '', 'tasks' => 'Tâches', 'task_core_expireddocs_days' => 'jours', +'task_core_expireddocs_email' => '', 'task_core_indexingdocs_recreate' => '', 'task_description' => 'Description', 'task_disabled' => 'Désactivée', diff --git a/languages/hr_HR/lang.inc b/languages/hr_HR/lang.inc index ea5ea935d..594f7c1a0 100644 --- a/languages/hr_HR/lang.inc +++ b/languages/hr_HR/lang.inc @@ -515,7 +515,9 @@ Internet poveznica: [url]', 'email' => 'Email', 'email_error_title' => 'Nema ulaznog emaila', 'email_footer' => 'Koristeći funckcije \'Moj račun\' možete promijeniti postavke email obavještavanja.', +'email_footer_html' => '', 'email_header' => 'Ovo je automatski generirana poruka iz DMS sustava', +'email_header_html' => '', 'email_not_given' => 'Molimo unesite valjanu email adresu.', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Nema dokumenata ili mapa', @@ -1807,6 +1809,7 @@ Internet poveznica: [url]', 'target_equals_source_folder' => '', 'tasks' => 'Zadaci', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', 'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', diff --git a/languages/hu_HU/lang.inc b/languages/hu_HU/lang.inc index fa2b65ba9..374b95cc0 100644 --- a/languages/hu_HU/lang.inc +++ b/languages/hu_HU/lang.inc @@ -510,7 +510,9 @@ URL: [url]', 'email' => 'Email', 'email_error_title' => 'Nem adott meg email címet', 'email_footer' => 'Bármikor módosíthatja email beállításait a \'My Account\' funkcióval', +'email_footer_html' => '', 'email_header' => 'Ez egy automatikus üzenet a DMS kiszolgálótól.', +'email_header_html' => '', 'email_not_given' => 'Kérem adjon meg egy érvényes email címet.', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Mappa vagy dokumentum nem található', @@ -1785,6 +1787,7 @@ URL: [url]', 'target_equals_source_folder' => '', 'tasks' => '', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', 'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', diff --git a/languages/it_IT/lang.inc b/languages/it_IT/lang.inc index 25300676a..5aa70a515 100644 --- a/languages/it_IT/lang.inc +++ b/languages/it_IT/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 (2049), rickr (144), s.pnt (26) +// Translators: Admin (2053), rickr (144), s.pnt (26) $text = array( '2_factor_auth' => 'Autorizzazione a due fattori', @@ -335,7 +335,7 @@ URL: [url]', 'current_version' => 'Versione attuale', 'daily' => 'Giornaliero', 'databasesearch' => 'Ricerca nel Database', -'database_schema_version' => '', +'database_schema_version' => 'Versione dello schema del database', 'data_loading' => 'Attendere il caricamento dei dati...', 'date' => 'Data', 'days' => 'Giorni', @@ -520,7 +520,9 @@ URL: [url]', 'email' => 'Email', 'email_error_title' => 'Nessuna email immessa', 'email_footer' => 'Puoi cambiare l\'impostazione della tua email utilizzando le funzioni del menu \'Account personale\'', +'email_footer_html' => '', 'email_header' => 'Questo è un messaggio automatico inviato dal server DMS', +'email_header_html' => '', 'email_not_given' => 'Inserisci un indirizzo email valido.', 'empty_attribute_group_list' => 'Nessun gruppo di attributi', 'empty_folder_list' => 'Cartella vuota', @@ -1240,7 +1242,7 @@ URL: [url]', 'search_results_access_filtered' => 'La ricerca può produrre risultati al cui contenuto è negato l\'accesso.', 'search_time' => 'Tempo trascorso: [time] secondi.', 'seconds' => 'secondi', -'seeddms_info' => '', +'seeddms_info' => 'Informazioni riguardo SeedDMS', 'seeddms_version' => 'Versione di SeedDMS', 'selection' => 'Selezione', 'select_attrdef' => '', @@ -1834,6 +1836,7 @@ Name: [username] 'target_equals_source_folder' => '', 'tasks' => 'Attività', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', 'task_core_indexingdocs_recreate' => '', 'task_description' => 'Descrizione', 'task_disabled' => 'Disabilitata', @@ -1974,7 +1977,7 @@ URL: [url]', 'version_deleted_email_subject' => '[sitename]: [name] - Versione cancellata', 'version_info' => 'Informazioni versione', 'view' => 'Visualizza', -'view_document' => '', +'view_document' => 'Visualizza i dettagli del documento', 'view_folder' => '', 'view_online' => 'Visualizza on-line', 'warning' => 'Attenzione', diff --git a/languages/ko_KR/lang.inc b/languages/ko_KR/lang.inc index 8e03c3f65..c764f3c69 100644 --- a/languages/ko_KR/lang.inc +++ b/languages/ko_KR/lang.inc @@ -516,7 +516,9 @@ URL: [url]', 'email' => '전자우편', 'email_error_title' => '기입된 전자우편 없음', 'email_footer' => '귀하는 언제든지 \'내 계정\' 기능을 사용하여 전자우편 주소를 바꿀 수 있습니다.', +'email_footer_html' => '', 'email_header' => 'DMS 서버에서의 자동화 메시지입니다.', +'email_header_html' => '', 'email_not_given' => '유효한 전자우편을 기입해주세요.', 'empty_attribute_group_list' => '', 'empty_folder_list' => '문서 또는 폴더 입력', @@ -1801,6 +1803,7 @@ URL : [url]', 'target_equals_source_folder' => '', 'tasks' => '작업', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', 'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', diff --git a/languages/lo_LA/lang.inc b/languages/lo_LA/lang.inc index 72374012f..b41df7b2b 100644 --- a/languages/lo_LA/lang.inc +++ b/languages/lo_LA/lang.inc @@ -513,7 +513,9 @@ URL: [url]', 'email' => 'ອີເມວ', 'email_error_title' => 'ບໍ່ໄດ້ປ້ອນອີເມວ', 'email_footer' => 'ເຈົ້າສາມາດປ່ຽນການຕັ້ງຄ່າອີເມວຂອງທ່ານໄດ້ຕະຫຼອດເວລາໂດຍໄຊ້ຟັງຊັນ "ບັນຊີຂອງຊັນ "', +'email_footer_html' => '', 'email_header' => 'DMS ເປັນຂໍ້ຄວາມອັດຕະໂນມັດຈາກເຊີເວີ', +'email_header_html' => '', 'email_not_given' => 'ກະລຸນາປ້ອນອີເມວໃຫ້ຖືກຕ້ອງ', 'empty_attribute_group_list' => 'ບໍ່ມີແອັດທີບິວ', 'empty_folder_list' => 'ບໍ່ມີເອກະສານຫຼືໂຟລເດີ', @@ -1827,6 +1829,7 @@ URL: [url]', 'target_equals_source_folder' => '', 'tasks' => 'ງານ', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', 'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', diff --git a/languages/nb_NO/lang.inc b/languages/nb_NO/lang.inc index 87fec4289..2c2478051 100644 --- a/languages/nb_NO/lang.inc +++ b/languages/nb_NO/lang.inc @@ -527,7 +527,9 @@ URL: [url]', 'email' => 'E-post', 'email_error_title' => 'Ingen e-post adresse er oppgitt', 'email_footer' => 'Du kan alltid endre e-postinnstillingene dine ved å bruke \'Min side\' funksjoner', +'email_footer_html' => '', 'email_header' => 'Dette er en automatisk melding fra DMS-serveren.', +'email_header_html' => '', 'email_not_given' => 'Vennligst skriv inn en gyldig e-post adresse.', 'empty_attribute_group_list' => 'Ingen egenskapsgrupper', 'empty_folder_list' => 'Ingen dokumenter eller mapper', @@ -1840,6 +1842,7 @@ Bruker: [username] 'target_equals_source_folder' => '', 'tasks' => 'Oppgaver', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', 'task_core_indexingdocs_recreate' => '', 'task_description' => 'Beskrivelse', 'task_disabled' => 'Deaktivert', diff --git a/languages/nl_NL/lang.inc b/languages/nl_NL/lang.inc index 87830422e..010b07632 100644 --- a/languages/nl_NL/lang.inc +++ b/languages/nl_NL/lang.inc @@ -19,19 +19,19 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1167), gijsbertush (651), pepijn (45), reinoutdijkstra@hotmail.com (270) +// Translators: Admin (1167), gijsbertush (673), pepijn (45), reinoutdijkstra@hotmail.com (270) $text = array( '2_factor_auth' => '2-factor-authenticatie', '2_factor_auth_info' => 'Dit systeem werkt met 2-factor-authenticatie. U heeft de Google Authenticator nodig op uw mobiele telfoon. Hieronder staan 2 QR-codes. De rechter is uw huidige geheime code. Met de linker kunt u een nieuwe geheime code instellen. Denk erom de nieuwe code opnieuw te scannen met Googke Authenticator.', '2_fact_auth_secret' => 'Toegangscode 2-factor-authenticatie', -'abbr_day' => '', -'abbr_hour' => '', -'abbr_minute' => '', -'abbr_month' => '', -'abbr_second' => '', -'abbr_week' => '', -'abbr_year' => '', +'abbr_day' => 'd', +'abbr_hour' => 'u', +'abbr_minute' => 'min', +'abbr_month' => 'mnd', +'abbr_second' => 'sec', +'abbr_week' => 'w', +'abbr_year' => 'jr', 'accept' => 'Accepteren', 'access_control' => 'Toegangscontrole', 'access_control_is_off' => 'Toegangscontrole staat uit', @@ -222,7 +222,7 @@ URL: [url]', 'calendar' => 'Kalender', 'calendar_week' => 'Weekkalender', 'cancel' => 'Annuleren', -'cancel_checkout' => '', +'cancel_checkout' => 'stop', 'cancel_checkout_warning' => '', 'cannot_assign_invalid_state' => 'Kan het document niet aanpassen in deze status', 'cannot_change_final_states' => 'Waarschuwing: U kunt de Status [afgewezen], [vervallen], [in afwachting van] (nog) niet wijzigen.', @@ -355,7 +355,7 @@ URL: [url]', 'documents_locked' => 'Geblokkeerde documenten', 'documents_locked_by_you' => 'Documenten door u geblokkeerd', 'documents_only' => 'Alleen documenten', -'documents_rejected' => '', +'documents_rejected' => 'Document afgewezen', 'documents_to_approve' => 'Documenten die wachten op uw goedkeuring', 'documents_to_correct' => 'Te corrigeren documenten', 'documents_to_process' => 'Te verwerken documenten', @@ -509,7 +509,7 @@ URL: [url]', 'edit_folder_props' => 'Wijzig Map eigenschappen', 'edit_group' => 'Wijzig Groep', 'edit_online' => 'Online bewerken', -'edit_online_not_allowed' => '', +'edit_online_not_allowed' => 'Online edit niet toegestaan', 'edit_online_warning' => 'Waarschuwing: als u de wijzigingen opslaat, wordt de bestaande versie van het document overschreven. Er wordt dus geen nieuwe versie gemaakt.', 'edit_task' => 'Taak bewerken', 'edit_transmittal_props' => 'Opmerkingen bij verzending', @@ -520,7 +520,9 @@ URL: [url]', 'email' => 'E-mail', 'email_error_title' => 'Geen email ingevoerd', 'email_footer' => 'U kunt altijd uw e-mail instellingen wijzigen via de \'Mijn Account\' opties', +'email_footer_html' => '', 'email_header' => 'Dit is een automatisch gegenereerd bericht van de DMS server.', +'email_header_html' => '', 'email_not_given' => 'Voer aub een geldig email adres in.', 'empty_attribute_group_list' => 'Lege lijst van attributen', 'empty_folder_list' => 'Geen documenten of mappen', @@ -579,8 +581,8 @@ URL: [url]', 'export_user_list_csv' => 'Exporteer gebruikers in csv-formaat', 'extension_archive' => 'Extensies', 'extension_changelog' => 'Overzicht van wijzigingen', -'extension_is_off_now' => '', -'extension_is_on_now' => '', +'extension_is_off_now' => 'Extensie uitgeschakeld', +'extension_is_on_now' => 'Extensie ingeschakeld', 'extension_loading' => 'Laden van extensies ...', 'extension_manager' => 'Extensies beheren', 'extension_mgr_error_upload' => 'Fout bij het uploaden van de extensie', @@ -588,8 +590,8 @@ URL: [url]', 'extension_mgr_no_upload' => 'Installeren nieuwe extensies is niet mogelijk omdat de extensies map niet schrijfbaar is.', 'extension_mgr_no_zipfile' => 'Fout bij uploaden extensie: is geen zipfile', 'extension_mgr_repository' => 'Beschikbaar', -'extension_missing_name' => '', -'extension_toggle_error' => '', +'extension_missing_name' => 'Naam extensie ontbreekt', +'extension_toggle_error' => 'Omschakelen mislukt', 'extension_version_list' => 'Versies', 'february' => 'februari', 'file' => 'Bestand', @@ -948,7 +950,7 @@ URL: [url]', 'october' => 'oktober', 'old' => 'Oude', 'only_jpg_user_images' => 'U mag alleen .jpg afbeeldingen gebruiken als gebruikersafbeeldingen.', -'operation_disallowed' => '', +'operation_disallowed' => 'Bewerking niet toegestaan', 'order_by_sequence_off' => 'Volgorde uit', 'original_filename' => 'Originele bestandsnaam', 'overall_indexing_progress' => 'Voortgang van de indexering', @@ -1141,7 +1143,7 @@ URL: [url]', 'review_update_failed' => 'Fout: bijwerken status beoordeling mislukt.', 'revise_document' => 'Document herzien', 'revise_document_on' => 'Volgende herziening van document op [date]', -'revision' => '', +'revision' => 'Versie nr', 'revisions_accepted' => '[no_revisions] revisies geaccepteerd', 'revisions_accepted_latest' => '(er zijn [no_revisions] in de nieuwste versie)', 'revisions_not_touched' => '[no_revisions] revisies geopend', @@ -1392,7 +1394,7 @@ Name: [username] 'settings_enableAdminRevApp_desc' => 'Uitvinken om beheerder niette tonen als controleerder/beoordeler', 'settings_enableCalendar' => 'Agenda inschakelen', 'settings_enableCalendar_desc' => 'Inschakelen/uitschakelen agenda', -'settings_enableCancelCheckout' => '', +'settings_enableCancelCheckout' => 'Uitschakelen checkout toestaan', 'settings_enableCancelCheckout_desc' => '', 'settings_enableClipboard' => 'Activeer klembord', 'settings_enableClipboard_desc' => 'Activeer/ blokkeer het klembord', @@ -1836,9 +1838,10 @@ Name: [username] 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'Onthoud de laatste groep individuele herzieners', 'takeOverIndReviewers' => '', -'target_equals_source_folder' => '', +'target_equals_source_folder' => 'Doel- en bronmap zijn dezelfde', 'tasks' => 'taken', 'task_core_expireddocs_days' => 'Dagen', +'task_core_expireddocs_email' => '', 'task_core_indexingdocs_recreate' => '', 'task_description' => 'Omschrijving', 'task_disabled' => 'Inactief', @@ -1875,7 +1878,7 @@ Name: [username] 'to' => 'aan', 'toggle_manager' => 'Wijzig Beheerder', 'toggle_qrcode' => 'Tonen/Verbergen QR-code', -'total' => '', +'total' => 'totaal', 'to_before_from' => 'De einddatum mag nietvoor de startdatum liggen', 'transfer_content' => 'Inhoud verzenden', 'transfer_document' => 'Document verzenden', @@ -1979,8 +1982,8 @@ URL: [url]', 'version_deleted_email_subject' => '[sitename]: [name] - Versie verwijderd', 'version_info' => 'Versie-informatie', 'view' => 'Bekijk', -'view_document' => '', -'view_folder' => '', +'view_document' => 'Document bekijken', +'view_folder' => 'Map bekijken', 'view_online' => 'Bekijk online', 'warning' => 'Waarschuwing', 'webauthn_auth' => 'WebAuthn Authentificatie', @@ -2018,7 +2021,7 @@ URL: [url]', 'workflow_title' => 'Titel van de workflow', 'workflow_transition_without_user_group' => 'Minstens één transitie kent geen gebruiker of groep', 'workflow_user_summary' => 'Gebruiker samenvatting', -'wrong_checksum' => '', +'wrong_checksum' => 'Fout in checksum', 'wrong_filetype' => 'Fout bestandstype', 'x_more_objects' => 'meer items', 'year_view' => 'Jaaroverzicht', diff --git a/languages/pl_PL/lang.inc b/languages/pl_PL/lang.inc index fbdd2db3a..f30bb3155 100644 --- a/languages/pl_PL/lang.inc +++ b/languages/pl_PL/lang.inc @@ -503,7 +503,9 @@ URL: [url]', 'email' => 'Email', 'email_error_title' => 'Nie wprowadzono adresu email', 'email_footer' => 'W każdej chwili możesz zmienić swój email używając zakładki \'Moje konto\'.', +'email_footer_html' => '', 'email_header' => 'To jest automatyczne powiadomienie serwera DMS.', +'email_header_html' => '', 'email_not_given' => 'Proszę podać poprawny adres email.', 'empty_attribute_group_list' => 'Brak grup atrybutów', 'empty_folder_list' => 'Nie ma dokumentów lub folderów', @@ -1770,6 +1772,7 @@ Name: [username] 'target_equals_source_folder' => '', 'tasks' => 'Zadania', 'task_core_expireddocs_days' => 'Rdzeń zadania wygasa', +'task_core_expireddocs_email' => '', 'task_core_indexingdocs_recreate' => '', 'task_description' => 'Opis zadania', 'task_disabled' => 'Zadanie wyłączone', diff --git a/languages/pt_BR/lang.inc b/languages/pt_BR/lang.inc index db62513d1..a1c0aa05e 100644 --- a/languages/pt_BR/lang.inc +++ b/languages/pt_BR/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 (1845), flaviove (627), lfcristofoli (352) +// Translators: Admin (1846), flaviove (627), lfcristofoli (352) $text = array( '2_factor_auth' => 'Autenticação de dois fatores', @@ -527,7 +527,9 @@ URL: [url]', 'email' => 'E-mail', 'email_error_title' => 'Nenhum e-mail informado', 'email_footer' => 'Você sempre pode alterar suas configurações de e-mail usando as funções \'Minha conta\'', +'email_footer_html' => '', 'email_header' => 'Este é um gerenciador automático do servidor DMS.', +'email_header_html' => '', 'email_not_given' => 'Por favor insira um endereço de e-mail válido.', 'empty_attribute_group_list' => 'Nenhum grupo de atributos', 'empty_folder_list' => 'Nenhum documento ou pasta', @@ -710,7 +712,7 @@ URL: [url]', 'include_subdirectories' => 'Include subdirectories', 'indexing_tasks_in_queue' => 'Tarefas de indexação em fila', 'index_converters' => 'conversores de índice', -'index_document_unchanged' => '', +'index_document_unchanged' => 'documento inalterado', 'index_done' => 'Finalizado', 'index_error' => 'Erro', 'index_folder' => 'Pasta Raiz', @@ -1846,6 +1848,7 @@ Nome: [username] 'target_equals_source_folder' => '', 'tasks' => 'Tarefas', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', 'task_core_indexingdocs_recreate' => '', 'task_description' => 'Descrição', 'task_disabled' => 'Desativado', diff --git a/languages/ro_RO/lang.inc b/languages/ro_RO/lang.inc index 1901a1384..c4e53c537 100644 --- a/languages/ro_RO/lang.inc +++ b/languages/ro_RO/lang.inc @@ -515,7 +515,9 @@ URL: [url]', 'email' => 'Email', 'email_error_title' => 'Nici un email introdus', 'email_footer' => 'Puteți schimba oricând setările de e-mail folosind functionalitatile din \'Contul meu\'', +'email_footer_html' => '', 'email_header' => 'Acesta este un mesaj automat de la serverul DMS.', +'email_header_html' => '', 'email_not_given' => 'Vă rugăm să introduceți o adresă de email validă.', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Nu există documente sau foldere', @@ -1808,6 +1810,7 @@ URL: [url]', 'target_equals_source_folder' => '', 'tasks' => '', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', 'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', diff --git a/languages/ru_RU/lang.inc b/languages/ru_RU/lang.inc index 0e7f3e1bc..ded4c19e4 100644 --- a/languages/ru_RU/lang.inc +++ b/languages/ru_RU/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 (1704) +// Translators: Admin (1714) $text = array( '2_factor_auth' => 'Двухфакторная аутентификация', @@ -248,7 +248,7 @@ URL: [url]', 'category_in_use' => 'Эта категория используется документами', 'category_noname' => 'Введите название категории', 'ca_ES' => 'Catalan', -'changelog_loading' => '', +'changelog_loading' => 'Подождите, пока не загрузится журнал изменений', 'change_assignments' => 'Изменить назначения', 'change_password' => 'Изменить пароль', 'change_password_message' => 'Пароль изменён', @@ -515,7 +515,9 @@ URL: [url]', 'email' => 'E-mail', 'email_error_title' => 'Не указан e-mail', 'email_footer' => 'Вы можете изменить e-mail используя меню «Моя учётка».', +'email_footer_html' => '', 'email_header' => 'Это автоматическое уведомление сервера документооборота.', +'email_header_html' => '', 'email_not_given' => 'Введите настоящий адрес e-mail.', 'empty_attribute_group_list' => 'Пустой список группы атрибутов', 'empty_folder_list' => 'Нет документов или каталогов', @@ -560,7 +562,7 @@ URL: [url]', 'expire_in_1y' => '1 год', 'expire_in_2h' => 'Истекает через два часа', 'expire_in_2y' => '2 года', -'expire_in_3y' => '', +'expire_in_3y' => 'Истекает через 3 года', 'expire_today' => 'Истекает сегодня', 'expire_tomorrow' => 'Истекает завтра', 'expiry_changed_email' => 'Срок действия изменен', @@ -573,19 +575,19 @@ URL: [url]', 'export' => 'Экспорт', 'export_user_list_csv' => '', 'extension_archive' => '', -'extension_changelog' => '', +'extension_changelog' => 'Журнал изменений', 'extension_is_off_now' => '', 'extension_is_on_now' => '', -'extension_loading' => '', +'extension_loading' => 'Загрузка расширений', 'extension_manager' => 'Управление расширениями', 'extension_mgr_error_upload' => '', -'extension_mgr_installed' => '', -'extension_mgr_no_upload' => '', +'extension_mgr_installed' => 'установлены', +'extension_mgr_no_upload' => 'Загрузка новых расширений невозможна, потому что каталог расширений недоступен для записи.', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => 'Установленные', 'extension_missing_name' => '', 'extension_toggle_error' => '', -'extension_version_list' => '', +'extension_version_list' => 'Версии', 'february' => 'Февраль', 'file' => 'Файл', 'files' => 'Файлы', @@ -638,7 +640,7 @@ URL: [url]', 'folder_renamed_email_subject' => '[sitename]: переименован каталог «[name]»', 'folder_title' => 'Каталог [foldername]', 'foot_note' => '', -'force_update' => '', +'force_update' => 'обновить', 'friday' => 'Пятница', 'friday_abbr' => 'Пт', 'from' => 'От', @@ -1665,8 +1667,8 @@ URL: [url]', 'set_owner_error' => 'Ошибка при установке владельца', 'set_password' => 'Установить пароль', 'set_workflow' => 'Установить процесс', -'show_extension_changelog' => '', -'show_extension_version_list' => '', +'show_extension_changelog' => 'Показать журнал изменений', +'show_extension_version_list' => 'Показать список версий', 'signed_in_as' => 'Пользователь', 'sign_in' => 'Войти', 'sign_out' => 'Выйти', @@ -1815,6 +1817,7 @@ URL: [url]', 'target_equals_source_folder' => '', 'tasks' => 'Задания', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', 'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', diff --git a/languages/sk_SK/lang.inc b/languages/sk_SK/lang.inc index 2f9660d21..8053a5482 100644 --- a/languages/sk_SK/lang.inc +++ b/languages/sk_SK/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 (1226), destinqo (26), pS2017 (508), ssebech (4) +// Translators: Admin (1228), destinqo (26), pS2017 (508), ssebech (4) $text = array( '2_factor_auth' => '2-faktorové overovanie', @@ -336,7 +336,7 @@ URL: [url]', 'daily' => 'Denná', 'databasesearch' => 'Hľadať databázu', 'database_schema_version' => '', -'data_loading' => '', +'data_loading' => 'Prosím počkajte, kým sa nenahrajú dáta', 'date' => 'Dátum', 'days' => 'dní', 'debug' => 'Ladiť', @@ -527,7 +527,9 @@ URL: [url]', 'email' => 'Email', 'email_error_title' => 'Nebol zadaný žiadny E-mail', 'email_footer' => 'Nastavenia e-mailu si kedykoľvek môžete zmeniť cez \'Môj účet\'', +'email_footer_html' => '', 'email_header' => 'Toto je automatická správa od Dokument servera.', +'email_header_html' => '', 'email_not_given' => 'Prosím, zadajte platnú emailovú adresu.', 'empty_attribute_group_list' => 'No attribute groups', 'empty_folder_list' => 'Žiadne dokumenty alebo zložky', @@ -858,7 +860,7 @@ URL: [url]', 'my_documents' => 'Moje dokumenty', 'my_transmittals' => 'My Transmittals', 'name' => 'Meno', -'nb_NO' => '', +'nb_NO' => 'Nórsky', 'needs_correction' => 'Vyžaduje opravu', 'needs_workflow_action' => 'Tento dokument si vyžaduje vašu pozornosť. Skontrolujte kartu pracovného postupu.', 'network_drive' => 'Sieťová jednotka', @@ -1848,6 +1850,7 @@ Meno: [username] 'target_equals_source_folder' => '', 'tasks' => 'Úlohy', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', 'task_core_indexingdocs_recreate' => '', 'task_description' => 'Description', 'task_disabled' => 'Disabled', diff --git a/languages/sv_SE/lang.inc b/languages/sv_SE/lang.inc index a2248a31b..f4c7364c8 100644 --- a/languages/sv_SE/lang.inc +++ b/languages/sv_SE/lang.inc @@ -521,7 +521,9 @@ URL: [url]', 'email' => 'E-post', 'email_error_title' => 'E-post saknas', 'email_footer' => 'Du kan alltid ändra dina e-postinställningar genom att gå till \'Min Sida\'', +'email_footer_html' => '', 'email_header' => 'Detta meddelande skapades automatiskt från dokumentservern.', +'email_header_html' => '', 'email_not_given' => 'Skriv in en giltig e-postadress.', 'empty_attribute_group_list' => 'Grupp för attribut saknas', 'empty_folder_list' => 'Inga dokument eller mappar', @@ -1821,6 +1823,7 @@ Kommentar: [comment]', 'target_equals_source_folder' => '', 'tasks' => 'Uppgifter', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', 'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', diff --git a/languages/tr_TR/lang.inc b/languages/tr_TR/lang.inc index 628276d62..38f8cbb5a 100644 --- a/languages/tr_TR/lang.inc +++ b/languages/tr_TR/lang.inc @@ -509,7 +509,9 @@ URL: [url]', 'email' => 'E-posta', 'email_error_title' => 'E-posta adresi girilmedi', 'email_footer' => '\'My Account\' özelliklerini kullanarak her zaman e-posta ayarlarınızı değiştirebilirsiniz', +'email_footer_html' => '', 'email_header' => 'Bu DYS sunucusu tarafından gönderilen otomatik bir mesajdır.', +'email_header_html' => '', 'email_not_given' => 'Lütfen geçerli bir e-posta adresi giriniz.', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Hiç klasör veya doküman yok', @@ -1787,6 +1789,7 @@ URL: [url]', 'target_equals_source_folder' => '', 'tasks' => '', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', 'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', diff --git a/languages/uk_UA/lang.inc b/languages/uk_UA/lang.inc index 0318d0b05..f8fc3b449 100644 --- a/languages/uk_UA/lang.inc +++ b/languages/uk_UA/lang.inc @@ -515,7 +515,9 @@ URL: [url]', 'email' => 'E-mail', 'email_error_title' => 'Не вказано e-mail', 'email_footer' => 'Ви можете змінити e-mail використовуючи меню «Мій обліковий запис».', +'email_footer_html' => '', 'email_header' => 'Це автоматичне сповіщення сервера документообігу', +'email_header_html' => '', 'email_not_given' => 'Введіть справжній e-mail.', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Немає документів або каталогів', @@ -1808,6 +1810,7 @@ URL: [url]', 'target_equals_source_folder' => '', 'tasks' => 'Завдання', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', 'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', diff --git a/languages/zh_CN/lang.inc b/languages/zh_CN/lang.inc index 0a0e4ad6c..e70eb006f 100644 --- a/languages/zh_CN/lang.inc +++ b/languages/zh_CN/lang.inc @@ -509,7 +509,9 @@ URL: [url]', 'email' => 'Email', 'email_error_title' => '未输入 Email 地址', 'email_footer' => '您可以用‘我的账户’选项来改变您的e-mail设置', +'email_footer_html' => '', 'email_header' => '这是来自于DMS(文档管理系统)的自动发送消息', +'email_header_html' => '', 'email_not_given' => '请输入有效的 Email 地址', 'empty_attribute_group_list' => '', 'empty_folder_list' => '没有文件或子目录', @@ -1783,6 +1785,7 @@ URL: [url]', 'target_equals_source_folder' => '', 'tasks' => '任务', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', 'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', diff --git a/languages/zh_TW/lang.inc b/languages/zh_TW/lang.inc index 8634b84e0..88e81acf8 100644 --- a/languages/zh_TW/lang.inc +++ b/languages/zh_TW/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 (2428) +// Translators: Admin (2429) $text = array( '2_factor_auth' => '2階段認證', @@ -527,7 +527,9 @@ URL: [url]', 'email' => 'Email', 'email_error_title' => '信箱沒有輸入', 'email_footer' => '您可以用‘我的帳戶’選項來改變您的e-mail設置', +'email_footer_html' => '', 'email_header' => '這是來自于DMS(文件管理系統)的自動發送消息', +'email_header_html' => '', 'email_not_given' => '請輸入有效的信箱網址', 'empty_attribute_group_list' => '沒有屬性組', 'empty_folder_list' => '沒有檔或子目錄', @@ -702,7 +704,7 @@ URL: [url]', 'import_extension' => '匯入擴充', 'import_fs' => '由檔案系統匯入', 'import_fs_warning' => '這僅適用於放置文件夾中的文件夾。該操作以遞歸方式導入所有文件夾和文件。文件將立即釋放。', -'import_users' => '', +'import_users' => '導入用戶', 'import_users_addnew' => '', 'import_users_update' => '', 'include_content' => '包含內容', @@ -1846,6 +1848,7 @@ URL: [url]', 'target_equals_source_folder' => '', 'tasks' => '任務', 'task_core_expireddocs_days' => '天數', +'task_core_expireddocs_email' => '', 'task_core_indexingdocs_recreate' => '', 'task_description' => '描述', 'task_disabled' => '不啟用', From bc06fd60f066fa8b9088a6447ad59f31e1a49cd1 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 23 Feb 2021 20:16:26 +0100 Subject: [PATCH 187/276] include Utils.php --- utils/schedulercli.php | 1 + 1 file changed, 1 insertion(+) diff --git a/utils/schedulercli.php b/utils/schedulercli.php index 3dcf4a4d4..8883ef78c 100644 --- a/utils/schedulercli.php +++ b/utils/schedulercli.php @@ -60,6 +60,7 @@ if(isset($options['mode'])) { include($myincpath."/inc/inc.Settings.php"); include($myincpath."/inc/inc.LogInit.php"); +include($myincpath."/inc/inc.Utils.php"); include($myincpath."/inc/inc.Init.php"); include($myincpath."/inc/inc.Language.php"); include($myincpath."/inc/inc.Extension.php"); From 9e6f49598d0fadacfc30c227c8adde0d74b7aac5 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 23 Feb 2021 20:37:14 +0100 Subject: [PATCH 188/276] include right files, fix fulltext index --- webdav/index.php | 4 ++-- webdav/webdav.php | 16 ++++++---------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/webdav/index.php b/webdav/index.php index e4925f371..d78de80a9 100644 --- a/webdav/index.php +++ b/webdav/index.php @@ -24,9 +24,9 @@ include("../inc/inc.Init.php"); include("../inc/inc.Extension.php"); include("../inc/inc.DBInit.php"); include("../inc/inc.ClassNotificationService.php"); -//include("../inc/inc.ClassEmailNotify.php"); +include("../inc/inc.ClassEmailNotify.php"); +include("../inc/inc.Notification.php"); include("../inc/inc.ClassController.php"); -//include("Log.php"); $notifier = new SeedDMS_NotificationService($logger); diff --git a/webdav/webdav.php b/webdav/webdav.php index c147a10d0..1f545e875 100644 --- a/webdav/webdav.php +++ b/webdav/webdav.php @@ -428,8 +428,11 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server $info["props"][] = $this->mkprop("getcontenttype", $content->getMimeType()); } else { $info["props"][] = $this->mkprop("getcontenttype", "application/x-non-readable"); - } - $info["props"][] = $this->mkprop("getcontentlength", filesize($this->dms->contentDir.'/'.$fspath)); + } + if(file_exists($this->dms->contentDir.'/'.$fspath)) + $info["props"][] = $this->mkprop("getcontentlength", filesize($this->dms->contentDir.'/'.$fspath)); + else + $info["props"][] = $this->mkprop("getcontentlength", 0); if($keywords = $obj->getKeywords()) $info["props"][] = $this->mkprop("SeedDMS:", "keywords", $keywords); $info["props"][] = $this->mkprop("SeedDMS:", "id", $obj->getID()); @@ -790,19 +793,12 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server } */ - if($settings->_enableFullSearch) { - $index = $indexconf['Indexer']::open($settings->_luceneDir); - $indexconf['Indexer']::init($settings->_stopWordsFile); - } else { - $index = null; - $indexconf = null; - } - $controller = Controller::factory('AddDocument'); $controller->setParam('dms', $this->dms); $controller->setParam('user', $this->user); $controller->setParam('documentsource', 'webdav'); $controller->setParam('folder', $folder); + $controller->setParam('fulltextservice', $fulltextservice); $controller->setParam('index', $index); $controller->setParam('indexconf', $indexconf); $controller->setParam('name', $name); From 56ae71b82c7b462a9eb73b54d7d1bc0f1ef9286a Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 23 Feb 2021 20:49:10 +0100 Subject: [PATCH 189/276] fix fulltextservice --- webdav/webdav.php | 44 +++++++------------------------------------- 1 file changed, 7 insertions(+), 37 deletions(-) diff --git a/webdav/webdav.php b/webdav/webdav.php index 1f545e875..dd900621c 100644 --- a/webdav/webdav.php +++ b/webdav/webdav.php @@ -618,7 +618,7 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server */ function PUT(&$options) /* {{{ */ { - global $settings, $indexconf; + global $settings, $fulltextservice; $this->log_options('PUT', $options); @@ -716,22 +716,13 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server if($this->logger) $this->logger->log('PUT: adding new version', PEAR_LOG_INFO); - if($settings->_enableFullSearch) { - $index = $indexconf['Indexer']::open($settings->_luceneDir); - $indexconf['Indexer']::init($settings->_stopWordsFile); - } else { - $index = null; - $indexconf = null; - } - $controller = Controller::factory('UpdateDocument'); $controller->setParam('dms', $this->dms); $controller->setParam('user', $this->user); $controller->setParam('documentsource', 'webdav'); $controller->setParam('folder', $document->getFolder()); $controller->setParam('document', $document); - $controller->setParam('index', $index); - $controller->setParam('indexconf', $indexconf); + $controller->setParam('fulltextservice', $fulltextservice); $controller->setParam('comment', ''); $controller->setParam('userfiletmp', $tmpFile); $controller->setParam('userfilename', $name); @@ -799,8 +790,6 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server $controller->setParam('documentsource', 'webdav'); $controller->setParam('folder', $folder); $controller->setParam('fulltextservice', $fulltextservice); - $controller->setParam('index', $index); - $controller->setParam('indexconf', $indexconf); $controller->setParam('name', $name); $controller->setParam('comment', ''); $controller->setParam('expires', 0); @@ -977,7 +966,7 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server */ function DELETE($options) /* {{{ */ { - global $settings, $indexconf; + global $settings, $fulltextservice; $this->log_options('DELETE', $options); @@ -997,14 +986,6 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server return "403 Forbidden"; } - if($settings->_enableFullSearch) { - $index = $indexconf['Indexer']::open($settings->_luceneDir); - $indexconf['Indexer']::init($settings->_stopWordsFile); - } else { - $index = null; - $indexconf = null; - } - if (get_class($obj) == $this->dms->getClassname('folder')) { if($obj->hasDocuments() || $obj->hasSubFolders()) { if($this->logger) @@ -1025,8 +1006,7 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server $controller->setParam('dms', $this->dms); $controller->setParam('user', $this->user); $controller->setParam('folder', $obj); - $controller->setParam('index', $index); - $controller->setParam('indexconf', $indexconf); + $controller->setParam('fulltextservice', $fulltextservice); if(!$controller->run()) { return "409 Conflict ".$controller->getErrorMsg(); } @@ -1065,8 +1045,7 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server $controller->setParam('dms', $this->dms); $controller->setParam('user', $this->user); $controller->setParam('document', $obj); - $controller->setParam('index', $index); - $controller->setParam('indexconf', $indexconf); + $controller->setParam('fulltextservice', $fulltextservice); if(!$controller->run()) { return "409 Conflict ".$controller->getErrorMsg(); } @@ -1279,7 +1258,7 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server */ function COPY($options) /* {{{ */ { - global $settings, $indexconf; + global $settings, $fulltextservice; $this->log_options('COPY', $options); @@ -1390,21 +1369,12 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server $content = $objsource->getLatestContent(); $fspath = $this->dms->contentDir.'/'.$content->getPath(); - if($settings->_enableFullSearch) { - $index = $indexconf['Indexer']::open($settings->_luceneDir); - $indexconf['Indexer']::init($settings->_stopWordsFile); - } else { - $index = null; - $indexconf = null; - } - $controller = Controller::factory('AddDocument'); $controller->setParam('dms', $this->dms); $controller->setParam('user', $this->user); $controller->setParam('documentsource', 'webdav'); $controller->setParam('folder', $objdest); - $controller->setParam('index', $index); - $controller->setParam('indexconf', $indexconf); + $controller->setParam('fulltextservice', $fulltextservice); $controller->setParam('name', $newdocname); $controller->setParam('comment', ''); $controller->setParam('expires', 0); From 33342d0b1540d5f76c7075a9513ac5832c7a25ae Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 23 Feb 2021 20:49:26 +0100 Subject: [PATCH 190/276] do not include EmailNotify --- webdav/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webdav/index.php b/webdav/index.php index d78de80a9..8ca15be00 100644 --- a/webdav/index.php +++ b/webdav/index.php @@ -24,7 +24,7 @@ include("../inc/inc.Init.php"); include("../inc/inc.Extension.php"); include("../inc/inc.DBInit.php"); include("../inc/inc.ClassNotificationService.php"); -include("../inc/inc.ClassEmailNotify.php"); +//include("../inc/inc.ClassEmailNotify.php"); include("../inc/inc.Notification.php"); include("../inc/inc.ClassController.php"); From d9653e182f458cadc5b6ffd487228cff73737028 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 23 Feb 2021 21:05:10 +0100 Subject: [PATCH 191/276] use require_once instead of include --- webdav/index.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/webdav/index.php b/webdav/index.php index 8ca15be00..d035c2d42 100644 --- a/webdav/index.php +++ b/webdav/index.php @@ -19,14 +19,14 @@ if($settings->_logFileEnable) { $logger = null; } -include("../inc/inc.Language.php"); -include("../inc/inc.Init.php"); -include("../inc/inc.Extension.php"); -include("../inc/inc.DBInit.php"); -include("../inc/inc.ClassNotificationService.php"); -//include("../inc/inc.ClassEmailNotify.php"); -include("../inc/inc.Notification.php"); -include("../inc/inc.ClassController.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.ClassNotificationService.php"); +require_once("../inc/inc.ClassEmailNotify.php"); +require_once("../inc/inc.Notification.php"); +require_once("../inc/inc.ClassController.php"); $notifier = new SeedDMS_NotificationService($logger); From f9c6139bda84009403c0c25ab5daf87cd4ab5444 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 24 Feb 2021 06:15:53 +0100 Subject: [PATCH 192/276] do not add html part if body doesn't exists --- inc/inc.ClassEmailNotify.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/inc/inc.ClassEmailNotify.php b/inc/inc.ClassEmailNotify.php index c8b06beb4..5100d2e2e 100644 --- a/inc/inc.ClassEmailNotify.php +++ b/inc/inc.ClassEmailNotify.php @@ -133,6 +133,7 @@ class SeedDMS_EmailNotify extends SeedDMS_Notify { } $bodyhtml = ''; + if(isset($params['__body_html__']) || getMLText($messagekey.'_html')) { if(!isset($params['__skip_header__']) || !$params['__skip_header__']) { if(!isset($params['__header_html__'])) $bodyhtml .= getMLText("email_header_html", $params, "", $lang)."\r\n\r\n"; @@ -149,6 +150,7 @@ class SeedDMS_EmailNotify extends SeedDMS_Notify { elseif($params['__footer_html__']) $bodyhtml .= "\r\n\r\n".getMLText($params['__footer_html__'], $params, "", $lang); } + } $mime = new Mail_mime(array('eol' => "\n")); From 08ee240dc127fca1d6d076f85712d5be3d4ca15c Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 24 Feb 2021 08:31:50 +0100 Subject: [PATCH 193/276] remove final '?>' --- ext/example/lang.php | 1 - 1 file changed, 1 deletion(-) diff --git a/ext/example/lang.php b/ext/example/lang.php index 55b3b860b..b95a16910 100644 --- a/ext/example/lang.php +++ b/ext/example/lang.php @@ -2,4 +2,3 @@ $__lang['de_DE'] = array( 'folder_contents' => 'Dies war mal "Ordner enthält". Wurde von sample Extension geändert.', ); -?> From 826a6ae1093d4c672078e45c9d2f20b5cbb12fa8 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 24 Feb 2021 10:23:01 +0100 Subject: [PATCH 194/276] add check_view_access --- out/out.RemoveFolder.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/out/out.RemoveFolder.php b/out/out.RemoveFolder.php index 4c912b958..df96fc2b4 100644 --- a/out/out.RemoveFolder.php +++ b/out/out.RemoveFolder.php @@ -43,6 +43,10 @@ if (!is_object($folder)) { UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_folder_id"))),getMLText("invalid_folder_id")); } +if (!$accessop->check_view_access($view, $_GET)) { + UI::exitError(getMLText("folder_title", array("foldername" => htmlspecialchars($folder->getName()))),getMLText("access_denied")); +} + if ($folder->getID() == $settings->_rootFolderID || !$folder->getParent()) { UI::exitError(getMLText("folder_title", array("foldername" => htmlspecialchars($folder->getName()))),getMLText("cannot_rm_root")); } From 8e78a217fc1dbe414733eb91abdbcef10c464e9f Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 24 Feb 2021 10:23:51 +0100 Subject: [PATCH 195/276] add advanced access control for folder, do not show delete doc/folder button without access --- views/bootstrap/class.Bootstrap.php | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index 19dcc7d77..09b7fe9d3 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -651,7 +651,8 @@ background-image: linear-gradient(to bottom, #882222, #111111);; if ($accessMode == M_ALL) { if ($folderID != $this->params['rootfolderid'] && $folder->getParent()) - $menuitems['rm_folder'] = array('link'=>"../out/out.RemoveFolder.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>'rm_folder'); + if ($accessobject->check_view_access('RemoveFolder')) + $menuitems['rm_folder'] = array('link'=>"../out/out.RemoveFolder.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>'rm_folder'); } if ($accessMode == M_ALL) { if ($accessobject->check_view_access('FolderAccess')) @@ -2324,11 +2325,9 @@ $(function() { * @return string html content if $return is true, otherwise an empty string */ function printDeleteDocumentButton($document, $msg, $return=false){ /* {{{ */ - $accessobject = $this->params['accessobject']; $docid = $document->getID(); $content = ''; - if ($accessobject->check_view_access('RemoveDocument')) - $content .= ' $document->getName())), ENT_QUOTES).'">'; + $content .= ' $document->getName())), ENT_QUOTES).'">'; if($return) return $content; else @@ -2939,10 +2938,12 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) $content .= "
    "; if(!empty($extracontent['begin_action_list'])) $content .= $extracontent['begin_action_list']; - if($document->getAccessMode($user) >= M_ALL) { - $content .= $this->printDeleteDocumentButton($document, 'splash_rm_document', true); - } else { - $content .= ''; + if($accessop->check_view_access('RemoveDocument')) { + if($document->getAccessMode($user) >= M_ALL) { + $content .= $this->printDeleteDocumentButton($document, 'splash_rm_document', true); + } else { + $content .= ''; + } } if($document->getAccessMode($user) >= M_READWRITE) { $content .= ''; @@ -3018,6 +3019,7 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) $enableRecursiveCount = $this->params['enableRecursiveCount']; $maxRecursiveCount = $this->params['maxRecursiveCount']; $enableClipboard = $this->params['enableclipboard']; + $accessop = $this->params['accessobject']; $onepage = $this->params['onepage']; $owner = $subFolder->getOwner(); @@ -3074,10 +3076,12 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) if(!empty($extracontent['begin_action_list'])) $content .= $extracontent['begin_action_list']; $subFolderAccessMode = $subFolder->getAccessMode($user); - if($subFolderAccessMode >= M_ALL) { - $content .= $this->printDeleteFolderButton($subFolder, 'splash_rm_folder', true); - } else { - $content .= ''; + if ($accessop->check_view_access('RemoveFolder')) { + if($subFolderAccessMode >= M_ALL) { + $content .= $this->printDeleteFolderButton($subFolder, 'splash_rm_folder', true); + } else { + $content .= ''; + } } if($subFolderAccessMode >= M_READWRITE) { $content .= ''; From 20586c021d47a5ad5bfd68dcca67240f54ed4eb1 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 24 Feb 2021 13:22:03 +0100 Subject: [PATCH 196/276] add new methods getMandatoryReviewers() and getMandatoryApprovers() --- inc/inc.Utils.php | 112 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 94 insertions(+), 18 deletions(-) diff --git a/inc/inc.Utils.php b/inc/inc.Utils.php index f3b0fb372..f7fbccf0d 100644 --- a/inc/inc.Utils.php +++ b/inc/inc.Utils.php @@ -33,13 +33,13 @@ function formatted_size($size_bytes) { /* {{{ */ * dd for %d * This functions returns the converted format */ -function getConvertDateFormat() { +function getConvertDateFormat() { /* {{{ */ global $settings; if($settings->_dateformat) { return str_replace(['y', 'Y', 'm', 'M', 'F', 'd', 'l', 'D'], ['yy', 'yyyy', 'mm', 'M', 'MM', 'dd', 'DD', 'D'], $settings->_dateformat); } else return 'yyyy-mm-dd'; -} +} /* }}} */ function getReadableDate($timestamp=0) { /* {{{ */ global $settings; @@ -431,24 +431,24 @@ function _add_log_line($msg="") { /* {{{ */ } } /* }}} */ - function getFolderPathHTML($folder, $tagAll=false, $document=null) { /* {{{ */ - $path = $folder->getPath(); - $txtpath = ""; - for ($i = 0; $i < count($path); $i++) { - if ($i +1 < count($path)) { - $txtpath .= "getID()."&showtree=".showtree()."\">". - htmlspecialchars($path[$i]->getName())." / "; - } - else { - $txtpath .= ($tagAll ? "getID()."&showtree=".showtree()."\">". - htmlspecialchars($path[$i]->getName())."" : htmlspecialchars($path[$i]->getName())); - } +function getFolderPathHTML($folder, $tagAll=false, $document=null) { /* {{{ */ + $path = $folder->getPath(); + $txtpath = ""; + for ($i = 0; $i < count($path); $i++) { + if ($i +1 < count($path)) { + $txtpath .= "getID()."&showtree=".showtree()."\">". + htmlspecialchars($path[$i]->getName())." / "; } - if($document) - $txtpath .= " / getId()."\">".htmlspecialchars($document->getName()).""; + else { + $txtpath .= ($tagAll ? "getID()."&showtree=".showtree()."\">". + htmlspecialchars($path[$i]->getName())."" : htmlspecialchars($path[$i]->getName())); + } + } + if($document) + $txtpath .= " / getId()."\">".htmlspecialchars($document->getName()).""; - return $txtpath; - } /* }}} */ + return $txtpath; +} /* }}} */ function showtree() { /* {{{ */ global $settings; @@ -776,6 +776,82 @@ function createNonce() { /* {{{ */ return base64_encode($bytes); } /* }}} */ +/** + * Returns the mandatory reviewers + * + * This function checks if the reviewers have at least read access + * on the folder containing the document. + * + * @param $folder folder where document is located + * @param $user user creating the new version or document + * @return array + */ +function getMandatoryReviewers($folder, $user) { /* {{{ */ + global $settings; + + /* Get a list of all users and groups with read access on the folder. + * Only those users and groups will be added as reviewers + */ + $docAccess = $folder->getReadAccessList($settings->_enableAdminRevApp, $settings->_enableOwnerRevApp); + $res=$user->getMandatoryReviewers(); + $reviewers = array('i'=>[], 'g'=>[]); + foreach ($res as $r){ + if ($r['reviewerUserID']!=0){ + foreach ($docAccess["users"] as $usr) + if ($usr->getID()==$r['reviewerUserID']){ + $reviewers["i"][] = $r['reviewerUserID']; + break; + } + } elseif ($r['reviewerGroupID']!=0){ + foreach ($docAccess["groups"] as $grp) + if ($grp->getID()==$r['reviewerGroupID']){ + $reviewers["g"][] = $r['reviewerGroupID']; + break; + } + } + } + return $reviewers; +} /* }}} */ + +/** + * Returns the mandatory approvers + * + * This function checks if the approvers have at least read access + * on the folder containing the document. + * + * @param $folder folder where document is located + * @param $user user creating the new version or document + * @return array + */ +function getMandatoryApprovers($folder, $user) { /* {{{ */ + global $settings; + + /* Get a list of all users and groups with read access on the folder. + * Only those users and groups will be added as approvers + */ + $docAccess = $folder->getReadAccessList($settings->_enableAdminRevApp, $settings->_enableOwnerRevApp); + $res=$user->getMandatoryApprovers(); + $approvers = array('i'=>[], 'g'=>[]); + foreach ($res as $r){ + + if ($r['approverUserID']!=0){ + foreach ($docAccess["users"] as $usr) + if ($usr->getID()==$r['approverUserID']){ + $approvers["i"][] = $r['approverUserID']; + break; + } + } + else if ($r['approverGroupID']!=0){ + foreach ($docAccess["groups"] as $grp) + if ($grp->getID()==$r['approverGroupID']){ + $approvers["g"][] = $r['approverGroupID']; + break; + } + } + } + return $approvers; +} /* }}} */ + /** * Class for creating encrypted api keys * From a7917dad354425fc788f4508394dddd55c25bfb4 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 24 Feb 2021 13:23:08 +0100 Subject: [PATCH 197/276] use new methods getMandatoryReviewers() and getMandatoryApprovers() --- op/op.AddDocument.php | 42 ++++++--------------------------------- op/op.UpdateDocument.php | 43 ++++++---------------------------------- 2 files changed, 12 insertions(+), 73 deletions(-) diff --git a/op/op.AddDocument.php b/op/op.AddDocument.php index 6e4e8740b..1061d7c1b 100644 --- a/op/op.AddDocument.php +++ b/op/op.AddDocument.php @@ -201,45 +201,15 @@ if($settings->_workflowMode == 'traditional' || $settings->_workflowMode == 'tra } } // add mandatory reviewers/approvers - $docAccess = $folder->getReadAccessList($settings->_enableAdminRevApp, $settings->_enableOwnerRevApp); if($settings->_workflowMode == 'traditional') { - $res=$user->getMandatoryReviewers(); - foreach ($res as $r){ - - if ($r['reviewerUserID']!=0){ - foreach ($docAccess["users"] as $usr) - if ($usr->getID()==$r['reviewerUserID']){ - $reviewers["i"][] = $r['reviewerUserID']; - break; - } - } - else if ($r['reviewerGroupID']!=0){ - foreach ($docAccess["groups"] as $grp) - if ($grp->getID()==$r['reviewerGroupID']){ - $reviewers["g"][] = $r['reviewerGroupID']; - break; - } - } - } + $mreviewers = getMandatoryReviewers($folder, $user); + if($mreviewers['i']) + $reviewers['i'] = array_merge($reviewers['i'], $mreviewers['i']); } - $res=$user->getMandatoryApprovers(); - foreach ($res as $r){ + $mapprovers = getMandatoryApprovers($folder, $user); + if($mapprovers['i']) + $approvers['i'] = array_merge($approvers['i'], $mapprovers['i']); - if ($r['approverUserID']!=0){ - foreach ($docAccess["users"] as $usr) - if ($usr->getID()==$r['approverUserID']){ - $approvers["i"][] = $r['approverUserID']; - break; - } - } - else if ($r['approverGroupID']!=0){ - foreach ($docAccess["groups"] as $grp) - if ($grp->getID()==$r['approverGroupID']){ - $approvers["g"][] = $r['approverGroupID']; - break; - } - } - } if($settings->_workflowMode == 'traditional' && !$settings->_allowReviewerOnly) { /* Check if reviewers are send but no approvers */ if(($reviewers["i"] || $reviewers["g"]) && !$approvers["i"] && !$approvers["g"]) { diff --git a/op/op.UpdateDocument.php b/op/op.UpdateDocument.php index 18a67d0f8..78f20c2bc 100644 --- a/op/op.UpdateDocument.php +++ b/op/op.UpdateDocument.php @@ -210,45 +210,14 @@ default: } // add mandatory reviewers/approvers - $docAccess = $folder->getReadAccessList($settings->_enableAdminRevApp, $settings->_enableOwnerRevApp); if($settings->_workflowMode == 'traditional') { - $res=$user->getMandatoryReviewers(); - foreach ($res as $r){ - - if ($r['reviewerUserID']!=0){ - foreach ($docAccess["users"] as $usr) - if ($usr->getID()==$r['reviewerUserID']){ - $reviewers["i"][] = $r['reviewerUserID']; - break; - } - } - else if ($r['reviewerGroupID']!=0){ - foreach ($docAccess["groups"] as $grp) - if ($grp->getID()==$r['reviewerGroupID']){ - $reviewers["g"][] = $r['reviewerGroupID']; - break; - } - } - } - } - $res=$user->getMandatoryApprovers(); - foreach ($res as $r){ - - if ($r['approverUserID']!=0){ - foreach ($docAccess["users"] as $usr) - if ($usr->getID()==$r['approverUserID']){ - $approvers["i"][] = $r['approverUserID']; - break; - } - } - else if ($r['approverGroupID']!=0){ - foreach ($docAccess["groups"] as $grp) - if ($grp->getID()==$r['approverGroupID']){ - $approvers["g"][] = $r['approverGroupID']; - break; - } - } + $mreviewers = getMandatoryReviewers($folder, $user); + if($mreviewers['i']) + $reviewers['i'] = array_merge($reviewers['i'], $mreviewers['i']); } + $mapprovers = getMandatoryApprovers($folder, $user); + if($mapprovers['i']) + $approvers['i'] = array_merge($approvers['i'], $mapprovers['i']); } elseif($settings->_workflowMode == 'advanced') { if(!$workflows = $user->getMandatoryWorkflows()) { if(isset($_POST["workflow"])) From f8f1e3fd73c5cde3d616c387e6f02a3f821eb489 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 24 Feb 2021 13:23:49 +0100 Subject: [PATCH 198/276] take over mandatory reviewers and approvers --- webdav/webdav.php | 62 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 52 insertions(+), 10 deletions(-) diff --git a/webdav/webdav.php b/webdav/webdav.php index dd900621c..43d044a43 100644 --- a/webdav/webdav.php +++ b/webdav/webdav.php @@ -716,6 +716,20 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server if($this->logger) $this->logger->log('PUT: adding new version', PEAR_LOG_INFO); + $reviewers = array('i'=>[], 'g'=>[]); + $approvers = array('i'=>[], 'g'=>[]); + $workflow = null; + if($settings->_workflowMode == 'traditional' || $settings->_workflowMode == 'traditional_only_approval') { + if($settings->_workflowMode == 'traditional') { + $reviewers = getMandatoryReviewers($document->getFolder(), $this->user); + } + $approvers = getMandatoryApprovers($document->getFolder(), $this->user); + } elseif($settings->_workflowMode == 'advanced') { + if($workflows = $user->getMandatoryWorkflows()) { + $workflow = array_shift($workflows); + } + } + $controller = Controller::factory('UpdateDocument'); $controller->setParam('dms', $this->dms); $controller->setParam('user', $this->user); @@ -728,10 +742,10 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server $controller->setParam('userfilename', $name); $controller->setParam('filetype', $fileType); $controller->setParam('userfiletype', $mimetype); - $controller->setParam('reviewers', array()); - $controller->setParam('approvers', array()); + $controller->setParam('reviewers', $reviewers); + $controller->setParam('approvers', $approvers); $controller->setParam('attributes', array()); - $controller->setParam('workflow', null); + $controller->setParam('workflow', $workflow); if(!$content = $controller->run()) { // if(!$document->addContent('', $this->user, $tmpFile, $name, $fileType, $mimetype, array(), array(), 0)) { @@ -784,6 +798,20 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server } */ + $reviewers = array('i'=>[], 'g'=>[]); + $approvers = array('i'=>[], 'g'=>[]); + $workflow = null; + if($settings->_workflowMode == 'traditional' || $settings->_workflowMode == 'traditional_only_approval') { + if($settings->_workflowMode == 'traditional') { + $reviewers = getMandatoryReviewers($folder, $this->user); + } + $approvers = getMandatoryApprovers($folder, $this->user); + } elseif($settings->_workflowMode == 'advanced') { + if($workflows = $user->getMandatoryWorkflows()) { + $workflow = array_shift($workflows); + } + } + $controller = Controller::factory('AddDocument'); $controller->setParam('dms', $this->dms); $controller->setParam('user', $this->user); @@ -805,13 +833,13 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server $controller->setParam('sequence', $minmax['min'] - 1); else $controller->setParam('sequence', $minmax['max'] + 1); - $controller->setParam('reviewers', array()); - $controller->setParam('approvers', array()); + $controller->setParam('reviewers', $reviewers); + $controller->setParam('approvers', $approvers); $controller->setParam('reqversion', 0); $controller->setParam('versioncomment', ''); $controller->setParam('attributes', array()); $controller->setParam('attributesversion', array()); - $controller->setParam('workflow', null); + $controller->setParam('workflow', $workflow); $controller->setParam('notificationgroups', array()); $controller->setParam('notificationusers', array()); $controller->setParam('maxsizeforfulltext', $settings->_maxSizeForFullText); @@ -1343,7 +1371,7 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server return "204 No Content"; } elseif(get_class($objdest) == $this->dms->getClassname('folder')) { if($this->logger) - $this->logger->log('COPY: copy \''.$objdest->getName().'\' to folder '.$objdest->getName().'', PEAR_LOG_INFO); + $this->logger->log('COPY: copy \''.$objsource->getName().'\' to folder '.$objdest->getName().'', PEAR_LOG_INFO); /* Currently no support for copying folders */ if(get_class($objsource) == $this->dms->getClassname('folder')) { @@ -1365,6 +1393,20 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server } */ + $reviewers = array('i'=>[], 'g'=>[]); + $approvers = array('i'=>[], 'g'=>[]); + $workflow = null; + if($settings->_workflowMode == 'traditional' || $settings->_workflowMode == 'traditional_only_approval') { + if($settings->_workflowMode == 'traditional') { + $reviewers = getMandatoryReviewers($objdest, $this->user); + } + $approvers = getMandatoryApprovers($objdest, $this->user); + } elseif($settings->_workflowMode == 'advanced') { + if($workflows = $user->getMandatoryWorkflows()) { + $workflow = array_shift($workflows); + } + } + /* get the latest content of the source object */ $content = $objsource->getLatestContent(); $fspath = $this->dms->contentDir.'/'.$content->getPath(); @@ -1390,13 +1432,13 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server $controller->setParam('sequence', $minmax['min'] - 1); else $controller->setParam('sequence', $minmax['max'] + 1); - $controller->setParam('reviewers', array()); - $controller->setParam('approvers', array()); + $controller->setParam('reviewers', $reviewers); + $controller->setParam('approvers', $approvers); $controller->setParam('reqversion', 0); $controller->setParam('versioncomment', ''); $controller->setParam('attributes', array()); $controller->setParam('attributesversion', array()); - $controller->setParam('workflow', null); + $controller->setParam('workflow', $workflow); $controller->setParam('notificationgroups', array()); $controller->setParam('notificationusers', array()); $controller->setParam('maxsizeforfulltext', $settings->_maxSizeForFullText); From 4f650f3d2b31029d850189164f4d3e476536ce7d Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 24 Feb 2021 13:33:53 +0100 Subject: [PATCH 199/276] use new methods getMandatoryReviewers and getMandatoryApprovers --- op/op.CheckInDocument.php | 42 ++++++--------------------------------- 1 file changed, 6 insertions(+), 36 deletions(-) diff --git a/op/op.CheckInDocument.php b/op/op.CheckInDocument.php index 977352acf..94bf8d768 100644 --- a/op/op.CheckInDocument.php +++ b/op/op.CheckInDocument.php @@ -133,45 +133,15 @@ else } // add mandatory reviewers/approvers - $docAccess = $folder->getReadAccessList($settings->_enableAdminRevApp, $settings->_enableOwnerRevApp); if($settings->_workflowMode == 'traditional') { - $res=$user->getMandatoryReviewers(); - foreach ($res as $r){ - - if ($r['reviewerUserID']!=0){ - foreach ($docAccess["users"] as $usr) - if ($usr->getID()==$r['reviewerUserID']){ - $reviewers["i"][] = $r['reviewerUserID']; - break; - } - } - else if ($r['reviewerGroupID']!=0){ - foreach ($docAccess["groups"] as $grp) - if ($grp->getID()==$r['reviewerGroupID']){ - $reviewers["g"][] = $r['reviewerGroupID']; - break; - } - } - } + $mreviewers = getMandatoryReviewers($folder, $user); + if($mreviewers['i']) + $reviewers['i'] = array_merge($reviewers['i'], $mreviewers['i']); } - $res=$user->getMandatoryApprovers(); - foreach ($res as $r){ + $mapprovers = getMandatoryApprovers($folder, $user); + if($mapprovers['i']) + $approvers['i'] = array_merge($approvers['i'], $mapprovers['i']); - if ($r['approverUserID']!=0){ - foreach ($docAccess["users"] as $usr) - if ($usr->getID()==$r['approverUserID']){ - $approvers["i"][] = $r['approverUserID']; - break; - } - } - else if ($r['approverGroupID']!=0){ - foreach ($docAccess["groups"] as $grp) - if ($grp->getID()==$r['approverGroupID']){ - $approvers["g"][] = $r['approverGroupID']; - break; - } - } - } if($settings->_workflowMode == 'traditional' && !$settings->_allowReviewerOnly) { /* Check if reviewers are send but no approvers */ if(($reviewers["i"] || $reviewers["g"]) && !$approvers["i"] && !$approvers["g"]) { From 3ae98b7af35b592f2160f03f09848eab400fd2c0 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 24 Feb 2021 13:44:04 +0100 Subject: [PATCH 200/276] use new methods getMandatoryReviewers() and getMandatoryApprovers() --- op/op.Ajax.php | 43 ++++++------------------------------------- 1 file changed, 6 insertions(+), 37 deletions(-) diff --git a/op/op.Ajax.php b/op/op.Ajax.php index 4b242fca3..f6cff0cdb 100644 --- a/op/op.Ajax.php +++ b/op/op.Ajax.php @@ -722,45 +722,14 @@ switch($command) { if($settings->_workflowMode == 'traditional' || $settings->_workflowMode == 'traditional_only_approval') { // add mandatory reviewers/approvers - $docAccess = $folder->getReadAccessList($settings->_enableAdminRevApp, $settings->_enableOwnerRevApp); if($settings->_workflowMode == 'traditional') { - $res=$user->getMandatoryReviewers(); - foreach ($res as $r){ - - if ($r['reviewerUserID']!=0){ - foreach ($docAccess["users"] as $usr) - if ($usr->getID()==$r['reviewerUserID']){ - $reviewers["i"][] = $r['reviewerUserID']; - break; - } - } - else if ($r['reviewerGroupID']!=0){ - foreach ($docAccess["groups"] as $grp) - if ($grp->getID()==$r['reviewerGroupID']){ - $reviewers["g"][] = $r['reviewerGroupID']; - break; - } - } - } - } - $res=$user->getMandatoryApprovers(); - foreach ($res as $r){ - - if ($r['approverUserID']!=0){ - foreach ($docAccess["users"] as $usr) - if ($usr->getID()==$r['approverUserID']){ - $approvers["i"][] = $r['approverUserID']; - break; - } - } - else if ($r['approverGroupID']!=0){ - foreach ($docAccess["groups"] as $grp) - if ($grp->getID()==$r['approverGroupID']){ - $approvers["g"][] = $r['approverGroupID']; - break; - } - } + $mreviewers = getMandatoryReviewers($folder, $user); + if($mreviewers['i']) + $reviewers['i'] = array_merge($reviewers['i'], $mreviewers['i']); } + $mapprovers = getMandatoryApprovers($folder, $user); + if($mapprovers['i']) + $approvers['i'] = array_merge($approvers['i'], $mapprovers['i']); } elseif($settings->_workflowMode == 'advanced') { $workflow = $user->getMandatoryWorkflow(); From a0ef972028d2da9bee2de66b19d396f36629ef1f Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 24 Feb 2021 15:01:13 +0100 Subject: [PATCH 201/276] send expired docs mail as html, log sending mail --- inc/inc.Tasks.php | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/inc/inc.Tasks.php b/inc/inc.Tasks.php index 7f47e20e1..55637aa46 100644 --- a/inc/inc.Tasks.php +++ b/inc/inc.Tasks.php @@ -20,20 +20,40 @@ class SeedDMS_ExpiredDocumentsTask extends SeedDMS_SchedulerTaskBase { /* {{{ */ */ public function execute($task) { $dms = $this->dms; + $user = $this->user; + $settings = $this->settings; + $logger = $this->logger; $taskparams = $task->getParameter(); $docs = $dms->getDocumentsExpired(intval($taskparams['days'])); $tableformat = " %-10s %5d %-60s"; $tableformathead = " %-10s %5s %-60s"; + $tableformathtml = "%s%d%s"; + $tableformatheadhtml = "%s%s%s"; $body = ''; + $bodyhtml = ''; if (count($docs)>0) { + $bodyhtml .= "".PHP_EOL; + $bodyhtml .= sprintf($tableformatheadhtml."\n", getMLText("expiration_date", array(), ""), "ID", getMLText("name", array(), "")); $body .= sprintf($tableformathead."\n", getMLText("expiration_date", array(), ""), "ID", getMLText("name", array(), "")); $body .= "---------------------------------------------------------------------------------\n"; foreach($docs as $doc) { $body .= sprintf($tableformat."\n", getReadableDate($doc->getExpires()), $doc->getId(), $doc->getName()); -// echo $doc->getName().PHP_EOL; + $bodyhtml .= sprintf($tableformathtml."\n", getReadableDate($doc->getExpires()), $doc->getId(), $doc->getName()); } + $bodyhtml .= "
    ".PHP_EOL; if($taskparams['email']) - mail($taskparams['email'], getMLText('expired_docs_mail_subject',array('sitename'=>$settings->_siteName, 'count'=>count($docs))), $body); + require_once('inc/inc.ClassEmailNotify.php'); + $email = new SeedDMS_EmailNotify($dms, $settings->_smtpSendFrom, $settings->_smtpServer, $settings->_smtpPort, $settings->_smtpUser, $settings->_smtpPassword); + + $params = array(); + $params['count'] = count($docs); + $params['__body__'] = $body; + $params['__body_html__'] = $bodyhtml; + $params['sitename'] = $settings->_siteName; + $email->toIndividual('', $taskparams['email'], 'expired_docs_mail_subject', '', $params); + + $logger->log('Task \'expired_docs\': Sending reminder \'expired_docs_mail_subject\' to user \''.$taskparams['email'].'\'', PEAR_LOG_INFO); +// mail($taskparams['email'], getMLText('expired_docs_mail_subject',array('sitename'=>$settings->_siteName, 'count'=>count($docs))), $body); } return true; } From 53ee447d8441b193968eb0525e3d8871ffd0b01c Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 24 Feb 2021 15:11:20 +0100 Subject: [PATCH 202/276] get logger in execute() --- inc/inc.Tasks.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/inc/inc.Tasks.php b/inc/inc.Tasks.php index 55637aa46..a7cc19c83 100644 --- a/inc/inc.Tasks.php +++ b/inc/inc.Tasks.php @@ -172,6 +172,7 @@ class SeedDMS_IndexingDocumentsTask extends SeedDMS_SchedulerTaskBase { /* {{{ * */ public function execute($task) { $dms = $this->dms; + $logger = $this->logger; $fulltextservice = $this->fulltextservice; $taskparams = $task->getParameter(); $folder = $dms->getRootFolder(); @@ -265,6 +266,7 @@ class SeedDMS_CheckSumTask extends SeedDMS_SchedulerTaskBase { /* {{{ */ */ public function execute($task) { $dms = $this->dms; + $logger = $this->logger; $taskparams = $task->getParameter(); $folder = $dms->getRootFolder(); From e6220b7090da2b2d2ce7232f338800ac2495ceb1 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 24 Feb 2021 18:21:46 +0100 Subject: [PATCH 203/276] minor improvements in notification mails --- webdav/webdav.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/webdav/webdav.php b/webdav/webdav.php index 43d044a43..c3d97d2bf 100644 --- a/webdav/webdav.php +++ b/webdav/webdav.php @@ -769,7 +769,7 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server $params['username'] = $this->user->getFullName(); $params['comment'] = $document->getComment(); $params['version_comment'] = $content->getComment(); - $params['url'] = "http".((isset($_SERVER['HTTPS']) && (strcmp($_SERVER['HTTPS'],'off')!=0)) ? "s" : "")."://".$_SERVER['HTTP_HOST'].$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); + $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; $this->notifier->toList($this->user, $notifyList["users"], $subject, $message, $params); @@ -870,7 +870,7 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server $params['username'] = $this->user->getFullName(); $params['comment'] = ''; $params['version_comment'] = ''; - $params['url'] = "http".((isset($_SERVER['HTTPS']) && (strcmp($_SERVER['HTTPS'],'off')!=0)) ? "s" : "")."://".$_SERVER['HTTP_HOST'].$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$folder->getID(); + $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; $this->notifier->toList($this->user, $nl["users"], $subject, $message, $params); @@ -973,7 +973,7 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server $params['folder_path'] = $folder->getFolderPathPlain(); $params['username'] = $this->user->getFullName(); $params['comment'] = ''; - $params['url'] = "http".((isset($_SERVER['HTTPS']) && (strcmp($_SERVER['HTTPS'],'off')!=0)) ? "s" : "")."://".$_SERVER['HTTP_HOST'].$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$subFolder->getID(); + $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$subFolder->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; $this->notifier->toList($this->user, $nl["users"], $subject, $message, $params); @@ -1050,7 +1050,7 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server $params['username'] = $this->user->getFullName(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $params['url'] = "http".((isset($_SERVER['HTTPS']) && (strcmp($_SERVER['HTTPS'],'off')!=0)) ? "s" : "")."://".$_SERVER['HTTP_HOST'].$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$parent->getID(); + $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$parent->getID(); $this->notifier->toList($this->user, $nl["users"], $subject, $message, $params); foreach ($nl["groups"] as $grp) { $this->notifier->toGroup($this->user, $grp, $subject, $message, $params); @@ -1089,7 +1089,7 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server $params['username'] = $this->user->getFullName(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $params['url'] = "http".((isset($_SERVER['HTTPS']) && (strcmp($_SERVER['HTTPS'],'off')!=0)) ? "s" : "")."://".$_SERVER['HTTP_HOST'].$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$folder->getID(); + $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$folder->getID(); $this->notifier->toList($this->user, $nl["users"], $subject, $message, $params); foreach ($nl["groups"] as $grp) { $this->notifier->toGroup($this->user, $grp, $subject, $message, $params); @@ -1216,7 +1216,7 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server $params['old_folder_path'] = $oldFolder->getFolderPathPlain(); $params['new_folder_path'] = $objdest->getFolderPathPlain(); $params['username'] = $this->user->getFullName(); - $params['url'] = "http".((isset($_SERVER['HTTPS']) && (strcmp($_SERVER['HTTPS'],'off')!=0)) ? "s" : "")."://".$_SERVER['HTTP_HOST'].$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$objsource->getID(); + $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$objsource->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; $this->notifier->toList($this->user, $nl["users"], $subject, $message, $params); @@ -1259,7 +1259,7 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server $params['old_folder_path'] = $oldFolder->getFolderPathPlain(); $params['new_folder_path'] = $objdest->getFolderPathPlain(); $params['username'] = $this->user->getFullName(); - $params['url'] = "http".((isset($_SERVER['HTTPS']) && (strcmp($_SERVER['HTTPS'],'off')!=0)) ? "s" : "")."://".$_SERVER['HTTP_HOST'].$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$objsource->getID(); + $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$objsource->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; $this->notifier->toList($this->user, $nl["users"], $subject, $message, $params); @@ -1463,13 +1463,13 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server $subject = "new_document_email_subject"; $message = "new_document_email_body"; $params = array(); - $params['name'] = $name; + $params['name'] = $newdocname; $params['folder_name'] = $objdest->getName(); $params['folder_path'] = $objdest->getFolderPathPlain(); $params['username'] = $this->user->getFullName(); $params['comment'] = ''; $params['version_comment'] = ''; - $params['url'] = "http".((isset($_SERVER['HTTPS']) && (strcmp($_SERVER['HTTPS'],'off')!=0)) ? "s" : "")."://".$_SERVER['HTTP_HOST'].$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$objdest->getID(); + $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; $this->notifier->toList($this->user, $nl["users"], $subject, $message, $params); From 35702a30b473c7fc802c1713b03a46fbff3eaf18 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 24 Feb 2021 18:56:14 +0100 Subject: [PATCH 204/276] fix error when sending notification and the document content was replaced --- webdav/webdav.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/webdav/webdav.php b/webdav/webdav.php index c3d97d2bf..f0f0d041a 100644 --- a/webdav/webdav.php +++ b/webdav/webdav.php @@ -712,6 +712,8 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server unlink($tmpFile); return "403 Forbidden"; } + /* set $content for notification */ + $content = $lc; } else { if($this->logger) $this->logger->log('PUT: adding new version', PEAR_LOG_INFO); @@ -748,7 +750,6 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server $controller->setParam('workflow', $workflow); if(!$content = $controller->run()) { -// if(!$document->addContent('', $this->user, $tmpFile, $name, $fileType, $mimetype, array(), array(), 0)) { if($this->logger) $this->logger->log('PUT: error adding new version', PEAR_LOG_ERR); unlink($tmpFile); From 9d8654c18347f26059c16990468c6a7a2c86d11a Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 25 Feb 2021 12:04:27 +0100 Subject: [PATCH 205/276] fix major security issue --- index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.php b/index.php index 98b5511f3..049d7a48e 100644 --- a/index.php +++ b/index.php @@ -39,7 +39,7 @@ if(true) { $file = substr($uri->getPath(), 1); if(file_exists($file) && is_file($file)) { $_SERVER['SCRIPT_FILENAME'] = basename($file); - include($file); +// include($file); exit; } if($request->isXhr()) { From 84ce189eff60a67fd7742b584a5993b0d698c90e Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 25 Feb 2021 17:06:28 +0100 Subject: [PATCH 206/276] add more changes for 5.1.22 --- CHANGELOG | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 5226627e3..7d0bb9cf9 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -14,6 +14,9 @@ - list users on Folder Notifiy page which has been disabled - use two column layout on AddDocument page - initial support for sending html mails (not used yet) +- fix security hole which allowed under certain conditions to access + arbitrary files +- use mandatory reviewers/approvers when adding files by webdav -------------------------------------------------------------------------------- Changes in version 5.1.21 From b9e12a82ae13c85c1f3e899f33b298f94fe13050 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 1 Mar 2021 09:26:37 +0100 Subject: [PATCH 207/276] remove old table layout and use formField() --- views/bootstrap/class.RoleMgr.php | 60 ++++++++++++++++++------------- 1 file changed, 35 insertions(+), 25 deletions(-) diff --git a/views/bootstrap/class.RoleMgr.php b/views/bootstrap/class.RoleMgr.php index d5236366c..6e73fef93 100644 --- a/views/bootstrap/class.RoleMgr.php +++ b/views/bootstrap/class.RoleMgr.php @@ -135,7 +135,7 @@ $(document).ready( function() { $user = $this->params['user']; $accessop = $this->params['accessobject']; ?> -
    + - - - - - - - - - -formField( + getMLText("role_name"), + array( + 'element'=>'input', + 'type'=>'text', + 'id'=>'name', + 'name'=>'name', + 'value'=>($currRole ? htmlspecialchars($currRole->getName()) : '') + ) + ); + $options = array(); + $options[] = array(SeedDMS_Core_Role::role_user, getMLText("role_user"), $currRole && $currRole->getRole() == SeedDMS_Core_Role::role_user); + $options[] = array(SeedDMS_Core_Role::role_admin, getMLText("role_admin"), $currRole && $currRole->getRole() == SeedDMS_Core_Role::role_admin); + $options[] = array(SeedDMS_Core_Role::role_guest, getMLText("role_guest"), $currRole && $currRole->getRole() == SeedDMS_Core_Role::role_guest); + $this->formField( + getMLText("role_type"), + array( + 'element'=>'select', + 'name'=>'role', + 'options'=>$options + ) + ); if($currRole && $currRole->getRole() != SeedDMS_Core_Role::role_admin) { - echo ""; - echo ""; - echo ""; - echo ""; + $this->formField( + getMLText("restrict_access"), + array( + 'element'=>'select', + 'name'=>'noaccess[]', + 'options'=>$options, + 'multiple'=>true, + ) + ); } if($currRole && $accessop->check_controller_access('RoleMgr', array('action'=>'editrole')) || !$currRole && $accessop->check_controller_access('RoleMgr', array('action'=>'addrole'))) { -?> - - - - -formSubmit(" ".getMLText($currRole ? "save" : "add_role")); } ?> -
    :">
    :
    ".getMLText('restrict_access').""; + $options = array(); foreach(array(S_DRAFT_REV, S_DRAFT_APP, S_IN_WORKFLOW, S_REJECTED, S_RELEASED, S_IN_REVISION, S_DRAFT, S_EXPIRED, S_OBSOLETE, S_NEEDS_CORRECTION) as $status) { - echo "getNoAccess()) ? "checked" : "")."> ".getOverallStatusText($status)."
    "; + $options[] = array($status, getOverallStatusText($status), in_array($status, $currRole->getNoAccess())); } - echo "
    Date: Mon, 1 Mar 2021 18:37:49 +0100 Subject: [PATCH 208/276] use same user selection as on UsrMgr page --- op/op.TransferDocument.php | 6 +-- views/bootstrap/class.AddDocument.php | 2 +- views/bootstrap/class.GroupMgr.php | 50 +++++++++++++--------- views/bootstrap/class.TransferDocument.php | 5 ++- 4 files changed, 37 insertions(+), 26 deletions(-) diff --git a/op/op.TransferDocument.php b/op/op.TransferDocument.php index 6d8c43461..69056506a 100644 --- a/op/op.TransferDocument.php +++ b/op/op.TransferDocument.php @@ -30,9 +30,9 @@ include("../inc/inc.Authentication.php"); $tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); $controller = Controller::factory($tmp[1], array('dms'=>$dms, 'user'=>$user)); - -if (!$user->isAdmin()) { - UI::exitError(getMLText("document"),getMLText("access_denied")); +$accessop = new SeedDMS_AccessOperation($dms, $user, $settings); +if (!$accessop->check_controller_access($controller, $_POST)) { + UI::exitError(getMLText("document_title", array("documentname" => "")),getMLText("access_denied")); } /* Check if the form data comes from a trusted request */ diff --git a/views/bootstrap/class.AddDocument.php b/views/bootstrap/class.AddDocument.php index ff54a73c4..c7ed1204e 100644 --- a/views/bootstrap/class.AddDocument.php +++ b/views/bootstrap/class.AddDocument.php @@ -296,7 +296,7 @@ $(document).ready(function() { $allUsers = $dms->getAllUsers($sortusersinlist); foreach ($allUsers as $currUser) { if (!$currUser->isGuest()) - $options[] = array($currUser->getID(), htmlspecialchars($currUser->getLogin()), ($currUser->getID()==$user->getID()), array(array('data-subtitle', htmlspecialchars($currUser->getFullName())))); + $options[] = array($currUser->getID(), htmlspecialchars($currUser->getLogin().' - '.$currUser->getFullName()), ($currUser->getID()==$user->getID()), array(array('data-subtitle', htmlspecialchars($currUser->getEmail())))); } $this->formField( getMLText("owner"), diff --git a/views/bootstrap/class.GroupMgr.php b/views/bootstrap/class.GroupMgr.php index 632491660..af9359f02 100644 --- a/views/bootstrap/class.GroupMgr.php +++ b/views/bootstrap/class.GroupMgr.php @@ -247,30 +247,38 @@ $(document).ready( function() { $this->contentSubHeading(getMLText("add_member")); ?> -
    + - - - - - - -
    - - - - - "> -
    +getAllUsers($sortusersinlist); + foreach ($allUsers as $currUser) { + if (!$group->isMember($currUser)) + $options[] = array($currUser->getID(), htmlspecialchars($currUser->getLogin().' - '.$currUser->getFullName()), ($currUser->getID()==$user->getID()), array(array('data-subtitle', htmlspecialchars($currUser->getEmail())))); + } + $this->formField( + getMLText("user"), + array( + 'element'=>'select', + 'id'=>'userid', + 'name'=>'userid', + 'class'=>'chzn-select', + 'options'=>$options + ) + ); + $this->formField( + getMLText("manager"), + array( + 'element'=>'input', + 'type'=>'checkbox', + 'name'=>'manager', + 'value'=>1 + ) + ); + $this->formSubmit(" ".getMLText('add')); +?>
    params['allusers']; $document = $this->params['document']; $folder = $this->params['folder']; + $accessobject = $this->params['accessobject']; $this->htmlStartPage(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName())))); $this->globalNavigation($folder); @@ -63,7 +64,9 @@ class SeedDMS_View_TransferDocument extends SeedDMS_Bootstrap_Style { getMLText("transfer_to_user"), $html ); - $this->formSubmit(" ".getMLText('transfer_document')); + if($accessobject->check_controller_access('TransferDocument', array('action'=>'run'))) { + $this->formSubmit(" ".getMLText('transfer_document')); + } ?> Date: Tue, 2 Mar 2021 07:31:23 +0100 Subject: [PATCH 209/276] use chzn-select for groups and users --- views/bootstrap/class.DocumentNotify.php | 4 +++- views/bootstrap/class.FolderNotify.php | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/views/bootstrap/class.DocumentNotify.php b/views/bootstrap/class.DocumentNotify.php index b727835b6..d9d2f14d4 100644 --- a/views/bootstrap/class.DocumentNotify.php +++ b/views/bootstrap/class.DocumentNotify.php @@ -106,7 +106,7 @@ $(document).ready( function() { $allUsers = $dms->getAllUsers($sortusersinlist); foreach ($allUsers as $userObj) { if (!$userObj->isGuest() && !$userObj->isDisabled() && ($document->getAccessMode($userObj) >= M_READ) && !in_array($userObj->getID(), $userNotifyIDs)) - $options[] = array($userObj->getID(), htmlspecialchars($userObj->getLogin() . " - " . $userObj->getFullName())); + $options[] = array($userObj->getID(), htmlspecialchars($userObj->getLogin().' - '.$userObj->getFullName()), false, array(array('data-subtitle', htmlspecialchars($userObj->getEmail())))); } } elseif (!$user->isGuest() && !in_array($user->getID(), $userNotifyIDs)) { $options[] = array($user->getID(), htmlspecialchars($user->getLogin() . " - " .$user->getFullName())); @@ -117,6 +117,7 @@ $(document).ready( function() { 'element'=>'select', 'id'=>'userid', 'name'=>'userid', + 'class'=>'chzn-select', 'options'=>$options ) ); @@ -134,6 +135,7 @@ $(document).ready( function() { 'element'=>'select', 'id'=>'groupid', 'name'=>'groupid', + 'class'=>'chzn-select', 'options'=>$options ) ); diff --git a/views/bootstrap/class.FolderNotify.php b/views/bootstrap/class.FolderNotify.php index 60bca87a2..6d19bb0a5 100644 --- a/views/bootstrap/class.FolderNotify.php +++ b/views/bootstrap/class.FolderNotify.php @@ -106,7 +106,7 @@ $(document).ready(function() { $allUsers = $dms->getAllUsers($sortusersinlist); foreach ($allUsers as $userObj) { if (!$userObj->isGuest() && !$userObj->isDisabled() && ($folder->getAccessMode($userObj) >= M_READ) && !in_array($userObj->getID(), $userNotifyIDs)) - $options[] = array($userObj->getID(), htmlspecialchars($userObj->getLogin() . " - " . $userObj->getFullName())); + $options[] = array($userObj->getID(), htmlspecialchars($userObj->getLogin().' - '.$userObj->getFullName()), false, array(array('data-subtitle', htmlspecialchars($userObj->getEmail())))); } } elseif (!$user->isGuest() && !in_array($user->getID(), $userNotifyIDs)) { $options[] = array($user->getID(), htmlspecialchars($user->getLogin() . " - " .$user->getFullName())); @@ -117,6 +117,7 @@ $(document).ready(function() { 'element'=>'select', 'id'=>'userid', 'name'=>'userid', + 'class'=>'chzn-select', 'options'=>$options ) ); @@ -134,6 +135,7 @@ $(document).ready(function() { 'element'=>'select', 'id'=>'groupid', 'name'=>'groupid', + 'class'=>'chzn-select', 'options'=>$options ) ); From 23d09255561f3c21a0790b2c1afaedef50ab518f Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 3 Mar 2021 15:26:29 +0100 Subject: [PATCH 210/276] fix typo in id of drop area --- styles/bootstrap/application.js | 13 +++++++++---- views/bootstrap/class.ViewFolder.php | 2 +- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/styles/bootstrap/application.js b/styles/bootstrap/application.js index f1a2e1df2..fe9e8af88 100644 --- a/styles/bootstrap/application.js +++ b/styles/bootstrap/application.js @@ -841,19 +841,19 @@ function onAddClipboard(ev) { /* {{{ */ }( window.SeedDMSUpload = window.SeedDMSUpload || {}, jQuery )); /* }}} */ $(document).ready(function() { /* {{{ */ - $(document).on('dragenter', "#dragandrophandler", function (e) { + $(document).on('dragenter', "#draganddrophandler", function (e) { e.stopPropagation(); e.preventDefault(); $(this).css('border', '2px dashed #0B85A1'); }); - $(document).on('dragleave', "#dragandrophandler", function (e) { + $(document).on('dragleave', "#draganddrophandler", function (e) { $(this).css('border', '0px solid white'); }); - $(document).on('dragover', "#dragandrophandler", function (e) { + $(document).on('dragover', "#draganddrophandler", function (e) { e.stopPropagation(); e.preventDefault(); }); - $(document).on('drop', "#dragandrophandler", function (e) { + $(document).on('drop', "#draganddrophandler", function (e) { $(this).css('border', '0px dotted #0B85A1'); e.preventDefault(); var files = e.originalEvent.dataTransfer.files; @@ -1071,6 +1071,11 @@ $(document).ready(function() { /* {{{ */ // document.location = url; } } + } else if(target_type == 'attachment') { + console.log('attachment'); + var files = e.originalEvent.dataTransfer.files; + if(files.length > 0) { + } } }); $(document).on('dragstart', '.table-row-folder', function (e) { diff --git a/views/bootstrap/class.ViewFolder.php b/views/bootstrap/class.ViewFolder.php index 30b491764..8f2fff505 100644 --- a/views/bootstrap/class.ViewFolder.php +++ b/views/bootstrap/class.ViewFolder.php @@ -459,7 +459,7 @@ $('body').on('click', '.order-btn', function(ev) { $this->contentHeading(getMLText("dropupload"), true); if ($folder->getAccessMode($user) >= M_READWRITE) { ?> -
    +
    errorMsg(getMLText('access_denied')); From 32a855b74036b3dc7113a12b705c893f26c2687f Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 3 Mar 2021 15:38:04 +0100 Subject: [PATCH 211/276] initial support for drag and drop of attachments --- views/bootstrap/class.ViewDocument.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/views/bootstrap/class.ViewDocument.php b/views/bootstrap/class.ViewDocument.php index 42f785d80..1dcbc12bc 100644 --- a/views/bootstrap/class.ViewDocument.php +++ b/views/bootstrap/class.ViewDocument.php @@ -1420,12 +1420,14 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { } else $this->infoMsg(getMLText("no_attached_files")); - $this->contentContainerStart(); - if ($document->getAccessMode($user) >= M_READWRITE){ + if(0){ +?> + +".getMLText("add")."\n"; } - $this->contentContainerEnd(); ?>