From 40adb027dbc75778075d1f2d9e25a5f46d3182a9 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 4 Jan 2021 21:45:16 +0100 Subject: [PATCH 001/162] 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 002/162] 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 003/162] 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 004/162] 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 005/162] 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 006/162] 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 007/162] 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 008/162] 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 009/162] 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 010/162] 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 011/162] 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 012/162] 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 013/162] 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 014/162] 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 015/162] 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 016/162] 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 1399a3547efaba29a707a0747e107beacc53220a Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 14 Jan 2021 22:35:03 +0100 Subject: [PATCH 017/162] 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 018/162] 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 019/162] 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 3fa952c5cb2236be94197aca0f45d24fe433357b Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Sun, 24 Jan 2021 17:05:13 +0100 Subject: [PATCH 020/162] 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 021/162] 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 022/162] 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 023/162] 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 024/162] 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 025/162] 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 026/162] 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 027/162] 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 028/162] 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 029/162] 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 030/162] 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 031/162] 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 032/162] 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 8a2224b669275dd02745f73e65533e451540b9d9 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 26 Jan 2021 13:30:15 +0100 Subject: [PATCH 033/162] 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 072b1d2eb9fbf3ea42e898f05d2d4a5edfc7768b Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 27 Jan 2021 09:54:46 +0100 Subject: [PATCH 034/162] 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 035/162] 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 036/162] 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 037/162] 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 32ca8ccae3e19b3e0c8cdb0af92e6717b59ccc04 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 28 Jan 2021 21:05:52 +0100 Subject: [PATCH 038/162] 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 039/162] 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 040/162] 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 041/162] 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 042/162] 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 043/162] 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 044/162] 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 045/162] 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 8aa7662f3194444afc6b549a2e99af18917804ba Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 29 Jan 2021 10:33:09 +0100 Subject: [PATCH 046/162] 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 047/162] 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 048/162] 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 049/162] 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 050/162] 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 79c58b8dac1748db564a9ba8811bb0cc80a7ed19 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 29 Jan 2021 14:21:23 +0100 Subject: [PATCH 051/162] 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 899d89a2a9f636eaad1cf056a34d4cb25e21c070 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Sat, 30 Jan 2021 15:08:40 +0100 Subject: [PATCH 052/162] 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 37d3577603262591b479756ec2e1b22f0d511890 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Sun, 31 Jan 2021 13:48:25 +0100 Subject: [PATCH 053/162] 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 054/162] 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 055/162] 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 056/162] 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 7c6ab4027a552582310698570140184b22e7d199 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 2 Feb 2021 13:08:55 +0100 Subject: [PATCH 057/162] 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 058/162] 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 059/162] 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 060/162] 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 061/162] 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 062/162] 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 063/162] 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 064/162] 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 065/162] 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 066/162] 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 067/162] 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 8543d62ce4f752211e0886b9674ad753cb2e274f Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 5 Feb 2021 10:50:28 +0100 Subject: [PATCH 068/162] 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 069/162] 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 070/162] 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 071/162] 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 e7b40e21f3c99151f9977703305ec36a2f5e470e Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Sat, 6 Feb 2021 18:01:26 +0100 Subject: [PATCH 072/162] 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 248d106852b0efda2d239e839155dc371e983e1a Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 9 Feb 2021 11:16:20 +0100 Subject: [PATCH 073/162] 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 89ca0adc7de051d15e1cc11b0047ce3976cfe20a Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 15 Feb 2021 11:55:24 +0100 Subject: [PATCH 074/162] 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 400c8f11d19a5a6cdb566ecac1cd56c252242d5a Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 15 Feb 2021 19:17:58 +0100 Subject: [PATCH 075/162] 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 "\n"; print "\n"; print "\n"; From c8956a365dd416930f672397729984ec58a08442 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 16 Feb 2021 13:58:24 +0100 Subject: [PATCH 076/162] 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 077/162] 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 078/162] 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 079/162] 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 080/162] 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 2f2472f79f627fcca97351d4b569fdd401d9344b Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Sat, 20 Feb 2021 20:13:01 +0100 Subject: [PATCH 081/162] 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 082/162] 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 083/162] 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 084/162] 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 085/162] 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 086/162] 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 9e6f49598d0fadacfc30c227c8adde0d74b7aac5 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 23 Feb 2021 20:37:14 +0100 Subject: [PATCH 087/162] 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 088/162] 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 089/162] 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 090/162] 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 091/162] 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 092/162] 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 20586c021d47a5ad5bfd68dcca67240f54ed4eb1 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 24 Feb 2021 13:22:03 +0100 Subject: [PATCH 093/162] 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 094/162] 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 095/162] 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 3ae98b7af35b592f2160f03f09848eab400fd2c0 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 24 Feb 2021 13:44:04 +0100 Subject: [PATCH 096/162] 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 e6220b7090da2b2d2ce7232f338800ac2495ceb1 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 24 Feb 2021 18:21:46 +0100 Subject: [PATCH 097/162] 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 098/162] 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 099/162] 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 100/162] 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 1f1fe940f8d316ff49b7add59618715fc704b092 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 1 Mar 2021 18:37:49 +0100 Subject: [PATCH 101/162] 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")); ?> -
    + -
    ".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)."
    ".getMLText("name"); - print " ".($order=="na"?' ':($order=="nd"?' ':' ')).""; - print " ".($order=="ea"?' ':($order=="ed"?' ':' ')).""; + print " ".($order=="na"?' ':($order=="nd"?' ':' ')).""; + print " ".($order=="ea"?' ':($order=="ed"?' ':' ')).""; print "".getMLText("status")."".getMLText("action")."
    - - - - - -
    - - - - - "> -
    +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 102/162] 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 103/162] 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 104/162] 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(); ?>